
- •Лекция 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.6. Функции для узлов
В XPath и XQuery для узлов определены следующие функции:
fn:name($arg as node()?) as xs:string– возвращает имя узла (если аргумент не задан, возвращает имя текущего узла);
fn:local-name($arg as node()?) as xs:string– возвращает локальное имя узла (если аргумент не задан, возвращает локальное имя текущего узла);
fn:namespace-uri($arg as node()?) as xs:anyURI–пространство имен URI для узла (если аргумент не задан, возвращает пространство имен URI текущего узла);
fn:number($arg as xs:anyAtomicType?) as xs:double– возвращает значение$arg, преобразованное к числу с плавающей точкой или, если$argне задан, значение текущего узла, преобразованное к числу с плавающей точкой;
fn:lang($testlang as xs:string?, $node as node()) as xs:boolean– возвращаетtrue, если значение атрибутаxml:langдля узла$node(или, если аргумент$nodeне задан, для текущего узла) равно языку, указанному в первом аргументе, в противном случае возвращаетсяfalse;
op:is-same-node($parameter1 as node(), $parameter2 as node()) as xs:boolean– возвращаетtrue, если узел, заданный в аргументе$parameter1, является тем же узлом, что и узел, заданный в аргументе$parameter2, в противном случае возвращаетсяfalse;
op:node-before($parameter1 as node(), $parameter2 as node()) as xs:boolean– возвращаетtrue, если узел, заданный в аргументе$parameter1, предшествует узлу, заданному в аргументе$parameter2, в противном случае возвращаетсяfalse;
op:node-after($parameter1 as node(), $parameter2 as node()) as xs:boolean– возвращаетtrue, если узел, заданный в аргументе$parameter1, следует за узлом, заданным в аргументе$parameter2, в противном случае возвращаетсяfalse;
fn:root($arg as node()?) as node()?– возвращает корень дерева, к которому принадлежит узел (если аргумент не задан, возвращается корень дерева для текущего узла).
Примеры использования функций для узлов:
1. fn:name($node1)– возвращает имя узла, заданного в переменной$node1.
2. fn:local-name($node1) – возвращает локальное имя узла, заданного в переменной$node1.
3. fn:namespace-uri($node1) – возвращает пространство имен для имени узла, заданного в переменной$node1.
4. fn:number(xs:string("24")) – возвращает 2.4E1.
5. fn:lang(xs:string("en"), $node1) – возвращает true, если для узла $node1 задан атрибут xml:lang и его значение равно "en".
6. op:is-same-node($node1, $node2) – возвращает false.
7. op:node-before($node1, $node2)– возвращаетtrue, если узел$node1 предшествует узлу$node2.
8. op:node-after($node1, $node2)– возвращаетfalse, если узел$node1 предшествует узлу$node2.
9. fn:root($node1) – возвращает корневой узел узла$node1.
5.1.1.4.7. Функции и операторы для последовательностей
В XPath и XQuery для последовательностей определены следующие группы функций и операторов:
общие функции и операторы;
функции проверки количества элементов в последовательности;
функции и операторы для операций с множествами;
агрегатные функции;
функции, генерирующие последовательности.
5.1.1.4.7.1. Общие функции и операторы
В XPath и XQuery для последовательностей определены следующие общие функции и операторы:
op:concatenate($seq1 as item()*, $seq2 as item()*) as item()*– сцепляет последовательности, заданные в аргументах в одну последовательность;
fn:index-of($seqParam as xs:anyAtomicType*, $srchParam as xs:anyAtomicType) as xs:integer*– возвращает последовательность индексов тех элементов последовательности$seqParam, которые равны$srchParam;
fn:empty($arg as item()*) as xs:boolean– возвращаетtrue, если – пустая последовательность илиfalse– в противном случае;
fn:exists($arg as item()*) as xs:boolean– возвращаетtrue, если – не пустая последовательность илиfalse– в противном случае;
fn:distinct-values($arg as xs:anyAtomicType*) as xs:anyAtomicType*– возвращает последовательность, в которых все повторяющиеся элементы, за исключением одного, удалены;
fn:insert-before($target as item()*, $position as xs:integer, $inserts as item()*) as item()*– возвращает последовательность, в которой в исходную последовательность$targetвставлена, начиная с индекса$position, последовательность, заданная в$inserts;
fn:remove($target as item()*, $position as xs:integer) as item()*– возвращает последовательность, в которой из исходной последовательности$targetудален элемент с индексом$position;
fn:reverse($arg as item()*) as item()*– возвращает последовательность, в которой элементы последовательности$argпереставлены в обратном порядке;
fn:subsequence($sourceSeq as item()*, $startingLoc as xs:double, $length as xs:double) as item()*– возвращает последовательность, которая является подстрокой последовательности$sourceSeq, начиная с индекса$startingLocдлиной$length(если аргумент$lengthне задан, подстрока выделяется до конца строки);
fn:unordered($sourceSeq as item()*) as item()*– возвращает последовательность, в которой элементы последовательности$sourceSeq переставлены в случайном порядке.
Примеры использования общих функций и операторов последовательностей:
1. op:concatenate((1,4,8), (3,4,7))– возвращает последовательность (1,4,8,3,4,7).
2. fn:index-of((1,4,8,3,4,7)) – возвращает последовательность индексов (2,5).
3. fn:empty((2,5)) – возвращаетfalse.
4. fn:exists(()) – возвращает false.
5. fn:distinct-values((1,4,8,3,4,7)) – возвращает (1,4,8,3,7).
6. fn:insert-before((1,4,8,3,7),1,0) – возвращает (0,1,4,8,3,7).
7. fn:remove((0,1,4,8,3,7),2) – возвращает (0,4,8,3,7).
8. fn:reverse((0,4,8,3,7)) – возвращает (7,3,8,4,0).
9. fn:subsequence((0,4,8,3,7),2,3) – возвращает (4,8,3).
10. fn:subsequence((0,4,8,3,7),2) – возвращает (4,8,3,7).
11. fn:unordered ((0,4,8,3,7)) – возвращает (3,0,7,8,4).