0% found this document useful (0 votes)
40 views

XQuery

XQuery is a query language for XML that is analogous to SQL for databases. It allows users to extract elements, attributes, and texts from XML documents. XQuery is built on XPath expressions and is a W3C standard supported by major databases. A FLWOR expression in XQuery uses the keywords For, Let, Where, Order By, and Return to select nodes from XML documents based on conditions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views

XQuery

XQuery is a query language for XML that is analogous to SQL for databases. It allows users to extract elements, attributes, and texts from XML documents. XQuery is built on XPath expressions and is a W3C standard supported by major databases. A FLWOR expression in XQuery uses the keywords For, Let, Where, Order By, and Return to select nodes from XML documents based on conditions.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

What is XQuery

XQuery is a functional query language used to retrieve information stored in XML format. It is same as for XML what SQL
is for databases. It was designed to query XML data.

XQuery is built on XPath expressions. It is a W3C recommendation which is supported by all major databases.

The as it is definition of XQuery given by its official documentation is as follows:

"XQuery is a standardized language for combining documents, databases, Web pages and almost anything else. It is very
widely implemented. It is powerful and easy to learn. XQuery is replacing proprietary middleware languages and Web
Application development languages. XQuery is replacing complex Java or C++ programs with a few lines of code. XQuery
is simpler to work with and easier to maintain than many other alternatives."

XQuery was designed by W3C and first appeared in 2007. It became the W3C recommendation on January 23, 2007. XQuery
3.0 is a W3C recommendation from April 8, 2014.

What does it do

XQuery is a functional language which is responsible for finding and extracting elements and attributes from XML documents.

It can be used for following things:

o To extract information to use in a web service.


o To generates summary reports.
o To transform XML data to XHTML.
o Search Web documents for relevant information.

XQuery Features

There are many features of XQuery query language. A list of top features are given below:

o XQuery is a functional language. It is used to retrieve and query XML based data.
o XQuery is expression-oriented programming language with a simple type system.
o XQuery is analogous to SQL. For example: As SQL is query language for databases, same as XQuery is query
language for XML.
o XQuery is XPath based and uses XPath expressions to navigate through XML documents.
o XQuery is a W3C standard and universally supported by all major databases.

Advantages of XQuery
o XQuery can be used to retrieve both hierarchal and tabular data.
o XQuery can also be used to query tree and graphical structures.
o XQUery can used to build web pages.
o XQuery can be used to query web pages.
o XQuery is best for XML-based databases and object-based databases. Object databases are much more flexible and
powerful than purely tabular databases.
o XQuery can be used to transform XML documents into XHTML documents.

XQuery - Environment Setup

This chapter elaborates how to set up XQuery library in a local development environment.

We are using an open source standalone XQuery processor Saxon Home Edition (Saxon-HE) which is widely used. This
processor supports XSLT 2.0, XQuery 3.0, and XPath 3.0 and is highly optimized for performance. Saxon XQuery
processor can be used without having any XML database. We'll use a simple XML document as our database in our
examples.
In order to use Saxon XQuery processor, you should have saxon9he.jar, saxon9-test.jar, saxon9-unpack, saxon9-xqj.jar in
your application's classpath. These jar files are available in the download file SaxonHE9-6-0-1J.zip Download SaxonHE9-
6-0-1J.zip.

Example

We'll use the Java-based Saxon XQuery processor to test books.xqy, a file containing XQuery expression against our
sample XML document, i.e., books.xml.

In this example, we'll see how to write and process a query to get the title elements of the books whose price is greater than
30.

books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>

<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>

<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>40.50</price>
</book>

<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>

<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>

</books>
books.xqy
for $x in doc("books.xml")/books/book
where $x/price>30
return $x/title
XQueryTester.java
package com.tutorialspoint.xquery;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQDataSource;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQResultSequence;

import com.saxonica.xqj.SaxonXQDataSource;

public class XQueryTester {


public static void main(String[] args){
try {
execute();
}

catch (FileNotFoundException e) {
e.printStackTrace();
}

catch (XQException e) {
e.printStackTrace();
}
}

private static void execute() throws FileNotFoundException, XQException{


InputStream inputStream = new FileInputStream(new File("books.xqy"));
XQDataSource ds = new SaxonXQDataSource();
XQConnection conn = ds.getConnection();
XQPreparedExpression exp = conn.prepareExpression(inputStream);
XQResultSequence result = exp.executeQuery();

while (result.next()) {
System.out.println(result.getItemAsString(null));
}
}
}
Steps to Execute XQuery against XML
 Step 1 − Copy XQueryTester.java to any location, say, E: > java
 Step 2 − Copy books.xml to the same location, E: > java
 Step 3 − Copy books.xqy to the same location, E: > java
 Step 4 − Compile XQueryTester.java using console. Make sure you have JDK 1.5 or later installed on your machine
and classpaths are configured. For details on how to use JAVA, see our JAVA Tutorial
E:\java\javac XQueryTester.java
 Step 5 − Execute XQueryTester
E:\java\java XQueryTester
Output

You'll get the following result −


<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
Understanding Example
 books.xml represents the sample data.
 books.xqy represents the XQuery expression which is to be executed on books.xml. We'll understand the expression
in details in next chapter.
 XQueryTester, a Java-based XQuery executor program, reads the books.xqy, passes it to the XQuery expression
processor, and executes the expression. Then the result is printed.

XQuery - First Application

Example

Following is a sample XML document containing the records of a bookstore of various books.

books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>

<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>

<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>70.50</price>
</book>

<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>

<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>

</books>

