FLWOR-выражение
FLWR-выражение (for, let, where, return) стало FLWOR-выражением (где "O" обозначает "order by").
Каждый раздел order by может содержать несколько ключей сортировки, каждый из которых включает выражение и может включать указания, должна ли быть сортировка устойчивой, должна ли она производиться по возрастанию или же по убыванию, считается ли пустая последовательность большей или же меньшей любого айтема, и должна ли использоваться схема сортировки (collation sequence), отличная от схемы, применяемой по умолчанию.
Каждое выражение в разделе order by вычисляется для каждого связывания переменных в разделах for и let, которое не исключается разделом where. Если какое-либо выражение производит последовательность из более чем одного айтема, то возвращается ошибка. Все значения типа xdt:untypedAtomic приводятся к xs:string. Если для какого-либо ключа сортировки типы значений различаются (после подстановки подтипа и расширения типа), то возвращается ошибка. Следующий запрос возвращает данные о недавно нанятых служащих, упорядоченные сначала по длительности обучения, а затем по номерам отделов. for $e in doc('employees.xml')//employee where current-date() - $e/hireDate < xdt:dayTimeDuration('P60D') order by $e/HSYears + $e/CollegeYears descending, $e/dept empty greatest return $e
Выбор того, считается ли пустая последовательность большей или меньшей любого айтема, может быть сделан в прологе запроса. В реализации XQuery любой из этих вариантов может быть принят по умолчанию.
В FLWOR-выражении также появился раздел at, который связывает позицию айтема в последовательности одновременно со связыванием значения этого айтема.
Следующий запрос возвращает данные о десяти служащих, работающих в компании дольше всех других служащих: for $e at $p in (for $oe in //employee order by $oe/@hireDate descending return $oe) where $p <= 10 return $e