Поделиться через


Коллекции схем XML (SQL Server)

Как описано в разделе, 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:

Чтобы использовать коллекцию 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 перечисляются в представлении каталога 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 на сервере