Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ППТС-2 / Лекции / Lect4-05.doc
Скачиваний:
6
Добавлен:
12.05.2015
Размер:
645.12 Кб
Скачать

5.1.2.1.2. Библиотечный модуль

Модуль, не содержащий тела запроса, называется библиотечным модулем. Первым оператором библиотечного модуля является оператор объявления модуля

module namespaceпространство-имен="целевое-URI";

В параметре задается префикс целевого пространства имен в модуле, а в его значении "целевое-URI" задается идентификатор ресурса для целевого пространства имен.

Имя каждой переменной и функции, объявленной в модуле, должно быть тем же самым, что и пространство-именв операторе объявления модуля.

Пример задания оператора объявления модуля:

module namespace math="http://example.org/math-functions";– объявляет модуль с целевым пространством имен с префиксомmathпо адресу"http://example.org/math-functions".

5.1.2.1.3. Комментарии

В прологе или теле запроса могут быть заданы комментарии. Комментарии, как и в программировании, служат только для пояснения и не влияют на обработку запроса.

Комментарий начинается с символов "" и заканчивается символами "". Комментарии в XQuery могут быть вложенными.

Пример комментария:

(: Определение переменной$var :)

5.1.2.2. КонструкторыXQuery

В языке XQueryопределены специальные выражения – конструкторы, создающие структуры XML в формируемом запросе. Конструкторы определены для узлов документов, элементов, атрибутов, текстовых узлов и узлов инструкций для обработки. ЯзыкXQueryобеспечивает два вида конструкторов:

  • прямой конструктор (direct constructor);

  • вычисляемый конструктор (computed constructor).

5.1.2.2.1. Прямой конструктор

В прямом конструкторе элемента имя создаваемого элемента является константой. В этом случае элемент создается в соответствии с правилами синтаксиса XML и может содержать вложенные элементы.

В прямой конструктор могут включаться выражения, заключенные в фигурные скобки "{" и "}". При создании элемента эти выражения будут вычислены и заменены своим результатом.

Если символы "{" и "}" используются в конструкторе как обычные символы, они должны быть удвоены, т.е. заменены символами "{{" и "}}". Можно также использовать ссылки на символы:{для символа "{" и}для символа "}".

Результатом действия конструктора является новый узел-элемент.

Начальный тег конструктора и вложенных элементов может содержать один и более атрибутов. Имя атрибута должно быть типа QName, а значение – строкой, заключенной в одиночные или двойные апострофы. Так же, как и содержимое элемента, значение атрибута может содержать вычисляемые выражения в фигурных скобках "{" и "}".

Каждый атрибут в прямом конструкторе элемента создает свой собственный узел-атрибут.

Текстовым значением созданного узла является конкатенация содержимого всех входящих в него текстовых узлов.

Прямые конструкторы узлов комментариев и узлов инструкций по обработке записываются в конструкторе в том виде, в каком они появятся в документе XML.

Пример задания прямого конструктора:

Запрос на обработку с использованием прямого конструктора имеет следующий вид:

xquery version "1.0";

declare variable $email-server as xs:string:="mail.com";

<message>

<header>

<address>

<from value="{fn:concat('ivanov','@',$email-server)}"/>

<to value="{fn:concat('sidorov','@',$email-server)}"/>

</address>

<subject>О встрече</subject>

</header>

<body>{fn:concat("Встреча сегодня ",

fn:substring(xs:string(fn:current-date()),1,10),

"в 12.30")}</body>

</message>

Результат обработки запроса имеет следующий вид:

<message>

<header>

<address>

<from value="ivanov@mail.com"/>

<to value="sidorov@mail.com"/>

</address>

<subject>О встрече</subject>

</header>

<body>Встреча сегодня 2008-03-01 в 12.30</body>

</message>

Соседние файлы в папке Лекции