
- •Лекция 4-05
- •Раздел 5. Обработка документов xml
- •Тема 5.1. Вспомогательные языки xml
- •Раздел 5. Обработка документовXml Тема 5.1. Вспомогательные языки xml
- •5.1.1. Язык xPath
- •5.1.1.1. Назначение и спецификации языка xPath
- •5.1.1.2. Типы данных в языках xPath и xQuery
- •5.1.1.3. ВыраженияXPath
- •5.1.1.3.1. Переменные и литералы
- •5.1.1.3.2. Числовые выражения
- •5.1.1.3.3. Выражения отношения
- •5.1.1.3.4. Булевские выражения
- •5.1.1.3.5. Выражения для типов последовательности
- •5.1.1.3.6. Условные выражения
- •5.1.1.3.7. Последовательности
- •5.1.1.3.8. Циклы
- •5.1.1.3.9. Квантификаторы
- •5.1.1.3.10. Выражения для последовательностей узлов
- •5.1.1.3.11. Приоритет операций
- •5.1.1.4. ФункцииXPathи xQuery
- •5.1.1.4.1. Функции-конструкторы
- •5.1.1.4.2. Числовые операторы и функции
- •5.1.1.4.3. Строковые функции
- •5.1.1.4.3.1. Функции сборки-разборки строк
- •5.1.1.4.3.2. Функции сравнения строк
- •5.1.1.4.3.3. Функции строковых значений
- •5.1.1.4.3.4. Функции поиска соответствия в строках
- •5.1.1.4.3.5. Функции с использованием регулярных выражений
- •5.1.1.4.4. Булевские функции и операторы
- •5.1.1.4.5. Функции и операторы для продолжительности, дат и времени
- •5.1.1.4.5.1. Операторы сравнения
- •5.1.1.4.5.2. Функции извлечения компонент
- •5.1.1.4.5.3. Арифметические операторы для продолжительности, дат и времени
- •5.1.1.4.6. Функции для узлов
- •5.1.1.4.7. Функции и операторы для последовательностей
- •5.1.1.4.7.1. Общие функции и операторы
- •5.1.1.4.7.2. Функции проверки количества элементов в последовательности
- •5.1.1.4.7.3. Функции и операторы для операций с множествами
- •5.1.1.4.7.4. Агрегатные функции
- •5.1.1.4.7.5. Операторы и функции, генерирующие последовательности
- •5.1.1.4.8. Контекстные функции
- •5.1.1.5. Выражения пути в xPath
- •5.1.1.5.1. Синтаксис выражений пути
- •5.1.1.5.2. Шаги с использованием оси поиска
- •5.1.1.5.2.2. Проверка узла
- •5.1.1.5.2.3. Предикаты
- •5.1.1.5.2.4. Сокращенный синтаксис выражений с использованием путей поиска
- •5.1.1.5.3. Шаги с использованием фильтров
- •5.1.2. Язык xQuery
- •5.1.2.1. Структура запроса xQuery
- •5.1.2.1.1. Главный модуль
- •5.1.2.1.1.1. Объявления параметров настройки
- •5.1.2.1.1.2. Объявления переменных
- •5.1.2.1.1.3. Объявления функций
- •5.1.2.1.1.4. Объявления опций
- •5.1.2.1.1.5. Операторы импорта
- •5.1.2.1.1.6. Объявления пространства имен
- •5.1.2.1.2. Библиотечный модуль
- •5.1.2.1.3. Комментарии
- •5.1.2.2. КонструкторыXQuery
- •5.1.2.2.1. Прямой конструктор
- •5.1.2.2.2. Вычисляемый конструктор
- •5.1.2.2.2.1. Вычисляемые конструкторы элемента и атрибута
- •5.1.2.2.2.2. Вычисляемый конструктор документа
- •5.1.2.2.2.3. Вычисляемый конструктор текстового узла
- •5.1.2.2.2.4. Вычисляемый конструктор комментария
- •5.1.2.2.2.5. Вычисляемый конструктор инструкции по обработке
- •5.1.2.3. Выражения flwor
- •5.1.2.3.1. Операторыfor,letиreturn
- •5.1.2.3.2. Операторwhere
- •5.1.2.3.3. Операторorderby
- •5.1.3. ЯзыкXLink
- •5.1.3.1. Глобальные атрибуты языкаXLink
- •5.1.3.2. Простые ссылки
- •5.1.3.3. Расширенные ссылки
- •5.1.3.4. Внешние ссылки
- •5.1.3.5. Задание базовогоUrIдля документаXml
5.1.2.2.2. Вычисляемый конструктор
Вычисляемые конструкторы могут создавать узлы следующих видов:
узлы-элементы;
узлы-атрибуты;
узлы документа;
текстовые узлы;
узлы комментариев;
узлы инструкций по обработке.
5.1.2.2.2.1. Вычисляемые конструкторы элемента и атрибута
Вычисляемый конструктор элементаимеет одну из следующих форм:
elementимя-элемента {выражение-для-содержимого}
или
element{выражение} {выражение-для-содержимого}
В первой форме создается элемент с заданным именем-элементаи вычисляемым содержимым. Во второй форме имя элемента является результатом вычислениявыражения.
Аналогичным образом определяются формы вычисляемого конструктора атрибута:
attributeимя-атрибута {выражение-для-значения}
или
attribute{выражение} {выражение-для-значения}
В первой форме создается атрибут с заданным именем-атрибута, а во второй форме имя атрибута является результатом вычисления выражения. В обеих формах значение атрибута определяется как результатом вычислениявыражения-для-значения.
Пример задания вычисляемых конструкторов элементов и атрибутов:
Запрос на обработку с использованием вычисляемых конструкторов элементов и атрибутов имеет следующий вид:
xquery version "1.0";
declare variable $email-server as xs:string:="mail.com";
declare function local:attr-name($address-index as
xs:integer) as xs:string
{
if($address-index = 1) then "sender" else "receiver"
};
element {fn:concat(fn:substring-before($email-server,"."),
"-",xs:string("message"))}
{
element header
{
element address
{
element from
{
attribute {local:attr-name(1)} {fn:concat('ivanov','@',$email-server)}
},
element to
{
attribute {local:attr-name(2)} {fn:concat('sidorov','@',$email-server)}
}
},
element subject {"О встрече"}
},
element body {fn:concat("Встреча сегодня ",
fn:substring(xs:string(fn:current-date()),1,10),
" в 12.30")}
}
Результат обработки запроса имеет следующий вид:
<mail-message>
<header>
<address>
<from sender="ivanov@mail.com"/>
<to receiver="sidorov@mail.com"/>
</address>
<subject>О встрече</subject>
</header>
<body>Встреча сегодня 2008-03-06 в 12.30</body>
</mail-message>
5.1.2.2.2.2. Вычисляемый конструктор документа
Вычисляемый конструктор документазадается следующим образом:
document{выражение}
В результате выполнения этого конструктора создается новый узел документа с полученным в результате вычисления выражениясодержимым.
5.1.2.2.2.3. Вычисляемый конструктор текстового узла
Вычисляемый конструктор текстового узлазадается следующим образом:
text{выражение}
В результате выполнения этого конструктора создается новый текстовый узел с полученным в результате вычисления выражениясодержимым.
5.1.2.2.2.4. Вычисляемый конструктор комментария
Вычисляемый конструктор комментариязадается следующим образом:
comment{выражение}
В результате выполнения этого конструктора создается новый узел комментария с полученным в результате вычисления выражениясодержимым.
5.1.2.2.2.5. Вычисляемый конструктор инструкции по обработке
Вычисляемый конструктор инструкции по обработкеимеет одну из следующих форм:
processing-instruction приложение {содержимое}
или
processing-instruction {выражение} {содержимое}
В первой форме создается инструкция по обработке с заданным значением параметра приложение(типаNCName) и вычисляемым параметромсодержимое(типаxs:string). Во второй форме параметрприложениеявляется результатом вычислениявыражения.
Пример задания вычисляемого конструктора документа, текстового узла, комментария и инструкции по обработке:
Запрос на обработку с использованием вычисляемых конструкторов имеет следующий вид:
xquery version "1.0";
declare variable $email-server as xs:string:="mail.com";
document
{
element message-subjects
{
processing-instruction outputFont {"Arial"},
comment {fn:concat("Сообщение 1 в ",
$email-server)},
element subject
{
attribute from
{fn:concat('ivanov','@',$email-server)},
attribute to
{fn:concat('sidorov','@',$email-server)},
text{"О встрече"}
},
comment {fn:concat("Сообщение 2 в ",
$email-server)},
element subject
{
attribute from
{fn:concat('petrov','@',$email-server)},
attribute to
{fn:concat('sidorov','@',$email-server)},
text{"Поздравление"}
}
}
}
Результат обработки запроса имеет следующий вид:
<?xml version="1.0" encoding="windows-1251"?>
<message-subjects>
<?outputFont Arial?>
<!--Сообщение 1 в mail.com-->
<subject from="ivanov@mail.com"
to="sidorov@mail.com">О встрече</subject>
<!--Сообщение 2 в mail.com-->
<subject from="petrov@mail.com"
to="sidorov@mail.com">Поздравление</subject>
</message-subjects>