Сравнение типизированного и нетипизированного XMLCompare Typed XML to Untyped XML

ОБЛАСТЬ ПРИМЕНЕНИЯ: да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 .You can create variables, parameters, and columns of the xml type. При необходимости можно связать коллекцию схем XML с переменной, параметром или столбцом типа xml .You can optionally associate a collection of XML schemas with a variable, parameter, or column of xml type. В данном случае экземпляр типа данных xml называется типизированным.In this case, the xml data type instance is called typed. В противном случае экземпляр XML называется нетипизированным.Otherwise, the XML instance is called untyped.

XML-документы правильного формата и тип данных XMLWell-formed XML and the xml Data Type

Тип данных xml соответствует типу данных xml стандарта ISO.The xml data type implements the ISO standard xml data type. Таким образом, он позволяет хранить синтаксически корректные документы XML 1.0, а также так называемые фрагменты XML-содержимого с текстовыми узлами и произвольным числом элементов верхнего уровня в нетипизированном XML-столбце.Therefore, it can store well-formed XML version 1.0 documents and also so-called XML content fragments with text nodes and an arbitrary number of top-level elements in an untyped XML column. Система, осуществляющая проверку правильности формата данных, не требует, чтобы столбец был связан с XML-схемами, и отклоняет данные, имеющие неправильный формат в общепринятом смысле.The system checks that the data is well-formed, does not require the column to be bound to XML schemas, and rejects data that is not well-formed in the extended sense. Это также верно для нетипизированных переменных и параметров типа XML.This is true also of untyped XML variables and parameters.

XML-схемыXML Schemas

XML-схема предоставляет следующее.An XML schema provides the following:

  • Ограничения проверки.Validation constraints. SQL Server проверяет типизированный экземпляр XML после каждой операции присвоения или изменения.Whenever a typed xml instance is assigned to or modified, SQL Server validates the instance.

  • Сведения о типе данных.Data type information. Схемы предоставляют сведения о типах атрибутов и элементов в экземпляре типа данных xml .Schemas provide information about the types of attributes and elements in the xml data type instance. Сведения о типе позволяют более точно определить семантику операций над значениями, содержащимися в экземпляре, по сравнению с нетипизированным xml.The type information provides more precise operational semantics to the values contained in the instance than is possible with untyped xml. Например, десятичные арифметические действия могут выполняться над десятичными значениями, но не могут выполняться над строками.For example, decimal arithmetic operations can be performed on a decimal value, but not on a string value. По этой причине типизированное XML-хранилище может занимать значительно меньше места, чем нетипизированное.Because of this, typed XML storage can be made significantly more compact than untyped XML.

Выбор между типизированным и нетипизированным XMLChoosing Typed or Untyped XML

В перечисленных ниже ситуациях следует использовать нетипизированный тип данных xml .Use untyped xml data type in the following situations:

  • Нет схемы XML-данных.You do not have a schema for your XML data.

  • Есть схемы, но нежелательно, чтобы сервер проверял данные.You have schemas, but you do not want the server to validate the data. Это может иметь место в тех случаях, когда приложение перед сохранением данных на сервере проверяет их на стороне клиента или если приложение временно сохраняет XML-данные, которые не соответствуют схеме, или использует компоненты схемы, не поддерживаемые сервером.This is sometimes the case when an application performs client-side validation before storing the data at the server, or temporarily stores XML data that is invalid according to the schema, or uses schema components that are not supported at the server.

В перечисленных ниже ситуациях следует использовать типизированный тип данных xml .Use typed xml data type in the following situations:

  • есть схемы XML-данных и требуется, чтобы сервер проверял соответствие данных этим схемам;You have schemas for your XML data and you want the server to validate your XML data according to the XML schemas.

  • требуется оптимизировать хранение данных и обработку запросов на основе информации о типах;You want to take advantage of storage and query optimizations based on type information.

  • требуется в более полной мере использовать информацию о типах при компиляции запросов.You want to take better advantage of type information during compilation of your queries.

В типизированных XML-столбцах, параметрах и переменных можно хранить XML-документы или содержимое.Typed XML columns, parameters, and variables can store XML documents or content. Во время объявления необходимо указать при помощи флага, что хранится: документ или содержимое.However, you have to specify with a flag whether you are storing a document or content at the time of declaration. Кроме того, необходимо предоставить системе коллекцию XML-схем.Additionally, you have to provide the collection of XML schemas. Укажите флаг DOCUMENT, если каждый экземпляр XML имеет ровно один элемент верхнего уровня.Specify DOCUMENT if each XML instance has exactly one top-level element. В противном случае укажите флаг CONTENT.Otherwise, use CONTENT. Компилятор запросов использует флаг DOCUMENT при проверке типов во время компиляции запросов для определения одинарных элементов верхнего уровня.The query compiler uses the DOCUMENT flag in type checks during query compilation to infer singleton top-level elements.

Создание типизированного XMLCreating Typed XML

