XQuery funktiot

XQuery 1.0, XPath 2.0 ja XSLT 2.0 jakavat saman funktiokirjaston.

XQuery funktiot

XQuery sisältää yli 100 sisäänrakennettua funktiota. Näitä funktioita voidaan käyttää merkkijonoarvojen, lukuarvojen, päivämäärä- ja aikavertailujen, solmu- ja QName-toimintojen, sarjatoimintojen, loogisten arvojen jne. kanssa. Voit myös määritellä omia funktioitasi XQuery:ssä.

XQuery sisäänrakennetut funktiot

XQuery-funktioiden nimenhuoneen URI:

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

Funktioiden nimenhuoneen oletusarvoinen etuliite on fn:.

Vinkki:Funktiot kutsutaan usein fn: -etuliittimen kautta, esimerkiksi fn:string(). Kuitenkin, koska fn: on nimenhuoneen oletusarvoinen etuliite, funktioiden nimiä ei tarvitse käyttää etuliitettä kutsuttaessa.

Voit löytää täyden 'Sisäänrakennettujen XQuery-funktioiden referenssikirja》。

Funktiokutsujen esimerkki

Funktiokutsut voidaan käyttää yhdessä lausekkeiden kanssa. Katso seuraava esimerkki:

Esimerkki 1: elementissä

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

Esimerkki 2: polkisanatekkeessä

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

Esimerkki 3: let lauseessa

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

XQuery käyttäjän määrittämä funktio

Jos ei löydy tarvittavaa XQuery-funktiota, voit kirjoittaa oman funktionsi.

Käyttäjän määrittämät funktiot voidaan määritellä haussa tai erillisessä kirjastossa.

Syntaksi

declare function etuliite:nimimerkki($parametri AS tyyppi)
  AS palautettavan datan tyyppi
{
(: ...funktiokoodi... :)
;

Huomioita käyttäjän määrittämistä funktioista:

  • Käytä declare function -avainsanaa
  • Funktioiden nimet täytyy käyttää etuliitettä
  • Parametrien tyyppi yleensä vastaavainen XML Schema -määrittelyssä määritellyille tyyppien
  • Funktiojen pääosa on suljettava suluin

Esimerkki käyttäjän määrittämästä funktiosta haussa:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?)
  AS xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(Alla on esimerkki yllä olevan funktion kutsumisesta :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>