Misplaced Pages

FLWOR

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
Type of expression in the XQuery programming language
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
The topic of this article may not meet Misplaced Pages's general notability guideline. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merged, redirected, or deleted.
Find sources: "FLWOR" – news · newspapers · books · scholar · JSTOR (August 2011) (Learn how and when to remove this message)
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.
Find sources: "FLWOR" – news · newspapers · books · scholar · JSTOR (June 2016) (Learn how and when to remove this message)
(Learn how and when to remove this message)

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

Example

   for $d in doc("depts.xml")//deptno
   let $e := doc("emps.xml")//employee
   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

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.

External links


Stub icon

This programming-language-related article is a stub. You can help Misplaced Pages by expanding it.

Categories: