0% found this document useful (0 votes)
12 views57 pages

Xquery Tutorial

Uploaded by

AnilGawand
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)
12 views57 pages

Xquery Tutorial

Uploaded by

AnilGawand
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/ 57

XQuery

i
XQuery

About the Tutorial


XQuery is a query-based language to retrieve data stored in the form of XML.
XQuery is to XML what SQL is to a database.

This tutorial covers all the basic components of XQuery with suitable examples.

Audience
This tutorial has been prepared for beginners to help them understand the basic
concepts related to XQuery. It provides enough understanding on XQuery from
where you can take yourself to a higher level of expertise.

Prerequisites
Before proceeding with this tutorial, you should have a basic knowledge of XML
and XPath.

Copyright & Disclaimer


 Copyright 2014 by Tutorials Point (I) Pvt. Ltd.

All the content and graphics published in this e-book are the property of
Tutorials Point (I) Pvt. Ltd. The user of this e-book is prohibited to reuse, retain,
copy, distribute or republish any contents or a part of contents of this e-book in
any manner without written consent of the publisher.

We strive to update the contents of our website and tutorials as timely and as
precisely as possible, however, the contents may contain inaccuracies or errors.
Tutorials Point (I) Pvt. Ltd. provides no guarantee regarding the accuracy,
timeliness or completeness of our website or its contents including this tutorial.
If you discover any errors on our website or in this tutorial, please notify us at
[email protected]

i
XQuery

Table of Contents
About the Tutorial ....................................................................................................................................i

Audience ..................................................................................................................................................i

Prerequisites ............................................................................................................................................i

Copyright & Disclaimer .............................................................................................................................i

Table of Contents ....................................................................................................................................ii

1. OVERVIEW........................................................................................................................... 1

What is XQuery? .....................................................................................................................................1

Characteristics .........................................................................................................................................1

Benefits of XQuery ..................................................................................................................................1

2. ENVIRONMENT SETUP......................................................................................................... 3

Example ..................................................................................................................................................3

Steps to Execute XQuery against XML .....................................................................................................5

3. FIRST APPLICATION.............................................................................................................. 7

Example ..................................................................................................................................................7

XQuery Expressions .................................................................................................................................8

4. FLWOR .............................................................................................................................. 10

Example ................................................................................................................................................10

5. HTML FORMAT .................................................................................................................. 12

Example ................................................................................................................................................12

6. XPATH ............................................................................................................................... 15

XPath Examples .....................................................................................................................................15

ii
XQuery

7. SEQUENCES ....................................................................................................................... 18

Creating a Sequence ..............................................................................................................................18

Viewing the Items of a Sequence ..........................................................................................................19

8. SEQUENCE FUNCTIONS ..................................................................................................... 22

XQuery – count Function .......................................................................................................................23

XQuery – sum Function .........................................................................................................................24

XQuery – avg Function ..........................................................................................................................25

XQuery – min Function ..........................................................................................................................26

XQuery – max Function .........................................................................................................................27

XQuery – distinct-values Function .........................................................................................................28

XQuery – subsequence Function ...........................................................................................................29

XQuery – insert-before Function ...........................................................................................................30

XQuery – remove Function ....................................................................................................................32

XQuery – reverse Function ....................................................................................................................33

XQuery – index-of Function ...................................................................................................................34

XQuery – last Function ..........................................................................................................................35

XQuery – position Function ...................................................................................................................36

9. STRING FUNCTIONS ........................................................................................................... 38

XQuery – string-length Function ............................................................................................................38

XQuery – concat Function .....................................................................................................................39

XQuery – string-join Function ................................................................................................................40

10. DATE FUNCTIONS .............................................................................................................. 42

XQuery – current-date Function ............................................................................................................42

XQuery – current-time Function ............................................................................................................43

XQuery – current-dateTime Function ....................................................................................................44

iii
XQuery

11. REGULAR EXPRESSIONS ..................................................................................................... 45

XQuery – matches function ...................................................................................................................45

XQuery – replace function .....................................................................................................................46

XQuery – tokenize Function ..................................................................................................................47

12. IF-THEN-ELSE ..................................................................................................................... 48

Example ................................................................................................................................................48

13. CUSTOM FUNCTIONS ........................................................................................................ 51

Example ................................................................................................................................................51

iv
XQuery
1. OVERVIEW

What is XQuery?
XQuery is a functional language that is used to retrieve information stored in
XML format. XQuery can be used on XML documents, relational databases
containing data in XML formats, or XML Databases. XQuery 3.0 is a W3C
recommendation from April 8, 2014.

