200 likes | 389 Views
Технология Идентификации Ресурсов X-Pointer. Предназначение. X - Pointer – это язык, описывающий местонахождение тех или иных ресурсов.
E N D
Технология Идентификации Ресурсов 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) <hlinkxlink: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 уровень ниже. <hlinkxlink: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-документа и просчитать то или иное количество экземпляров вниз. <hlinkxlink:href=”http://www.site.com/xml/f1.xml #root().following(4)”>Link to part 2 </hlink> Для установки гиперссылки на элемент с идентификатором i2. • Preceding – для смещения вверх по содержимому XML-документа от начального элемента поиска <hlinkxlink: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 – создание ссылки на ресурс интервального типа <hlinkxlink: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, от которого мы возьмем подстроку, начинающуюся с этого символа и не содержащую ни одного символа.