Перед созданием типизированных переменных, параметров или столбцов xml сначала необходимо зарегистрировать коллекцию схем XML, как описано в разделе CREATE XML SCHEMA COLLECTION (Transact-SQL).Before you can create typed xml variables, parameters, or columns, you must first register the XML schema collection by using CREATE XML SCHEMA COLLECTION (Transact-SQL). Затем коллекцию схем XML можно связать с переменными, параметрами или столбцами типа xml.You can then associate the XML schema collection with variables, parameters, or columns of the xml data type.

В следующих примерах для указания имени коллекции XML-схем используется обозначение, состоящее из двух частей.In the following examples, a two-part naming convention is used for specifying the XML schema collection name. Первая часть — это имя схемы, вторая часть — имя коллекции XML-схем.The first part is the schema name, and the second part is the XML schema collection name.

Пример Связывание коллекции схем с переменными типа xmlExample: Associating a Schema Collection with an xml Type Variable

В приведенном ниже примере создается переменная типа xml, с которой затем связывается коллекция схем.The following example creates an xml type variable and associates a schema collection with it. Коллекция схем, указанная в примере, уже импортирована в базу данных AdventureWorks .The schema collection specified in the example is already imported in the AdventureWorks database.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);   

Пример Указание схемы для столбца типа xmlExample: Specifying a Schema for an xml Type Column

В приведенном ниже примере создается таблица со столбцом типа xml и указывается схема для этого столбца.The following example creates a table with an xml type column and specifies a schema for the column:

CREATE TABLE T1(  
 Col1 int,   
 Col2 xml (Production.ProductDescriptionSchemaCollection)) ;  

Пример Передача параметра типа xml в хранимую процедуруExample: Passing an xml Type Parameter to a Stored Procedure

В приведенном ниже примере параметр типа xml передается хранимой процедуре и указывается схема для переменной.The following example passes an xml type parameter to a stored procedure and specifies a schema for the variable:

CREATE PROCEDURE SampleProc   
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection)   
AS   
...  

Обратите внимание на следующие сведения о коллекции XML-схем.Note the following about the XML schema collection:

  • Коллекция схем XML доступна только в базе данных, в которой она была зарегистрирована с помощью создания коллекции схем XML.An XML schema collection is available only in the database in which it was registered by using Creating an XML Schema Collection.

  • При приведении строки к типизированному xml во время синтаксического анализа также выполняются проверка и типизация на основе пространств имен схем XML в указанной коллекции.If you cast from a string to a typed xml data type, the parsing also performs validation and typing, based on the XML schema namespaces in the collection specified.

  • Данные можно приводить из типизированного xml к нетипизированному xml и наоборот.You can cast from a typed xml data type to an untyped xml data type, and vice versa.

Дополнительные сведения о других способах формирования XML в SQL Server см. в разделе Создание экземпляров XML-данных.For more information about other ways to generate XML in SQL Server, see Create Instances of XML Data. После формирования документ XML можно связать с переменной типа xml или сохранить в столбце типа xml для дополнительной обработки.After XML is generated, it can be assigned either to an xml data type variable or stored in xml type columns for additional processing.

В иерархии типов данных данные xml отображаются ниже sql_variant и определенных пользователем типов, но выше всех встроенных типов.In the data type hierarchy, the xml data type appears below sql_variant and user-defined types, but above any of the built-in types.

Пример Указание аспектов для ограничения типизированного XML-столбцаExample: Specifying Facets to Constrain a Typed xml Column

На типизированные столбцы xml можно наложить ограничение, допускающее в них только отдельные элементы высшего уровня для каждого сохраненного в них экземпляра.For typed xml columns, you can constrain the column to allow only single, top-level elements for each instance stored in it. , для указания дополнительного аспекта DOCUMENT при создании таблицы, как показано в следующем примере:You do this by specifying the optional DOCUMENT facet when a table is created, as shown in the following example:

CREATE TABLE T(Col1 xml   
   (DOCUMENT Production.ProductDescriptionSchemaCollection));  
GO  
DROP TABLE T;  
GO  

По умолчанию экземпляры, хранимые в типизированном столбце xml , сохраняются в виде содержимого XML, а не документов XML.By default, instances stored in the typed xml column are stored as XML content and not as XML documents. Это позволяет использовать:This allows for the following:

  • ноль или несколько элементов верхнего уровня;Zero or many top-level elements

  • текстовые узлы в элементах верхнего уровня.Text nodes in top-level elements

Также можно явно указать данное поведение, добавив аспект CONTENT , как показано в следующем примере.You can also explicitly specify this behavior by adding CONTENT facet, as shown in the following example:

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection));  
GO -- Default  

Обратите внимание, что дополнительные аспекты DOCUMENT/CONTENT можно указать везде, где определен тип xml (типизированный XML).Note that you can specify the optional DOCUMENT/CONTENT facets anywhere you define xml type (typed xml). Например, при создании типизированной переменной xml аспект DOCUMENT/CONTENT можно добавить следующим образом:For example, when you create a typed xml variable, you can add the DOCUMENT/CONTENT facet, as shown in the following:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);  

