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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Как указано в разделе xml (Transact-SQL), SQL Server естественным образом поддерживаетxml.As described in the topic, xml (Transact-SQL), SQL Server provides native storage of XML data through the xml data type. При помощи коллекции XML-схем можно связать с переменной или столбцом типа xml XSD-схемы.You can optionally associate XSD schemas with a variable or a column of xml type through an XML schema collection. Коллекция XML-схем хранит импортированные XML-схемы и используется для решения следующих задач:The XML schema collection stores the imported XML schemas and is then used to do the following:

  • проверка экземпляров XML;Validate XML instances

  • типизация XML-данных, хранимых в базе данных.Type the XML data as it is stored in the database

Коллекция XML-схем — это сущность класса метаданных, подобная таблице в базе данных.Note that the XML schema collection is a metadata entity like a table in the database. Можно создавать, изменять и удалять эти схемы.You can create, modify, and drop them. Схемы, указанные в инструкции CREATE XML SCHEMA COLLECTION (Transact-SQL) , автоматически импортируются в создаваемую коллекцию XML-схем.Schemas specified in a CREATE XML SCHEMA COLLECTION (Transact-SQL) statement are automatically imported into the newly created XML schema collection object. Можно импортировать дополнительные схемы или компоненты схем в существующую в базе данных коллекцию при помощи инструкции ALTER XML SCHEMA COLLECTION (Transact-SQL).You can import additional schemas or schema components into an existing collection object in the database by using the ALTER XML SCHEMA COLLECTION (Transact-SQL) statement.

Как описано в разделе Сравнение типизированного и нетипизированного XML, код XML, хранимый в столбце или переменной, с которой связана схема, называется типизированным, потому что схема предоставляет необходимую информацию о типах данных экземпляра.As described in the topic, Typed vs. Untyped XML, the XML stored in a column or variable that a schema is associated with is referred to as typed XML, because the schema provides the necessary data type information for the instance data. В SQL Server эта информация о типах используется для оптимизации хранения данных.SQL Server uses this type information to optimize data storage.

Механизм обработки запросов применяет схемы для проверки типов, а также оптимизации запросов и изменения данных.The query-processing engine also uses the schema for type checking and to optimize queries and data modification.

Кроме того, в случае типизированного xmlSQL Server использует соответствующую коллекцию XML-схем для проверки экземпляра XML.Also, SQL Server uses the associated XML schema collection, in the case of typed xml, to validate the XML instance. Если экземпляр XML соответствует схеме, база данных позволяет сохранить его в системе с информацией о его типах.If the XML instance complies with the schema, the database allows the instance to be stored in the system with their type information. В противном случае она отклоняет экземпляр.Otherwise, it rejects the instance.

Встроенная функция XML_SCHEMA_NAMESPACE позволяет получить коллекцию схем, хранимую в базе данных.You can use the intrinsic function XML_SCHEMA_NAMESPACE to retrieve the schema collection that is stored in the database. Дополнительные сведения см. в разделе Просмотр хранимой коллекции схем XML.For more information, see View a Stored XML Schema Collection.

Кроме того, можно использовать коллекцию схем XML для типизации переменных, параметров и столбцов типа XML.You can also use the XML schema collection to type XML variables, parameters, and columns.

DDL для управления коллекциями схемDDL for Managing Schema Collections

В базе данных можно создавать коллекции схем XML и связывать их с переменными и столбцами типа xml .You can create XML schema collections in the database and associate them with variables and columns of xml type. Для управления коллекциями схем в базе данных в SQL ServerSQL Server предусмотрены следующие инструкции DDL:To manage schema collections in the database, SQL ServerSQL Server provides the following DDL statements:

Чтобы использовать коллекцию XML-схем и содержащиеся в ней схемы, следует сначала создать коллекцию и схемы с помощью инструкции CREATE XML SCHEMA COLLECTION.To use an XML schema collection and the schemas it contains, you must first create the collection and the schemas by using the CREATE XML SCHEMA COLLECTION statement. После создания коллекции схемы можно создавать переменные и столбцы типа xml и связывать с ними коллекцию схем.After the schema collection is created, you can then create variables and columns of xml type and associate the schema collection with them. Обратите внимание, что после создания коллекции различные компоненты схем будут храниться в метаданных.Note that after a schema collection is created, various schema components are stored in the metadata. Кроме того, добавлять большие компоненты в существующие схемы или новые схемы в существующую коллекцию можно с помощью инструкции ALTER XML SCHEMA COLLECTION.You can also use the ALTER XML SCHEMA COLLECTION to add more components to the existing schemas or add new schemas to an existing collection.