Following is a sample Xquery document containing the query expression to be executed on the above XML document. The
purpose is to get the title elements of those XML nodes where the price is greater than 30.
books.xqy
for $x in doc("books.xml")/books/book
where $x/price>30
return $x/title
Result
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
Verify Result

To verify the result, replace the contents of books.xqy (given in the Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program.

XQuery Expressions

Let us understand each piece of the above XQuery expression.

Use of functions
doc("books.xml")

doc() is one of the XQuery functions that is used to locate the XML source. Here we've passed "books.xml". Considering
the relative path, books.xml should lie in the same path where books.xqy is present.

Use of XPath expressions


doc("books.xml")/books/book
XQuery uses XPath expressions heavily to locate the required portion of XML on which search is to be made. Here we've
chosen all the book nodes available under books node.

Iterate the objects


for $x in doc("books.xml")/books/book

XQuery treats xml data as objects. In the above example, $x represents the selected node, while the for loop iterates over the
collection of nodes.

Apply the condition


where $x/price>30

As $x represents the selected node, "/" is used to get the value of the required element; "where" clause is used to put a
condition on the search results.

Return the result


return $x/title

As $x represents the selected node, "/" is used to get the value of the required element, price, title; "return" clause is used to
return the elements from the search results.

XQuery - FLWOR

FLWOR is an acronym that stands for "For, Let, Where, Order by, Return". The following list shows what they account for
in a FLWOR expression −

 F - For - Selects a collection of all nodes.


L - Let - Puts the result in an XQuery variable.
 W - Where - Selects the nodes specified by the condition.
 O - Order by - Orders the nodes specified as per criteria.
 R - Return - Returns the final result.
Example

Following is a sample XML document that contains information on a collection of books. We will use a FLWOR
expression to retrieve the titles of those books with a price greater than 30.

books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>

<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>

<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>70.50</price>
</book>
<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>

<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>

</books>

The following Xquery document contains the query expression to be executed on the above XML document.

books.xqy
let $books := (doc("books.xml")/books/book)
return <results>
{
for $x in $books
where $x/price>30
order by $x/price
return $x/title
}
</results>
Result
<title lang="en">Learn XQuery in 24 hours</title>
<title lang="en">Learn .Net in 24 hours</title>
Verify Result

To verify the result, replace the contents of books.xqy (given in theEnvironment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program.

XQuery - HTML Format

XQuery can also be easily used to transform an XML document into an HTML page. Take a look at the following example
to understand how XQuery does it.

Example

We will use the same books.xml file. The following example uses XQuery extract data from books.xml and create an
HTML table containing the titles of all the books along with their respective prices.

books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>

<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>

<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>70.50</price>
</book>

<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>

<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>
</books>

Given below is the Xquery expression that is to be executed on the above XML document.

books.xqy
let $books := (doc("books.xml")/books/book)
return <table><tr><th>Title</th><th>Price</th></tr>
{
for $x in $books
order by $x/price
return <tr><td>{data($x/title)}</td><td>{data($x/price)}</td></tr>
}
</table>
</results>
Result
<table>
<tr>
<th>Title</th>
<th>Price</th>
</tr>
<tr>
<td>Learn XPath in 24 hours</td>
<td>16.50</td>
</tr>
<tr>
<td>Learn Java in 24 Hours</td>
<td>30.00</td>
</tr>
<tr>
<td>Learn XQuery in 24 hours</td>
<td>50.00</td>
</tr>
<tr>
<td>Learn .Net in 24 hours</td>
<td>70.50</td>
</tr>
</table>
Verify Result

To verify the result, replace the contents of books.xqy (given in the Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program.

XQuery Expressions

Here we've used the following XQuery expressions −

 data() function to evaluate the value of the title element, and


 {} operator to tell the XQuery processor to consider data() as a function. If {} operator is not used, then data() will be
treated as normal text.

XQuery - XPath
XQuery is XPath compliant. It uses XPath expressions to restrict the search results on XML collections. For more details on
how to use XPath, see our XPath Tutorial.

Recall the following XPath expression which we have used earlier to get the list of books.

doc("books.xml")/books/book
XPath Examples

We will use the books.xml file and apply XQuery to it.

books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>

<book category="JAVA">
<title lang="en">Learn Java in 24 Hours</title>
<author>Robert</author>
<year>2005</year>
<price>30.00</price>
</book>

<book category="DOTNET">
<title lang="en">Learn .Net in 24 hours</title>
<author>Peter</author>
<year>2011</year>
<price>40.50</price>
</book>

<book category="XML">
<title lang="en">Learn XQuery in 24 hours</title>
<author>Robert</author>
<author>Peter</author>
<year>2013</year>
<price>50.00</price>
</book>

<book category="XML">
<title lang="en">Learn XPath in 24 hours</title>
<author>Jay Ban</author>
<year>2010</year>
<price>16.50</price>
</book>

</books>

We have given here three versions of an XQuery statement that fulfil the same objective of displaying the book titles having
a price value greater than 30.

XQuery – Version 1
(: read the entire xml document :)
let $books := doc("books.xml")
for $x in $books/books/book
where $x/price > 30
return $x/title
Output
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
XQuery – Version 2
(: read all books :)
let $books := doc("books.xml")/books/book

for $x in $books
where $x/price > 30
return $x/title
Output
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
XQuery – Version 3
(: read books with price > 30 :)
let $books := doc("books.xml")/books/book[price > 30]

for $x in $books
return $x/title
Output
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
Verify the Result

To verify the result, replace the contents of books.xqy (given in the Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program.

You might also like