Операторы for, let и return

Операторы for и let имеют следующий вид:

for $переменная-1 at $ переменная-цикла-1 as тип-1 in выражение-1,

$переменная-2 at $ переменная-цикла-2 as тип-2 in выражение-2,…

 

let $переменная-1 as тип-1 := выражение-1,

$переменная-2 as тип-2 := выражение-2,…

Операторы for и let генерируют упорядоченную последовательность узлов и/или атомарных значений. В выражении может быть более одного оператора for и/или let, но обязательно должен быть хотя бы один из них. Каждое выполнение операторов for и let формируют кортеж (turple) – упорядоченный набор из одной или нескольких переменных.

В простом случае в операторе for определена одна переменная и заданное для нее выражение (значение этого выражения называется связывающей последовательностью для переменной). Оператор for выполняет итерацию по элементам связывающей последовательности. Если же в операторе for определены несколько переменных, итерация выполнятся для каждой переменной по элементам ее связывающей последовательности. Результатом этих операций является поток кортежей (turple stream), содержащий один кортеж для каждой комбинации значений в соответствующих связывающих последовательностях.

Оператор let также может содержать одну и более переменных с заданными для каждой из них выражениями. Но, в отличие от оператора for, этот оператор связывает каждую переменную с результатом связанного с ней выражения без итерации. Связи переменных, генерируемые операторами let, добавляются к связанным кортежам, генерируемым операторами for. Если в выражении нет операторов for, операторы let генерируют один кортеж, содержащий все связанные переменные.

Для каждой переменной, задаваемой в операторах for и let, может быть определен (после ключевого слова as) тип переменной. Тип результата вычисления выражения для переменной должен совпадать с заданным типом переменной.

В операторе for каждая переменная может иметь заданную для нее (после ключевого слова at) индексную переменную, которая имеет тип xs:integer. При итерации переменных по элементам связывающей последовательности, индексная переменная выполняет итерацию над целыми, представляющими индексы этих элементов в связывающей последовательности, начиная с 1. Расширенное имя QName для индексной переменной должно отличаться от расширенного имени QName переменной, для которой задана индексная переменная.

Обязательный оператор return вычисляет выражение (обычно конструктор) для каждого кортежа в потоке кортежей, затем результаты этих вычислений сцепляются друг с другом, образуя результат выполнения всего выражения FLWOR.

 

Примеры задания операторов for, let и return:

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

1. Вывод сообщений, содержащих комментарий с номером сообщения в почтовом ящике, а также адресата и тему сообщения для сообщений в документе email.xml:

xquery version "1.0";

for $name at $i in doc("email.xml")//message

return

<message>

{comment{fn:concat("Сообщение ", $i)}}

{$name/header/address/to}

{$name/header/subject}

</message>

Будут выведены следующие сообщения:








Дата добавления: 2015-03-19; просмотров: 697;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.