The definition of XQuery as 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.

Characteristics
 Functional Language XQuery is a language to retrieve/querying XML
based data.

 Analogous to SQL XQuery is to XML what SQL is to databases.

 XPath based XQuery uses XPath expressions to navigate


through XML documents.

 Universally accepted XQuery is supported by all major databases.

 W3C Standard XQuery is a W3C standard.

Benefits of XQuery
 Using XQuery, both hierarchical and tabular data can be retrieved.

 XQuery can be used to query tree and graphical structures.

 XQuery can be directly used to query webpages.

 XQuery can be directly used to build webpages.

 XQuery can be used to transform xml documents.

1
XQuery

 XQuery is ideal for XML-based databases and object-based databases.


Object databases are much more flexible and powerful than purely tabular
databases.

2
XQuery
2. 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>
3
XQuery

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

4
XQuery

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


1. Copy XQueryTester.java to any location, say, E: > java

2. Copy books.xml to the same location, E: > java

3. Copy books.xqy to the same location, E: > java


5
XQuery

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

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 the Example


 books.xml represents the sample data.

 books.xqy represents the XQuery expression that is to be executed on


books.xml. We'll understand more about the expression in the 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.

6
XQuery
3. 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>
7
XQuery

<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 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.

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.

8
XQuery

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; "return" clause is used to return the elements from the search
results.

9
XQuery
4. 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>

10
XQuery

<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
{
for $x in $books
where $x/price>30
order by $x/price
return $x/title
}

Result
<title lang="en">Learn XQuery in 24 hours</title>
<title lang="en">Learn .Net 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.

11
XQuery
5. 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">

12
XQuery

<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>
13
XQuery

</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 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.

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.

14
XQuery
6. 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>

15
XQuery

<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

16
XQuery

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.

17
XQuery
7. SEQUENCES

Sequences represent an ordered collection of items where items can be of


similar or of different types.

Creating a Sequence
Sequences are created using parenthesis with strings inside quotes or double
quotes and numbers as such. XML elements can also be used as the items of a
sequence.

XQuery Expression
let $items := ('orange', <apple/>, <fruit type="juicy"/>, <vehicle
type="car">sentro</vehicle>, 1,2,3,'a','b',"abc")
let $count := count($items)
return
<result>
<count>{$count}</count>
<items>
{
for $item in $items
return <item>{$item}</item>
}
</items>
</result>

Output
<result>
<count>10</count>
<items>
<item>orange</item>
<item>
<apple/>

18
XQuery

</item>
<item>
<fruit type="juicy"/>
</item>
<item>
<vehicle type="car">Sentro</vehicle>
</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>a</item>
<item>b</item>
<item>abc</item>
</items>
</result>

Viewing the Items of a Sequence


Items of a sequence can be iterated one by one, using index or by value. The
above example iterated the items of a sequence one by one. Let's see the other
two ways in action.

XQuery Expression (Index)


let $items := (1,2,3,4,5,6)
let $count := count($items)
return
<result>
<count>{$count}</count>
<items>
{
for $item in $items[2]
return <item>{$item}</item>
}
</items>

19
XQuery

</result>

Output
<result>
<count>6</count>
<items>
<item>2</item>
</items>
</result>

XQuery Expression (Value)


let $items := (1,2,3,4,5,6)
let $count := count($items)
return
<result>
<count>{$count}</count>
<items>
{
for $item in $items[. = (1,2,3)]
return <item>{$item}</item>
}
</items>
</result>

Output
<result>
<count>6</count>
<items>
<item>1</item>
<item>2</item>
<item>3</item>
</items>

20
XQuery

</result>

21
XQuery
8. SEQUENCE FUNCTIONS

The following table lists the commonly used sequence functions provided by
XQuery.

S.No. Name & Description

count($seq as item()*)
1
Counts the items in a sequence.

sum($seq as item()*)
2
Returns the sum of the items in a sequence.

avg($seq as item()*)
3
Returns the average of the items in a sequence.

min($seq as item()*)
4
Returns the minimum valued item in a sequence.

max($seq as item()*)
5
Returns the maximum valued item in a sequence.

distinct-values($seq as item()*)
6
Returns select distinct items from a sequence.

subsequence($seq as item()*, $startingLoc as xs:double,


7 $length as xs:double)
Returns a subset of provided sequence.

insert-before($seq as item()*, $position as xs:integer, $inserts


8 as item()*)
Inserts an item in a sequence.

remove($seq as item()*, $position as xs:integer)


9
Removes an item from a sequence.