Удалить коллекцию схем можно с помощью инструкции DROP XML SCHEMA COLLECTION.To drop the schema collection, use the DROP XML SCHEMA COLLECTION statement. При этом удаляются все схемы в коллекции и сам объект коллекции.This drops all schemas that are contained in the collection and removes the collection object. Обратите внимание, что для удаления коллекции схем должны выполняться условия, описанные в разделе DROP XML SCHEMA COLLECTION (Transact-SQL).Note that before you can drop a schema collection, the conditions described in DROP XML SCHEMA COLLECTION (Transact-SQL)must be met.

Основные сведения о компонентах схемыUnderstanding Schema Components

При использовании инструкции CREATE XML SCHEMA COLLECTION в базу данных импортируются различные компоненты схемы.When you use the CREATE XML SCHEMA COLLECTION statement, various schema components are imported into the database. К компонентам схемы относятся ее элементы, атрибуты и определения типов.Schema components include schema elements, attributes, and type definitions. При использовании инструкции DROP XML SCHEMA COLLECTION коллекция удаляется целиком.When you use the DROP XML SCHEMA COLLECTION statement, you remove the complete collection.

Инструкция CREATE XML SCHEMA COLLECTION сохраняет компоненты схемы в различных системных таблицах.CREATE XML SCHEMA COLLECTION saves the schema components into various system tables.

Например, рассмотрим следующую схему:For example, consider the following schema:

<?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>  

В приведенной выше схеме показаны различные типы компонентов, которые могут храниться в базе данных.The previous schema shows the different types of components that can be stored in the database. Это компоненты SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDateи ShippedDate.These include SomeAttribute, SomeType, OrderType, CustomerType, Customer, Order, CustomerID, OrderID, OrderDate, RequiredDate, and ShippedDate.

Категории компонентовComponent Categories

Компоненты схемы, хранящиеся в базе данных, делятся на следующие категории:The Schema components stored in the database fall into the following categories:

  • ELEMENTELEMENT

  • ATTRIBUTEATTRIBUTE

  • TYPE (для простых и сложных типов);TYPE (for simple or complex types)

  • ATTRIBUTEGROUP;ATTRIBUTEGROUP

  • MODELGROUP.MODELGROUP

Пример:For example:

  • SomeAttribute является компонентом ATTRIBUTE.SomeAttribute is an ATTRIBUTE component.

  • SomeType, OrderTypeи CustomerType — это компоненты TYPE.SomeType, OrderType, and CustomerType are TYPE components.

  • Customer является компонентом ELEMENT.Customer is an ELEMENT component.

При импорте схемы в базу данных SQL ServerSQL Server не сохраняет саму схему.When you import a schema into the database, SQL ServerSQL Server does not store the schema itself. Вместо этого SQL ServerSQL Server сохраняет различные отдельные компоненты.Instead, SQL ServerSQL Server stores the various individual components. Таким образом, тег <Schema> не сохраняется, а сохраняются только компоненты, заданные внутри него.That is, the <Schema> tag is not stored, only the components that are defined within it are preserved. Все элементы схемы не сохраняются.All schema elements are not preserved. Если тег <Schema> содержит атрибуты, которые задают поведение по умолчанию для его компонентов, то во время импорта эти атрибуты перемещаются в компоненты схемы внутри нее, как показано в следующей таблице.If the <Schema> tag contains attributes that specify default behavior of its components, these attributes are moved to the schema components within it during the import process, as shown in the following table.

