
- •Лекция 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.1. Функции-конструкторы
Функции-конструкторы имеют следующее общее определение:
префикс:тип($аргументas xs:anyAtomicType?)asпрефикс:тип?
В этом определении префикс– это префикс пространства имен,тип– тип данного (встроенный или тип данных, определенный пользователем),аргумент– аргумент при обращении к функции-конструктору.
Для типа данного xs:dateTimeфункция-конструктор имеет специальный формат:
fn:dateTime($аргумент-1 as xs:date?, $ аргумент-1 as xs:time?)
as xs:dateTime?
Примеры функций-конструкторов:
1. xs:double("121")– преобразует строку в число с плавающей точкой двойной точности и возвращает полученное число.
2. fn:dateTime(xs:date("1999-12-31"), xs:time("12:00:00"))– возвращает дату типаxs:dateTimeсо значением "1999-12-31T12:00:00".
5.1.1.4.2. Числовые операторы и функции
Числовые операторывыполняют функции, аналогичные знакам арифметических одноместных и двуместных операций:
op:numeric-add– сложение;
op:numeric-subtract– вычитание;
op:numeric-multiply– умножение;
op:numeric-divide– деление;
op:numeric-integer-divide– деление нацело;
op:numeric-mod– взятие по модулю;
op:numeric-unary-plus– унарный плюс;
op:numeric-unary-minus– унарный минус.
Параметрами и возвращаемыми значениями являются данные типов xs:integer,xs:decimal,xs:floatиxs:double(типnumeric), а также производных от них типов. Для последних двух операторов определен один аргумент типа, для остальных операторов – два аргумента типаnumeric. Если типы аргументов не совпадают, перед выполнением операции выполняется преобразование к более общему типу.
Примеры числовых операторов:
1. op:numeric-add(12, 5)– возвращает значение17.
2. op:numeric-divide(12.3, 5)– преобразует второй аргумент в данное типаxs:doubleи возвращает значение2.46типаxs:double.
Операторы сравнениявыполняют функции, аналогичные функциям операторов в выражениях сравнения:
op:numeric-equal– сравнение на равенство;
op:numeric-less-than– сравнение на меньше, чем;
op:numeric-greater-than– сравнение на больше, чем.
Эти операторы возвращают trueилиfalseв зависимости от результата сравнения.
Примеры операторов сравнения:
1. op:numeric-equal(12, 12.0)– возвращает значениеtrue.
2. op:numeric-less-than(5, 8) – возвращает значение false.
В числовые функцииXPathвходят:
fn:abs($arg as numeric?) as numeric?– возвращает абсолютное значение заданного в аргументе числа;
fn:ceiling($arg as numeric?) as numeric?– возвращает наименьшее целое, которое не меньше, чем заданное в аргументе число;
fn:floor($arg as numeric?) as numeric?– возвращает наибольшее целое, которое не больше, чем заданное в аргументе число;
fn:round($arg as numeric?) as numeric?– возвращает заданное в аргументе число, округленное до ближайшего целого числа;
fn:round-half-to-even($arg as numeric?, $precision as xs:integer) as numeric?– округляет заданное в первом аргументе число; в сторону ближайшего числа с точностью, заданной во втором аргументе. Если второй аргумент больше 0, то это число показывает точность справа от десятичной точки, иначе – слева. Если последняя отбрасываемая цифра равна 5, выполняется округление до ближайшего четного числа. Если функция задана с одним аргументом, предполагается, что значение второго аргумента равно 0.
Примеры числовых функций:
1. ceiling(3.14)– возвращает число4.
2. floor(3.14)– возвращает число3.
3. round(3.14)– возвращает число3.
4. round-half-to-even(3.145, 2) – возвращает число 3.14.
5. round-half-to-even(3145, -2) – возвращает число 3100.
6. round-half-to-even(3.5, 2) – возвращает число 4.