45889 (Использование XML совместно с SQL), страница 2

2016-07-31СтудИзба

Описание файла

Документ из архива "Использование XML совместно с SQL", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45889"

Текст 2 страницы из документа "45889"

relationship – элемент, обозначающий связь с соответствующими друг другу первичными и внешними ключами. Используется для построения иерархических XML-документов.

is-constant – указывает, что соответствующий элемент не связывается с таблицей или колонкой базы данных.

map-field – булева переменная, принимающая значение 0 или 1. Значение 0 указывает, что соответствующий элемент не будет присутствовать в результирующем документе. С выходом SQLXML 3.0 аннотация была переименована в mapped.

limit-field и limit-value – предназначены для указания поля и его значения, по которым будет фильтроваться запрос к базе данных. Результат использования этих аннотаций аналогичен ограничению результирующего набора строк с помощью оператора WHERE.

use-cdata – указывает, что соответствующий XML-узел будет представлен в секции CDATA результирующего документа. Узел должен быть связан с полем таблицы или представления и не может применяться совместно с url-encode или ID, IDREF, IDREFS, NMTOKEN и NMTOKENS.

hide – булева переменная, принимающая значение 0 или 1. Указывает на то, что соответствующий XML-узел будет скрыт (значение 0) в результирующем XML-документе, однако может быть использован в запросе XPath. Не путайте её с аннотацией mapped. Различие в том, что при помощи mapped XML-узел совсем исключается из документа, так что не может быть использован в запросе XPath.

Рассмотрим пример, демонстрирующий работу некоторых из перечисленных аннотаций. В разделе FOR XML EXPLICIT был составлен иерархический список издательств и служащих, которые в них работают. Попробуем получить такой же XML-документ с помощью аннотированной схемы:

xmlns:sql="urn:schemas-microsoft-com:mapping-schema">

parent="publishers" parent-key="pub_id"

child="employee" child-key="pub_id" />

sql:relation="employee"

sql:relationship="PubsEmployees" >

type="xsd:string" />

type="xsd:string" />

type="xsd:string" sql:hide="1" />

sql:limit-field="pub_name" sql:limit-value="Binnet & Hardley" />

Здесь использован атрибут hide для удаления XML-узла из результирующего документа, но сохранить возможность его использования в XPath-запросах. Атрибуты limit-field и limit-value ограничивают количество издательств одним – «Binnet & Hardley». Раздел xsd:annotation вынесен, однако его можно было использовать и внутри узла . В таком случае имя элемента relationship можно было не указывать.

Примерно так можно использовать эту схему:

http://server/server_pubs/schema/schema1.xml/pubs/employee[@minit=""]?root=root

Схемы можно непосредственно указывать в шаблоне. Например:

xmlns:ms="urn:schemas-microsoft-com:mapping-schema"

id="InLineSchema1" sql:is-mapping-schema="1">

/Авторы

Для того чтобы запрос XPath использовал схему, а также для сокрытия ее в результирующем документе XML, указан атрибут is-mapping-schema. Он может принимать значения 0 или 1. Кроме этого, необходимо явно сослаться на используемую схему, так как их в шаблоне может быть несколько. Это делается путем добавления атрибута id в схему и атрибута mapping-schema – в раздел самого запроса.

Создание аннотированных схем не совсем тривиальная задача, требующая к тому же знания большого количества тонкостей. К счастью, в Microsoft разработали специальный инструмент для автоматической генерации схем – XML View Mapper. Его можно бесплатно скачать по адресу http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/443/msdncompositedoc.xml . У него хороший графический интерфейс и достаточно неплохая документация; думаю, вы с ним разберетесь быстро. Единственный его недостаток – отсутствие возможности сохранять схемы в формате XSD. Надеюсь, в будущем эта возможность появится.

К сожалению, SQL Server 2000 лишь частично поддерживает спецификацию XPath и возможности использования XPath-запросов к базе данных. Ниже приведена сводка поддерживаемых и не поддерживаемых возможностей.

Поддерживаемая функциональность XPath:

Тип

Значения

Оси (axis)

attribute, child, parent, and self

Операторы сравнения

