Edge Rewrite
// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a24187483dd4bd4a

Jump to content

FLWOR

From Wikipedia, the free encyclopedia

FLWOR (pronounced 'flower') is an expression in the XQuery programming language that supports iteration and binding of variables to intermediate results. FLWOR is an acronym for FOR, LET, WHERE, ORDER BY, RETURN.[1] 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

Example

[edit]
   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>

Example using Microsoft SQL Server

[edit]
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);

References

[edit]
  1. Walmsley, Priscilla (2007). XQuery. Sebastopol, CA, USA: O'Reilly Media. p. 73. ISBN 978-0-596-00634-1.
[edit]