ФЛВОР
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Язык программирования XQuery определяет FLWOR (произносится как «цветок») как выражение, поддерживающее итерацию и привязку переменных к промежуточным результатам. FLWOR — это аббревиатура: FOR , LET , WHERE, ORDER BY, RETURN. [1] FLWOR во многом аналогичен оператору SQL SELECT -FROM-WHERE и может использоваться для обеспечения функций соединения с документами XML .
- for создает последовательность узлов
- let связывает последовательность с переменной
- где фильтрует узлы логического выражения
- упорядочить по сортировке узлов
- return оценивается один раз для каждого узла
Пример
[ редактировать ] for $d in doc("depts.xml")//deptno
let $e := doc("emps.xml")//employee[deptno = $d]
where count($e) >= 10
order by avg($e/salary) descending
return
<big-dept>
{ $d,
<headcount>{count($e)}</headcount>,
<avgsal>{avg($e/salary)}</avgsal>
}
</big-dept>
В первом столбце запроса XQuery показаны ключевые слова for , let , where , order by и return парадигмы FLWOR. На простом английском языке это можно прочитать так : «Получить все отделы, в которых работает более десяти сотрудников, упорядочить эти отделы по уменьшению средней зарплаты и вернуть отчет о номерах отделов, численности сотрудников и средней зарплате в каждом большом отделе» . Результат может выглядеть так:
<big-dept>
<deptno>17</deptno>
<headcount>25</headcount>
<avgsal>12500</avgsal>
</big-dept>
<big-dept>
<deptno>24</deptno>
<headcount>18</headcount>
<avgsal>11327</avgsal>
</big-dept>
<big-dept>
<deptno>3</deptno>
<headcount>32</headcount>
<avgsal>10725</avgsal>
</big-dept>
Пример использования Microsoft SQL Server
[ редактировать ]DECLARE @xml XML
SET @xml =
'<root_element>
<branch_element>
<item_1>42</item_1>
<item_2>27</item_2>
</branch_element>
<branch_element>
<item_1>a</item_1>
<item_2>b</item_2>
</branch_element>
</root_element>'
SELECT
x.y.query('for $s in self::node() return $s//item_1/text()') as i,
x.y.query('for $s in self::node() return $s//item_2/text()') as j
FROM @xml.nodes('/root_element') AS x(y);
Ссылки
[ редактировать ]- ^ Уолмсли, Присцилла (2007). XQuery . Севастополь, Калифорния, США: O'Reilly Media. Мистер. 73. ИСБН 978-0-596-00634-1 .
Внешние ссылки
[ редактировать ]- XML-запрос W3C (XQuery) — выражения FLWOR
- Примеры ФЛВОР
- Введение в FLWOR
- https://web.archive.org/web/20111008001258/http://w3schools.com/xquery/xquery_flwor.asp