FLWOR

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.[1] FLWOR is loosely analogous to SQL's SELECT-FROM-WHERE and can be used to provide join-like functionality to XML documents.

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>

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);

References

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


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.