XML в MS SQL Server 2000 и технологиях доступа к данным

Содержание

Слайд 2

Зачем XML нужен в СУБД? Передача запросов и результатов через Интернет

Зачем XML нужен в СУБД?

Передача запросов и результатов через Интернет
XML прозрачно

проходит сквозь сетевые экраны
В отличие, скажем, от СОМ-объектов
Взаимодействие в гетерогенных средах
XML сейчас понимают все независимо от платформы и ОС
Интеграция не только с другими СУБД, но и с серверами B2B, электронной коммерции и пр.
Не требует установки дополнительного ПО на клиента
Клиент может быть сколь угодно тонким
Опять же потому, что средства его поддержки присутствуют изначально
Слайд 3

Немного истории ADO 2.1 (1999 г.) Сохранить рез-ты запроса (ADODB.Recordset) в

Немного истории

ADO 2.1 (1999 г.)
Сохранить рез-ты запроса (ADODB.Recordset) в XML-формате
До этого

в ADO 2.0 поддерживался только ADTG
Частный бинарный формат, использовавшийся при передаче recordset’a в удаленном доступе с помощью RDS
На выходе – нормальный XML со своей схемой
Можно делать все, что и с обычным XML-документом
Открыть при пом. DOM, запросить при пом. XPath, преобразовать при пом. XSL и т.д.

Посмотреть код

Слайд 4

ADO 2.5 Промежуточное сохранение в файл – лишние затраты Появилась возможность

ADO 2.5
Промежуточное сохранение в файл – лишние затраты
Появилась возможность напрямую

в программе передавать полученный поток (stream) XML любому объекту, подд. IStream
Возм. и обр.ситуация - чтение XML из потока и его запись в recordset
За счет введения нового сервисного провайдера
Microsoft OLE DB Persistence Provider ("Provider=MSPersist")

Немного истории

Посмотреть код

Слайд 5

Появление XML в SQL Server Рассмотренные ранее подходы имеют две особенности

Появление XML в SQL Server

Рассмотренные ранее подходы имеют две особенности
Преобразование

в XML происходит на клиенте
XML получается по предопределенной схеме
Требуется дополнительное XSL-преобразование
В SQL Server 2000 появилась возможность получения XML на стороне сервера
SELECT ... FOR XML ...

Посмотреть код

Слайд 6

Клиент Сервер SQLOLEDB FOR XML sqlxmlx.dll XML-документ XML Поэтому все XPath-

Клиент

Сервер

SQLOLEDB

FOR XML

sqlxmlx.dll

XML-документ

XML

Поэтому все XPath- и updategrams-преобразования вып-ся на стороне клиента

SQLOLEDB

XML-документ

XML

SQLXMLOLEDB

FOR XML

sqlxml3.dll

Документ

получается на сервере, но ввиду отс-я встроенного типа XML он может только отдать его клиенту
Его нельзя использовать как результат подзапросов, хранимых функций и всего остального, что предполагает дальнейшую обработку на SQL Server

SELECT ... FOR XML

Посмотреть код

Слайд 7

Поддержка XML в SQL Server Впервые появилась в составе SQL Server

Поддержка XML в SQL Server

Впервые появилась в составе SQL Server

2000
Август 2000 г.
Дополняется и расширяется SQLXML веб-релизами
Выкладываются на сайт SQL Server
Доступны для бесплатного скачивания и установки зарегистрированными пользователями
Текущий на данный момент – SQLXML 3.0
В составе Microsoft SQL Server 2000 Web Services Toolkit
http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/872/msdncompositedoc.xml&frame=true
Слайд 8

SQLXML Managed Classes для .NET XmlReader БД SqlCommand FOR XML XML Посмотреть код

SQLXML Managed Classes для .NET

XmlReader

БД

SqlCommand

FOR XML

XML

Посмотреть код

Слайд 9

FOR XML на клиенте Клиент Сервер XML SQLXMLOLEDB FOR XML SQLOLEDB

FOR XML на клиенте

Клиент

Сервер

XML

SQLXMLOLEDB

FOR XML

SQLOLEDB

Data Provider = SQLOLEDB

Команда

Rowset

Rowset

Какой-нибудь другой провайдер

Команда

Rowset

В перспективе

