
- •Лекция 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.7. Последовательности
В языке XPath определены выражения, содержащие последовательности данных, заключенные в круглые скобки и отделенные друг от друга запятыми. Элементами последовательности могут быть переменные, атомарные значения или узлы. Если элементы последовательности – целые числа, их можно задать с помощью диапазона значений, который имеет следующий формат:
начальное-значениеtoконечное-значение
Примеры последовательностей:
1. (1, 3, 5, 7, 9)– последовательность целых чисел1,3,5,7и9.
2. (1 to 10, 15)– последовательность целых чисел от1до10и число15.
3. ($a1, $a2)– последовательность из двух переменных:$a1и$a2.
5.1.1.3.8. Циклы
Циклв XPath имеет следующий формат:
for$имя-1inвыражение-1[, $имя-2inвыражение-2…]
returnвыражение
Переменные $имя-1,$имя-2и т.д. являются переменными цикла. Цикл может содержать одну или несколько переменных цикла. Если цикл содержит две и более переменных цикла, то циклы являются вложенными, т.е. цикл, содержащий переменную$имя-1, является внешним, цикл, содержащий переменную$имя-2, является вложенным во внешний цикл и т.д.
Переменные цикла последовательно принимают значения узлов и/или атомарных значений, полученных в результате вычисления своего выражения. При этом каждый раз вычисляется выражениепосле словаreturn., которое и является результатом выполнения выражения.
Примеры циклов:
1. for $a in (1 to 5) return $a– цикл возвращает последовательность чисел от1до5.
2. for $a in (1 to 3), $b in (1, 2) return $a + $b– цикл возвращает последовательность чисел(2,3,3,4,4,5).
5.1.1.3.9. Квантификаторы
Квантификаторы в XPathопределяют либо существование хотя бы одного узла последовательности с определенным свойством, либо выделение всех узлов последовательности с определенным свойством.
В первом случае квантификатор, называемый квантификатором существования, записывается следующим образом:
some$имя-1inвыражение-1 [, $имя-2inвыражение-2…]
satisfies выражение
Сначала вычисляется выражение-1. Затем переменная последовательно принимает значения узлов и/или атомарных значений, полученных в результате вычисления своего выражения. При этом каждый раз вычисляется из последовательности узлов, полученной в результате вычислениявыражения-1. Аналогичным образом выполнятся операции и для остальных имен и выражений. Все полученные значения каждый раз подставляются ввыражение. Как только одно из значений выражения станет равнымtrue, вычисления прекращаются и квантификатор возвращаетtrue. Если все возвращаемые в ходе подстановки значения возвращаютfalse, квантификатор возвращаетfalse.
Во втором случае квантификатор, называемый квантификатором всеобщности, записывается следующим образом:
every$имя-1inвыражение-1 [, $имя-2inвыражение-2…]
satisfies выражение
Вычисление значения выполняется также как для предыдущего квантификатора, но квантификатор возвращает true, только если все подстановки возвращаютtrue. Если при очередной подстановке возвращается значениеfalse, вычисления прекращаются и квантификатор возвращаетfalse.
Примеры квантификаторов:
1. some $a in (1, 2, 3, 4), $b in (1, 2)
satisfies $a + $b = 5 – возвращает true.
2. every $i in (1, 4.8, 12, 42)
satisfies $i instance of xs:integer – возвращает false.