Simple XQuery FLWOR Expressions

The simplest XQuery FLWOR expression might be something like this:

              for $v in $doc//video return $v


This returns all of the video elements in $doc.

We can add a bit of substance by adding XQuery where and return clauses:

              for $v in $doc//video

              where $v/year = 1999

              return $v/title


This returns all of the titles of videos released in 1999.

If you know SQL, that XQuery probably looks reassuringly similar to the equivalent SQL statement:

              SELECT v.title 

              FROM video v 

              WHERE v.year = 1999


And if you know XPath, you might be wondering why our XQuery cannot be written as this:



Well, you can. This XPath expression is completely equivalent to the FLWOR expression above, and furthermore, it is a legal XQuery query. In fact, every legal XPath expression is also legal in XQuery. Thus the first query in this section can be written as:



Which style you prefer seems to depend on where you are coming from: if you have been using XML for years, especially XML with a deep hierarchy as found in "narrative" documents, then you will probably be comfortable with path expressions. But if you are more used to thinking of your data as representing a table, then the FLWOR style might suit you better.

As you will see, FLWOR expressions are a lot more powerful than path expressions when it comes to doing joins. But for simple queries, the capabilities overlap and you have a choice. Although it might be true that in SQL every query is a SELECT statement, it is not so that in XQuery every query has to be a FLWOR expression.

Free Stylus Studio XML Training:
W3C Member