Арифметические операторы
|
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: