Языки информационного обмена

       

Уточненные ссылки XPointer


Язык XLink позволяет организовать только внешние ссылки на информационный ресурс. Они не могут сослаться на определенное место удаленного документа или на какое-то произвольное место того документа, в котором они записаны. Такие ссылки могут быть полезны, поскольку очень часто в документах нужно организовать ссылку на определенное место того же самого документа, скажем, при создании оглавления, предметного указателя, глоссария.

В языке HTML <а>. В нем атрибутом href указывается метка того места документа, на которое мы хотим перейти. Перед меткой ставится символ "решетка" #.

Например: <a href="#ref0012"> Пункт оглавления </a>

В том месте документа, на которое мы хотим перейти, записывается тег <а> с атрибутом name и той же меткой:

<a name="ref0012"></a>

Подобную метку можно записать в удаленном документе, допустим, в файле remfile.html, и ссылаться на нее следующим образом:

<a href="http://some.com/pub/remfile.html#ref0012"> Пункт оглавления </а>

Браузер загрузит документ remfile.html и покажет ту его часть, в которой записан элемент.

<a name="ref0012"></a>

Аналогичная конструкция, разумеется, есть и в XML. По правилам XML метки создаются с помощью атрибутов типа ID, которые можно объявить в любом элементе.

Ссылки на помеченные элементы указываются атрибутами типа IDREF или IDREFS, которые тоже можно объявить в любом элементе. Проверяющий анализатор, просматривая документ XML, следит за соответствием меток и ссылок на них, отмечая как ошибку ссылку на несуществующую метку. Знак решетки # в ссылках записывать не нужно, сам тип IDREF показывает, что значение атрибута - ссылка.

Предыдущий пример, переписанный по правилам XML, будет выглядеть следующим образом. Ссылку на помеченный элемент можно записать в виде:

<item ref="ref0012"> ????? ?????????? </item> ? ???????? ??????? ????? ???: <ch id="ref0012" /> ?????????? ????????? item ? ch ?? ????? XSD ????? ????? ???: <xsd:element name="item"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="ref" type="xsd:IDREF"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd: element name=="ch"> <xsd:attribute name="id" type="xsd:ID" use="required" /> </xsd:element>


Эта простая конструкция языка XML очень скоро перестала удовлетворять разработчиков документов XML. Им потребовалось ссылаться:

  • на определенную точку - букву, символ, позицию - внутри элемента;
  • на множество точек, выбранных по образцу, скажем, на каждое появление в тексте слова "монитор";
  • не на определенный элемент или точку внутри элемента, а на какую-то часть документа, границы которой не совпадают с началом и концом элемента;
  • на что-нибудь вроде "третьего абзаца пятого параграфа предыдущей версии документа".


Кроме того, не всегда возможно расставлять в элементах атрибуты типа ID. В конце концов, документ не всегда доступен, или у разработчика просто может отсутствовать право записи в документ, на который надо сослаться.

Следуя духу XML, консорциум W3C создал для записи таких уточненных ссылок и меток язык XPointer. Общую структуру языка описывает рекомендация "XPointer Framework".

XPointer не является реализацией XML. Он не определяет никакие типы данных и не объявляет элементы и атрибуты. Он задает только правила записи меток и обращения к ним с помощью ссылок языка XLink.

На языке XPointer метки называются указателями. XPointer определяет два вида указателей: простые указатели и указатели, основанные на схеме. Рассмотрим подробнее каждый из этих видов.


Содержание раздела