XML-документ – вещь чрезвычайно гибкая. Он может принимать какую угодно структуру, главное, чтобы он удовлетворял тем синтаксическим требованиям, которые излагаются в спецификации XML 1.0. С одной стороны это очень хорошо, однако конкретное приложение, как правило, хочет работать не с абстрактной структурой, а со вполне определенной. Для описания структуры или схемы документа и проверки документа на соответствие этой схеме консорциумом w3c был разработан стандарт XML Schema Definiton Language. Подробное описание его выходит за рамки статьи [5].
В SQL Server 2005 входит поддержка данного стандарта, правда в весьма ограниченном виде. Основными целями этой поддержки разработчики считают автоматическую проверку документа на допустимость и типизацию документа. Фактически первичной целью является типизация документа, так как автоматическая проверка на допустимость проводится именно на основе типов. Другой эффект от типизации документа заключается в оптимизации хранения документа и оптимизации запросов XQuery. Оптимизация заключается в том, что для типизированных документов система хранит значения соответствующих типов для значений узлов, тогда как для не типизированного документа все текстовые узлы и значения атрибутов хранятся в виде строк. Такой подход уменьшает размер сериализованного представления XML-документа и увеличивает скорость выполнения запросов.
|
|
Схема XML-документа хранится в метаданных базы, ее имя (т.е. целевое пространство имен) должно быть уникально не в пределах схемы как почти все объекты теперь, а в пределах всей базы.
Сервер хранит схемы данных не в том первоначальном текстовом виде, в котором они создавались, а в разобранном и приведенном к реляционной структуре. Разобранная схема доступна с помощью нескольких системных представлений. Вот основные из них:
- sys.xml_attributes – содержит все атрибуты всех схем данной базы;
- sys.xml_elements – содержит все элементы всех схем данной базы;
- sys.xml_facets – содержит все фасеты всех схем данной базы;
- sys.xml_components – содержит все компоненты (т.е. и атрибуты, элементы, типы и проч.) всех схем данной базы;
- sys.xml_namespaces – список всех целевых пространств имен (т.е. названий схем) всех схем данной базы.
Как вы сами понимаете, собирать из всего этого схему вручную довольно сложно, поэтому существует встроенная функция xml_schema_namespace, которая по имени схемы воссоздает ее текстовое представление. Надо сказать, что полученная таким образом схема данных не совсем точно будет соответствовать первоначальной, так как в метаданных не хранятся комментарии, аннотации, префиксы пространств имен и пр. Если вам необходимо работать с оригинальной версией схемы, рекомендуется сохранять ее в отдельной таблице.
|
|
Если сейчас выбрать текстовое представление схемы my-first-schema с помощью функции xml_schema_namespace, вы увидите некоторые различия с исходной схемой:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="my-first-schema" xmlns:t="my-first-schema" elementFormDefault="qualified"> <xsd:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="urn:schemas-microsoft-com:sql:database" /> <xsd:element name="root"> <xsd:complexType> <xsd:complexContent> <xsd:restriction base="xsd:anyType"> <xsd:sequence> <xsd:element name="a" type="xsd:integer" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType> </xsd:element></xsd:schema> |
Добавлено пространство имен urn:schemas-microsoft-com:sql:database, добавлена секция complexContext.
Рассмотрим команды создания и удаления схемы.