Имя атрибутаAttribute name ПоведениеBehavior
attributeFormDefaultattributeFormDefault Атрибут form применяется ко всем объявлениям атрибутов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута attributeFormDefault .The form attribute applied to all attribute declarations in the schema where it is not already present and the value is set to the value of the attributeFormDefault attribute.
elementFormDefaultelementFormDefault Атрибут form применяется ко всем объявлениям элементов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута elementFormDefault .The form attribute applied to all element declarations in the schema where it is not already present and the value is set to the value of the elementFormDefault attribute.
blockDefaultblockDefault Атрибут block применяется ко всем объявлениям элементов и определениям типов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута blockDefault .The block attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the blockDefault attribute.
finalDefaultfinalDefault Атрибут final применяется ко всем объявлениям элементов и определениям типов в схеме, где его еще нет. Ему присваивается значение, равное значению атрибута finalDefault .The final attribute applied to all element declarations and type definitions where it is not already present and the value is set to the value of the finalDefault attribute.
targetNamespacetargetNamespace Сведения о компонентах, принадлежащих целевому пространству имен, хранятся в метаданных.Information about the components that belong to the target namespace is stored in the metadata.
   

Разрешения на коллекцию схем XMLPermissions on an XML Schema Collection

При этом требуется иметь соответствующие разрешения на выполнение следующих операций:You must have the necessary permissions to do the following:

  • создание и загрузка коллекции XML-схем;Create/load the XML schema collection

  • модификация коллекции XML-схем;Modify the XML schema collection

  • удаление коллекции XML-схем;Drop the XML schema collection

  • Коллекции XML-схем используются для типизации столбцов, переменных и параметров типа xml или в таблицах, или в ограничениях столбцов.Use the XML schema collection to type xml type columns, variables, and parameters, or use it in table or column constraints

Модель безопасности SQL Server предусматривает разрешение CONTROL для каждого объекта.The SQL Server security model allows CONTROL permission on every object. Обладателю этого разрешения предоставляются все остальные разрешения для данного объекта.The grantee of this permission obtains all other permissions on the object. Владелец объекта также имеет все разрешения для этого объекта.The owner of the object also has all the permissions on the object.

Владелец и обладатель разрешения CONTROL для объекта могут давать любые разрешения на этот объект.The owner and the grantee of the CONTROL permission on an object can grant any permission on the object. Пользователь, не являющийся владельцем и не имеющий разрешения CONTROL, может давать разрешения на объект при использовании параметра WITH GRANT OPTION.A user who is not the owner and does not have CONTROL permission can still grant permission on an object when WITH GRANT OPTION is specified. Допустим, что пользователь A имеет предоставленное с помощью настройки WITH GRANT OPTION разрешение REFERENCES на коллекцию XML-схем S, но не имеет других разрешений на коллекцию S. В этом случае пользователь A может предоставить пользователю Б разрешение REFERENCES на коллекцию схем S.For example, assume User A has REFERENCES permission on XML schema collection S, through WITH GRANT OPTION, but no other permissions on S. User A could grant User B REFERENCES permission on schema collection S.

Кроме того, модель безопасности допускает создание и использование разрешениями коллекций XML-схем или передачу данных о принадлежности от одного пользователя другому.The security model also allows permissions to create and use XML schema collections or transfer ownership from one user to another. Разрешения на коллекции XML-схем описываются в следующих подразделах.The following topics describe the XML schema collection permissions.

Получение информации о схемах XML и коллекциях схемGetting Information about XML Schemas and Schema Collections

Коллекции XML-схем перечислены в представлении каталога sys.xml_schema_collections.XML schema collections are enumerated in the catalog view, sys.xml_schema_collections. Коллекция XML-схем «sys» определяется системой.The XML schema collection "sys" is defined by the system. Она содержит предопределенные пространства имен, которые можно использовать во всех пользовательских коллекциях XML-схем, не загружая их явно.It contains the predefined namespaces that can be used in all user-defined XML schema collections without having to load them explicitly. Этот список содержит пространства имен xml, xs, xsi, fn и xdt.This list contains the namespaces for xml, xs, xsi, fn, and xdt. Двумя другими представлениями каталога являются sys.xml_schema_namespaces, в котором перечислены все пространства имен каждой коллекции XML-схем и sys.xml_components, в котором перечислены все компоненты каждой XML-схемы.Two other catalog views are sys.xml_schema_namespaces, which enumerates all namespaces within each XML schema collection, and sys.xml_components, which enumerates all XML schema components within each XML schema.

