DDL для управления коллекциями XML-схем в базе данных
Как описано в разделе Управление коллекциями XML-схем на сервере, в базе данных можно создавать коллекции XML-схем и связывать их с переменными и столбцами типа xml. Для управления коллекциями схем в базе данных в SQL Server предусмотрены следующие инструкции DDL:
Чтобы использовать коллекцию XML-схем и содержащиеся в ней схемы, следует сначала создать коллекцию и схемы с помощью инструкции CREATE XML SCHEMA COLLECTION. После создания коллекции схемы можно создавать переменные и столбцы типа xml и связать с ними коллекцию схем. Обратите внимание, что после создания коллекции различные компоненты схем будут храниться в метаданных. Кроме того, добавлять большие компоненты в существующие схемы или новые схемы в существующую коллекцию можно с помощью инструкции ALTER XML SCHEMA COLLECTION.
Удалить коллекцию схем можно с помощью инструкции DROP XML SCHEMA COLLECTION. При этом удаляются все схемы в коллекции и сам объект коллекции. Обратите внимание, что для удаления коллекции должны выполняться условия, описанные в разделе DROP XML SCHEMA COLLECTION.
Основные сведения о компонентах схемы
При использовании инструкции 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
.
Типы компонентов
Компоненты схемы, хранящиеся в базе данных, делятся на следующие категории:
- ELEMENT;
- ATTRIBUTE;
- TYPE (для простых и сложных типов);
- ATTRIBUTEGROUP;
- MODELGROUP.
Ниже приведена связь компонентов и соответствующих категорий:
- SomeAttribute — компонент типа ATTRIBUTE.
- SomeType, OrderType и CustomerType — компоненты типа TYPE.
- SomeAttribute — компонент типа ELEMENT.
При импорте схемы в базу данных SQL Server не сохраняет саму схему. Вместо этого SQL Server сохраняет различные отдельные компоненты. То есть тег <Schema> не сохраняется, а сохраняются компоненты, заданные внутри него. Все элементы схемы не сохраняются. Если тег <Schema> содержит атрибуты, которые задают поведение по умолчанию для его компонентов, то во время импорта эти атрибуты перемещаются в компоненты схемы внутри нее, как показано в следующей таблице.
Имя атрибута | Поведение |
---|---|
attributeFormDefault |
Атрибут form применяется ко всем объявлениям атрибутов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута attributeFormDefault. |
elementFormDefault |
Атрибут form применяется ко всем объявлениям элементов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута elementFormDefault. |
blockDefault |
Атрибут block применяется ко всем объявлениям элементов и определениям типов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута blockDefault. |
finalDefault |
Атрибут final применяется ко всем объявлениям элементов и определениям типов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута finalDefault. |
targetNamespace |
Сведения о компонентах, принадлежащих целевому пространству имен, хранятся в метаданных. |
См. также
Справочник
Правила и ограничения по использованию коллекций XML-схем на сервере
Разрешения на коллекцию XML-схем
Управление коллекциями XML-схем на сервере
Основные понятия
Тип данных xml
Типизированный и нетипизированный XML