- •Iis и xml функции sql Server
- •Поддержка xml в Microsoft sql Server 2000
- •Примеры
- •Iis и xml функции sql Server
- •Шаблоны
- •Запросы xPath
- •Замечания по разделу
- •Возможности ado 2.5 Сохранение и загрузка из файла в формате xml
- •Трансформация с помощью domDocument
- •Выдача Recordset’а в формате xml непосредственно в поток Response
- •Возможности ado 2.6
- •Использование Command для формирования xml-документа на сервере
- •Выполнение шаблона
- •Выполнение запроса xPath
- •Шаблон с агрегатными функциями
- •Формирование xml-документа на клиенте с помощью ado
- •Апдейтаграммы и xml Bulk Load
- •Апдейтаграммы
- •Добавление данных
- •Обновление данных
- •Удаление
- •Создание новой таблицы и загрузка данных
- •Загрузка иерархических документов
- •Заключение
- •Литература
- •Предисловие
- •Настройка iis
- •Содержание wsdl-файла
- •Секция types
- •Секция message
- •Секция portType
- •Формы сообщений
- •Секция binding
- •Секция service
- •Создание Web-методов
- •Тестируем Web-сервис
- •Поддержка sqlxml в .Net Framework
- •Тестовый проект
- •Цели и ограничения
- •Реализация
- •Заключение
- •Литература
- •Тип данных xml Основы
- •Метод query
- •Метод value
- •Метод exist
- •Метод modify
- •Использование xml-типа
- •Хранение xml-типа
- •Поддержка xml Schema
- •Создание схемы
- •Удаление схемы
- •Ограничения текущей реализации
- •Безопасность
- •Вложенные запросы for xml
- •Генерация xsd на лету
- •Поддержка xQuery
- •Тело запроса
- •Конструкторы узлов
- •Операторы сравнения
- •Операторы сравнения атомарных значений
- •Общие операторы сравнения
- •Операторы сравнения узлов
- •Логические операторы
- •Условные выражения
- •Flwor-выражения
- •Кванторные выражения
- •Сортировка
- •Заключение
- •Литература
Создание схемы
Синтаксис команды:
CREATE XMLSCHEMA Expression |
Expression – строка, представляющая собой схему документа. Это может быть строковый литерал или переменная строкового типа.
Команды изменения схемы нет: повторное создание схемы с тем же именем приводит к замещению схемы, что, как мне кажется, не очень правильно.
Выше уже приводились примеры использования этой команды.
Удаление схемы
Синтаксис команды удаления схемы:
DROP XMLSCHEMA {NAMESPACE TargetNamespace } |
Удалить можно только ту схему, с которой еще не связан ни один столбец в таблицах данной базы. К сожалению, если такая связь есть, команда не удаляет схему и не выдает никаких сообщений об ошибках. Кроме этого, на данный момент нет механизмов определения, с какими полями таблиц связана данная схема, так что удалить схему практически невозможно (по крайней мере, мне не удалось удалить ни одну из ранее созданных схем!). :(
Вот такая команда должна была бы удалить схему my-first-schema:
drop xmlschema namespace 'my-first-schema' |
Ограничения текущей реализации
К сожалению, на данный момент аннотации, примечания и ограничения (unique, key и keyref) не сохраняются в метаданных базы. Кроме того, атрибут id в схеме не поддерживается.
Полностью список ограничений можно найти в MSDN.
Безопасность
По умолчанию права на создание схемы имеет только пользователь в роли db_owner. Если вы хотите наделить обычного пользователя правами на создание схемы в данной базе, необходимо воспользоваться следующей командой:
{ GRANT | DENY | REVOKE } CREATE XML SCHEMA TO <User or Group> |
Здесь User or Group – имя пользователя или группы в базе.
Например, следующий код создает логин, пользователя в базе и дает ему право на создание схем XML-документов:
--создание логина create login test with password ='t', default_database = test
--создание пользователя create user test_user for login test
--разрешение создавать схемы документов grant create xml schema to test_user |
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-запросы.
For xml, type
Результаты запроса for xml теперь доступны на сервере и могут быть автоматически представлены как встроенный тип xml. Фактически, вы можете не указывать команду type, так как преобразование из строки в XML-тип делается неявно, т.е. две следующие команды эквивалентны:
--без ключевого слова type declare @x xml set @x = (select * from sys.indexes for xml auto)
--с ключевым словом type declare @x xml set @x = (select * from sys.indexes for xml auto, type) |
Однако в первом случае возвращается строка, которая затем преобразуется в XML-тип, а во втором – сразу XML-тип. Различие становится более очевидным в следующем примере:
select (select * from sys.indexes for xml auto, type)::query('//*') |
Подобная запись возможна потому, что результатом выборки с ключевым словом type является XML-тип. Без использования ключевого слова type сервер вернет ошибку.
