XQuery funktioner

XQuery 1.0, XPath 2.0 och XSLT 2.0 delar samma funktionssamling.

XQuery funktioner

XQuery innehåller över 100 inbyggda funktioner. Dessa funktioner kan användas för strängvärden, numeriska värden, datum- och tidsjämförelser, nod- och QName-opereringar, sekvensopereringar, logiska värden och mer. Du kan också definiera egna funktioner i XQuery.

Inbyggda XQuery-funktioner

URI för XQuery-funktionernas namnrymd:

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

Standardprefixen för funktionernas namnrymd är fn:.

Tips:Funktioner kallas ofta genom prefixet fn:, till exempel fn:string(). Men eftersom fn: är den förvalda prefixet för namnrymdar behöver funktionens namn inte användas med prefix när den anropas.

Du kan hitta den fullständigaInbyggda XQuery-funktioner referenshandbok》。

Funktionstillämpningsexempel

Funktionssamt uttryck kan användas tillsammans. Se följande exempel:

Exempel 1: I elementen

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

Exempel 2: I predikatet för sökvägsexpressionen

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

Exempel 3: I let-satsen

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

XQuery användardefinierade funktioner

Om du inte kan hitta den XQuery-funktion du behöver, kan du skriva din egen funktion.

Användardefinierade funktioner kan definieras i frågor eller i separata bibliotek.

Syntax

declare function prefix:funct namn($parametrar AS datatyp)
  AS returnerande datatyp
{
(: ...funktionskod... :)
;

Viktiga punkter om användardefinierade funktioner:

  • Använd nyckelordet declare function
  • Funktionens namn måste använda ett prefix
  • Data typen för parametrarna är vanligtvis samma som de som definieras i XML Schema
  • Funktionens kropp måste omges av klamrar

Ett exempel på en användardefinierad funktion som deklarerats i frågan:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?)
  AS xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(: Här är ett exempel på att anropa ovanstående funktion :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>