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