русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

SQL и XML


Дата добавления: 2013-12-24; просмотров: 1753; Нарушение авторских прав


В SQL есть возможности для работы с XML. Полноценная работа с XML должна включать следующее:

  1. Представление результатов запроса в виде XML-страниц.
  2. Запросы к XML-страницам.
  3. Запросы к БД из XML-страниц.

Рассмотрим первые две возможности на примере Microsoft SQL Server 2000. Результирующую выборку можно представлять в формате XML с помощью ключевых слов FOR XML оператора SELECT, а также сделать запрос из документа XML с помощью оператора OPENXML.

Оператор FOR XML предназначен для представления результирующего набора строк в виде XML-документа. Он пишется в конце запроса с различными вспомогательными ключевыми словами, с помощью которых описывается, в какой форме данные будут представлены. Ключевые слова описаны в Табл. 62.

Табл. 62. Ключевые слова в FOR XML

Слово Смысл Пример
FOR XML RAW Результат – страница из тегов <row>. Поля запроса представлены в виде атрибутов этих тегов. Лист. 87, Лист. 88
FOR XML AUTO Результат – страница из тегов <Имя_таблицы>. Поля запроса представлены в виде атрибутов этих тегов. Лист. 89, Лист. 90
FOR XML AUTO, ELEMENTS Результат – страница из тегов <Имя_таблицы>. Поля запроса представлены в виде тегов <имя_поля> Лист. 91, Лист. 92
FOR XML EXPLICIT Можно формировать практически любые документы; структура результирующего XML-документа определяется непосредственно в самом запросе. Запрос может принимать очень сложный вид. В данной книге не рассматривается

 

Лист. 87 Запрос с FOR XML RAW

select au_fname, au_lname, address

from authors

where au_fname like 'M%'

for xml raw

Лист. 88. Результат запроса с FOR XML RAW

<row au_fname="Marjorie" au_lname="Green" address="309 63rd St. #411" />



<row au_fname="Michael" au_lname="O'Leary" address="22 Cleveland Av. #14" />

...

Лист. 89 Запрос с FOR XML AUTO

select au_fname, au_lname, address

from authors

where au_fname like 'M%'

for xml auto

Лист. 90. Результат запроса с FOR XML AUTO

<authors au_fname="Marjorie" au_lname="Green" address="309 63rd St. #411" />

<authors au_fname="Michael" au_lname="O'Leary" address="22 Cleveland Av. #14" />

...

Лист. 91 Запрос с FOR XML AUTO, ELEMENTS

select au_fname, au_lname, address

from authors

where au_fname like 'M%'

for xml auto, elements

Лист. 92 Результат запроса с FOR XML AUTO, ELEMENTS

<authors>

<au_fname>Marjorie</au_fname>

<au_lname>Green</au_lname>

<address>309 63rd St. #411</address>

</authors>

<authors>

<au_fname>Michael</au_fname>

<au_lname>O'Leary</au_lname>

<address>22 Cleveland Av. #14</address>

</authors>

...

 

Функция OPENXML является аналогом OPENROWSET, OPENDATASOURCE и OPENQUERY, которые позволяют выполнять запросы из удаленных источников. Использование оператора select должно сопровождаться операторами exec sp_xml_preparedocument и exec sp_xml_removedocument, которые подготавливают и закрывают документ соответственно. Функция OPENXML используется в операторе FOR, где вместо таблицы приводится XML-документ с конструкцией Xpath, описывающей фрагмент этого документа (в квадратных скобках указывается условие отбора элементов). После функции OPENXML идет конструкция WITH, которая описывает, как элементы XML-документа преобразуются в поля таблицы. Пример XML-документа приведен на Лист. 93, запрос – на Лист. 94, результаты запроса – в Табл. 63.

Пусть у нас имеется такой XML-документ:

Лист. 93. Пример XML-страницы

<?xml version="1.0" encoding="windows-1251" ?>

<rsdn>

<forums date="09.01.03">

<forum name="WinAPI" totalposts="16688"

description="Системное программирование">

<moderators/>

<top-poster>Alex Fedotov</top-poster>

</forum>

<forum name="COM" totalposts="10116"

description="Компонентные технологии">

<moderators/>

<top-poster>Vi2</top-poster>

</forum>

<forum name="Delphi" totalposts="5001"

description="Delphi и Builder">

<moderators>

<moderator name="Sinclair"/>

<moderator name="Hacker_Delphi"/>

</moderators>

<top-poster>Sinclair</top-poster>

</forum>

<forum name="DB" totalposts="6606" description="Базы данных">

<moderators>

<moderator name="_MarlboroMan_"/>

</moderators>

<top-poster>Merle</top-poster>

</forum>

</forums>

</rsdn>

Лист. 94. SQL запрос с использованием XPath

exec sp_xml_preparedocument @hdoc out, @_xmlbody

 

select *

from openxml(@hdoc,'/rsdn/forums/forum')

with(totalposts varchar(100) 'attribute::totalposts')

 

exec sp_xml_removedocument @hdoc

Табл. 63. Результат SQL-запроса к XML-странице

totalposts

 

В XPath-выражениях можно использовать и сокращенную запись: «attribute::» можно заменить символом @; «self::node()» - на точку (.); «parent::node()» - на две точки (..). Другие сокращения можно найти в спецификации XPath.

Рассмотрим более сложный пример: выберем название форума, модератора и дату создания статистики для всех форумов, у которых больше 6000 сообщений (запрос см. на Лист. 95, часть запроса, использующую XPath, в сокращенной форме - Лист. 96).

Лист. 95 SQL запрос с использованием XPath и конструкции with

exec sp_xml_preparedocument @hdoc out, @_xmlbody

select

forum as 'Форум',

case when moders is null

then 'нет'

else moders

end as 'Модератор',

[date] as 'Дата создания'

from openxml(@hdoc,'/rsdn/forums/forum[attribute::totalposts > "6000"]') with

(

moders varchar(50) 'moderators/moderator/attribute::name',

forum varchar(50) 'attribute::name',

[date] varchar(50) 'parent::node()/attribute::date'

)

exec sp_xml_removedocument @hdoc

Лист. 96. SQL-запрос с использованием сокращенной записи XPath

openxml(@hdoc,'/rsdn/forums/forum[@totalposts > "6000"]') with

(

moders varchar(50) 'moderators/moderator/@name',

forum varchar(50) '@name',

[date] varchar(50) '../@date'

)

Подробнее о XML и SQL см. [9].

Д/З 14. Для примера БД из Д/З 4 напишите запрос с представлением результатов в XML (вариант представления с полями в качестве элементов). Для примера XML-документа из Д/З 13 напишите запрос на языке SQL.

Вопросы для самопроверки:

1. Можно ли в XML создавать пользовательские теги?

2. Чем реляционные данные отличаются от XML?

3. Есть ли в XQuery оператор select?

4. Какой в XQuery аналог оператора where?

5. В каком языке есть конструкция FLWR?



<== предыдущая лекция | следующая лекция ==>
Язык запросов XQuery | ПРОСТРАНСТВЕННЫЕ БАЗЫ ДАННЫХ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.331 сек.