XPointer

advertisement
Технология Идентификации
Ресурсов X-Pointer
Предназначение
• X-Pointer – это язык, описывающий
местонахождение тех или иных ресурсов.
• Выражения языка X-Pointer позволяют
создавать так называемые URI – которые
отслеживают целостность ссылок, т.к. они они
могут адресовываться не только на внешние
документы, но и на части какого-либо
документа, путем создания некоторой
иерархической структуры выражения.
Например, можно указать ссылку на
конкретное слово, значение атрибута XMLдокумента.
Основные Правила
• Ссылки на языке X-Pointer могут указывать
только на XML-документы, т.е. имеющие
расширения : text/xml application/xml.
• Все выражения X-Pointer записываются при
помощи символов Unicode, если символов не
хватает можно использовать Escapeпоследовательности (общения принтера и
компьютера), но это практически исключено.
Основные термины
• Субресурс (sub-resource)-Часть целого XML-ресурса,
такая как отдельная глава или абзац. Основная
единица адресации языка X-Pointer.
• Набор Указателей (location-set) – упорядоченный
список точек адресации XML – документа, в который
входят все адресуемые субресурсы различных
типов.
• Точка (pointer) – место в XML-документе, где
конкретно расположен адресуемый субресурс.
• Интервал (range) – часть содержимого XMLдокумента, размешенная между двумя точками,
адресованными при помощи выражений X-Pointer.
Ошибки языка X-Pointer:
• Синтаксическая ошибка (syntax error) –
выражение X-Pointer содержит конструкцию,
не удовлетворяющее правилам оформления
выражений X-Pointer.
• Ошибка адресации (resource error) –
синтаксически правильное выражение XPointer указывает на несуществующий XMLдокумент.
• Ошибка адресации субресурса (subresource
error) – все правильно, но отсутствуем
указываемый субресурс.
Абсолютные Указатели
•
•
•
•
•
•
•
•
•
•
•
•
Пример XML-документа:
<! DOCTYPE body [
<! ELEMENT p (#PCDATA)>
<!ELEMENT group (item*)>
<!ATTLIST p
Id
ID
#REQUIRED>
]>
……………………………….
<body>
<p id=’p1’>First paragraph</p>
<p id=’p2’>Second paragraph</p>
</body>
Будем считать что URL этого XML-файла :
http://www.site.com/xml/f1.xml
• Ключевое слово root указывает на точку
местонахождения открывающего тега самого
главного элемента, кот. Объявлен как тип документа
(DOCTYPE)
<hlink xlink:href=http://www.site.com/xml/f1.xml#root()
/hlink>
В этой строке мы указываем уже не на URL XMLдокумента, а URI некоторого субресурса. Перед
выражением X-Pointer ставится знак #. Будет
загружен документ из файла f1.xml , а фокус передан
на открывающийся тег <body>, т.к он является
корневым для нашего документа.
• Конструкция ID (name) позволяет адресовать элемент в XMLдокументе, у кот. значение атрибута id установлено в name.
<hlink xlink:href=”http://www.site.com/xml/f1.xml#ID(p1)”>
Link on first paragraph</hlink>
Установили ссылку на 1 параграф с содержимым First
Paragraph.
• Ключевое слово here является указателем на текущее
положение самого указателя, т.е. отсчет будет вестись от самой
ссылки, адресовать можно только те субресурсы, кот. находятся
в том же XML-документе что и сама ссылка.
<hlink xlink:href=”http://www.site.com/xml/f1.xml#here()”>
Link </hlink>
Указатель на указатель. Сам по себе бесполезен, используется
в качестве основы для относительной адресации.
Относительная адресация.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Пример:
<! DOCTYPE body [
<! ELEMENT list (item*)>
<!ELEMENT item (#PCDATA|part)>
<!ELEMENT part (#PCDATA)>
<!ATTLIST item
Id
ID
#REQUIRED>
<!ATTLIST part
Id
ID
#REQUIRED>
]>
……………………………….
<body>
<list id=’l1’>
<item id=’i1’>
<part id=’p1’>Part 1</part>
<part id=’p2’>Part 2</part>
</item>
<item id=’i2’>Second item</item>
</list>
</body>
• Ключевое слово Child позволяет адресовать
все дочерние элементы источника, на кот мы
указали при помощи абсолютной адресации,
при этом адресуется только потомки
находящиеся на 1 уровень ниже.
<hlink xlink:href=”http://www.site.com/xml/f1.xml
#root().child(2)”>Link to second item </hlink>
Указывает на элемент item c идентификатором
i2.
•
Для адресации всех потомков начального элемента используется
descendant .При перемещении относительно ключевого элемента мы
уже не учитываем иерархию потомков, а просто обходим содержимое и
используем только порядковый номер
Обратимся к одному и тому же элементу : part с индентификатором p2
<hlink xlink:href=”http://www.site.com/xml/f1.xml#root().child(1).child(2)”>
Link to part 2 </hlink>
<hlink xlink:href=”http://www.site.com/xml/f1.xml#root().decsedant(4)”>
Link to part 2 </hlink>
<hlink xlink:href=”http://www.site.com/xml/f1.xml#root().Id(i1).child(2)”>
Link to part 2 </hlink> - сначала установили абсолютный указатель на
Эл. Item с идентификатором i1, а уж от него движемся к искомому
элементу part
•
Ancestor – если надо пройти вверх по иерархии объектов вверх от ключевого
элемента к его предкам
<hlink xlink:href=”http://www.site.com/xml/f1.xml#root().Id(p2).ancestor(3)”>
Link to root </hlink>
Двигаемся от самого глубокого элемента part к элементу body.
•
Ключевое слово psibling используется для указания на «предшествующих
братьев», т.е. на элементы, у которых родитель совпадает с родителем
исходного элемента и которые в содержимом XML-документа находятся после
адресуемого элемента.
Fsibling – позволяет адресовать «последующих братьев»
<hlink xlink:href=”http://www.site.com/xml/f1.xml#Id(p1).fsibling(1)”>
Link to part 2 </hlink>
Переход от экземпляра документа с идентификатором p1 к экземпляру с
идентификатором p2.
<hlink xlink:href=”http://www.site.com/xml/f1.xml#Id(p2).psibling(1)”>
Link to part 1 </hlink>
Переход от экземпляра документа с идентификатором p2 к экземпляру с
идентификатором p1.
•
• Following – если нас не интересует иерархическая зависимость
элементов друг от друга, и мы хотим просто по содержимому
XML-документа и просчитать то или иное количество
экземпляров вниз.
<hlink xlink:href=”http://www.site.com/xml/f1.xml
#root().following(4)”>Link to part 2 </hlink>
Для установки гиперссылки на элемент с идентификатором i2.
• Preceding – для смещения вверх по содержимому XMLдокумента от начального элемента поиска
<hlink xlink:href=”http://www.site.com/xml/f1.xml
#Id(i1).preceding(1)”>Link to part 2 </hlink>
Установим абсолютный указатель на элемент, близкий к концу
документа, двинемся вверх по направлению к part 2.
Адресация интервалов
• Мы можем адресовываться не только на
единичные элементы, но и на целые
фрагменты XML- документа, т.к. они тоже
являются субресурсами.
Ссылка на фрагмент производится при
помощи 2 выражений X-Pointer, при этом
возвращается блок, находящийся между
двумя точками, на которые указывают
выражения X-Pointer.Первое выражение
должно адресовывать элемент,
находящийися ближе к началу документа,
иначе сообщение об ошибке.
• Range-to – создание ссылки на ресурс
интервального типа
<hlink xlink:href=”http://www.site.com/xml/f1.xml
#Id(“chap1”)/range to (Id(“chap1”))”>Link to
chapter 1 </hlink>
Ссылка на фрагмент документа который
находится между элементами с
идентификаторами chap 1 и chap2.
Адресация строчных субресурсов
Это механизм текстового поиска в
документе. Адресация осуществляется
при помощи функции string – range.
• String-range(//title,”Thomas Pynchon”)[17]
Ищем 17-ое вхождение элемента типа
title, значение которого равно Thomas
Pynchon
• String-range(//title,”Thomas Pynchon”, 8,4)
При успехе поиска функция возвратит
точку адресации подстроки
“Pync”,которая начинается с 8 символа
строки поиска и содержит 4
символа.Можем получить несколько
подстрок.
• String-range(String-range(//P,”Thomas
Pynchon”)[17],”P”, 1,0)
В качестве базы поиска передаются
результаты первичного поиска – 17-ый
экземпляр элемента P, который содержит
строку Thomas Pynchon ; уточняющий поиск –
найти символ P, от которого мы возьмем
подстроку, начинающуюся с этого символа и
не содержащую ни одного символа.
Download