SQLXMLOLEDB можно использовать с любыми источниками данных
Provider= SQLXMLOLEDB;DataProvider=…
Однако в настоящее время в качестве провайдера данных поддерживается только SQL Server

FOR XML

Rowset

Посмотреть код

Слайд 10

Другие способы получения XML на клиенте. ADO.Net Типовой сценарий Получить внутри

Другие способы получения XML на клиенте. ADO.Net

Типовой сценарий
Получить внутри DataSet таблицы

как результаты запросов к источнику данных
Возможно, к разным
Связать их между собой на основе объектов DataRelation
Создать XML-представление DataSet’a при помощи XmlDataDocument

Посмотреть код

Слайд 11

Класс XmlDataDocument Производный от DOMовского XmlDocument Позволяет выполнять над DataSet все

Класс XmlDataDocument

Производный от DOMовского XmlDocument
Позволяет выполнять над DataSet все стандартные

XML-операции
XPath-запросы, XSL-преобразования
в част., данные источника можно модифицировать не только напрямую через DataSet
ds.Tables[<Имя или номер таблицы в коллекции>].Rows[<Номер записи в коллекции>][<Имя или номер поля в коллекции>] = …
Но и через его XML-представление
Задавая координаты узлов в терминах XPath
Эти изменения отражаются в DataSet’е, над которым построен данный XmlDataDocument
А далее транслируются в источник
Если у DataAdapter’ов таблиц определены UpdateCommand’ы

Посмотреть код

Слайд 12

Обратное тоже верно В DataSet можно загрузить XML-документ, который затем читать

Обратное тоже верно

В DataSet можно загрузить XML-документ, который затем читать и

модифицировать реляционными операциями
На основе XSD-схемы ADO.Net создает DataSet эквивалентной реляционной структуры
Можно обращаться и модифицировать XML-документ, как если бы он был совокупностью связанных таблиц.

Посмотреть код

Слайд 13

Прямые XPath-запросы к объектам SQL Server Рассмотренные возможности ADO.Net по своей

Прямые XPath-запросы к объектам SQL Server

Рассмотренные возможности ADO.Net по своей

сути результат эволюции простого сохранения ADODB.Recordset в XML
Вернемся к серверной стороне вопроса
SQL Server понимает и отрабатывает не только SQL, но и XPath
На сервере XPath превращается в SELECT ... FOR XML
Можно посмотреть в Profiler
Ограничения
Пользуется схемой по умолчанию: строки – элементы, столбцы – атрибуты
Результат возвращается в виде строкового стрима в силу уже упоминавшегося отс-я типа XML

Посмотреть код

Слайд 14

Аннотированные схемы Позволяют снять оба ограничения Задают XSD-описание реляционной информации С

Аннотированные схемы

Позволяют снять оба ограничения
Задают XSD-описание реляционной информации
С пом. аннотированных

схем XPath-запросы к SQL Server возвращают нормальный XML
Аннотации привязывают реляционку к схеме

Сопоставляет элемент таблице БД

Указывает на поле таблицы

Задает набор полей, однозначно определяющих запись

Определяет связь «первичный/внешний ключ» между таблицами в БД
...
Определены в urn:schemas-microsoft-com:mapping-schema

XSD-схема

Аннотированная схема

Еще один пример

Слайд 15

XPath-запросы через аннотированные схемы Таким образом, аннотированные схемы – это инструмент

XPath-запросы через аннотированные схемы

Таким образом, аннотированные схемы – это инструмент для

адресации XPath-запросов к SQL Server
Аннотации позволяют задать соответствия между реляционной и XML-схемами
Через призму аннотированной схемы реляционная информация видится XPath-запросу, как обычный XML-документ

Посмотреть код

Слайд 16

Шаблоны Аналог хранимых процедур SQL Server с той лишь разницей, что

Шаблоны

Аналог хранимых процедур SQL Server с той лишь разницей, что в

них могут сочетаться SQL- и XPath-запросы

sql:xsl='XSL FileName' >

..
.....n


sql statement(s)


XPath query


Возможность преобразования XML-результатов запроса SQL

Возможность передачи параметров SQL-запросу и установки их значений по умолчанию

SQL-запросы (включая вызовы процедур)

Наряду с SQL поддерживаются XPath-запросы

Посмотреть живой шаблон

Посмотреть пример вызова

Слайд 17

Шаблоны Аннотированные схемы, на которые ссылается , могут находиться в теле

