Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как описано в разделе, xml (Transact-SQL), SQL Server предоставляет собственное хранилище XML-данных через xml
тип данных. При необходимости можно связать схемы XSD с переменной или столбцом xml
типа с помощью коллекции XML-схем. Коллекция схем XML сохраняет импортированные XML-схемы и затем используется для выполнения следующих действий:
Проверка экземпляров XML
Введите XML-данные, как они хранятся в базе данных.
Обратите внимание, что коллекция xml-схем — это сущность метаданных, например таблица в базе данных. Их можно создавать, изменять и удалять. Схемы, указанные в инструкции CREATE XML SCHEMA COLLECTION (Transact-SQL) автоматически импортируются в созданный объект коллекции схем XML. Дополнительные схемы или компоненты схемы можно импортировать в существующий объект коллекции в базе данных с помощью инструкции ALTER XML SCHEMA COLLECTION (Transact-SQL) .
Как описано в разделе typed vs. Untyped XML, XML, хранящийся в столбце или переменной, с которым связана схема, называется типизированным XML, так как схема предоставляет необходимые сведения о типе данных для данных экземпляра. SQL Server использует эти сведения типа для оптимизации хранилища данных.
Обработчик обработки запросов также использует схему для проверки типов и оптимизации запросов и изменения данных.
Кроме того, SQL Server использует связанную коллекцию схем XML в случае типа xml
для проверки экземпляра XML. Если XML-экземпляр соответствует схеме, база данных позволяет хранить экземпляр в системе со сведениями о типе. В противном случае он отклоняет экземпляр.
Для получения коллекции схем, хранящейся в базе данных, можно использовать встроенную функцию XML_SCHEMA_NAMESPACE. Дополнительные сведения см. в разделе "Просмотр хранимой коллекции XML-схем".
Можно также использовать коллекцию схем XML для ввода XML-переменных, параметров и столбцов.
DDL для управления коллекциями схем
Коллекции схем XML можно создать в базе данных и связать их с переменными и столбцами xml
типа. Для управления коллекциями схем в базе данных SQL Server предоставляет следующие инструкции DDL:
CREATE XML SCHEMA COLLECTION (Transact-SQL) Импортирует компоненты схемы в базу данных.
ALTER XML SCHEMA COLLECTION (Transact-SQL) Изменяет компоненты схемы в существующей коллекции схем XML.
DROP XML SCHEMA COLLECTION (Transact-SQL) Удаляет полную коллекцию схем XML и все ее компоненты.
Чтобы использовать коллекцию XML-схем и содержащиеся в ней схемы, необходимо сначала создать коллекцию и схемы с помощью инструкции CREATE XML SCHEMA COLLECTION. После создания коллекции схем можно создать переменные и столбцы xml
типа и связать коллекцию схем с ними. Обратите внимание, что после создания коллекции схем различные компоненты схемы хранятся в метаданных. Можно также использовать ALTER XML SCHEMA COLLECTION для добавления дополнительных компонентов в существующие схемы или добавления новых схем в существующую коллекцию.
Чтобы удалить коллекцию схем, используйте инструкцию DROP XML SCHEMA COLLECTION. Это удаляет все схемы, содержащиеся в коллекции, и удаляет объект коллекции. Обратите внимание, что перед удалением коллекции схем необходимо выполнить условия, описанные в drop XML SCHEMA COLLECTION (Transact-SQL).
Общие сведения о компонентах схемы
При использовании инструкции CREATE XML SCHEMA COLLECTION различные компоненты схемы импортируются в базу данных. Компоненты схемы включают элементы схемы, атрибуты и определения типов. При использовании инструкции DROP XML SCHEMA COLLECTION удаляется вся коллекция.
CREATE XML SCHEMA COLLECTION сохраняет компоненты схемы в различных системных таблицах.
Например, рассмотрим следующую схему:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="uri:Cust_Orders2"
xmlns="uri:Cust_Orders2" >
<xsd:attribute name="SomeAttribute" type="xsd:int" />
<xsd:complexType name="SomeType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="OrderDate" type="xsd:date" />
<xsd:element name="RequiredDate" type="xsd:date" />
<xsd:element name="ShippedDate" type="xsd:date" />
</xsd:sequence>
<xsd:attribute name="OrderID" type="xsd:ID" />
<xsd:attribute name="CustomerID" />
<xsd:attribute name="EmployeeID" />
</xsd:complexType>
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order" type="OrderType"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
<xsd:attribute name="OrderIDList" type="xsd:IDREFS" />
</xsd:complexType>
<xsd:element name="Customer" type="CustomerType" />
</xsd:schema>
В предыдущей схеме показаны различные типы компонентов, которые могут храниться в базе данных. К ним относятся SomeAttribute
, SomeType
, OrderType
, CustomerType
, Customer
, Order
, CustomerID
, OrderID
, OrderDate
, RequiredDate
и ShippedDate
.
Категории компонентов
Компоненты схемы, хранящиеся в базе данных, делятся на следующие категории:
ЭЛЕМЕНТ
АТРИБУТ
TYPE (для простых или сложных типов)
ГРУППА АТРИБУТОВ
MODELGROUP
Рассмотрим пример.
SomeAttribute — это компонент ATTRIBUTE.
SomeType, OrderType и CustomerType — это компоненты TYPE.
Клиент является компонентом ELEMENT.
При импорте схемы в базу данных SQL Server не сохраняет саму схему. Вместо этого SQL Server сохраняет различные отдельные компоненты. То есть <тег схемы> не хранится, сохраняются только компоненты, определенные в нем. Все элементы схемы не сохраняются. <Если тег схемы> содержит атрибуты, определяющие поведение компонентов по умолчанию, эти атрибуты перемещаются в компоненты схемы в процессе импорта, как показано в следующей таблице.
Имя атрибута | Поведение |
---|---|
attributeFormDefault | Атрибут form применяется к тем объявлениям атрибутов в схеме, где он еще отсутствует, а его значение устанавливается значением атрибута attributeFormDefault. |
elementFormDefault | Атрибут form, применяемый ко всем элементам, объявленным в схеме, где он ещё отсутствует, и значение атрибута устанавливается в соответствие со значением атрибута elementFormDefault. |
блокПоумолчанию | Атрибут block, применяемый ко всем объявлениям элементов и определениям типов, где он еще не присутствует, принимает значение атрибута blockDefault. |
finalDefault | Окончательный атрибут, применяемый ко всем объявлениям элементов и определениям типов, где он еще не присутствует, и значение задается значением окончательного атрибутаDefault. |
targetNamespace | Сведения о компонентах, принадлежащих целевому пространству имен, хранятся в метаданных. |
Разрешения для коллекции схем XML
Для выполнения следующих действий необходимо иметь необходимые разрешения:
Создание и загрузка коллекции схем XML
Изменение коллекции схем XML
Удаление коллекции схем XML
Используйте коллекцию схем XML для определения типа
xml
столбцов, переменных и параметров или для использования в ограничениях таблицы или столбца.
Модель безопасности SQL Server разрешает разрешение CONTROL для каждого объекта. Обладатель данного разрешения получает все остальные разрешения на объект. Владелец объекта также имеет все разрешения для объекта.
Владелец и получатель разрешения CONTROL для объекта могут предоставить любое разрешение на объект. Пользователь, который не является владельцем и не имеет разрешения CONTROL, по-прежнему может предоставить разрешение на объект при указании WITH GRANT OPTION. Например, предположим, что пользователь A имеет разрешение REFERENCES на коллекцию схем XML S с правом передачи GRANT OPTION, но не имеет других разрешений на S. Пользователь A может предоставить пользователю B разрешение REFERENCES на коллекцию схем S.
Модель безопасности также позволяет создавать и использовать коллекции схем XML или передавать права владения от одного пользователя на другого. В следующих разделах описаны разрешения для сбора xml-схем.
Предоставление разрешений для коллекции схем XML
В этом разделе описывается, как предоставить разрешения для создания коллекции схем XML и предоставления разрешений для объекта коллекции схем XML.
Отмена разрешений для коллекции схем XML
В этом разделе описывается, как можно отменить разрешения для предотвращения создания коллекции схем XML и отмены разрешений на объект коллекции схем XML.
Запрет разрешений для коллекции схем XML
В этом разделе описывается, как запретить разрешения на создание коллекции схем XML и запретить разрешение на объект коллекции схем XML.
Получение сведений о схемах XML и коллекциях схем
Коллекции схем XML перечисляются в представлении каталога sys.xml_schema_collections. Коллекция xml-схем sys определяется системой. Он содержит предопределенные пространства имен, которые можно использовать во всех пользовательских коллекциях схем XML, не загружая их явным образом. Этот список содержит пространства имен для xml, xs, xsi, fn и xdt. Два других представления каталога — это sys.xml_schema_namespaces, который перечисляет все пространства имен в каждой коллекции схем XML и sys.xml_components, который перечисляет все компоненты схемы XML в каждой схеме XML.
Встроенная функция XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri возвращает xml
экземпляр типа данных. Этот экземпляр содержит фрагменты схемы XML для схем, содержащихся в коллекции схем XML, за исключением предопределенных XML-схем.
Вы можете перечислить содержимое коллекции схем XML следующим образом:
Напишите запросы Transact-SQL в соответствующих представлениях каталога для коллекций схем XML.
Используйте встроенную функцию XML_SCHEMA_NAMESPACE(). Методы типа данных можно применить
xml
к выходным данным этой функции. Однако нельзя изменить базовые xml-схемы.
Они иллюстрируются в следующих примерах.
Пример. Перечисление пространств имен XML в коллекции схем XML
Используйте следующий запрос для коллекции схем XML "myCollection":
SELECT XSN.name
FROM sys.xml_schema_collections XSC JOIN sys.xml_schema_namespaces XSN
ON (XSC.xml_collection_id = XSN.xml_collection_id)
WHERE XSC.name = 'myCollection'
Пример. Перечисление содержимого коллекции схем XML
Следующая инструкция перечисляет содержимое коллекции схем XML "myCollection" в реляционной схеме dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')
Отдельные XML-схемы в коллекции можно получить в качестве xml
экземпляров типа данных, указав целевое пространство имен как третий аргумент в XML_SCHEMA_NAMESPACE(). Это показано в следующем примере.
Пример. Вывод указанной схемы из коллекции XML-схем
Следующая инструкция выводит XML-схему с целевым пространством имен "https://www.microsoft.com/books" из коллекции схем XML "myCollection" в реляционной схеме dbo.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/books')
Выполнение запросов к XML-схемам
Вы можете запросить XML-схемы, загруженные в коллекции схем XML, следующим образом:
Составьте Transact-SQL запросов к представлениям каталога для пространств имен схемы XML.
Создайте таблицу
xml
, содержащую столбец типа данных для хранения xml-схем, а также их загрузки в систему типов XML. Вы можете запросить XML-столбец с помощьюxml
методов типа данных. Кроме того, можно создать XML-индекс в этом столбце. Однако при таком подходе приложение должно поддерживать согласованность между схемами XML, хранящимися в XML-столбце и системе типов XML. Например, если удалить пространство имен схемы XML из системы типов XML, необходимо также удалить его из таблицы, чтобы сохранить согласованность.
См. также
Просмотр коллекции хранимых XML-схем
Предварительная обработка схемы для слияния включенных схем
Требования и ограничения для коллекций схем XML на сервере