Классика баз данных - статьи

       

XQuery


В качестве языка запросов мы используем язык XQuery []. На сегодняшний день процесс стандартизации XQuery практически завершен, и в скором времени будет выпущена первая официальная версия языка. Большинство компаний, производящих коммерческие РСУБД, заявило о запланированной поддержке XQuery в ближайших версиях своих продуктов.

Неотъемлемой частью XQuery является язык XPath [], который предназначен для адресации частей XML-документов. Помимо XQuery, язык XPath также широко применяется в другом популярном языке обработке XML документов - XSLT [].

Основной конструкцией XQuery является FLWR-выражение, обладающее следующим синтаксисом:

( FOR $var1 IN expr1 | LET $var2 := expr2 )+ WHERE expr3 RETURN expr4

FLWR-выражение состоит из четырех составляющих: разделов FOR, LET, WHERE и RETURN. В разделе FOR определяется переменная $var1, которая последовательно связывается с каждым из элементов последовательности, получаемой в результате вычисления выражения expr1. В разделе LET переменная $var2 связывается со всем результатом вычисления выражения expr2. Допускается несколько разделов FOR или LET. В разделе WHERE значения переменных фильтруются на основе предиката expr3. Наконец, раздел RETURN определяет результат FLWR-выражения: выражение expr4 вычисляется для каждого связывания переменных, для которого результатом вычисления предиката в разделе WHERE секции является "истина". Результатом всего FLWR-выражения является последовательность узлов, полученных после вычисления раздела RETURN.

При помощи FLWR-выражений на XQuery можно выражать операции соединения, трансформации, группировки и т. д. Особую роль играет операция трансформации, поскольку она очень часто используется в Web-приложениях при построении динамических HTML-страниц. В XQuery операция трансформации выражается при помощи конструкторов элемента и атрибута. Примером трансформации является следующий запрос, результатом которого является новое представление книг с названием "Data on the Web" и автором "Serge Abiteboul":


<result> { FOR &#x0024;book IN &#x002F;&#x002F;book WHERE &#x0024;book&#x002F;author = 'Serge Abiteboul' AND &#x0024;book&#x002F;title = ' Data on the Web' RETURN <book> { &#x0024;book&#x002F;title, &#x0024;book&#x002F;author, &#x0024;book&#x002F;isbn, &#x0024;book&#x002F;price } <&#x002F;book> } <&#x002F;result>

XQuery является функциональным языком, поэтому в нем выражения могут быть вложены друг в друга произвольным образом. Например, в разделе FOR FLWR-выражения может находиться другое FLWR-выражение и т. д. с любым уровнем вложенности. Помимо этого, на XQuery пользователь может определять и использовать свои собственные функции. Также существует достаточно большое количество встроенных стандартных функций [].

Далее в статье мы будем использовать обозначения Q и LP для ссылок на XQuery-запросы и путевые выражения XPath соответственно.


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