XQuery-Funktionen

XQuery 1.0, XPath 2.0 und XSLT 2.0 teilen die gleiche Funktionsbibliothek.

XQuery-Funktionen

XQuery enthält über 100 eingebaute Funktionen. Diese Funktionen können für Zeichenfolgenwerte, numerische Werte, Datum und Zeitvergleiche, Knoten- und QName-Operationen, Sequenzoperationen und logische Werte verwendet werden. Sie können auch Ihre eigenen Funktionen in XQuery definieren.

Eingebaute Funktionen von XQuery

URI des Namensraums der XQuery-Funktionen:

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

Der Standardpräfix für den Namensraum der Funktionen ist fn:.

Hinweis:Funktionen werden oft durch den Präfix fn: aufgerufen, z.B. fn:string(). Allerdings ist fn: der Standardpräfix für Namensräume, daher ist der Präfix bei der Aufrufung der Funktion nicht erforderlich.

Sie finden das vollständige "Referenzhandbuch für eingebaute XQuery-Funktionen》。

Funktionaufrufbeispiel

Funktionsaufgerufe können zusammen mit Ausdrücken verwendet werden. Sehen Sie sich die folgenden Beispiele an:

Beispiel 1: In Elementen

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

Beispiel 2: In Prädikaten von Pfadausdrücken

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

Beispiel 3: In let-Anweisungen

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

XQuery benutzerdefinierte Funktionen

Wenn Sie die erforderliche XQuery-Funktion nicht finden, können Sie Ihre eigenen Funktionen schreiben.

Benutzerdefinierte Funktionen können in der Abfrage oder in einer separaten Bibliothek definiert werden.

Syntax

declare function Präfix:Funktionsname($Parameter AS Datentyp)
  AS Rückgabetyp
{
(: ...Funktionssyntax... :)
;

Hinweise zur Erklärung benutzerdefinierter Funktionen:

  • Verwenden Sie den Schlüsselwort 'declare function'
  • Der Name der Funktion muss mit einem Präfix verwendet werden
  • Der Datentyp des Parameters entspricht normalerweise dem in XML Schema definierten Datentypen
  • Der Funktionstext muss in geschweiften Klammern eingeschlossen sein

Ein Beispiel für eine vom Benutzer erklärte benutzerdefinierte Funktion in der Abfrage:

declare function local:minPrice(
  $price as xs:decimal?,
  $discount as xs:decimal?
  AS xs:decimal?
{
let $disc := ($price * $discount) div 100
return ($price - $disc)
;
(: Hier ist ein Beispiel für die Aufruf eines obigen Funktionen :)
<minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>