
- •Лекция 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.5.3. Арифметические операторы для продолжительности, дат и времени
В XPath и XQuery для выполнения арифметических действий над данными продолжительности определены следующие операторы:
op:add-yearMonthDurations($arg1 as xs:yearMonthDuration, $arg2 as xs:yearMonthDuration) as xs:yearMonthDuration– возвращает результат сложения$arg1и$arg2;
op:subtract-yearMonthDurations($arg1 as xs:yearMonthDuration, $arg2 as xs:yearMonthDuration) as xs:yearMonthDuration
op:multiply-yearMonthDuration($arg1 as xs:yearMonthDuration, $arg2 as xs:double) as xs:yearMonthDuration– возвращает результат умножения$arg1на$arg2;
op:divide-yearMonthDuration($arg1 as xs:yearMonthDuration, $arg2 as xs:double) as xs:yearMonthDuration
op:divide-yearMonthDuration-by-yearMonthDuration($arg1 as xs:yearMonthDuration, $arg2 as xs:yearMonthDuration) as xs:decimal– возвращает результат деления$arg1на$arg2;
op:add-dayTimeDurations($arg1 as xs:dayTimeDuration, $arg2 as xs:dayTimeDuration) as xs:dayTimeDuration– возвращает результат сложения$arg1и$arg2;
op:subtract-dayTimeDurations($arg1 as xs:dayTimeDuration, $arg2 as xs:dayTimeDuration) as xs:dayTimeDuration– возвращает результат вычитания$arg1и$arg2;
op:multiply-dayTimeDuration( $arg1 as xs:dayTimeDuration, $arg2 as xs:double) as xs:dayTimeDuration– возвращает результат умножения$arg1на$arg2;
op:divide-dayTimeDuration( $arg1 as xs:dayTimeDuration, $arg2 as xs:double) as s:dayTimeDuration– возвращает результат деления$arg1на$arg2;
op:divide-dayTimeDuration-by-dayTimeDuration( $arg1 as xs:dayTimeDuration, $arg2 as xs:dayTimeDuration) as xs:decimal– возвращает результат деления$arg1на$arg2.
Примеры использования арифметических операторов для продолжительности:
1. op:add-yearMonthDurations(xs:yearMonthDuration("P1Y11M"), xs:yearMonthDuration("P4Y2M")) – возвращает P6Y1M.
2. op:subtract-yearMonthDurations(xs:yearMonthDuration("P3Y11M"), xs:yearMonthDuration("P3Y3M")) – возвращает P0Y8M.
3. op:multiply-yearMonthDuration(
xs:yearMonthDuration("P1Y10M"), 2) – возвращает P3Y8M.
4. op:divide-yearMonthDuration(
xs:yearMonthDuration("P2Y10M"), 2) – возвращает P1Y5M.
5. op:divide-yearMonthDuration-by-yearMonthDuration(
xs:yearMonthDuration("P3Y4M"),
xs:yearMonthDuration("-P1Y4M")) – возвращает -2.5.
6. op:add-dayTimeDurations(
xs:dayTimeDuration("P1DT12H5M"),
xs:dayTimeDuration("P7DT12H")) – возвращает P9DT00H5M.
7. op:subtract-dayTimeDurations(
xs:dayTimeDuration("P3DT12H"),
xs:dayTimeDuration("P1DT09H30M")) – возвращает P2D02H30M.
8. op:multiply-dayTimeDuration(
xs:dayTimeDuration("PT3H17M"), 2) – возвращает PT6H34M.
9. op:divide-dayTimeDuration(
xs:yearMonthDuration("P2DT3H30M"), 2) – возвращает P1DT1H45M.
10. op:divide-dayTimeDuration-by-dayTimeDuration(
xs:dayTimeDuration("P2DT53M11S"),
xs:dayTimeDuration("P1DT10H)) – возвращает 1.4378349.
Кроме приведенных выше операторов в XPath и XQuery для выполнения арифметических действий над данными продолжительности, дат и времени определены следующие операторы:
op:subtract-dateTimes($arg1 as xs:dateTime, $arg2 as xs:dateTime) as xs:dayTimeDuration?– возвращает разницу между нормализованными значениями$arg1 и$arg2;
op:subtract-dates($arg1 as xs:date, $arg2 as xs:date) as xs:dayTimeDuration? – возвращает разницу между значениями$arg1 и$arg2;
op:subtract-times($arg1 as xs:time, $arg2 as xs:time) as xs:dayTimeDuration– возвращает разницу между преобразованными вxs:dateTimeзначениями$arg1 и$arg2;
op:add-yearMonthDuration-to-dateTime($arg1 as xs:dateTime, $arg2 as xs:yearMonthDuration) as xs:dateTime– возвращает сумму значений$arg1 и$arg2;
op:add-dayTimeDuration-to-dateTime($arg1 as xs:dateTime, $arg2 as xs:dayTimeDuration) as xs:dateTime– возвращает сумму значений$arg1 и$arg2;
op:subtract-yearMonthDuration-from-dateTime($arg1 as xs:dateTime, $arg2 as xs:yearMonthDuration) as xs:dateTime– возвращает разницу значений$arg1 и$arg2;
op:subtract-dayTimeDuration-from-dateTime($arg1 as xs:dateTime, $arg2 as xs:dayTimeDuration) as xs:dateTime– возвращает разницу значений$arg1 и$arg2;
op:add-yearMonthDuration-to-date($arg1 as xs:date, $arg2 as xs:yearMonthDuration) as xs:date– возвращает сумму значений$arg1 и$arg2;
op:add-dayTimeDuration-to-date( $arg1 as xs:date, $arg2 as xs:dayTimeDuration) as xs:date– возвращает сумму значений$arg1 и$arg2;
op:subtract-yearMonthDuration-from-date($arg1 as xs:date, $arg2 as xs:yearMonthDuration) as xs:date– возвращает разницу значений$arg1 и$arg2;
op:subtract-dayTimeDuration-from-date($arg1 as xs:date, $arg2 as xs:dayTimeDuration) as xs:date– возвращает разницу значений$arg1 и$arg2;
op:add-dayTimeDuration-to-time( $arg1 as xs:time, $arg2 as xs:dayTimeDuration) as xs:time– возвращает сумму значений$arg1 и$arg2;
op:subtract-dayTimeDuration-from-time( $arg1 as xs:time, $arg2 as xs:dayTimeDuration) as xs:time– возвращает разницу значений$arg1 и$arg2.
Примеры использования арифметических операторов для продолжительности, дат и времени:
1. op:subtract-dateTimes(xs:dateTime("2001-10-30T06:12:00"), xs:dateTime("2000-11-28T09:00:00Z")) – возвращает P0Y0M337T2H12M.
2. op:subtract-dates(xs:date("2000-09-15-05:00"), xs:date("2000-09-11+02:00")) – возвращает P4DT7H.
3. op:subtract-times(xs:time("11:12:00Z"), xs:time("04:00:00")) – возвращает PT2H12M.
4. op:add-yearMonthDuration-to-dateTime(
xs:dateTime("2000-10-30T11:12:00"),
xs:yearMonthDuration("P1Y2M")) – возвращает
"2001-12-30T11:12:00".
5. op:add-dayTimeDuration-to-dateTime(
xs:dateTime("2000-10-30T11:12:00"),
xs:dayTimeDuration("P3DT1H15M")) – возвращает
"2000-11-02T12:27:00".
6. op:subtract-yearMonthDuration-from-dateTime(
xs:dateTime("2000-10-30T11:12:00"),
xs:yearMonthDuration("P1Y2M")) – возвращает
"1999-08-30T11:12:00".
7. op:subtract-dayTimeDuration-from-dateTime(
xs:dateTime("2000-10-30T11:12:00"),
xs:dayTimeDuration("P3DT1H15M")) – возвращает
"2000-10-27T09:57:00".
8. op:add-yearMonthDuration-to-date(
xs:date("2000-10-30"),
xs:yearMonthDuration("P1Y2M")) – возвращает "2001-12-30".
9. op:add-dayTimeDuration-to-date(
xs:date("2004-10-30Z"),
xs:dayTimeDuration("P2DT2H30M0S")) – возвращает "2004-11-01".
10. op:subtract-yearMonthDuration-from-date(
xs:date("2000-10-30"),
xs:yearMonthDuration("P1Y2M")) – возвращает "1999-08-30".
11. op:subtract-dayTimeDuration-from-date(
xs:date("2000-10-30"),
xs:dayTimeDuration("P3DT1H15M")) – возвращает "2000-10-26".
12. op:add-dayTimeDuration-to-time(
xs:time("11:12:00"),
xs:dayTimeDuration("P3DT1H15M")) – возвращает "12:27:00".
13. op:subtract-dayTimeDuration-from-time(
xs:time("11:12:00"),
xs:dayTimeDuration("P3DT1H15M")) – возвращает "09:57:00".