XQuery Functions

XQuery 1.0, XPath 2.0 en XSLT 2.0 delen dezelfde functiebibliotheek.

XQuery Functions

XQuery bevat meer dan 100 ingebouwde functies. Deze functies kunnen worden gebruikt voor stringwaarden, getallen, datum- en tijdsvergelijkingen, knopen en QName-operaties, sequentie-operaties, logische waarden, enz. U kunt ook uw eigen functies definiëren in XQuery.

Ingebouwde functies van XQuery

URI van de XQuery-functienamenruimte:

http://www.w3.org/2005/02/xpath-functions

De standaard voorvoegsel voor de functienamenruimte is fn:.

Tip:Functies worden vaak aangeroepen met het voorvoegsel fn:, bijvoorbeeld fn:string(). Echter, aangezien fn: de standaard voorvoegsel voor de naamruimte is, hoeft de naam van de functie niet te worden gebruikt bij de aanroep.

U kunt de volledigeReferentiemanual voor ingebouwde XQuery-functies》。

Voorbeeld van functie-aanroep

Een functie-aanroep kan worden gebruikt samen met een expressie. Zie het volgende voorbeeld:

Voorbeeld 1: In een element

<name>{upper-case($booktitle)}</name>

Voorbeeld 2: In de predicaat van een padexpressie

doc("books.xml")/bookstore/book[substring(title,1,5)='Harry'

Voorbeeld 3: In een let-statement

let $name := (substring($booktitle,1,4))

XQuery User-Defined Functions

If the required XQuery function cannot be found, you can write your own function.

User-defined functions can be defined in the query or in an independent library.

Syntax

declare function prefix:function name($parameter AS data type)
  AS return data type
{
(: ...function code... :)
;

Considerations for user-defined functions:

  • Use the declare function keyword
  • The function name must use a prefix
  • The data type of the parameters is usually consistent with the data type defined in XML Schema
  • The function body must be enclosed in curly braces

An example of a user-defined function declared in a 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 calling the function above :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>