
- •Лекция 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.4. Булевские функции и операторы
Две функции-конструкторы
fn:true() as xs:boolean
и
fn:false() as xs:boolean
возвращают соответственно значения trueиfalse.
Для булевских данных определены следующие операторы:
op:boolean-equal($value1 as xs:boolean, $value2 as xs:boolean) as xs:boolean– возвращаетtrueв случае, если оба аргумента равныtrueили оба аргумента равныfalse, в противном случае возвращаетfalse;
op:boolean-less-than($arg1 as xs:boolean, $arg2 as xs:boolean) as xs:boolean– возвращаетtrueв случае, если первый аргумент равен false, а второй –true, в противном случае возвращаетfalse;
op:boolean-greater-than($arg1 as xs:boolean, $arg2 as xs:boolean) as xs:boolean– возвращаетtrueв случае, если первый аргумент равенtrue, а второй –false, в противном случае возвращаетfalse;
Функция
fn:not($arg as item()*) as xs:boolean
возвращает false в случае, если первый аргумент приводится к булевскому значению true, в противном случае возвращаетtrue.
Примеры использования булевских функций и операторов:
1. fn:true() – возвращает true.
2. op:boolean-equal(true, false) – возвращает false.
3. op:boolean-less-than(true, false) – возвращает false.
4. op:boolean-greater-than(true, false) – возвращает true.
5. fn:not(false) – возвращает true.
6. fn:not(3<5) – возвращаетfalse.
5.1.1.4.5. Функции и операторы для продолжительности, дат и времени
Функции и операторы дат и времени определены для следующих типов данных: s:dateTime,xs:date,xs:time,xs:gYearMonth,xs:gYear,xs:gMonthDay,xs:gMonthиxs:gDay, а функции продолжительности определены для типов данныхxs:duration,xs:yearMonthDurationиxs:dayTimeDuration.
Для типов данных xs:gYearMonth,xs:gYear,xs:gMonthDay,xs:gMonthиxs:gDay, а также типа данныхxs:durationопределены только сравнения на равенство и неравенство.
Для продолжительности, дат и времени определены следующие группы операторов и функций:
операторы сравнения;
функции извлечения компонент;
арифметические операторы для продолжительности, дат и времени.
5.1.1.4.5.1. Операторы сравнения
В XPath и XQuery для продолжительности, дат и времени определены следующие операторы сравнения:
op:yearMonthDuration-less-than($arg1 as xs:yearMonthDuration, $arg2 as xs:yearMonthDuration) as xs:Boolean– возвращаетtrueтолько в том случае, если$arg1меньше$arg2, в противном случае возвращаетfalse;
op:yearMonthDuration-greater-than($arg1 as xs:yearMonthDuration, $arg2 as xs:yearMonthDuration) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1больше$arg2, в противном случае возвращаетfalse;
op:dayTimeDuration-less-than($arg1 as xs:dayTimeDuration, $arg2 as xs:dayTimeDuration) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1меньше$arg2, в противном случае возвращаетfalse;
op:dayTimeDuration-greater-than($arg1 as xs:dayTimeDuration, $arg2 as xs:dayTimeDuration) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1больше$arg2, в противном случае возвращаетfalse;
op:duration-equal($arg1 as xs:duration, $arg2 as xs:duration) as xs:boolean– возвращаетtrueтолько в том случае, если компонентыxs:yearMonthDurationиxs:dayTimeDurationв$arg1и$arg2равны друг другу, в противном случае возвращаетfalse;
op:dateTime-equal($arg1 as xs:dateTime, $arg2 as xs:dateTime) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1и$arg2равны друг другу, в противном случае возвращаетfalse;
op:dateTime-less-than($arg1 as xs:dateTime, $arg2 as xs:dateTime) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1меньше$arg2, в противном случае возвращаетfalse;
op:dateTime-greater-than( $arg1 as xs:dateTime, $arg2 as xs:dateTime) as s:boolean– возвращаетtrueтолько в том случае, если$arg1больше$arg2, в противном случае возвращаетfalse;
op:date-equal($arg1 as xs:date, $arg2 as xs:date) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1равен$arg2, в противном случае возвращаетfalse;
op:date-less-than($arg1 as xs:date, $arg2 as xs:date) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1меньше$arg2, в противном случае возвращаетfalse;
op:date-greater-than($arg1 as xs:date, $arg2 as xs:date) as xs:boolean – возвращаетtrueтолько в том случае, если$arg1больше$arg2, в противном случае возвращаетfalse;
op:time-equal($arg1 as xs:time, $arg2 as xs:time) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1и$arg2, преобразованные к типуxs:dateTime, равны друг другу, в противном случае возвращаетfalse;
op:time-less-than($arg1 as xs:time, $arg2 as xs:time) as xs:boolean– возвращаетtrueтолько в том случае, если для$arg1и$arg2, преобразованных к типуxs:dateTime, выполняется отношение$arg1меньше$arg2, в противном случае возвращаетfalse;
op:time-greater-than($arg1 as xs:time, $arg2 as xs:time) as xs:boolean– возвращаетtrueтолько в том случае, если для$arg1и$arg2, преобразованных к типуxs:dateTime, выполняется отношение$arg1больше$arg2, в противном случае возвращаетfalse;
op:gYearMonth-equal($arg1 as xs:gYearMonth, $arg2 as xs:gYearMonth) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1и$arg2, преобразованные к типуxs:dateTime, равны друг другу, в противном случае возвращаетfalse;
op:gYear-equal($arg1 as xs:gYear, $arg2 as xs:gYear) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1и$arg2, преобразованные к типуxs:dateTime, равны друг другу, в противном случае возвращаетfalse;
op:gMonth-equal($arg1 as xs:gMonth, $arg2 as xs:gMonth) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1и$arg2, преобразованные к типуxs:dateTime, равны друг другу, в противном случае возвращаетfalse;
op:gDay-equal($arg1 as xs:gDay, $arg2 as xs:gDay) as xs:boolean– возвращаетtrueтолько в том случае, если$arg1и$arg2, преобразованные к типуxs:dateTime, равны друг другу, в противном случае возвращаетfalse.
Примеры использования операторов сравнения для продолжительности, дат и времени:
1. op:yearMonthDuration-less-than (xs:yearMonthDuration("P2Y"), xs:yearMonthDuration("P1Y11M")) – возвращает true.
2. op:dayTimeDuration-greater-than(xs:dayTimeDuration ("PT10D"), xs:dayTimeDuration ("PT10D11H")) – возвращает false.
3. op:duration-equal(xs:duration("PT10D"), xs:duration("PT9D24H")) – возвращает true.
4. op:dateTime-less-than(xs:dateTime("2002-05-12T00:00:00"),
xs:dateTime("2002-05-12T12:00:00")) – возвращает true.
5. op:date-equal(xs:date("2007-12-30"),
xs:date("2007-12-29")) – возвращаетfalse.
6. op:time-less-than(xs:time("10:15:00"),
xs:time("12:00:40")) – возвращает true.
7. op:gYearMonth-equal(xs:gYearMonth("2005-09"),
xs:gYearMonth("2005-09")) – возвращает true.
8. op:gYear-equal(gYear("2005"),
gYear("2004")) – возвращает false.
9. op:gMonth-equal(xs:gMonth("-12-"),
Xs:gMonth("-09-")) – возвращает false.
10. op:gDay-equal(xs:gDay("-15"),
xs:gDay("-15")) – возвращаетtrue.