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

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

Декларация пространства имен

Для каждого пространства имен существует одна декларация пространства имен, она объявляется (или подразумевается) как атрибут элемента.

Информационный пункт декларации пространства имен имеет следующие свойства:

  1. Объявляемое пространство имен. Это фрагмент имени атрибута, следующий за префиксом xmlns:.
  2. Абсолютный идентификатор URI объявляемого пространства имен. Необходимо сообщить либо это свойство, либо следующее далее свойство потомка (описывающее текст), либо то и другое.
  3. Упорядоченный список символьных ссылок на информационные пункты символов, которые составляют содержание значения атрибута. В него могут входить также маркеры начала и конца сущности, показывающие расположение ссылок на сущности. Должно присутствовать либо это, либо предыдущее свойство. Консорциум W3C добавил это свойство, чтобы обеспечить возможность определять пространства имен в будущих версиях не по URI.

Важность проекта Information Set

Все эти информационные пункты и свойства практически идентичны модели DOM. Фактически все различные технологии, определенные консорциумом W3C для доступа к документам XML - XML DOM, XLink, XPath, XPointer, а также XSLT - являются производными от базовой структуры, описанной в спецификации XML Information Set. Чтобы извлечь максимум из предоставляемых этими технологиями функциональных возможностей, необходимо рассматривать документы XML не как потоки текстовой информации, а именно как описанные ранее объекты.

Несмотря на то, что стандарт подробно описывает соединения между объектами, он не определяет какой-либо конкретной реализации.

Чтобы использовать различные технологии, определенные консорциумом W3C для доступа к документам XML и манипулирования ими, сначала необходимо изучить определения консорциума W3C в спецификации Infoset. Как только вы перестанете считать документы XML текстом и начнете думать о них как о связанных информационных пунктах, вы обнаружите, что механизмы связывания и запросов для доступа к документам XML становятся очень естественными и интуитивными. В этих технологиях используются пункты информационного набора, описанные в стандарте Infoset ; они позволяют манипулировать документами XML и адресовать их, используя представленные в пунктах связи типа "родитель-потомок" для навигации по этим документам.

Создание ссылок на языке XLink

Язык XLink позволяет создать ссылку в одном, а использовать в других документах. Ссылка может указывать сразу на несколько документов. Сослаться можно не только на документ XML, но и на любой информационный ресурс: изображение, чертеж, программу. Можно организовать ссылку, связывающую другие документы, например, ссылка, записанная в документе docl.xml, может установить связь между документом doc2.xml и документом doc3.xml. Кроме того, язык XLink отмечает направление ссылки и позволяет организовать обратные ссылки. Эти возможности делают язык XLink чрезвычайно мощным, способным удовлетворить нужды самого привередливого разработчика.

Пространство имен языка XLink

Интересная особенность языка XLink заключается в том, что он не вводит новые элементы, а определяет только атрибуты, которые можно использовать в любых определяемых вами элементах. Каждый элемент в документе XML, использующий атрибуты языка XLink, становится ссылкой. Атрибуты введенные языком XLink, находятся в пространстве имен http://www.w3.org/1999/xlink. Как обычно, перед использованием атрибутов надо связать это пространство имен с каким-либо префиксом. Очень часто этот префикс называется xlink

<someElement xmlns:xlink="http://www.w3.org/1999/xlink>
someText"
</someElement>

Всего в языке XLink объявлено десять атрибутов:

  • атрибут type задает тип ссылки;
  • атрибут href описывает адрес ресурса, с которым связана ссылка;
  • атрибут show определяет способ показа полученного по ссылке ресурса;
  • атрибут actuate устанавливает момент активизации ссылки;
  • атрибуты label, from, to отмечают и указывают начальные и конечные пункты ссылки;
  • атрибуты role, arcrole, title объясняют смысл ссылки.

Разумеется, кроме атрибутов языка XLink в объявляемых элементах-ссылках можно объявлять и любые другие атрибуты.

Создание банка ссылок

При создании какого-либо документа на языке HTML, назовем его для определенности doc.html, в него вставляются гиперссылки на предыдущие, ранее созданные, документы и изображения. Пусть эти ресурсы лежат в файлах oldl.html, old2.html, imgl.gif. Через некоторое время появляются новые документы, назовем их newl.html, new2.html, на которые необходимо сослаться из документа doc.html. Для этого придется отыскать файл doc.html и внести в него новые ссылки. Это очень неудобно. Не говоря уже о том, что файл doc.html может быть недоступен, его уже могли скопировать на множество сайтов. Придется вносить изменения во все копии, что совершенно невозможно.

Язык XLink, в котором можно сделать ссылки и в прямом, и в обратном направлении, позволяет создать обратные ссылки из новых документов на старый документ. Но это не лучший выход из положения, потому что старый документ при каждом открытии должен отыскать и просмотреть новые документы в поисках этих ссылок. Это требует времени и знания тех адресов, где лежат эти новые документы.

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

Уточненные ссылки 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 определяет два вида указателей: простые указатели и указатели, основанные на схеме. Рассмотрим подробнее каждый из этих видов.