
- •Лекция 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.2.2. Проверка узла
Оси выбирают набор узлов из дерева документа. Этот набор узлов уточняется с помощью проверки узлов (nodetest). В спецификацииXPathопределены два типа проверки узлов:
проверка узлов по имени (nametest);
проверка узлов по виду(kindtest).
При проверке узлов по именив качестве критерия поиска задается уточненное имя узла (литерал типаQName), т.е. префикс – имя или имена пространств имен, и локальное имя. Имена пространства имен и локальное имя отделяются друг от друга символами ":". Если имя определено в пространстве имен по умолчанию, то префикс отсутствует.
Если вместо префикса указан символ "*", выбирается узел с заданным локальным именем во всех пространствах имен. Если же символ "*" указан вместо имени узла, выбираются все узлы в заданном пространстве имен.
Если вместо уточненного имени узла задан символ "*", то выбор выполняется для контекстного узла.
Если в результате проверки несколько раз встречается один и тот же узел, то в результирующем наборе узлов остается только один экземпляр этого узла.
Примеры задания выражений проверки узлов по имени:
Для документа email.xmlможно задать следующие правила проверки:
1. self::header– выбираются все узлыheader.
2. child::header– выбираются все дочерние узлы (addressиsubject) всех узловheader.
3. parent::header– выбираются все родительские узлыmessageузловheader.
4. ancestor::header– выбираются все узлыmessageи корневой узелemail-folderузловheader.
5. ancestor-or-self::header – выбираются все узлы message, корневой узел email-folder и сами узлы header.
6. descendant::*– выбираются все потомки контекстного узла.
7. attribute::from– выбираются все атрибуты всех узловfrom.
8. attribute::*– выбираются все атрибуты контекстного узла.
Проверка по виду узлареализуется с помощью следующих функций:
element(имя-элемента)– выбирает все узлы-элементы с заданнымименем-элемента(если в качестве аргумента задан символ "*", выбираются все узлы-элементы);
element(имя-элемента, тип-элемента)– выбирает все узлы-элементы с заданнымименем-элементаи заданнымтипом-элементав схеме документа (тип узла определяется либо значением атрибутаtypeв объявлении элемента, либо имени простого или комплексного типа элемента). Если в качествеимени-элементазадан символ "*", выбираются все узлы-элементы, если же в качестветипа-элементазадан символ "*", выбираются узлы-элементы всех типов;
schema-element(имя-элемента)– выбирает все узлы-элементы с заданным в схеме документа объявлением элемента с заданным именем типа QName;
node()– выбирает все узлы без учета их типа;
text()– выбирает все текстовые узлы;
comment()– выбирает все узлы-комментарии;
processing-instruction(имя-программы)– выбирает все инструкции по обработке с заданнымименем-программыобработки (если аргумент не задан, выделяются все инструкции по обработке);
attribute(имя-атрибута)– выбирает все узлы-атрибуты с заданным именем (если в качестве аргумента задан символы "*" или аргумент не задан, выделяются все узлы-атрибуты);
attribute(имя-атрибута, тип-атрибута)– выбирает все узлы-атрибуты с заданным именем и заданным типом в схеме документа (тип узла определяется либо значением атрибутаtypeв объявлении атрибута, либо имени простого или комплексного типа атрибута). Если в качествеимени-атрибутазадан символ "*", выделяются все узлы-атрибуты, если же в качестветипа-атрибута задан символ "*", выделяются узлы-атрибуты всех типов;
schema-attribute(имя-атрибута)– выбирает все узлы-атрибуты с заданным в схеме документа объявлением атрибутом с заданным именем типа QName;
document-node(аргумент) –выбирает все корневые узлы документа, содержимое которых состоит в точности из одного вложенного элемента. В качестве аргумента задается либо одна из приведенных выше функций element(), либо функция schema-element().
Примеры задания выражений проверки узлов по виду:
Для документа email.xmlможно задать следующие правила проверки:
1. descendant::text()– выделяет все текстовые элементы потомков контекстного узла.
2. child::element(subject) – выбирает все дочерние элементы с именемsubjectдля контекстного узла.
3. child::element() – выбирает все дочерние элементы контекстного узла (без текстовых узлов и узлов-атрибутов).
4. child::element(*, xs:string) – выбирает все дочерние элементы контекстного узла, содержимое которых является текстовым.
5. attribute::attribute(value)– выбирает все атрибуты контекстного узла.