reverse($seq as item()*)
10
Returns the reversed sequence.

11 index-of($seq as anyAtomicType()*, $target as


anyAtomicType())

22
XQuery

Returns indexes as integers to indicate availability of an item within a


sequence.

last()
12 Returns the last element of a sequence when used in predicate
expression.

position()
13
Used in FLOWR expressions to get the position of an item in a sequence.

XQuery – count Function


The count function is used to count the total items present in a sequence.

Syntax
count($seq as item()*)

Input Parameters
 $seq - provided sequence. A sequence can contain 0 or more items.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $count := count($items)
return
<result>
<count>{$count}</count>
</result>

Output
<result>
<count>6</count>
</result>

23
XQuery

Verify the Result


In order to test the above-mentioned functionality, replace the contents of
books.xqy (mentioned in the Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – sum Function


The sum function is used to get the sum of total items present in a sequence.

Syntax
sum($seq as item()*)

Input Parameters
 $seq - provided sequence. A sequence can contain 0 or more items.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $sum := sum($items)
return
<result>
<sum>{$sum}</sum>
</result>

Output
<result>
<sum>21</sum>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents of
books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.
24
XQuery

XQuery – avg Function


The avg function is used to get the average of total items present in a sequence.

Syntax
avg($seq as item()*)

Input Parameters
 $seq - provided sequence. A sequence can contain 0 or more items.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $avg := avg($items)
return
<result>
<avg>{$avg}</avg>
</result>

Output
<result>
<avg>3.5</avg>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

25
XQuery

XQuery – min Function


The min function is used to get the minimum valued item present in a sequence.

Syntax
min($seq as item()*)

Input Parameters
 $seq - provided sequence. A sequence can contain 0 or more items.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $min := min($items)
return
<result>
<min>{$min}</min>
</result>

Output
<result>
<min>1</min>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents of
books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

26
XQuery

XQuery – max Function


The max function is used to get the maximum valued item present in a
sequence.

Syntax
max($seq as item()*)

Input Parameters
 $seq - provided sequence. A sequence can contain 0 or more items.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $max := max($items)
return
<result>
<max>{$max}</max>
</result>

Output
<result>
<max>6</max>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents of
books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

27
XQuery

XQuery – distinct-values Function


The distinct-values function is used to get the sequence containing unique
items present in a given sequence.

Syntax
distinct-values($seq as item()*)

Input Parameters
 $seq - provided sequence. A sequence can contain 0 or more items.

Example
XQuery Expression
let $items := (1,2,4,4,5,5)
let $unique-items := distinct-values($items)
return
<result>
<items>
{
for $item in $unique-items
return <item>{$item}</item>
}
</items>
</result>

Output
<result>
<items>
<item>1</item>
<item>2</item>
<item>4</item>
<item>5</item>
</items>
</result>
28
XQuery

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – subsequence Function


The subsequence function is used to get the sequence containing requested
items present in a given sequence.

Syntax
subsequence($seq as item()*, $startingLoc as xs:double, $length as
xs:double)

Input Parameters
 $seq - provided sequence. Sequence can contain 0 or more items.

 $startingLoc - index of items from which sub-sequence is to be created.


Index starts from 1.

 $length - length of subsequence.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $sub-items := subsequence($items,2,4)
return
<result>
<items>
{
for $item in $sub-items
return <item>{$item}</item>
}
</items>
</result>

29
XQuery

Output
<result>
<items>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</items>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – insert-before Function


The insert-before function is used to insert an item in a given sequence at any
position. This function returns the modified sequence but the original sequence
is not altered.

Syntax
insert-before($seq as item()*, $position as xs:integer, $inserts as
item()*)

Input Parameters
 $seq - provided sequence. Sequence can contain 0 or more items.

 $position - index of item where it is to be inserted. Index starts from 1.

 $inserts - zero or more items to be inserted.

Example
XQuery Expression

30
XQuery

let $items := (1,2,3,4,5,9)


let $additional-items := (6,7,8)
let $new-items := insert-before($items,6,$additional-items)
return
<result>
<items>
{
for $item in $new-items
return >item>{$item}>/item>
}
</items>
</result>

Output
<result>
<items>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</items>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

31
XQuery

XQuery – remove Function


The remove function is used to remove an item in a given sequence from any
position. This function returns the modified sequence but the original sequence
is not altered.

Syntax
remove($seq as item()*, $position as xs:integer)

Input Parameters
 $seq - provided sequence. Sequence can contain 0 or more items.

 $position - index of item where it is to be removed. Index starts from 1.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $new-items := remove($items,4)
return
<result>
<items>
{
for $item in $new-items
return <item>{$item}</item>
}
</items>
</result>

Output
<result>
<items>
<item>1</item>
<item>2</item>
<item>3</item>
<item>5</item>
32
XQuery

<item>6</item>
</items>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents of
books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – reverse Function


The reverse function is used to reverse the given sequence. This function
returns the modified sequence but the original sequence is not altered.

Syntax
reverse($seq as item()*)

Input Parameters
 $seq - provided sequence. Sequence can contain 0 or more items.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $new-items := reverse($items)
return
<result>
<items>
{
for $item in $new-items
return <item>{$item}</item>
}
</items>
</result>

33
XQuery

Output
<result>
<items>
<item>6</item>
<item>5</item>
<item>4</item>
<item>3</item>
<item>2</item>
<item>1</item>
</items>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – index-of Function


The index-of function is used to track items in the given sequence. It returns
integers to indicate the availability of items in a given sequence.

Syntax
index-of($seq as anyAtomicType()*, $target as anyAtomicType())

Input Parameters
 $seq - provided sequence. Sequence can contain 0 or more items.

 $target - item whose index is to be returned.

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $indexOf := index-of($items,4)
return
34
XQuery

<result>
<indexof>{$indexOf}</indexof>
</result>

Output
<result>
return <indexof>4</indexof>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – last Function


The last function is used to get the last item in the given sequence.

Syntax
last()

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
let $lastElement := $items[last()]
return
<result>
<lastElement>{$lastElement}</lastElement>
</result>

Output
<result>
<lastElement>6</lastElement>
35
XQuery

</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – position Function


The position function is used in FLOWR expression to get the position of an item
in a sequence.

Syntax
position()

Example
XQuery Expression
let $items := (1,2,3,4,5,6)
return
<result>
<items>
{
for $item in $items[position() mod 2 eq 1]
return <item>{$item}</item>
}
</items>
</result>

Output
<result>

36
XQuery

<items>
<item>1</item>
<item>3</item>
<item>5</item>
</items>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

37
XQuery
9. STRING FUNCTIONS

The following table lists the commonly used string manipulation functions
provided by XQuery.

S.No. Name & Description

string-length($string as xs:string) as xs:integer


1
Returns the length of the string.

concat($input as xs:anyAtomicType?) as xs:string


2
Returns the concatenated string as output.

string-join($sequence as xs:string*, $delimiter as xs:string) as


xs:string
3
Returns the combination of items in a sequence separated by a
delimiter.

XQuery – string-length Function


The string-length function is used to get the length of a string.

Syntax
string-length($string as xs:string) as xs:integer

Input Parameters
 $string - provided string.

Example
XQuery Expression
let $bookTitle := "Learn XQuery in 24 hours"
let $size := string-length($bookTitle)

return
<result>
38
XQuery

<size>{$size}</size>
</result>

Output
<result>
<size>24</size>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – concat Function


The concat function is used to concatenate various strings.

Syntax
concat($input as xs:anyAtomicType?) as xs:string

Input Parameters
 $input - one or more inputs separated by comma.

Example
XQuery Expression
let $bookTitle := "Learn XQuery in 24 hours"
let $updatedTitle := concat($bookTitle,",price: 200$")

return
<result>
<title>{$updatedTitle}</title>
</result>

39
XQuery

Output
<result>
<title>Learn XQuery in 24 hours,price: 200$</title>
</result>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – string-join Function


The string-join function is used to concatenate various sequences separated by
a given delimiter.

Syntax
string-join($sequence as xs:string*, $delimiter as xs:string) as
xs:string

Input Parameters
 $sequence - sequence of zero or more strings.

 $delimiter - delimiter to separate the items of above sequence.

Example
XQuery Expression
let $fruits :=
<fruits>
<fruit>Apple</fruit>
<fruit>Orange</fruit>
<fruit>Guava</fruit>
<fruit>Pineapple</fruit>
</fruits>

return
40
XQuery

<results>
<fruits>{
string-join($fruits/fruit, ',')
}</fruits>
</results>

Output
<results>
<fruits>Apple,Orange,Guava,Pineapple</fruits>
</results>

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

41
XQuery
10. DATE FUNCTIONS

The following table lists the commonly used date functions provided by XQuery.

S.No. Name & Description

current-date()
1
Returns the current date.

current-time()
2
Returns the current time.

current-dateTime()
3
Returns both the current date and the current time.

XQuery – current-date Function


The current-date function is used to return the current date.

Syntax
current-date()

Example
XQuery Expression
let $date := current-date()

return
<results>
<date>{$date}</date>
</results>

42
XQuery

Output
<results>
<date>2014-10-27+05:30</date>
</results>

Here +5:30 is the relative GMT time of the server.

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – current-time Function


The current-time function is used to return the current time.

Syntax
current-time()

Example
XQuery Expression
let $time := current-time()

return
<results>
<time>{$time}</time>
</results>

Output
<results>
<time>14:53:46.803+05:30</time>
</results>

43
XQuery

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – current-dateTime Function


The current-dateTime function is used to return the current date and time.

Syntax
current-dateTime()

Example
XQuery Expression
let $datetime := current-dateTime()

return
<results>
<datetime>{$datetime}</datetime>
</results>

Output
<results>
<datetime>2014-10-27T14:55:58.621+05:30</datetime>
</results>

Here T separates the date with time and +5:30 represents the relative GMT time
of the server.

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

44
XQuery
11. REGULAR EXPRESSIONS

The following table lists the commonly used regular expression functions
provided by XQuery.

S.No. Name & Description

matches($input, $regex)
1
Returns true if the input matches with the provided regular expression.

replace($input, $regex, $string)


2
Replaces the matched input string with the given string.

tokenize($input, $regex)
3
Returns a sequence of items matching the regular expression.

XQuery – matches function


The matches function returns true if the input matches with the provided
regular expression; otherwise false.

Syntax
matches($input, $regex)

Input Parameters
 $input - input string.

 $regex - regular expression.

Example
XQuery Expression
let $input := 'TutorialsPoint Simply Easy Learning'
return (matches($input, 'Hello') = true(),
matches($input, 'T.* S.* E.* L.*') = true()
)

45
XQuery

Output
false
true

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

XQuery – replace function


The replace function replaces the matched input string with a given string.

Syntax
replace($input, $regex, $string)

Input Parameters
 $input - input string.

 $regex - regular expression.

 $string - string to replace original string.

Example
XQuery Expression
let $input := 'Chapter 1 ... Chapter 2'
return ( replace($input, "Chapter (\d)", "Section $1.0"))

Output
Section 1.0 ... Section 2.0

Verify the Result


In order to test the above-mentioned functionality, replace the contents
of books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

46
XQuery

XQuery – tokenize Function


The tokenize function returns a sequence of items matching the regular
expression.

Syntax
tokenize($input, $regex)

Input Parameters
 $input - input string.

 $regex - regular expression.

Example
XQuery Expression
let $input := 'Chapter 1 ... Chapter 2... Section 1.1'
return ( tokenize($input, 'C'))

Output
hapter 1 ...
hapter 2... Section 1.1

Verify the Result


In order to test the above-mentioned functionality, replace the contents of
books.xqy (mentioned in Environment Setup chapter) with the above XQuery
expression and execute the XQueryTester java program to verify the result.

47
XQuery
12. IF-THEN-ELSE

XQuery provides a very useful if-then-else construct to check the validity of the
input values passed. Given below is the syntax of the if-then-else construct.

Syntax
if (condition) then
...
else
...

Example
We will use the following books.xml file and apply to it XQuery expression
containing an if-then-else construct to retrieve the titles of those books with a
price value that 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>
48
XQuery

<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 expression is to be applied on the above XML document.

books.xqy
<result>
{
if(not(doc("books.xml"))) then (
<error>
<message>books.xml does not exist</message>
</error>
)
else (
for $x in doc("books.xml")/books/book
where $x/price > 30
return $x/title
)
}
</result>

49
XQuery

Output
<result>
<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>
</result>

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.

50
XQuery
13. CUSTOM FUNCTIONS

XQuery provides the capability to write custom functions. Listed below are the
guidelines to create a custom function.

 Use the keyword declare function to define a function.

 Use the data types defined in the current XML Schema

 Enclose the body of function inside curly braces.

 Prefix the name of the function with an XML namespace.

The following syntax is used while creating a custom function.

Syntax
declare function prefix:function_name($parameter as datatype?...)
as returnDatatype?
{
function body...
};

Example
The following example shows how to create a user-defined function in XQuery.

XQuery Expression
declare function local:discount($price as xs:decimal?,$percentDiscount
as xs:decimal?)
as xs:decimal? {
let $discount := $price - ($price * $percentDiscount div 100)
return $discount
};

let $originalPrice := 100

let $discountAvailed := 10

51
XQuery

return ( local:discount($originalPrice, $discountAvailed))

Output
90

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.

52

You might also like