XML - статьи

         

Nbsp;Оси для адресации к дугам XLink


Теперь, когда определен способ представления каждой дуги XLink в виде информационной единицы Информационного Пространства XML, рассмотрим предлагаемое в данной статье дальнейшее расширение языка XPath, предоставляющее приложению возможность прозрачным образом формулировать запросы к дугам XLink.

Расширим функциональность языка XPath возможностью получить информацию обо всех дугах XLink, по которым можно осуществить переход из контекстного узла, т.е. таких, для которых контекстный узел является их исходным ресурсом. Следуя единообразию в дизайне предлагаемого расширения языка XPath поддержкой языка XLink, естественно оформить данную операцию получения всех дуг, исходным ресурсом которых является контекстный узел, в виде новой оси XPath. По аналогии с англоязычным термином для дуги, введенным Спецификацией XLink, данную ось назовем arc.

Определение 2.   Ось arc содержит все узлы, являющиеся в терминах Информационного Пространства XML представлением в виде информационных единиц всех дуг XLink, для каждой из которых контекстный узел служит исходным ресурсом.

Из определения следует, что ось arc возвращает непустой набор узлов только для такого контекстного узла, который является исходным ресурсом хотя бы для одной дуги XLink. Каждый из узлов, возвращаемый осью arc, имеет тип «элемент», и его имя и внутренняя структура служат представлением для дуги XLink, которую этот элемент выражает.

При использовании в шаге доступа XPath спецификатора оси arc полностью сохраняется семантика остальных составляющих шага доступа - теста узла и предикатов. Например, тест узла позволяет выбрать дуги XLink по их именам - в соответствии с одним из 6 имен, предложенных для дуг в пункте 5.1.

Необходимо подчеркнуть, что каждый из узлов, возвращаемый предложенной осью arc, полностью соответствует Модели данных XPath [6], и поэтому к этим узлам далее могут применяться произвольные выражения XPath, с полным сохранением семантики этих выражений. В частности, предикаты могут использоваться для фильтрации дуг в соответствии со структурой представляющих их информационных единиц: например, выбрать дуги с конкретным значением некоторого семантического параметра XLink или наложить условие на тип целевого ресурса дуги.

Заметим, что в Модели Данных XPath [6], являющейся частью стандарта языка XPath Консорциума Всемирной Сети, узел типа «элемент» имеет ассоциированный с ним набор узлов типа «атрибут» и набор узлов типа «объявление пространства имен», и относительный порядок узлов в каждом из наборов считается зависимым от конкретной реализации. В полной аналогии с наборами атрибутов и объявлениями пространств имен можно говорить, что предлагаемое в данной статье расширение языка XPath поддержкой XLink дополняет Модель Данных XPath наличием ассоциированного с узлом любого типа набора выходящих из него дуг XLink. Каждая дуга реализуется в Модели Данных XPath узлом типа «элемент» и является представлением дуги в виде информационной единицы, как было описано в данном разделе.

Вернемся к расширенной ссылке на рис. 3 и представлению определяемой этой ссылкой дуг на рис. 4 и рассмотрим несколько кратких примеров использования предложенной оси arc. Необходимо отметить, что в соответствии с описаниями ресурсов и дуг, имеющимися в рассматриваемой расширенной ссылке, элемент документа (document element) [2] XML-документа


"louis-songs.xml" является исходным ресурсом сразу для 2 дуг языка XLink. (На рис. 3 документ "louis-songs.xml" опущен ввиду того, что его структура не важна для последующих рассматриваемых примеров).

Пример 3.   Пусть контекстным узлом является элемент документа XML-документа

"louis-songs.xml". Выберем все сторонние дуги (third-party arcs), которые выходят из данного узла.

С использованием предлагаемой оси arc интересующие сторонние дуги могут быть получены с помощью выражения XPath - шага доступа:

arc::third-party

Результатом данного шага доступа является узел - приведенное на рис. 4 (б) представление дуги XLink в виде информационной единицы, записанное на данном рисунке в синтаксисе языка XML.

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

Пример 4.   Рассмотрим тот же контекстный узел, что и в примере 3. Выберем теперь все выходящие из данного контекстного узла дуги, имеющие поведенческий атрибут активизации со значением "onRequest".

Интересующие дуги могут быть получены с помощью следующего шага доступа: arc::*[actuate="onRequest"]

Результатом данного шага доступа является узел - представление дуги, приведенное на рис. 4 (а). Необходимо отметить, что вычисление используемого в шаге доступа предиката осуществляется с полным сохранением семантики языка XPath, т.к. предложенное представление дуг XLink, подлежащих фильтрации по условию предиката, унифицировано с другими узлами XML-документа.

Наличие оси arc позволяет приложению формулировать запросы к дугам XLink и накладывать условия на интересующие дуги с помощью предикатов XPath. Когда интересующие приложение дуги XLink выбраны, приложению может потребоваться осуществить по ним переход. Для обеспечения данной функциональности можно было бы использовать введенную в разделе 4 ось traverse, расширив ее и для узлов, представляющих дуги XLink в виде информационных единиц. Однако в данной статье предлагается не перегружать ось traverse излишне сложной функциональностью, поскольку негативным примером подобной перегруженности служит ось parent (родитель) в Стандарте языка XPath. Так, для контекстного узла типа атрибут ось parent выбирает содержащий его элемент (owner element) [14], а для контекстного узла любого другого типа - его родительский узел. Данная функциональная перегруженность оси parent приводит к тому, что транзитивное замыкание оси parent - ось ancestor-or-self - выбирает узлы нескольких разных типов, будучи примененная к контекстному узлу типа «атрибут».

Для сохранения простоты семантики предлагаемого языка XPathLink, являющегося расширением языка XPath поддержкой языка XLink, в настоящей статье используется отдельная дополнительная ось для перехода к целевому ресурсу дуги XLink из информационной единицы, представляющей дугу. Данная ось получила название



traverse-arc, т.е. "переход из дуги''.

Определение 3.   Ось traverse- arc содержит все узлы, являющиеся целевыми ресурсами для контекстного узла, представляющего в виде информационной единицы дугу XLink. Для любого другого контекстного узла ось traverse-arc содержит пустой набор узлов.

Как отмечалось выше, семантика оси traverse-arc во многом напоминает семантику оси traverse, и области определения этих осей дополняют друг друга. Общность осей

traverse-arc и traverse позволяет нам сразу перейти к рассмотрению примера.

Пример 5.   Вернемся к примеру 3 и дополним его переходом по дуге. Пусть контекстным узлом снова является элемент документа XML-документа

"louis-songs.xml". Осуществим переход по всем сторонним дугам, для которых контекстный узел является исходным ресурсом.

При наличии предлагаемых в статье дополнительных осей XPath искомая последовательность действий может быть оформлена в виде следующего пути доступа: arc::third-party/traverse-arc::*

Результатом вычисления данного пути доступа является набор узлов - ресурс, описанный расширенной ссылкой на рис. 3 и содержащий упоминания о Луисе Армстронге в прессе.

Предложенные в настоящей статье 3 дополнительные оси для языка XPath связаны следующим отношением: для произвольного теста узла NodeTest справедливо traverse::NodeTest º arc::*/traverse-arc::NodeTest,

где символ тождественного равенства обозначает совпадение наборов узлов, выбираемых путями доступа в левой и правой частях тождества, для любого контекстного узла. Справедливость данного утверждения следует из того очевидного наблюдения, что последовательное применение осей arc и traverse-arc реализует те же действия, что и ось traverse, если не требуется накладывать условие на интересующие дуги XLink, по которым следует осуществить переход.


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