Поддержка XQuery

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

Последовательность – это упорядоченная коллекция элементов (item collection). Она может содержать повторяющие элементы или не содержать их вообще. В последнем случае говорят, что последовательность пуста. Элементом последовательности может быть атомарное значение или узел. Элементами последовательности не могут быть другие последовательности. Для конструирования последовательности применяется оператор запятая. Последовательности могут заключаться в скобки для улучшения наглядности.

Каждый элемент в последовательности имеет тип. Если процессор не может определить тип элемента в момент помещения его в коллекцию, ему назначается тип xs:anyType. Если процессор не может определить тип атомарного элемента, ему назначается тип xs:anySimpleType.

XQuery – типизированный, функциональный язык. В нем можно создавать пользовательские функции, однако перегрузка функций не допускается. Вы можете использовать конструкторы встроенных типов для создания атомарных элементов или узлов. В XQuery нет возможности создавать пользовательские типы.

На момент написания статьи XQuery был все еще рабочим проектом (working draft).

ПРИМЕЧАНИЕ Если быть точным, имеется несколько рабочих спецификаций XQuery, и ни одна из них пока еще не была кандидатом на рекомендацию (candidate recommendation).

В имеющейся у меня версии SQL Server 2005 (кодовое название Yukon, версия 9.00.608) реализация XQuery базируется на рабочих проектах, которые выходили в течение 2002 года. Примерно эту же версию описывает Дон Чемберлин (один из редакторов спецификации) в статье [10]. Я буду описывать поддержку XQuery в SQL Server, попутно делая замечания о несоответствии реализации текущей (на момент написания статьи) спецификации.

Основы

Запрос XQuery состоит из пролога и тела запроса. В SQL Server-е пролог может содержать декларацию пространства имен и импорт схемы.

Пролог

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

"namespace" NCName "=" StringLiteral

где NCName – неквалифицированное имя (не может содержать двоеточия).

Это отличается от синтаксиса, описанного в последних спецификациях:

"declare" "namespace" NCName "=" StringLiteral;

Изменения состоят в добавлении ключевого слова declare и точки с запятой после объявления пространства имен.

ПРИМЕЧАНИЕ Точка с запятой в текущей спецификации обязана присутствовать после любой инструкции в прологе. На данный момент существуют следующие инструкции: объявление пространства имен, импорт схемы, объявление пространства имен по умолчанию, объявление сопоставления (collation) по умолчанию, объявление базового URI, объявление поведения пробельных символов при конструировании узлов в запросе, импорт модуля, объявление глобальных переменных, объявление функций. Как видите, SQL Server не поддерживает и десятой части стандарта в отношении пролога.

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: