XQuery Funktioner

XQuery 1.0, XPath 2.0 og XSLT 2.0 deler samme funktionssamling.

XQuery Funktioner

XQuery indeholder over 100 indbyggede funktioner. Disse funktioner kan bruges til strengeværdier, numeriske værdier, dato- og tidsligninger, node- og QName-opereringer, sekvensoperationer, logiske værdier osv. Du kan også definere dine egne funktioner i XQuery.

Indbyggede XQuery-funktioner

URI for XQuery-funktionens navnespace:

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

Standardpræfikset for funktionens navnespace er fn:.

Tip:Funktioner kaldes ofte gennem præfikset fn:, f.eks. fn:string(). Dog er fn: den standardnavnespaces præfiks, så præfikset behøver ikke bruges ved kaldet af funktionen.

Du kan finde hele《Referatielink til indbyggede XQuery-funktioner》。

Funktion kald eksempel

Funktion kald kan bruges sammen med udtryk. Se nedenstående eksempel:

Eksempel 1: I elementer

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

Eksempel 2: I谓词中的路径表达式

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

Eksempel 3: I let-sætningen

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

XQuery Brugerdefinerede Funktioner

Hvis du ikke kan finde den ønskede XQuery funktion, kan du skrive din egen funktion.

Brugerdefinerede funktioner kan defineres i en query eller i en separat bibliotek.

Syntaks

declare function præfiks:funktionensNavn($parametre AS dataType)
  AS ReturneringsdataTypen
{
(: ...funktionens kode... :)
};

Bemærkninger ved brugerdefinerede funktioner:

  • Brug declare function nøgleordet
  • Funktionens navn skal bruge præfiks
  • Parametternes dataTyper er normalt ens med de dataTyper, der er defineret i XML Schema
  • Funktionens hoved skal omgives af klammer

Et eksempel på en brugerdefineret funktion, der er deklareret i en 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)
};
(: Her er et eksempel på at kalde den ovennævnte funktion :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>