Типизированный и нетипизированный 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