
- •Лекция 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.1.4.7.5. Операторы и функции, генерирующие последовательности
В XPath и XQuery определены следующие операторы и функции, генерирующие последовательности:
op:to($firstval as xs:integer, $lastval as xs:integer) as xs:integer*– возвращает последовательность целых чисел от$firstvalдо$lastval;
fn:id($arg as xs:string*, $node as node()) as element()*– возвращает последовательность узлов элементов, заданных в$node, которые имеют значение атрибута типаID, соответствующее значению или значениям типаIDREF, заданным в$arg(если аргумент$nodeне задан, поиск выполняется в текущем узле);
fn:idref($arg as xs:string*, $node as node()) as node()*– возвращает последовательность узлов элементов, заданных в$node, которые имеют ссылки типаIDREF, на узлы, значение или значения атрибута типаIDдля которых задано в$arg(если аргумент$nodeне задан, поиск выполняется в текущем узле);
fn:doc($uri as xs:string?) as document-node()?– возвращает документ, фрагмент URI которого содержится в аргументе$uri;
fn:doc-available($uri as xs:string?) as xs:boolean– возвращаетtrue, еслиfn:doc($uri) возвращает документ, иначе возвращаетfalse;
fn:collection($arg as xs:string?) as node()*– возвращает последовательность узлов, полученных по адресу$arg, который рассматривается как данное типаxs:anyURI.
Примеры использования функций, генерирующих последовательности:
1. op:to(1,4))– возвращает последовательность (1,2,3,4).
2. fn:id(($idref1,$idref2), $node1) – возвращает последовательность узлов элементов, заданных в$node1, которые имеют значение атрибута типаID, соответствующее значениям типаIDREF, заданным в первом аргументе.
3. fn:idref(($id1,$id2), $node1) – возвращает последовательность узлов элементов, заданных в$node1, которые имеют ссылки типаIDREF, на узлы,IDкоторых задано в первом аргументе.
4. fn:doc(xs:string("mydoc")) – возвращает документ, фрагмент URI которого содержится в аргументе.
5.1.1.4.8. Контекстные функции
Обработка выражений осуществляется в зависимости от некоторого контекста. Контекст показывает, какой узел в данный момент обрабатывается преобразованием, какова позиция этого узла в обрабатываемом множестве, сколько всего узлов в этом множестве, какие переменные доступны и какие значения они имеют, какие функции могут быть вызваны и, наконец, какие пространства имен объявлены.
В соответствии со спецификацией XPath, контекст составляют следующие части:
Контекстный узел (context node) – узел, который обрабатывается в текущий момент;
Целое положительное число, показывающее размер контекста – количество узлов во множестве, которое обрабатывается в данный момент;
Целое положительное число, показывающее позицию контекстного узла в контексте вычисления выражения, то есть порядковый номер узла в текущем множестве преобразования, которое было соответствующим образом упорядочено;
Множество связанных переменных (variable bindings), являющееся множеством пар вида «имя-значение», в котором имя переменной связывается со значением, присвоенным ей;
Библиотека функций, состоящая из множества функций, которые могут быть выполнены процессором (функции описанной выше базовой библиотеки должны быть реализованы в процессоре, однако эта библиотека может быть расширена);
Множество объявлений пространств имен, связывающее префиксы пространств имен с уникальными идентификаторами ресурсов (URI), которые им соответствуют.
В XPath и XQuery определены следующие основные контекстные функции:
fn:position() as xs:integer– возвращает позицию текущего узла;
fn:last() as xs:integer– возвращает последний узел в текущей последовательности текущего узла;
fn:current-dateTime() as xs:dateTime – возвращает текущую дату и время;
fn:current-date() as xs:date – возвращает текущую дату;
fn:implicit-timezone() as xs:dayTimeDuration– возвращает временную зону по умолчанию.