XQUERY-Funktionen

In der bei XML-Datenbanken häufig vertretenden Anfragesprache XQuery gibt es zwei Gruppen von Funktionen. Das sind vordefinierte Funktionen, die vom Benutzer nur angewendet werden müssen und benutzerdefinierte Funktionen mit denen XQuery eigene Funktionen nutzen kann.

Vordefinierte Funktionen

Es existiert eine umfangreiche Sammlung von vordefinierten Funktionen. Diese lässt sich in mehrere Untergruppen aufteilen:

Zugriffsfunktionen:
Mit den Zugriffsfunktionen können aus Knoten bestimmte Werte extrahiert werden z.B.:

node-kindbestimmt die Knotenart (Element, Attribut, usw.)
node-namebestimmt den Knotennamen
local-namebestimmt den localen Anteil dieses Namens
stringliefert den Zeichenkettenwert eines Knotens

Arithmetische Funktionen:

floorliefert nächstkleineren ganzzahligen Wert
ceilingliefert nächstgrößeren ganzzahligen Wert
roundliefert nächstgelegenen ganzzahligen Wert

Funktionen auf Zeichenketten
Es gibt eine große Anzahl von Funktionen auf Zeichenketten, z.B. den Vergleich von Zeichenketten (gemäß sprachspezifischer Sortierordnung) oder Vergleiche mit regulären Ausdrücken usw.

substringAusschnittsbildung
upper-caseKonvertierung in Großbuchstaben
lower-caseKonvertierung in Kleinbuchstaben

Funktionen auf Zeitdatentypen
Funktionen auf Zeitdaten haben meist die Aufgabe einzelne Komponenten zu extrahieren, wie z.B. die Extraktion des Tages aus einem Datum

Knotenfunktionen
Auf Knoten gibt es z.B. Funktionen, die einen tiefen Vergleich durchführen, also prüfen, ob zwei Knoten in ihrer gesamten Struktur und dem gesamten Inhalt gleich sind.

Sequenzfunktionen
Auch für Sequenzen sind Funktionen definiert. Mit diesen kann z.B. geprüft werden, ob eine Sequenz leer ist oder es können Duplikate entfernt werden (distinct-values, distinct-nodes)

Weitere Funktionen
Es gibt weiter Funktionen auf URIs, Notationen und Binärdatentypen, Funktionen die allgemeine Kontextinformationen wie die aktuelle Uhrzeit liefern und weitere Funktionen

Benutzerdefinierte Funktionen

Neben den vordefinierten Funktionen ist es möglich eigene Funktionen zu deklarieren. Die allgemeine Form einer solchen Deklaration sieht folgendermaßen aus:

declare function namespace:funktionsname
($parameter1 as datentyp1, $parameter2 as datentyp2, ...) as rückgabedatentyp {
<XQuery-Ausdruck>
}

Funktionsnamen können einem Namensraum zugeordnet werden. Des Weiteren sind rekursive Funktionen erlaubt. Das Überladen von Funktionen hingegen ist verboten d.h. es kann zu einem Namen nur eine benutzerdefinierte Funktion geben.

Beispiel

Folgende Beispielfunktion bestimmt für ein Buch die größte Verschachtelungstiefe des Elements Abschnitt:

declare function Tiefe(element $e) returns xs:integer {
if (local-name($e) = „Abschnitt“) then
if ($e/Abschnitt) then
max(for $a in $e/Abschnitt return Tiefe($a)) + 1
else 1
else if ($e/*) then
{--größtes Ergebnis der Unterbäume durchreichen --}
Max(for $a in $e/* return Tiefe($a))
else 0
}

Weiterführende Links:

siehe auch:

Kategorie: XML, X

Quellen:

  • Schöning Harald: „XML und Datenbanken“, Hanser-Verlag, 2003, ISBN 3-446-22008-9.