Технология Идентификации Ресурсов X-Pointer
description
Transcript of Технология Идентификации Ресурсов X-Pointer
Технология Идентификации Ресурсов 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) – синтаксически правильное выражение X-Pointer указывает на несуществующий 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, от которого мы возьмем подстроку, начинающуюся с этого символа и не содержащую ни одного символа.