Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Использование XML совместно с SQL.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1.39 Mб
Скачать

Поддержка xml Schema

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.

Рассмотрим команды создания и удаления схемы.