Коллекции схем XML (SQL Server)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Как описано в статье xml (Transact-SQL), SQL Server предоставляет собственное хранилище XML-данных через тип данных XML . При помощи коллекции XML-схем можно связать с переменной или столбцом типа xml XSD-схемы. Коллекция 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
.
Категории компонентов
Компоненты схемы, хранящиеся в базе данных, делятся на следующие категории:
ELEMENT
ATTRIBUTE
TYPE (для простых и сложных типов);
ATTRIBUTEGROUP;
MODELGROUP.
Например:
SomeAttribute
— это компонент ATTRIBUTE.SomeType
,OrderType
иCustomerType
являются компонентами TYPE.Customer
является компонентом ELEMENT.
При импорте схемы в базу данных SQL Server не сохраняет саму схему. Вместо этого SQL Server сохраняет различные отдельные компоненты. То есть <тег схемы> не хранится, сохраняются только компоненты, определенные в нем. Все элементы схемы не сохраняются. <Если тег схемы> содержит атрибуты, определяющие поведение компонентов по умолчанию, эти атрибуты перемещаются в компоненты схемы в процессе импорта, как показано в следующей таблице.
Attribute name | Поведение |
---|---|
attributeFormDefault | Атрибут form применяется ко всем объявлениям атрибутов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута attributeFormDefault . |
elementFormDefault | Атрибут form применяется ко всем объявлениям элементов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута elementFormDefault . |
blockDefault | Атрибут block применяется ко всем объявлениям элементов и определениям типов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута blockDefault . |
finalDefault | Атрибут final применяется ко всем объявлениям элементов и определениям типов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута finalDefault . |
targetNamespace | Сведения о компонентах, принадлежащих целевому пространству имен, хранятся в метаданных. |
Разрешения для коллекции схем XML
При этом требуется иметь соответствующие разрешения на выполнение следующих операций:
создание и загрузка коллекции XML-схем;
модификация коллекции XML-схем;
удаление коллекции XML-схем;
Коллекции XML-схем используются для типизации столбцов, переменных и параметров типа xml или в таблицах, или в ограничениях столбцов.
Модель безопасности SQL Server предусматривает разрешение CONTROL для каждого объекта. Обладателю этого разрешения предоставляются все остальные разрешения для данного объекта. Владелец объекта также имеет все разрешения для этого объекта.
Владелец и обладатель разрешения CONTROL для объекта могут давать любые разрешения на этот объект. Пользователь, который не является владельцем и не имеет разрешения CONTROL, по-прежнему может предоставить разрешение на объект при указании WITH GRANT OPTION. Допустим, что пользователь A имеет предоставленное с помощью настройки WITH GRANT OPTION разрешение REFERENCES на коллекцию XML-схем S, но не имеет других разрешений на коллекцию S. В этом случае пользователь A может предоставить пользователю Б разрешение REFERENCES на коллекцию схем S.
Кроме того, модель безопасности допускает создание и использование разрешениями коллекций XML-схем или передачу данных о принадлежности от одного пользователя другому. В следующих статьях описаны разрешения для сбора схем XML.
Предоставление разрешений на коллекции схем XML
В этой статье описывается, как предоставить разрешения для создания коллекции схем XML и предоставления разрешений для объекта коллекции схем XML.
Отмена разрешений на коллекцию схем XML
В этой статье описывается, как отменить разрешения можно использовать для предотвращения создания коллекции схем XML и отмены разрешений на объект коллекции схем XML.
Запрет разрешения на коллекцию схем XML
В этой статье описывается, как запретить разрешения на создание коллекции схем XML и запретить разрешение на объект коллекции схем XML.
Получение сведений о схемах XML и коллекциях схем
Коллекции XML-схем перечислены в представлении каталога sys.xml_schema_collections. Коллекция sys
схем XML определяется системой. Она содержит предопределенные пространства имен, которые можно использовать во всех пользовательских коллекциях 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
Используйте следующий запрос для коллекции myCollection
схем XML:
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
Следующая инструкция перечисляет содержимое коллекции myCollection
XML-схем в реляционной схеме dbo
.
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection');
Отдельные XML-схемы из коллекции можно получить как экземпляры типа данных xl , указав целевое пространство имен в качестве третьего аргумента функции XML_SCHEMA_NAMESPACE(). Это показано в следующем примере.
Вывод указанной схемы из коллекции XML-схем
Следующая инструкция выводит xml-схему с притворным целевым пространством https://www.microsoft.com/was-books
имен из коллекции myCollection
схем XML в реляционной схеме. dbo
SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',
N'https://www.microsoft.com/was-books')
Запрос XML-схем
Запрашивать XML-схемы, загруженные в коллекцию XML-схем, можно перечисленными ниже способами.
Написать адресованные представлениям каталога запросы Transact-SQL о получении пространств имен XML-схем.
Создать таблицу со столбцом данных типа xml для хранения XML-схем и загрузки в систему типов XML. Данные из XML-столбца можно запросить при помощи методов типа данных xml . Кроме того, можно создать для этого столбца XML-индекс. Однако при этом подходе в приложении нужно поддерживать согласованность между XML-схемами, хранимыми в XML-столбце, и системой типов XML. Например, при удалении пространства имен XML-схемы из системы типов XML для сохранения согласованности необходимо будет удалить его и из таблицы.