Типизированный и нетипизированный XML

Можно создать переменные, параметры и столбцы типа xml. При необходимости можно связать коллекцию XML-схем с переменной, параметром или xml-столбцом. В данном случае экземпляр xml-данных называется типизированным. Иначе экземпляр XML-данных называется нетипизированным.

XML-схема предоставляет следующее.

  • Ограничения проверки
    SQL Server проверяет типизированный XML при каждом присваивании или изменении.
  • Сведения о типах данных для данных экземпляра
    Схемы предоставляют сведения о типах атрибутов и элементов в экземпляре xml-данных. Сведения о типах позволяют более точно определить смысл операций над значениями. Например десятичные арифметические действия могут выполняться над десятичными значениями, но не могут выполняться над строками. По этой причине типизированное XML-хранилище может занимать значительно меньше места, чем нетипизированное.

Перед созданием типизированных xml переменных, параметров или столбцов сначала необходимо зарегистрировать коллекцию XML-схем с помощью Создания коллекции XML-схем. Затем можно будет связать коллекцию XML-схем с переменными, параметрами или столбцами xml-данных. Следующие примеры показывают, как это делается.

Примеры

В следующих примерах для указания имени коллекции XML-схем используется обозначение, состоящее из двух частей. Первая часть — это имя схемы AdventureWorks, вторая часть — это имя коллекции XML-схем.

A. Создание переменной типа XML и соединение с ней коллекции схем

Следующий пример создает xml-переменную и связывает с ней коллекцию схем. Коллекция схем, указанная в примере, уже импортирована в базу данных AdventureWorks.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection) 

Б. Создание таблицы с XML-столбцом и указание схемы для столбца

Следующий пример создает таблицу с xml-столбцом и указывает схему для столбца:

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

В. Передача XML-параметра хранимой процедуре

Следующий пример передает xml-параметр хранимой процедуре и указывает схему для переменной.

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

Обратите внимание на следующие сведения о коллекции XML-схем.

  • Коллекция XML-схем доступна только в базе данных, в которой она была зарегистрирована с помощью Создания коллекции XML-схем.
  • При приведении данных из строки к типизированным xml-данным, анализ также выполняет проверку и типизацию на основании пространств имен XML-схем в указанной коллекции.
  • Данные можно приводить из типизированных xml-данных в нетипизированные xml-данные и наоборот.

Дополнительные сведения о других способах формирования XML в SQL Server см. в разделе Формирование XML-экземпляров. После того как XML сформирован, он может быть связан с xml-переменной или сохранен в xml-столбце для дополнительной обработки.

В иерархии типов данных xml-данные находятся под sql_variant и определяемыми пользователем типами, но выше всех встроенных типов.

Г. Указание аспектов для ограничения типизированного XML-столбца

Для типизированных xml-столбцов можно ограничить столбец только до единичных высокоуровневых элементов для каждого экземпляра, хранимого в нем. , для указания дополнительного аспекта DOCUMENT при создании таблицы, как показано в следующем примере:

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

По умолчанию экземпляры, хранимые в типизированном xml-столбце, хранятся как XML-содержимое, а не как XML-документы. Это позволяет использовать:

  • ноль или несколько элементов верхнего уровня;
  • текстовые узлы в элементах верхнего уровня.

Также можно явно указать данное поведение, добавив аспект CONTENT, как показано в следующем примере.

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

Обратите внимание, что можно указать дополнительные аспекты DOCUMENT/CONTENT там, где определен xml-тип (типизированный XML). Например при создании типизированной xml-переменной можно добавить аспект DOCUMENT/CONTENT следующим образом:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection)

См. также

Основные понятия

Формирование XML-экземпляров
Язык модификации XML-данных (XML DML)
Тип данных xml
Образцы приложений XML

Другие ресурсы

Методы типа данных XML

Справка и поддержка

Получение помощи по SQL Server 2005