Технология Идентификации Ресурсов 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-документа: ………………………………. First paragraph Second paragraph Будем считать что URL этого XML-файла :
Ключевое слово root указывает на точку местонахождения открывающего тега самого главного элемента, кот. Объявлен как тип документа (DOCTYPE) В этой строке мы указываем уже не на URL XML- документа, а URI некоторого субресурса. Перед выражением X-Pointer ставится знак #. Будет загружен документ из файла f1.xml, а фокус передан на открывающийся тег, т.к он является корневым для нашего документа.
Конструкция ID (name) позволяет адресовать элемент в XML- документе, у кот. значение атрибута id установлено в name. Link on first paragraph Установили ссылку на 1 параграф с содержимым First Paragraph. Ключевое слово here является указателем на текущее положение самого указателя, т.е. отсчет будет вестись от самой ссылки, адресовать можно только те субресурсы, кот. находятся в том же XML-документе что и сама ссылка. Link Указатель на указатель. Сам по себе бесполезен, используется в качестве основы для относительной адресации.
Относительная адресация.
Пример: ]> ………………………………. Part 1 Part 2 Second item
Ключевое слово Child позволяет адресовать все дочерние элементы источника, на кот мы указали при помощи абсолютной адресации, при этом адресуется только потомки находящиеся на 1 уровень ниже. Link to second item Указывает на элемент item c идентификатором i2.
Для адресации всех потомков начального элемента используется descendant.При перемещении относительно ключевого элемента мы уже не учитываем иерархию потомков, а просто обходим содержимое и используем только порядковый номер Обратимся к одному и тому же элементу : part с индентификатором p2 Link to part 2 Link to part 2 Link to part 2 - сначала установили абсолютный указатель на Эл. Item с идентификатором i1, а уж от него движемся к искомому элементу part
Ancestor – если надо пройти вверх по иерархии объектов вверх от ключевого элемента к его предкам Link to root Двигаемся от самого глубокого элемента part к элементу body. Ключевое слово psibling используется для указания на «предшествующих братьев», т.е. на элементы, у которых родитель совпадает с родителем исходного элемента и которые в содержимом XML-документа находятся после адресуемого элемента. Fsibling – позволяет адресовать «последующих братьев» Link to part 2 Переход от экземпляра документа с идентификатором p1 к экземпляру с идентификатором p2. Link to part 1 Переход от экземпляра документа с идентификатором p2 к экземпляру с идентификатором p1.
Following – если нас не интересует иерархическая зависимость элементов друг от друга, и мы хотим просто по содержимому XML-документа и просчитать то или иное количество экземпляров вниз. Link to part 2 Для установки гиперссылки на элемент с идентификатором i2. Preceding – для смещения вверх по содержимому XML- документа от начального элемента поиска Link to part 2 Установим абсолютный указатель на элемент, близкий к концу документа, двинемся вверх по направлению к part 2.
Адресация интервалов Мы можем адресовываться не только на единичные элементы, но и на целые фрагменты XML- документа, т.к. они тоже являются субресурсами. Ссылка на фрагмент производится при помощи 2 выражений X-Pointer, при этом возвращается блок, находящийся между двумя точками, на которые указывают выражения X-Pointer.Первое выражение должно адресовывать элемент, находящийися ближе к началу документа, иначе сообщение об ошибке.
Range-to – создание ссылки на ресурс интервального типа Link to chapter 1 Ссылка на фрагмент документа который находится между элементами с идентификаторами 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, от которого мы возьмем подстроку, начинающуюся с этого символа и не содержащую ни одного символа.