
- •Лекция 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.5.3. Шаги с использованием фильтров
Шаги с использованием фильтров имеют следующий синтаксис:
первичное-выражение[предикат]
Необязательный предикатв этом выражении имеет тот же смысл, что и при использовании осей поиска, апервичное-выражениеможет быть одним из следующих видов:
числовой литерал (литерал типа xs:integer,xs:decimalилиxs:double);
строковый литерал (литерал типа xs:string);
ссылка на переменную (имя переменной, перед которым стоит символ "$");
вызов функции.
Первичные выражения могут содержать также произвольное выражение, содержащее приведенные выше виды данных. При необходимости отдельные компоненты выражения могут быть заключены в скобки (для изменения приоритета выполнения операций).
В предикатах с использованием фильтров может использоваться выражение контекстного элемента – символ ".". Контекстный элемент может быть либо узлом, либо атомарным выражением.
Примеры использования фильтров:
1. (11 to 20)[6]– выбирает шестой элемент (число16) в последовательности от11до20.
2. (11 to 20)[. mod 2 eq 1]– выбирает нечетные элементы последовательности от11до20(числа11,13,15,17и19).
3. $header-node[fn:position() = (1 to 3)]– выбирает первые три элемента последовательности в переменной$header-node.
4. fn:doc("email.xml")/fn:root("header")– выбирает корневой элемент для элементаheaderв документеemail.xml.
5. $header-node/comment()– выбирает узлы комментариев для последовательности в переменной$header-node.
5.1.2. Язык xQuery
Одним из важнейших преимуществ при использовании языка XML для хранения данных является гибкость представления самых разнообразных видов информации из разных источников. Для обработки этих данных, в частности, для поиска и выборки по заданным критериям, необходимо соответствующее средство, подобное языку SQL, используемому в релятивистских базах данных.
Первую задачу – поиск необходимых данных в документах XML решает язык XPath 2.0. Язык XQueryбыл разработан как расширение XPath 2.0, позволяющее с помощью набора операторов сформировать запрос к документу XML и получить ответ в виде фрагмента документа XML или полного документа XML.
Спецификация языка XQuery(XQuery1.0) была принята консорциумом W3 в январе 2007 г. Отдельно была принята спецификация языкаXQueryX, в котором запрос к данным формируется как документ XML.
Из осей, определенных в XPath, обязательными для реализации обработчикамиXQueryявляются осиself,child,parent,descendant,descendant-or-selfиattribute. Поддержка осей ancestor, ancestor-or-self, following, following-sibling, preceding и preceding-sibling является необязательной и зависит от реализации.
5.1.2.1. Структура запроса xQuery
Запрос XQuery задается в текстовом файле с расширением .xq,.xqlили.xqueryи состоит из необязательного объявления версии, а также одного и более фрагментов, называемыхмодулями.
Объявление версии имеет следующий вид:
xquery version "номер-версии" encoding "кодировка";
Для номера-версииможно пока задать только значение"1.0". Необязательный параметрencodingзадает кодировку документа XQuery, например,"utf-8"или"windows-1251".
Модуль может быть либо главным модулем, либо библиотечным модулем.