Шаблоны

Аннотированные схемы, на которые ссылается , могут находиться в теле

шаблона
Шаблоны – это не только хранимые процедуры
Шаблон можно приготовить в ходе выполнения и подать как Stream
Частный случай – как строку

Посмотреть код

Посмотреть код

Посмотреть шаблон

Слайд 18

Кэширование шаблонов Шаблоны остаются в памяти после первого выполнения Что улучшает

Кэширование шаблонов

Шаблоны остаются в памяти после первого выполнения
Что улучшает производ-ть при

интенсивной работе с шаблонами
Емкость кэша задается здесь
HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML3\TemplateCacheSize
В штуках шаблонов
По умолч. 31
Отмена кэширования
Virtual Directory Properties -> Advanced -> Disable Caching of template
Аналогично настраивается кэш для аннотированных схем
HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\SQLXML3\SchemaCacheSize
Слайд 19

XML-обновление на сервере До сих пор мы только читали данные в

XML-обновление на сервере

До сих пор мы только читали данные в виде

XML
Возможность обновления косвенно затрагивалась 2 раза
Когда разбирали квантово-волновой ☺ дуализм ADO.Net (XmlDataDocument)
Это неинтересно, потому что происходит через клиента
И шаблоны, на с.д., если прописать INSERT/UPDATE/DELETE в
Это тоже неинтересно, п.ч. по сути делается ср-ми SQL, а не XML

Код

Шаблон

Слайд 20

XML-запросы на обновление UpdateGrams По своей природе – шаблон Содержит updgr-аннотации,

XML-запросы на обновление

UpdateGrams
По своей природе – шаблон
Содержит updgr-аннотации, при помощи которых

описываются модификации в БД











Все удаления / вставки внутри одного sync происходят в одной транзакции

Аннотированная схема. Определяет связь между SQL- и XML-схемами

Посмотреть живую Updategrams

Слайд 21

XML BulkLoad Не грузит весь XML целиком в память Считывает поэлементно,

XML BulkLoad

Не грузит весь XML целиком в память
Считывает поэлементно, определяя область

действия элемента по аннотированной схеме
Как и в случае UpdateGrams, возможно наполнение связанных таблиц

Документ

Схема

Загрузка

Слайд 22

А как насчет доступа по HTTP? В самом начале я называл

А как насчет доступа по HTTP?

В самом начале я называл его

одним из трех ключевых обоснований поддержки XML в СУБД
Однако до сих пор в примерах разбирались по сути сценарии локальной сети
Настало время исправить эту несправедливость
Слайд 23

Организация взаимодействия с SQL Server по HTTP Напрямую по HTTP с

Организация взаимодействия с SQL Server по HTTP

Напрямую по HTTP с

SQL Server общаться нельзя
Во всяком случае, пока
Между клиентом и SQL Server требуется IIS
ISAPI-фильтр sqlis3.dll (входит в SQLXML 3.0) принимает вызовы GET, HEAD, POST, вытаскивает запрос к SQL Server и передает ему
Т.о. участок IIS – SQL Server относится к локальному взаимодействию и сводится к задаче, к-ю мы умеем решать
Чтобы разобраться участком клиент – IIS, нужно понять две вещи
Как упаковать запрос в GET и POST
И как его отправить фильтру
Слайд 24

То же на картинке – схема публикации БД

То же на картинке –
схема публикации БД

Слайд 25

Как задействовать ISAPI-фильтр? Не мудрствуя лукаво, создать вирт.дир. и повесить его

Как задействовать ISAPI-фильтр?

Не мудрствуя лукаво, создать вирт.дир. и повесить его на

нее
Все, кто к ней обращается, пропускаются через sqlis3.dll
Создается программным путем или графически через Configure IIS Support в SQLXML 3.0
Что указывается при ее создании
Connectivity
Имя SQL Server и базы, на к-ю через нее собираемся ходить
Аутентификация
Windows Integrated, базовая на SQL Server или анонимная (Anonymous д.б. привязан к учетной записи на SQL Server)
Права
На выполнение SELECT ... FOR XML или ad hoc-templates
XPath
Templates
Слайд 26

Как упаковать запрос Типы подкаталогов виртуальной директории dbobject Позволяет адресовать запросы

Как упаковать запрос

Типы подкаталогов виртуальной директории
dbobject
Позволяет адресовать запросы напрямую к объектам

