Главная » Microsoft SQL Server, Базы данных » Декомпозиция данных XML в SQL Server

0

Одним из вариантов работы с данными XML является их декомпозиция с последующим сохранением элементов в реляционных таблицах. В настоящий момент SQL Server 2005 позволяет создавать и читать данные XML с помощью инструкции SELECT.

Чтение данных XML в SQL Server

Приложения читают данные XML с помощью процедуры синтаксического разбора, которая, в свою очередь, представляет данные XML объектной модели документа (DOM). Этот установленный консорциумом W3C стандарт является объектно-ориентированным представлением документа XML. Сам документ XML и каждый элемент, атрибут или текст в нем становится объектом DOM. Объектная модель документа является очень мощной и может использоваться в объектно-ориентированном программном коде для создания, чтения и модификации документа XML.

SQL Server использует процедуру разборки XML и объектную модель документа от Microsoft для чтения документа XML в два этапа.

1.              Хранимая процедура sp_xml_preparedocument читает документ XML с помощью алгоритма синтаксического разбора MSXML, после чего создает внутренние объекты DOM в SQL Server. Объекты DOM идентифицируются целыми числами, возвращаемыми этой хранимой процедурой.

2.              В инструкции SQL DML в качестве источника данных используется функция OpenXML, которая идентифицирует объект DOM с помощью целого числа, возвращенного хранимой процедурой sp_xml_preparedocument.

В приведенном ниже примере мы вначале присваиваем данные XML локальной переменной @XML. После этого SQL Server читает данные в SQL, используя результаты предыдущих двух этапов.

1.              В результате выполнения хранимой процедуры sp_xml_preparedocument создаются объекты DOM.

2.              Инструкция SELECT обращается к системной функции OpenXML как к источнику данных. Эта функция принимает три параметра.

•    Целочисленный идентификатор внутреннего объекта DOM, который хранится в переменной @iDOM.

•    Шаблон документа XML rowpattern, который функция OpenXML использует для идентификации структуры элементов данных XML. В данном случае значением параметра rowpattern является ‘ /Tours/Tour/Event1.

•                Флаг конфигурации XML, определяющий, как элементы и атрибуты будут интерпретироваться функцией XML (табл. 31.1).

3.              Параметр WITH приводит в действие механизм проверки соответствия столбцов с возвращаемом функцией OpenXML в результирующем наборе данных. Столбец определяется именем XML, типом данных и необязательным параметром местонахождением элемента.

Таблица 31.1. Флаги конфигурации функции орепхмь

Значение флага

Режим работы

Описание

0

По умолчанию

По умолчанию ищет атрибуты

1

Основанный на атрибутах

Функция ищет атрибуты

2

Основанный на элементах

Функция ищет элементы

8

Комбинированный

Функция ищет атрибуты, а затем элементы

Пакет завершается вызовом хранимой процедуры sp_removedocument, которая удаляет объектную модель документа из памяти:

DECLARE

@iDOM int,

@XML VarChar(8000)

Set @XML = ‘

<?xml version="l.0" encoding="UTF-8"?>

<Tours>

<Tour Name="Amazon Trek">

<Event Code=1101-003 11 DateBegin="2001-03-16T00:00:00"/>

<Event Code=1101-015" DateBegin="2001-ll-05T00 : 00 : 00"/>

</Tour>

<Tour Name="Appalachian Trail">

<Event Code="01-005" DateBegin="2001-06-25T00:00:00"/>

<Event Code="01-008" DateBegin="2001-07-14T00:00:00"/>

<Event Code="01-010" DateBegin="2001-08-14T00:00:00"/>

</Tour>

<Tour Name="Bahamas Dive">

<Event Code="01-002" DateBegin="2001-05-09T00:00:00"/>

<Event Code="01-006" DateBegin="2001-07-03T00:00:00"/>

<Event Code="01-009" DateBegin="2001-08-12T00:00:00"/>

</Tour>

<Tour Name="Gauley River Rafting">

<Event Code="01-012" DateBegin="2001-09-14T00:00:00"/>

<Event Code="01-013" DateBegin="2001-09-15T00:00:00"/>

</Tour>

<Tour Name="Outer Banks Lighthouses">

<Event Code="01-001" DateBegin="2001-02-02T00:00:00"/>

<Event Code="01-004" DateBegin="2001-06-06T00:00:00"/>

<Event Code="01-007" DateBegin="2001-07-03T00:00:00"/>

<Event Code="01-011" DateBegin="2001-08-17T00:00:00"/>

<Event Code="01-014" DateBegin="2001-10-03T00:00:00"/>

<Event Code="01-016" DateBegin="2001-ll-16T00:00:00"/>

</Tour>

</Tours>1

– Генерирование внутренней объектной модели документа EXEC sp_xml_preparedocument @iDOM OUTPUT, @XML

– Поставщик OPENXML SELECT *

