
- •Лекция 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.3. ВыраженияXPath
Главной синтаксической конструкцией языка XPath является выражение. Для группировки выражений можно использовать круглые скобки. Приоритеты при выполнении операций в выражениях определяются так же, как в языках программирования. Для изменения приоритета вычисления выражений можно использовать круглые скобки.
В результате обработки выражения XPath получается последовательность узлов и/или атомарные значения.
5.1.1.3.1. Переменные и литералы
Имя переменной– это имя типа QName (см. рис. 5.5.1), перед которым ставится символ "$". В самом языкеXPathпеременные явно не определены, однако они используются в языках XQuery и XSLT.
Булевские литералы (типа xs:boolean) задаются вXPathкакtrueилиfalse. Числовые литералы (типовxs:integer,xs:decimalиxs:doubleи производных типов) задаются как целые числа, либо числа с десятичной точкой, либо числа в формате с плавающей точкой. Строковые литералы (типаxs:stringи производных типов) заключаются либо в двойные, либо в одиночные апострофы.
5.1.1.3.2. Числовые выражения
Числовые выраженияиспользуются для выполнения арифметических операций над числами.
В XPathопределены следующие арифметические операторы:
+– сложение;
-– вычитание;
*– умножение;
div– деление;
idiv– деление двух целых чисел;
mod– взятие модуля (определение остатка от деления чисел).
Арифметические операции могут, кроме idivиmod, могут использоваться и для следующих типов дат и времени:xs:dateTime,xs:date,xs:time,xs:dayTimeDurationиxs:yearMonthDuration. Арифметические операции могут также использоваться со строками, если они содержат числа.
Поскольку символ "-" может использоваться в XML в именах переменных, при записи операции вычитания оператор "-" должен быть отделен от первого операнда (вычитаемого) по крайней мере одним пробелом.
Примеры числовых выражений:
1. 3+2– равно5.
2. 5 div 2– равно2.5.
3. 5 idiv 2– равно2.
4. 5 mod 2– равно1.
5. $a1 - 1– равно текущему значению переменной$a1 минус1.
6. $a1-1– будет воспринято как переменная с именем$a1-1.
7. $a1+$a2*$a3 – равно текущему значению переменной$a2, умноженной на текущее значение$a3плюс текущее значение$a1.
8. $a1*($a2+$a3) – равно сумме текущих значений переменных$a2и$a3умноженной на текущее значение$a1.
9. "2"+"1.2e1" – равно14.
5.1.1.3.3. Выражения отношения
Выражения отношенияиспользуются для сравнения двух значений. Результатом выражения отношения является булевское значениеtrueилиfalse. ВXPathопределены три типа выражений сравнения:
сравнение значений;
общее сравнение;
сравнение узлов.
Сравнение значенийпроизводится для двух одиночных значений и использует следующие операторы отношения:
gt– больше;
lt– меньше;
ge– больше или равно;
le– меньше или равно;
eq– равно;
ne– не равно.
Примеры сравнения значений:
1. 5 gt 3– равноtrue.
2. 5 ne 5– равноfalse.
3. 5 eq 5– равноtrue.
4. 5 ge 5– равноtrue.
При общем сравненииоперанды сначала преобразуются в данные одного типа, а затем сравниваются как при сравнении значений. Если операнды содержат списки, сравнение значений выполняется для каждого элемента списка. Для общего сравнения определены следующие операторы отношения:
>– больше;
<– меньше;
>=– больше или равно;
<=– меньше или равно;
=– равно;
!=– не равно.
Примеры общего сравнения:
1. 5 > 3– равноtrue.
2. (1,2) = (2,3)– равноtrue.
3. (1,2) = (3,4)– равноfalse.
4. (1,2) != (2,3)– равноtrue.
Для сравнения узловопределены следующие операторы:
is– проверка узлов-операндов на равенство;
<<– проверка на предшествование первого узла-операнда второму узлу-операнду;
>>– проверка на предшествование второго узла-операнда первому узлу-операнду.
Примеры сравнения узлов:
1. /book-description/book/publisher [@genre="классика"] is
/book-description/book/publisher[@year="2005"]– равноtrue, если для элементаpublisherзначение атрибутаgenreравно"классика"и значение атрибутаyearравно"2005".
2. /book-description/book/publisher[@year="2005"] <<
/book-description/book/publisher[@year="2006"] – равноtrue, если для элементpublisherсо значением атрибутаyear, равным"2005", предшествует элементуpublisherсо значением атрибутаyear, равным"2006".