Опубликован: 08.08.2007 | Доступ: свободный | Студентов: 1666 / 173 | Оценка: 3.86 / 3.76 | Длительность: 11:46:00
Специальности: Программист
Лекция 9:

Связи и запросы

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

Простой указатель представляет собой имя типа 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) рассматриваться уже не будет.

Имя схемы - это уточненное имя типа Qname, состоящее из необязательного префикса, связанного с идентификатором пространства имен, и локальной части, отделенной от префикса двоеточием.

Имена без префиксов зарезервированы за схемами, которые определяются в рекомендациях консорциума W3C. Каждая схема, предложенная консорциумом, описывается отдельной рекомендацией. Разработчики могут вводить свои схемы, снабжая их имена префиксами.

Смысл и правила записи данных зависят от вида схемы. Есть только одно общее правило, вытекающее из того, что данные записываются в скобках - все скобки, относящиеся к данным, должны быть парными или предваряться символом "каре" ("крышечкой"): xxx^(yyy или yyy^)xxx. Если же в данных встречается символ каре, то его следует удваивать: xxx^^yyy.

Разумеется, схема- это не функция, она ничего не вычисляет и не выдает никакого результата. Это просто форма записи, несколько неожиданная и непривычная для языков, основанных на XML.

Схема element()

Схема element() реализует потребность ссылаться на элемент документа XML примерно в таком стиле: "сослаться на второй абзац третьего параграфа договора №5". Реализация очень проста и выглядит следующим образом:

element(/1/3/2)

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

Запись вида /1/3/2 называется последовательностью вложений. Она напоминает запись пути к файлу. Наклонная черта отмечает вложенный элемент подобно вложенному каталогу файловой системы, но вместо имени вложенного каталога или файла стоит натуральное число. Число, записанное за наклонной чертой, показывает порядковый номер непосредственно вложенного элемента. Отсчет элементов начинается с 1.

Поскольку в хорошо оформленном документе XML может быть только один корневой элемент, последовательность вложений обычно начинается с наклонной черты и единицы: /l. За следующей наклонной чертой перечисляются элементы, непосредственно вложенные в корневой элемент и т. д.

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

element (sect3a/2)

Наконец, данные в схеме element () могут состоять только из простого указателя:

element (sect3a)

Это эквивалентно написанию простого указателя без всякой схемы.

Схема xpointer()

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