Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Использование XML совместно с SQL.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.39 Mб
Скачать

Создание схемы

Синтаксис команды:

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 сервер вернет ошибку.