Определение типа документа (DTD)Document Type Definition (DTD)

Типизацию столбцов, переменных и параметров типа xml можно выполнять с использованием схемы XML, но без использования DTD.The xml data type columns, variables, and parameters can be typed by using XML schema, but not by using DTD. Однако и с нетипизированными, и с типизированными XML-данными можно использовать встроенное определение DTD для указания значений по умолчанию и замены ссылок на сущности их расширенными формами.However, inline DTD can be used for both untyped and typed XML to supply default values and to replace entity references with their expanded form.

Можно преобразовывать определения DTD в документы схемы XML при помощи инструментов других компаний и загружать эти схемы XML в базу данных.You can convert DTDs to XML schema documents by using third-party tools, and load the XML schemas into the database.

Обновление типизированного XML с SQL Server 2005Upgrading Typed XML from SQL Server 2005

SQL Server 2008SQL Server 2008 содержит несколько расширений для поддержки схем XML, включая поддержку нестрогой проверки, улучшенную обработку данных экземпляров xs:date, xs:time и xs:dateTime . Кроме того, добавлена поддержка типов списков и объединений.made several extensions to the XML Schema support, including support for lax validation, improved handling of xs:date, xs:time and xs:dateTime instance data, and added support for list and union types. В большинстве случаев эти изменения не влияют на вопросы обновления.In most cases the changes do not affect the upgrade experience. Однако если в SQL Server 2005 (9.x)SQL Server 2005 (9.x) используется коллекция схем XML, допускающая значения типов xs:date, xs:timeили xs:dateTime (или любых их подтипов), то при присоединении базы данных SQL Server 2005 (9.x)SQL Server 2005 (9.x) к более поздней версии SQL ServerSQL Serverпотребуется выполнить указанные ниже шаги обновления.However if you used an XML Schema collection in SQL Server 2005 (9.x)SQL Server 2005 (9.x) that allowed values of type xs:date, xs:time, or xs:dateTime (or any subtype) then the following upgrade steps occur when you attach your SQL Server 2005 (9.x)SQL Server 2005 (9.x) database to a later version of SQL ServerSQL Server:

  1. Со всеми столбцами XML, введенными с коллекцией схем XML, в которой содержатся элементы или атрибуты, относящиеся к типам xs:anyType, xs:anySimpleType, xs:date или любым их подтипам, xs:time или любым его подтипам, xs:dateTime или любым его подтипам либо являющиеся объединениями или списками с элементами любых из перечисленных типов, происходит следующее:For every XML column, that is typed with an XML Schema Collection that contains elements or attributes that are typed as either xs:anyType, xs:anySimpleType, xs:date or any of its subtypes, xs:time or any subtype thereof, or xs:dateTime or any of its subtypes, or are union or list types containing any of these types the following occurs:

    1. отключаются все XML-индексы столбца;All XML indices on the column will be disabled.

    2. все значения SQL Server 2005 (9.x)SQL Server 2005 (9.x) продолжают отображаться в часовом поясе Z, поскольку они были нормализованы по часовому поясу Z;All SQL Server 2005 (9.x)SQL Server 2005 (9.x) values will continue to be represented in the Z timezone, because they have been normalized to the Z timezone.

    3. все значения xs:date или xs:dateTime , предшествующие дате "1 января 1 года", приведут к ошибке выполнения при перестроении индекса или применении инструкции XQuery или XML-DML к данным XML, содержащим такие значения;Any xs:date or xs:dateTime values that are smaller than January 1st of year 1 will lead to a runtime error when the index gets rebuild or an XQuery or XML-DML statements gets executed against the XML data type containing that value.

  2. все отрицательные значения года в аспектах xs:date или xs:dateTime или значения по умолчанию в коллекции схем XML автоматически обновляются до наименьшего значения, допустимого базовым типом xs:date или xs:dateTime (например, 0001-01-01T00:00:00.0000000Z для xs:dateTime).Any negative years in xs:date or xs:dateTime facets or default values in an XML Schema collection will automatically be updated to the smallest value allowed by the base xs:date or xs:dateTime type (e.g., 0001-01-01T00:00:00.0000000Z for xs:dateTime).

Обратите внимание, что при помощи простой SQL-инструкции SELECT можно получить весь тип XML-данных, даже если в нем содержатся отрицательные значения года.Note that you can still use a simple SQL select statement to retrieve the whole XML data type, even if it contains negative years. Отрицательные значения года рекомендуется заменить значением года в обновленном поддерживаемом диапазоне; кроме того, можно изменить тип элемента или атрибута на xs:string.It is recommended that you replace negative years with a year within the newly supported range or change the type of the element or attribute to xs:string.

См. также:See Also

Создание экземпляров XML-данных Create Instances of XML Data
Методы типа данных XML xml Data Type Methods
Язык модификации XML-данных (XML DML) XML Data Modification Language (XML DML)
Данные XML (SQL Server)XML Data (SQL Server)