Декомпозиція даних XML в SQL Server

Одним з варіантів роботи з даними 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 (табл 311)

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

Таблиця 311 Прапори конфігурації функції орепхмь

Значення прапора

Режим роботи

Опис

0

За замовчуванням

За замовчуванням шукає атрибути

1

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

Функція шукає атрибути

2

Заснований на елементах

Функція шукає елементи

8

Комбінований

Функція шукає атрибути, а потім елементи

Пакет завершується викликом процедури, що зберігається sp_removedocument, яка видаляє обєктну модель документа з памяті:

DECLARE

@iDOM int,

@XML VarChar(8000)

Set @XML =

&lt?xml version=&quotl0&quot encoding=&quotUTF-8&quot?&gt

&ltTours&gt

&ltTour Name=&quotAmazon Trek&quot&gt

&ltEvent Code=1101-003 11 DateBegin=&quot2001-03-16T00:00:00&quot/&gt

&ltEvent Code=1101-015&quot DateBegin=&quot2001-ll-05T00 : 00 : 00&quot/&gt

&lt/Tour&gt

&ltTour Name=&quotAppalachian Trail&quot&gt

&ltEvent Code=&quot01-005&quot DateBegin=&quot2001-06-25T00:00:00&quot/&gt

&ltEvent Code=&quot01-008&quot DateBegin=&quot2001-07-14T00:00:00&quot/&gt

&ltEvent Code=&quot01-010&quot DateBegin=&quot2001-08-14T00:00:00&quot/&gt

&lt/Tour&gt

&ltTour Name=&quotBahamas Dive&quot&gt

&ltEvent Code=&quot01-002&quot DateBegin=&quot2001-05-09T00:00:00&quot/&gt

&ltEvent Code=&quot01-006&quot DateBegin=&quot2001-07-03T00:00:00&quot/&gt

&ltEvent Code=&quot01-009&quot DateBegin=&quot2001-08-12T00:00:00&quot/&gt

&lt/Tour&gt

&ltTour Name=&quotGauley River Rafting&quot&gt

&ltEvent Code=&quot01-012&quot DateBegin=&quot2001-09-14T00:00:00&quot/&gt

&ltEvent Code=&quot01-013&quot DateBegin=&quot2001-09-15T00:00:00&quot/&gt

&lt/Tour&gt

&ltTour Name=&quotOuter Banks Lighthouses&quot&gt

&ltEvent Code=&quot01-001&quot DateBegin=&quot2001-02-02T00:00:00&quot/&gt

&ltEvent Code=&quot01-004&quot DateBegin=&quot2001-06-06T00:00:00&quot/&gt

&ltEvent Code=&quot01-007&quot DateBegin=&quot2001-07-03T00:00:00&quot/&gt

&ltEvent Code=&quot01-011&quot DateBegin=&quot2001-08-17T00:00:00&quot/&gt

&ltEvent Code=&quot01-014&quot DateBegin=&quot2001-10-03T00:00:00&quot/&gt

&ltEvent Code=&quot01-016&quot DateBegin=&quot2001-ll-16T00:00:00&quot/&gt

&lt/Tour&gt

&lt/Tours&gt1

– Генерування внутрішньої обєктної моделі документа 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:00000 2001-11-05 00:00:00000 2001-06-25 00:00:00000 2001-07-14 00:00:00000

Створення документів 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 TourName, EventCode, EventDateBegin FROM Tour JOIN Event

ON TourTourlD = EventTourlD FOR XML RAW

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

&ltrow Name=&quotAmazon Trek&quot Code=&quot01-0 03&quot

DateBegin=&quot2 001-03-16T00:00:00&quot/&gt

&ltrow Name=&quotAmazon Trek&quot Code=&quot01-015&quot

DateBegin=&quot2001-11-05T00:00:00&quot/&gt

&ltrow Name= &quotAppalachian Trail&quot Code=1101-0 05&quot

DateBegin=&quot2 001-06-25T00:00:00&quot/&gt

&ltrow Name=&quotAppalachian Trail&quot Code=&quot01-008&quot

DateBegin=&quot2 001-07-14T00:00:00&quot/&gt

&ltrow Name=&quotAppalachian Trail&quot Code=&quot01-010&quot DateBegin=&quot2001-08-14T0 0:00:00&quot/&gt

Режим FOR XML AUTO

Режим AUTO визначає всі ієрархії в структурі даних і генерує більш адекватний документ XML Приклад документа XML, наведений на початку цієї глави, створений за допомогою наступного запиту:

SELECT TourName, EventCode, EventDateBegin FROM Tour JOIN Event

ON TourTourlD = EventTourlD FOR XML AUTO

Параметр ELEMENTS вказує режиму FOR XML AUTO генерувати елементи замість атрибутів Наступний варіант документа XML використовує параметр ELEMENTS для генерування виключно елементів:

SELECT TourName, EventCode, EventDateBegin FROM Tour JOIN Event

ON TourTourlD = EventTourlD FOR XML AUTO, ELEMENTS

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

&ltTour&gt

&ltName&gtAmazon Trek&lt/Name&gt

&ltEvent&gt

&ltCode&gt01-003&lt/Code&gt

&ltDateBegin&gt2001-03-16T00:00:00&lt/DateBegin&gt

&lt/Event&gt

&ltEvent&gt

&ltCode&gt01-015&lt/Code&gt

&ltDateBegin&gt2001-ll-05T00:00:00&lt/DateBegin&gt

&lt/Event&gt

&lt/Tour&gt

&ltTour&gt

&ltName&gtAppalachian Trail&lt/Name&gt

&ltEvent&gt

&ltCode&gt01-005&lt/Code&gt

&ltDateBegin&gt2001-06-25T00:00:00&lt/DateBegin&gt

&lt/Event&gt

&ltEvent&gt

&ltCode&gt01-008&lt/Code&gt

&ltDateBegin&gt2001-07-14T00:00:00&lt/DateBegin&gt

&lt/Event&gt

&ltEvent&gt

&lt Code &gt01-010&lt/Code &gt

&ltDateBegin&gt2001-08-14T00:00:00&lt/DateBegin&gt

&lt/Event&gt

&lt/Tour&gt

Додаткова Служба інтеграції SQL Server 2005 також підтримує імпорт і експорт інформація даних XML Більш докладно цю службу ми розглянемо в главі 42

Резюме

Погодьтеся ви з ідеєю зберігання XML в базі даних чи ні, XML міцно увійшов у наше життя, і знання цієї технології критично для будь-якого професіонала баз даних Архітектура, орієнтована на служби, частково базується на концепції самоопісательних документів XML XQuery розглядається як ключова технологія взаємодії з даними XML XML перестав бути словесним замінником текстових даних із роздільниками – Він став узагальненим мовою обміну даними

У наступному розділі ми продовжимо дискусію про використання XML в SQL Server і розглянемо Web-служби і оболонки SOAP як метод транспортування даних XML

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*