
- •Лекция 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.3.4. Функции поиска соответствия в строках
В XPathопределены следующие функции для строковых значений:
fn:contains($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean– возвращаетtrue, если строка $arg1содержит строку$arg2 иfalse– в противном случае;
fn:starts-with($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean– возвращаетtrue, если строка $arg1начинается со строки$arg2 иfalse– в противном случае;
fn:ends-with($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean– возвращаетtrue, если строка $arg1заканчивается строкой$arg2 иfalse– в противном случае;
fn:substring-before($arg1 as xs:string?, $arg2 as xs:string?) as xs:string– возвращает часть строки$arg1, которая следует перед строкой$arg2, содержащейся в первой строке (если вторая строка не содержится в первой строке, возвращается пустая строка);
fn:substring-after($arg1 as xs:string?, $arg2 as xs:string?) as xs:string– возвращает часть строки$arg1, которая следует после строки$arg2, содержащейся в первой строке (если вторая строка не содержится в первой строке, возвращается пустая строка).
Примеры использования функций поиска соответствия в строках:
1. fn:contains("abcdef","de") – возвращает true.
2. fn:starts-with("abcdef","de") – возвращает false.
3. fn:ends-with("abcdef","f") – возвращает true.
4. fn:substring-before("12/10","/") – возвращает строку "12".
5. fn:substring-after("12/10","/") – возвращает строку"10".
5.1.1.4.3.5. Функции с использованием регулярных выражений
В XPathиXQueryопределены следующие функции с использованием регулярных выражений:
fn:matches($input as xs:string?, $pattern as xs:string, $flags as xs:string) as xs:boolean– возвращаетtrue, если в строке$inputвстречается шаблон, заданному в строке$pattern, иначе возвращаетfalse(необязательный параметр$flagsсодержит символы-флажки, задающие условия применения шаблона);
fn:replace($input as xs:string?, $pattern as xs:string, $replacement as xs:string, $flags as xs:string) as xs:string– возвращает строку, которая получается при замене в строке$inputсоответствий шаблону, заданному в строке$pattern, строкой, заданной в параметре$replacement(необязательный параметр$flagsсодержит символы-флажки, задающие условия применения шаблона);
fn:tokenize($input as xs:string?, $pattern as xs:string, $flags as xs:string) as xs:string*– возвращает последовательность строк, полученную разбиением исходной строки$inputпо разделительным подстрокам, заданным в шаблоне$pattern(необязательный параметр$flagsсодержит символы-флажки, задающие условия применения шаблона).
Параметр $flagsв приведенных функциях может содержать следующие флажки:
s– метасимвол "." соответствует любому символу строки (если флажокsне задан, метасимвол "." соответствует любому символу строки, за исключением символа перехода на новую строку);
m– исходная строка рассматривается как строка, состоящая из нескольких строк, если она содержит символы перехода на новую строку (если флажокmне задан, строка рассматривается как одна строка при использовании метасимволов поиска в начале строки "^" и в конце строки "$");
i– поиск по шаблону не зависит от регистра букв (заглавные и строчные буквы считаются одинаковыми);
x– пробельные символы перед поиском соответствия шаблону удаляются из строки, если они не заданы в шаблоне как класс символов (например, "\s").
Примеры использования регулярных выражений:
1. fn:matches("abcdef","de") – возвращаетtrue.
2. fn:matches("abcdef","DE") – возвращает false.
3. fn:matches("abcdef","DE","i") – возвращает true.
4. fn:matches("AB CD","BC") – возвращает false.
5. fn:matches("AB CD","bc","ix") – возвращает true.
6. fn:matches("AB CD","b\sc","ix") – возвращает true.
7. fn:matches("AB
CD","B.*C") – возвращает false.
8. fn:matches("AB
CD","B.*C","s") – возвращает true.
9. fn:matches("AB
CD","^C") – возвращает false.
10. fn:matches("AB
CD","^C","m") – возвращаетtrue.
11. fn:replace("aabcdaefaad","aa","a") – возвращает строку "abcdaefad".
12. fn:tokenize("a:b cd:f","(:| )") – возвращает строки "a", "b", "cd" и "f".