SQL-инструкции и XML
SQL Server позволяет представлять результаты реляционной выборки в виде XML и наоборот, представлять XML-фрагмент или документ в реляционной форме. Делается это с помощью расширения команды select – for xml и функции OPENXML, соответственно. Довольно подробно их использование описано в [6].
Рассмотрим основные нововведения в конструкции for xml, которые появятся в SQL Server 2005. Общий синтаксис запроса:
[ FOR { BROWSE | < XML > } ]<XML> ::= XML { { RAW | AUTO } [ < CommonDirectives > [ , { XMLDATA | XMLSCHEMA } ] [ , ELEMENTS [ XSINIL | ABSENT ] ] | EXPLICIT [ < CommonDirectives > [ , XMLDATA ] ] } < CommonDirectives > ::= [ , BINARY BASE64 ] [ , TYPE ] |
Где:
- raw – каждая строка представляется в виде XML-элемента <row/>. Название поля формирует название атрибута, а значение поля – значение атрибута. Теперь появилась возможность формировать значения полей в виде XML-элементов, которые будут являться дочерними элементу row. Подробнее об этом см. ниже.
- auto – фрагмент XML форматируется точно так же, как и при RAW-режиме, с тем исключением, что название элемента, представляющего строку, заменяется на название таблицы.
- xmldata – добавляет к результирующему фрагменту встроенную (inline) схему XDR.
- xmlschema – добавляет к результирующему фрагменту встроенную (inline) схему XSD.
- elements – при указании данного ключевого слова поля результирующего XML-фрагмента формируются как XML-элементы: название поля соответствует названию элемента, а значение поля – значению элемента. Расположение элементов друг относительно друга задается порядком их следования в запросе.
- xsinil – данное ключевое слово позволяет отображать элементы со значением NULL в форме, понятной для XML-приложений (например, <a xsi:nil="true"/>).
- absent – ключевое слово, обозначающее старый режим работы с пустыми (содержащими NULL) элементами, при котором они просто не попадали в результирующий документ.
- explicit – cамый сложный и гибкий вариант для создания XML-документов. В этом режиме можно формировать документы практически любой формы, однако для этого сам запрос должен быть написан по определенным правилам.
- binary base64 – при указании данного ключевого слова двоичные данные выводятся в кодировке base64.
- type – новое ключевое слово, обозначающее, что результирующий XML-фрагмент будет представлен XML-типом, а не строкой. Данная возможность позволяет выполнять вложенные XML-запросы.