Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры-2 оопип часть 4.doc
Скачиваний:
46
Добавлен:
01.04.2014
Размер:
445.44 Кб
Скачать

75. Язык xPointer (Синтаксис xPointer, элементы абсолютного обнаружения xPointer, выражения отношений, фильтры атрибутов и их значений)

XML Pointer Language (XPointer) — расширяемая спецификация, определяющая способы адресации структурных элементов и фрагментов документов в формате XML.

Спецификация XPointer включает несколько частей: описание базовых правил или каркаса (framework), служащего основой для различных схем адресации фрагментов XML-документов, и, собственно, описания этих схем. В настоящее время существуют три таких схемы: element(), xmlns() и xpointer(), предназначенные для поиска элементов по их расположению, на основе пространства имён и при помощи языка XPath, соответственно.

Схема xpointer(), которая основана на XML Path Language (XPath) обеспечивает гибкую адресацию внутренних структур XML документов. Она поддерживает просмотр-обход дерева документа и выбор его внутренних частей основанный на различных свойствах, таких, как типы элементов, значения атрибутов, характер контента и уровень родства.

Язык XPointer состоит из ряда терминов расположения, каждый из которых указывает расположение, обычно относительно расположения, указанного предшествующим термином. Каждый термин расположения имеет ключевое слово (например, идентификатор, потомок, предок и т. д.) и может содержать аргументы, такие как номер экземпляра, тип элемента или атрибут. Например, синтаксис XPointer

child(2,precocious)

ссылается на второй дочерний элемент, чей тип равен precocious.

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

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

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

Простые указатели

Простой указатель представляет собой имя типа NCName языка XSD, состоящее из букв, цифр, точек, дефисов и знаков подчеркивания. Имя должно начинаться с буквы. Как обычно в XML, указатель вписывается в любом атрибуте-идентификаторе типа ID, который может содержаться в любом элементе документа XML. Например:

<someElem myid="label02">

Содержимое элемента

</someElem>

Атрибут-указатель в примере myid обязательно должен быть объявлен при описании схемы документа. Объявить его следует с типом ID.

Использование простых указателей в ссылках

Ссылки на информационный ресурс, содержащий указатели, записываются по правилам языка XLink, в который добавлена конструкция, взятая из языка HTML, а именно в ссылке на ресурс перед указателем ставится знак решетки #:

<myLink xlink:type="simple"

xlink:href="mydoc.xml#label02" />

Ссылка, записанная в том же самом документе mydoc.xml, начинается с решетки и выглядит так:

<myLink xlink:type="simple"

xlink:href="#label02" />

Если в документе записано несколько одинаковых указателей label02, то ссылка будет связана с первым из них.

Как видите, простые указатели языка XPointer только дублируют конструкции, давно применяемые в HTML и XML. Все новые возможности языка реализованы через указатели, основанные на схеме.

Указатели, основанные на схеме

Указатели, основанные на схеме, состоят, как и следует из их названия, из одной или нескольких схем, записанных через пробелы. Вот пример:

xpointer(/book/chapter/section) element (color/3)

В этом примере указатель состоит из двух схем. Первая схема задает ссылку на элемент section, вложенный в элемент chapter, который, в свою очередь, вложен в концевой элемент book.

Вторая схема ссылается на третий по счету элемент из всех непосредственно вложенных в помеченный простым указателем color элемент.

Использование указателей в ссылках

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

<myLink xlink:type="simple"

xlink:href="mydoc.xml#element(color/3) "/>

Понятие схемы в языке XPointer

Слово "схема" в языке XPointer получило новое значение. Это запись вида

element (color/3)

похожая на запись функции и состоящая из имени схемы и данных, записанных в скобках.

Схемы, записанные в указателе, просматриваются последовательно до тех пор, пока не будет найдена точка в документе, отвечающая какой-либо схеме. После этого просмотр указателя прекращается, оставшиеся схемы не рассматриваются. В приведенном выше примере, если будет найден элемент section, то схема element (color/3) рассматриваться уже не будет.

Схема xpointer()

Схема xpointer() использует для создания указателей и ссылок на них мощные средства адресации элементов и других частей документа, предоставляемые языком XPath. В схеме xpointer() данными, записываемыми в скобках, могут служить любые выражения, допускаемые в языке XPath, а также их расширения, введенные в язык XPointer.

Дерево документа

Язык XPath рассматривает документ XML как дерево. Корнем дерева будет корневой элемент документа, а узлами - вложенные элементы, содержимое элемента (текстовый узел) или его атрибуты. Кроме того, в узлах дерева могут находиться комментарии, инструкции по обработке, пространства имен.

Схема element() не учитывает текстовые узлы и узлы-атрибуты. Она отмечает только вложенные элементы. Но схема xpointer() должна строго следовать правилам языка XPath и учитывать текстовые узлы, даже если они содержат только пробельные символы. Впрочем, многие программы-анализаторы языка XPointer не следуют этому правилу. Например, функция last() разными программами-анализаторами будет вычислена по-разному в зависимости от того, как они построят дерево документа.

Дополнения языка XPointer

Исторически сложилось так, что язык XPath был создан на два года раньше языка XPoinler. Поэтому создатели языка XPointer внесли в него дополнения, расширившие конструкции языка XPath.

Во-первых, кроме узлов дерева, язык XPointer рассматривает точки (points) и области (ranges).

Точкой язык XPointer называет позицию между символами документа XML.