Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL в базе данных Microsoft Fabric
Как описано в статье 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 (для простых и сложных типов);
ATTRIBUTEGROUP
MODELGROUP.
Например:
SomeAttribute— это компонент ATTRIBUTE.SomeType,OrderTypeиCustomerTypeявляются компонентами TYPE.Customerявляется компонентом ELEMENT.
При импорте схемы в базу данных SQL Server не сохраняет саму схему. Вместо этого SQL Server хранит различные компоненты. То есть <тег схемы> не хранится, сохраняются только компоненты, определенные в нем. Все элементы схемы не сохраняются. <Если тег схемы> содержит атрибуты, определяющие поведение компонентов по умолчанию, эти атрибуты перемещаются в компоненты схемы в процессе импорта, как показано в следующей таблице.
| Имя атрибута | Поведение |
|---|---|
| attributeFormDefault | Атрибут form применяется ко всем объявлениям атрибутов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута attributeFormDefault . |
| elementFormDefault | Атрибут form применяется ко всем объявлениям элементов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута elementFormDefault . |
| по умолчанию блокировать | Атрибут 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, и xsifnxdt. Два других представления каталога — sys.xml_schema_namespaces, перечисляющее все пространства имен в каждой коллекции схем XML, и sys.xml_components, перечисляющее все компоненты схем XML в каждой схеме XML.
Встроенная функция XML_SCHEMA_NAMESPACEschemaName, 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 для сохранения согласованности необходимо будет удалить его и из таблицы.