XML - статьи

/A>Уникальность узлов


Язык XPath часто используется не только как самостоятельный инструмент, но также как неотъемлемая составная часть таких языков как XQuery и XSLT. Консорциум Всемирной Сети изначально разрабатывал язык XPath с целью использования его в других языках платформы XML как инструмента для адресации структурных частей XML-документов.

В то время как язык XPath в силу принципов своего дизайна способен лишь

адресоваться к узлам XML-документа без возможности их преобразования, язык запросов к XML-документам XQuery [14], использующий XPath в качестве своей составной части, уже позволяет создавать новые узлы, что реализуется с помощью наличия в языке XQuery конструкторов для разных типов узлов. Для определения семантики конструируемых узлов в языке XQuery вводится понятие

уникального идентификатора узла (node identity). Уникальный идентификатор дается каждому узлу XML-документа, над которым производится выполнение запроса XQuery. Каждому сконструированному узлу и каждому его потомку также присваивается свой собственный уникальный идентификатор, не совпадающий ни с одним уникальным идентификатором остальных узлов.

Из описанного выше понятия уникального идентификатора узла следует, что когда в содержимом конструктора элемента присутствует некоторый узел N документа, семантика вычисления конструктора такова, как если производится копирование узла

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

Проблемы глубокого копирования поддеревьев можно избежать при функциональной реализации языка запросов к XML на основе предлагаемого в данной работе алгоритма вычисления выражений XPath. Поскольку язык функционального программирования Scheme представляет SXML-документ в виде иерархического однонаправленного связного списка, и поскольку функциональная парадигма программирования исключает побочные эффекты вычисления, то поддерево, являющееся общим для нескольких деревьев, автоматически хранится в одной физической копии. В предлагаемом подходе вычисления выражений XPath указатели на родительские узлы моделируются за счет их хранения в контексте вычисляемого выражения, и поэтому контекст задает то дерево, которому принадлежит контекстный узел и соответствующее ему поддерево.

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



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