XQuery Functions
XQuery 1.0, XPath 2.0, and XSLT 2.0 share the same functions library.
XQuery Functions
XQuery includes over 100 built-in functions. There are
functions for string values, numeric values, date and time comparison, node and QName manipulation, sequence manipulation, Boolean
values, and
more. You can also define your own functions in XQuery.
XQuery Built-in Functions
The URI of the XQuery function namespace is:
http://www.w3.org/2005/02/xpath-functions
The default prefix for the function namespace is fn:.
Tip: Functions are often called with the fn: prefix, such as fn:string().
However, since fn: is the default prefix of the namespace, the function names do
not need to be prefixed when called.
The reference of all the built-in XQuery 1.0 functions is located
in our XPath tutorial.
Examples of Function Calls
A call to a function can appear where an expression may appear. Look at the
examples below:
Example 1: In an element
<name>{uppercase($booktitle)}</name>
|
Example 2: In the predicate of a path expression
doc("books.xml")/bookstore/book[substring(title,1,5)='Harry']
|
Example 3: In a let clause
let $name := (substring($booktitle,1,4))
|
XQuery User-Defined Functions
If you cannot find the XQuery function you need, you can write
your own.
User-defined functions can be defined in the query or in a separate library.
Syntax
declare function prefix:function_name($parameter AS datatype)
AS returnDatatype
{
(: ...function code here... :)
};
|
Notes on user-defined functions:
- Use the declare function keyword
- The name of the function must be prefixed
- The data type of the parameters are mostly the same as the data types
defined in XML Schema
- The body of the function must be surrounded by curly braces
Example of a User-defined Function Declared in the Query
declare function local:minPrice(
$price as xs:decimal?,
$discount as xs:decimal?)
AS xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
};
(: Below is an example of how to call the function above :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>
|
|
|
|
See why there are 20,000+ Ektron integrations worldwide.
Request an INSTANT DEMO or download a FREE TRIAL today. |
|
|
|