=, !=, <, , >=

Арифметические операторы

+, -, *, div

Функции явного преобразования

number(), string(), Boolean()

Булевы операторы

And, or

Булевы функции

true(), false(), not()

Не поддерживаемая функциональность:

Тип

Значения

Оси

ancestor, ancestor-or-self, descendant, descendant-or-self (//), following, following-sibling, namespace, preceding, preceding-sibling

Арифметические операторы

Mod

Строковые функции

string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate()

Булевы функции

lang()

Числовые функции

sum(), floor(), ceiling(), round()

Оператор объединения

|

Замечания по разделу

Вы можете использовать неограниченное количество простых запросов (query) и запросов XPath (XPath-query) в одном шаблоне, а также использовать их вперемешку.

В качестве простых запросов (query) могут выступать любые SQL-инструкции. Шаблоны могут быть использованы для изменения данных, хотя это и не лучшее решение. Другие методы изменения данных рассматриваются в разделе Апдейтаграммы и XML Bulk Load.

Пространство имен

Назначение

urn:schemas-microsoft-com:xml-sql

Шаблоны и Аннотации XDR

urn:schemas-microsoft-com:xml-data

Схемы XDR

http://www.w3.org/2001/XMLSchema

Схемы XSD

urn:schemas-microsoft-com:mapping-schema

Аннотации XSD

ADO и XML

Исторически самой первой и самой известной возможностью работы с XML-документами в ADO было сохранение объекта Recordset в формате XML. До этого вы могли сохранять Recordset’ы только в бинарном формате adPersistADTG. Он использовался для передачи наборов строк посредством RDS (Remote Data Services). Работу с обоими форматами поддерживает OLE DB Persistence Provider. Кроме сохранения, можно также загружать (восстанавливать) объект Recordset из файлов. Сохранение и последующая загрузка рекордсета из файла в формате XML дали возможность использования XML-документов в качестве баз данных.

OLE DB Persistence Provider жестко задает формат результирующего XML-документа: для описания структуры и типов узлов всегда используется XDR, данные всегда помещаются в секцию data, а строки представляются элементом row. Названия и значения полей – соответствующие названия и значения атрибутов элемента row. Нет никакой возможности изменить этот формат, если он по каким-либо причинам вас не устраивает. Можно, конечно, написать шаблон трансформации на XSLT, но это уже дополнительные сложности.

С выходом ADO 2.5 появилась возможность сохранять рекордсет в IStream. Трудно переоценить все достоинства этого нововведения: рекордсет теперь можно было сохранять в объект DOMDocument, трансформировать XML-документ с помощью метода transformNode, добавлять свои элементы и атрибуты, и многое другое. Кроме этого, вы могли сохранять рекордсет в поток Response объектной модели ASP, причем как в формате adPersistADTG, так и в формате adPersistXML. В новой ADO 2.5 появился собственный объект Stream (естественно, поддерживающий интерфейс IStream). С его помощью вы могли сохранять и загружать данные из файла на диске в бинарном формате (LoadFromFile и SaveToFile), загружать и сохранять данные в виде текста (ReadText и WriteText) и выполнять другие не реляционные операции. Но довольно истории, давайте перейдем к примерам.

Возможности ADO 2.5

Сохранение и загрузка из файла в формате XML

Не мудрствуя лукаво, возьму запрос из самого первого примера этой статьи. Вот полный исходный текст vbs-скрипта:

Const adopenStatic = 3

Const adLockReadOnly = 1

Const adCmdText = 1

Const adPersistXML = 1

Dim rs

Set rs = CreateObject("ADODB.Recordset")

rs.Open "select au_fname,au_lname,address from authors where au_fname like 'M%'", _

"Provider=sqloledb;Data Source=server;Initial Catalog=pubs;" & _

"User Id=user;Password=password;", adopenStatic, adLockReadOnly, adCmdText

rs.Save "c:\myrs.xml", adPersistXML

Следующий пример демонстрирует загрузку XML-документа в объект Recordset:

Const adopenStatic = 3

Const adLockReadOnly = 1

Const adCmdFile = 256

Dim rs

Set rs = CreateObject("ADODB.Recordset")

rs.Open "c:\myrs.xml", "Provider=MSPersist;", adopenStatic, adLockReadOnly, adCmdFile

Трансформация с помощью DOMDocument

В этом примере создается ASP-страница, при обращении к которой из базы будет выбран Recordset и сохранен в объект DOMDocument. Далее к документу будет применен шаблон трансформации, и результирующий HTML будет передан клиенту. Результат будет точно таким же, как в примере с трансформацией в разделе «URL-запросы». Код ASP:

<%

' Define some constant for ADO.

Const adopenStatic = 3

Const adLockReadOnly = 1

Const adCmdText = 1

Const adPersistXML = 1

' Creating objects

Dim rs,dom,stylesheet

Set dom = Server.CreateObject("MSXML2.DOMDocument")

Set stylesheet = Server.CreateObject("MSXML2.DOMDocument")

Set rs = Server.CreateObject("ADODB.Recordset")

' Open recordset

rs.Open "select au_fname,au_lname,address from authors where au_fname like 'M%'", _

"Provider=sqloledb;Data Source=server;Initial Catalog=pubs;" & _

"User Id=user;Password=password;", adopenStatic, adLockReadOnly, adCmdText

' Save recordset to DOMDocument

rs.Save dom,adPersistXML

' Loading stylesheet

stylesheet.async = false

stylesheet.load "C:\Inetpub\wwwroot\server_pubs\format_for_ado.xsl"

' Perform transformation

Response.Write dom.transformNode(stylesheet)

' Cleanup

Set dom = nothing

Set stylesheet = nothing

Set rs = nothing

%>

Шаблон трансформации практически не изменился:

  • .Address:

      Выдача Recordset’а в формате XML непосредственно в поток Response

      Рассмотрим совсем легкий пример выдачи рекордсета в объект Response модели ASP.

      <%

      ' Should specify this

      Response.ContentType = "text/xml"

      ' Define some constant for ADO.

      Const adopenStatic = 3

      Const adLockReadOnly = 1

      Const adCmdText = 1

      Const adPersistXML = 1

      Dim rs

      Set rs = Server.CreateObject("ADODB.Recordset")

      ' Open recordset

      rs.Open "select au_fname,au_lname,address from authors where au_fname like 'M%'", _

      "Provider=sqloledb;Data Source=server;Initial Catalog=pubs;" & _

      "User Id=user;Password=password;", adopenStatic, adLockReadOnly, adCmdText

      ' Save recordset to Response stream

      rs.Save Response,adPersistXML

      Set rs = nothing

      %>

      Этот чрезвычайно простой пример демонстрирует богатые возможности манипулирования результирующим набором строк на клиенте. Рассмотрим использование объекта RDS.DataControl.

      ПРИМЕЧАНИЕ

      Возможно, эффективнее для RDS использовать формат adPersistADTG, однако XML для этого также прекрасно подходит.

      Пример взят из MSDN и слегка модифицирован:

      Пример ADO Recordset Persistence

      А вот как создать на клиенте точную копию отправленного рекордсета (код на vbs):

      Dim rs

      Set rs = CreateObject("ADODB.Recordset")

      rs.Open "http://server/server_dir/sql2xml.asp"

      Возможности ADO 2.6

      Свежие статьи
      Популярно сейчас
      Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
      Ответы на популярные вопросы
      Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
      Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
      Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
      Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
      Отзывы студентов
      Ставлю 10/10
      Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
      Лучшая платформа для успешной сдачи сессии
      Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
      Студизба ван лав ❤
      Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
      Отличный сайт
      Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
      Маленький отзыв о большом помощнике!
      Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
      Студ. Изба как крупнейший сборник работ для студентов
      Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
      Спасательный островок
      Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
      Всё и так отлично
      Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
      Отзыв о системе "Студизба"
      Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
      Отличный помощник
      Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
      Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
      Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
      Спасибо за шикарный сайт
      Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
      Популярные преподаватели
      Добавляйте материалы
      и зарабатывайте!
      Продажи идут автоматически
      5137
      Авторов
      на СтудИзбе
      440
      Средний доход
      с одного платного файла
      Обучение Подробнее