БД
http://localhost/Northwind/DBObj/Employees[@EmployeeID=1]/@LastName
schema
Позволяет задавать аннотированную схему, преобразующую SQL в XML
http://localhost/Northwind/Schem/AnnotatedSchemaExample.xsd/Customer[@CustomerID=""ALFKI""]
template
Позволяет оборачивать SQL/XPath-запросы в XML-шаблон
http://localhost/Northwind/Templ/GeneralTemplateExample.xml?Cntry=USA
soap
Превращает SQL Server в Web-сервис
Позволяет из клиентского приложения обращаться к процедурам, функциям и шаблонам как к методам Web-сервиса

GET

Или из браузера

POST

Или из формы

Слайд 27

Что такое Web-сервис с точки зрения СОМ-разработчика? Это DCOM, где компоненты

Что такое Web-сервис с точки зрения СОМ-разработчика?

Это DCOM, где компоненты выходят

за пределы локальной сети и могут быть распределены по Интернету
IDL / Type Library = WSDL
HKEY_CLASSES_ROOT / IUnknown = UDDI
RPC = SOAP
Сейчас по HTTP гоняется в основном HTML
Он подходит для визуального восприятия, но малопригоден, если из URL нужно забрать информацию и передать в приложение
Слайд 28

SQL Server как Web-сервис Виртуальные поддиректории типа SOAP позволяют обращаться к

SQL Server как Web-сервис

Виртуальные поддиректории типа SOAP позволяют обращаться к SQL

Server как к Web-сервису
Хранимые процедуры / функции и шаблоны видны как методы Web-сервиса
wsdl-файл генерируется автоматически
Результат возвращается как единственный DataSet, массив объектов DataSet, либо массив XmlElement

Пример

Слайд 29

SOAP и Web Services Генерируется WSDL-файл, описывающий «засвеченные наружу» хранимые процедуры

SOAP и Web Services

Генерируется WSDL-файл, описывающий «засвеченные наружу» хранимые процедуры и

шаблоны
Утилита для их выбора

SQL
Server

IIS/ISAPI

Message

SP

Template

Клиент

SOAP
Message

WSDL

Слайд 30

2001 1997 1998 1999 2000 Май 01 UDDI Май 99 Internet

2001

1997

1998

1999

2000

Май 01 UDDI

Май 99 Internet Explorer 5.0

Окт. 97 Internet Explorer 4.0

Янв. 98 XSL Tech Preview

Июнь 00 SOAP Toolkit v1

Авг. 00 SQL Server 2000

Дек. 00 BizTalk Server

Окт. 00 MSXML 3.0

Апр. 01 SOAP Toolkit v2

XML

в продуктах и технологиях Microsoft

Окт 01 MSXML 4.0
SQLXML 2.0

Авг. 01 Windows XP

Дек. 01 VS .Net

Фев. 01 SQLXML
1.0

SQLXML 1 – XML Updategrams, XML Bulkload, улучшения в производительности
SQLXML 2 – поддержка аннотированных XSD, FOR XML на стороне клиента (поддержка в SQL 7.0), SQLXMLOLEDB-провайдер, интеграция с ADO.Net (SQLXML Managed Classes)
SQLXML 3 – SOAP для SQL Server
SQLXML 4 – XQuery, гетерогенные запросы

Слайд 31

XQuery Язык запросов XML, приходит на смену XPath Отличительные черты –

XQuery

Язык запросов XML, приходит на смену XPath
Отличительные черты – явное конструирование

элементов, возможность декомпозиции, более пригоден для работы оптимизатора
Планируется ввести в SQL Server 2000 в SQLXML 4.0
Полная поддержка – в MS SQL Server «Yukon»

FOR $b IN //book WHERE
$b/publisher = “Morgan Kaufmann” AND $b/year = “1998”
RETURN $b/title
FOR $p IN //procedure[1], $e IN //* AFTER ($p//incision)[1] BEFORE ($p//incision)[2] RETURN $e
FOR $d IN /dept WHERE EVERY $e IN $d/emp SATISFIES count($e/skill) >= 2 UPDATE $d/skill_audit WITH "OK"

Слайд 32

Выводы: XML в SQL Server 2000

Выводы: XML в SQL Server 2000

Слайд 33

Вопросы?

Вопросы?