
- •Лекция 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.2.1.1.2. Объявления переменных
Объявление переменнойс именемимя-переменной(типаQName), типом, определенным втипе-переменнойи начальным значением, задаваемымвыражением, имеет следующий вид:
declare variable $имя-переменнойasтип-переменной:=выражение;
Если заданы ключевое слово asитип-переменной, то создается переменная заданного типа. Если эти компоненты не заданы тип переменной определяется из типа результата вычислениявыражения.Выражениеможет содержать объявленные ранее переменные.
Переменные, объявленные без префикса пространства имен, не определены ни в одном пространстве имен и могут быть заданы только в главном модуле.
Переменная, объявленная в другом, импортируемом модуле, должна быть объявлена как внешняя переменная следующим образом:
declare variable $имя-переменнойasтип-переменнойexternal;
Если в этом объявлении задан тип переменной, он должен совпадать с типом переменной в импортируемом модуле.
Примеры задания переменных:
1. declare variable $aas xs:integer:=17;– задана целая переменная$aс начальным значением17.
2. declare variable $str:="abc";– задана строковая переменная$aс начальным значением"abc"(тип переменной определяется в результате вычисления выражения).
3. declare variable $math:pi as xs:double external; – задана переменная с двойной точностью $math:pi, объявленная в импортируемом модуле.
5.1.2.1.1.3. Объявления функций
Объявление функциис именемимя-функции(типаQName) имеет следующий вид:
declare functionимя-функции($имя-параметра-1asтип-параметра-1, …)
asтип-возвращаемого-значения
{
тело-функции
};
Если имя функции не имеет префикса, имя функции считается заданным в пространстве имен по умолчанию. Для каждого параметра задается его имя и тип. Если ключевое слово asитип-параметране задан, либо не задано ключевое словоasитип-возвращаемого-значения, по умолчанию принимается типitem()*, т.е. произвольная последовательность. После типа параметра или возвращаемого значения может следовать:
символ "?", означающий, что данный параметр может быть задан, а может быть не задан;
символ "*", означающий, что данный параметр может быть задан 0 и более раз;
символ "+", означающий, что данный параметр может быть задан 1 и более раз.
В теле-функциизадаются выражения (как правило, конструкторы), реализующие алгоритм функции.
Функции в XQuery могут быть рекурсивными, т.е. в теле функции может быть задан вызов самой функции.
В объявлениях функций не должно быть двух и более функций с одинаковыми расширенными именами и одинаковым количеством параметров.
Вызов функции имеет следующий вид:
имя-функции(аргумент-1, аргумент-2,…)
С помощью следующего объявления функция может быть задана как внешняя:
declare functionимя-функции($имя-параметра-1asтип-параметра-1, …)
asтип-возвращаемого-значения external;
В этом случае используется функция, заданная в импортируемом модуле. Количество параметров и их типы, а также тип возвращаемого значения для внешней и импортируемой функции должны совпадать.
Примеры объявления и использования функций приведены ниже.
5.1.2.1.1.4. Объявления опций
Объявления опций имеют следующий вид:
declare optionимя-опции "строковый-литерал";
Это объявление определяет опцию с заданным именем и строковым значением. Набор опций и их действия определяется используемым обработчиком запросов XQuery.