FROM OPENXML (@iDOM, ‘/Tours/Tour/Event8) WITH ([Name] VARCHAR(25) ‘../@Name’,

Code VARCHAR(10),

DateBegin DATETIME )

EXEC sp_xml_removedocument @iDOM

Будут получены следующие результаты (сокращенно): Name   Code     DateBegin

Amazon Trek  01-003

Amazon Trek  01-015

Appalachian Trail        01-005

Appalachian Trail        01-008

2001-03-16 00:00:00.000 2001-11-05 00:00:00.000 2001-06-25 00:00:00.000 2001-07-14 00:00:00.000

Создание документов XML в SQL Server 2005

В SQL Server 2005 можно создавать документы XML непосредственно в запросах. Необязательный суффикс FOR XML инструкции SELECT дает указание серверу форматировать результат запроса как документ XML, а не стандартный набор данных SQL.

Вывод XML направляется в один столбец. По умолчанию параметр maximum На заметку size per column анализатора запросов установлен в слишком малое зна- ^ чение, чтобы можно было просмотреть результирующий набор данных в формате XML. Во вкладке Results диалогового окна Options этот параметр можно установить в значение 8192. Открывается диалоговое окно параметров с помощью пункта меню Tools^Options.

Суффикс FOR XML позволяет сформировать данные XML, но не сам раздел объявлений корневого элемента root. Чтобы получить хорошо сформированный документ XML, приложению нужно “облачить” данные, полученные от SQL Server, в корректную оболочку.

Режим FOR XML RAW

Суффикс FOR XML имеет три режима: RAW, AUTO и ELEMENTS. Режим FOR XML RAW сбрасывает строки результирующего набора данных в документ XML, не генерируя при этом какую-либо иерархическую структуру. Каждая строка SQL становится элементом raw документа XML:

SELECT Tour.Name, Event.Code, Event.DateBegin FROM Tour JOIN Event

ON Tour.TourlD = Event.TourlD FOR XML RAW

Будет получен следующий результат (сокращенно):

<row Name="Amazon Trek" Code="01-0 03"

DateBegin="2 001-03-16T00:00:00"/>

<row Name="Amazon Trek" Code="01-015"

DateBegin="2001-11-05T00:00:00"/>

<row Name= "Appalachian Trail" Code=1101-0 05"

DateBegin="2 001-06-25T00:00:00"/>

<row Name="Appalachian Trail" Code="01-008"

DateBegin="2 001-07-14T00:00:00"/>

<row Name="Appalachian Trail" Code="01-010" DateBegin="2001-08-14T0 0:00:00"/>

Режим FOR XML AUTO

Режим AUTO определяет все иерархии в структуре данных и генерирует более адекватный документ XML. Пример документа XML, приведенный в начале настоящей главы, создан с помощью следующего запроса:

SELECT Tour.Name, Event.Code, Event.DateBegin FROM Tour JOIN Event

ON Tour.TourlD = Event.TourlD FOR XML AUTO

Параметр ELEMENTS указывает режиму FOR XML AUTO генерировать элементы вместо атрибутов. Следующий вариант документа XML использует параметр ELEMENTS для генерирования исключительно элементов:

SELECT Tour.Name, Event.Code, Event.DateBegin FROM Tour JOIN Event

ON Tour.TourlD = Event.TourlD FOR XML AUTO, ELEMENTS

Будет получен следующий результат (сокращенно):

<Tour>

<Name>Amazon Trek</Name>

<Event>

<Code>01-003</Code>

<DateBegin>2001-03-16T00:00:00</DateBegin>

</Event>

<Event>

<Code>01-015</Code>

<DateBegin>2001-ll-05T00:00:00</DateBegin>

</Event>

</Tour>

<Tour>

<Name>Appalachian Trail</Name>

<Event>

<Code>01-005</Code>

<DateBegin>2001-06-25T00:00:00</DateBegin>

</Event>

<Event>

<Code>01-008</Code>

<DateBegin>2001-07-14T00:00:00</DateBegin>

</Event>

<Event>

< Code >01-010</Code >

<DateBegin>2001-08-14T00:00:00</DateBegin>

</Event>

</Tour>

Дополнительная Служба интеграции SQL Server 2005 также поддерживает импорт и экспорт информация данных XML. Более подробно эту службу мы рассмотрим в главе 42.

Резюме

Согласитесь вы с идеей хранения XML в базе данных или нет, XML прочно вошел в нашу жизнь, и знание этой технологии критично для любого профессионала баз данных. Архитектура, ориентированная на службы, частично базируется на концепции самоописательных документов XML. XQuery рассматривается как ключевая технология взаимодействия с данными XML. XML перестал быть словесным заменителем текстовых данных с разделителями — он стал обобщенным языком обмена данными.

В следующей главе мы продолжим дискуссию об использовании XML в SQL Server и рассмотрим Web-службы и оболочки SOAP как метод транспортировки данных XML.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии