FLWOR
From Wikipedia, the free encyclopedia
(Redirected from FLWR)
|
|
The topic of this article may not meet Wikipedia's general notability guideline. Please help to establish notability by adding reliable, secondary sources about the topic. If notability cannot be established, the article is likely to be merged, redirected, or deleted. (August 2011) |
| This article does not cite any references or sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (August 2011) |
The programming language XQuery defines FLWOR (pronounced 'flower') as an expression that supports iteration and binding of variables to intermediate results. FLWOR is an acronym: FOR, LET, WHERE, ORDER BY, RETURN. FLWOR is loosely analogous to SQL's SELECT-FROM-WHERE and can be used to provide join-like functionality to XML documents.
- for creates a sequence of nodes
- let binds a sequence to a variable
- where filters the nodes on a boolean expression
- order by sorts the nodes
- return gets evaluated once for every node
[edit] Example
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>
First column of the XQuery request shows the for, let, where, order by and return keywords of the FLWOR paradigm. In plain English, this could be read as "Get all departments that have more than ten employees, order these departments by decreasing average salary, and return a report of department numbers, head counts and average salary in each big department". The result could look like:
<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>
[edit] Example using MS 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);
[edit] External links
| This programming language-related article is a stub. You can help Wikipedia by expanding it. |