
- •Лекция 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.4. Булевские выражения
Булевские выраженияиспользуются для выполнения логических операцийИиИЛИ. ВXPathопределены два логических оператора: операторorдля выполнения операцииИЛИи операторandдля выполнения операцииИ. Операндами и результатом булевского выражения являются булевские значения. Для операции отрицания используется функцияnot().
Примеры булевских выражений:
1. 5 gt 1 and 5 lt 10 – равноtrue.
2. -5 gt 1 or 5 lt 10 – равно true.
3. not(5 gt 1) – равноfalse.
5.1.1.3.5. Выражения для типов последовательности
Для проверки и изменения типов в последовательности данных в XPath определены операции instance of,cast,castableиtreat.
Операция instance ofимеет следующий формат:
операнд-1instance of операнд-2
Эта операция проверяет наличие операнда-1в последовательности, заданной воперанде-2 и возвращаетtrue, если операнд есть в последовательности иfalse– в противном случае.
Примеры выражений для операции instance of:
1. 12 instance of xs:integer – равно true.
2. 12 instance of xs:nonPositiveInteger – равно false.
Операция cast asимеет следующий формат:
операнд-1cast as операнд-2[?]
Эта операция преобразует атомарное значение в операнде-1в данное типа, заданного воперанде-2 и возвращает преобразованное значение, одновременно изменяя типоперанда-1. Если послеоперанда-2 задан необязательный символ "?", то в случае невозможности преобразования возвращается пустая строка, иначе выдается сообщение об ошибке.Операнд-2 не может иметь типxs:NOTATIONили типxs:anyAtomicType.
Примеры выражений для операции cast as:
1. "12" cast as xs:integer– преобразует строку в число.
2. $d cast as xs:string– преобразует переменную$dк строковому типу.
Операция castable asимеет следующий формат:
операнд-1castable as операнд-2[?]
Эта операция выполняет проверку возможности преобразования атомарного значения в операнде-1в данное типа, заданного воперанде-2 и возвращает значениеtrue, если такое преобразование возможно иfalse– в противном случае. Задание послеоперанда-2 необязательного символ "?" определяет возможность задания пустой последовательности.Операнд-2 не может иметь типxs:NOTATIONили типxs:anyAtomicType.
Примеры выражений для операции castable as:
1. "12" castable as xs:integer – равно true.
2. "12.3" castable as xs:integer – равно false.
Операция treat asимеет следующий формат:
операнд-1treat as операнд-2
Эта операция преобразует атомарное значение в операнде-1в данное типа, заданного воперанде-2 и возвращает преобразованное значение, однако, в отличие от операцииcast as, типоперанда-1не меняется.Операнд-2 не может иметь типxs:NOTATIONили типxs:anyAtomicType.
Обычно операция treat asиспользуется при вызове функций, когда аргумент должен иметь типоперанд-2.
Примеры выражений для операции treat as:
1. "12" treat as xs:integer– преобразует строку в число.
2. $d treat as xs:string– возвращает текущее значение переменной, преобразованное к строковому типу (тип самой переменной$dне меняется).
5.1.1.3.6. Условные выражения
Условное выражениев XPath имеет следующий формат:
if(условие)thenвыражение-1elseвыражение-2
Сначала вычисляется выражение условие, результат которого должно иметь типxs:boolean. Если результат равенtrue, то вычисляетсявыражение-1и его результат становится результатом условного выражения. В противном случае (если результат равенfalse) вычисляетсявыражение-2и его результат становится результатом условного выражения. Ветвьelseв выражении является обязательной.
Примеры условного выражения:
1. if($a1 instance of xs:integer and
$a2 instance of xs:integer) then $a1 idiv $a2
else $a1 div $a2– если и$a1и$a2– целые числа, то разделить нацело, иначе разделить как два вещественных числа.
2. if($x castable as xs:integer) then $x cast as xs:integer
else $x cast as xs:string– если значение$xможно преобразовать в целое число, преобразовать к целому типу, иначе преобразовать к строковому типу.