Встроенная функция XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri позволяет получить экземпляр типа данных xml.The built-in function XML_SCHEMA_NAMESPACE, schemaName, XmlSchemacollectionName, namespace-uri, yields an xml data type instance. Этот экземпляр содержит фрагменты для XML-схем, содержащихся в коллекции XML-схем, за исключением предопределенных XML-схем.This instance contains XML schema fragments for schemas that are contained in an XML schema collection, except the predefined XML schemas.

Перечислить содержимое коллекции XML-схем можно двумя способами:You can enumerate the contents of an XML schema collection in the following ways:

  • написать запросы Transact-SQL, адресованные соответствующим представлениям каталога, связанным с коллекциями XML-схем;Write Transact-SQL queries on the appropriate catalog views for XML schema collections.

  • Используйте встроенную функцию XML_SCHEMA_NAMESPACE() .Use the built-in function XML_SCHEMA_NAMESPACE(). К результатам этой функции можно применять методы типа данных xml .You can apply xml data type methods on the output of this function. Однако изменять базовые XML-схемы нельзя.However, you cannot modify the underlying XML schemas.

Все это поясняют следующие примеры.These are illustrated in the following examples.

Пример Перечисление пространств имен XML, входящих в коллекцию XML-схемExample: Enumerate the XML Namespaces in an XML Schema Collection

Выполните следующий запрос для коллекции XML-схем «myCollection»:Use the following query for the XML schema collection "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-схемExample: Enumerate the Contents of an XML Schema Collection

Следующая инструкция перебирает содержимое коллекции XML-схем «myCollection» реляционной схемы dbo.The following statement enumerates the contents of the XML schema collection "myCollection" within the relational schema, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection')  

Отдельные XML-схемы из коллекции можно получить как экземпляры типа данных xl , указав целевое пространство имен в качестве третьего аргумента функции XML_SCHEMA_NAMESPACE() .Individual XML schemas within the collection can be obtained as xml data type instances by specifying the target namespace as the third argument to XML_SCHEMA_NAMESPACE(). Это показано в следующем примере.This is shown in the following example.

Пример Вывод конкретной схемы из коллекции XML-схемExample: Output a Specified Schema from an XML Schema Collection

Следующая инструкция выводит XML-схему с симулированным целевым пространством имен https//www.microsoft.com/was-books из коллекции XML-схем myCollection реляционной схемы dbo.The following statement outputs the XML schema with the pretend target namespace https//www.microsoft.com/was-books from the XML schema collection "myCollection" within the relational schema, dbo.

SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'myCollection',   
N'https://www.microsoft.com/was-books')  

Запросы XML-схемQuerying XML Schemas

Запрашивать XML-схемы, загруженные в коллекцию XML-схем, можно перечисленными ниже способами.You can query XML schemas that you have loaded into XML schema collections in the following ways:

  • Написать адресованные представлениям каталога запросы Transact-SQL о получении пространств имен XML-схем.Write Transact-SQL queries on catalog views for XML schema namespaces.

  • Создать таблицу со столбцом данных типа xml для хранения XML-схем и загрузки в систему типов XML.Create a table that contains an xml data type column to store your XML schemas and also load them into the XML type system. Данные из XML-столбца можно запросить при помощи методов типа данных xml .You can query the XML column by using the xml data type methods. Кроме того, можно создать для этого столбца XML-индекс.Also, you can build an XML index on this column. Однако при этом подходе в приложении нужно поддерживать согласованность между XML-схемами, хранимыми в XML-столбце, и системой типов XML.However, with this approach, the application must maintain consistency between the XML schemas stored in the XML column and the XML type system. Например, при удалении пространства имен XML-схемы из системы типов XML для сохранения согласованности необходимо будет удалить его и из таблицы.For example, if you drop the XML schema namespace from the XML type system, you also have to drop it from the table in order to preserve consistency.

См. также:See Also

Просмотр хранимой коллекции схем XML View a Stored XML Schema Collection
Предпроцессор схемы для слияния включаемых схем Preprocess a Schema to Merge Included Schemas
Требования и ограничения для коллекций схем XML на сервереRequirements and Limitations for XML Schema Collections on the Server