Funktionen und Operationen auf Sequenzen
Da jeder Ausdruck in XQuery eine Sequenz ergibt, sind konsequenterweise auch alle Funktionen in XQuery Funktionen auf Sequenzen. In diesem Abschnitt sollen aber nur die Funktionen behandelt werden, die sich mit der Struktur von Sequenzen befassen. Hier unterscheiden wir zwei Gruppen: In der ersten Gruppe wird die Kardinalität von Sequenzen betrachtet, in der zweiten werden Sequenzen verändert.
Bei der Syntaxdarstellung werden die Parameter, die Sequenzen darstellen, immer mit $seq benannt. Die Notation item()* steht für einen allgemeinen Sequenztyp. Manche Funktionen und Operationen sind nur für Sequenzen aus atomaren Werten oder Sequenzen aus Knoten definiert. Diese werden in späteren Abschnitten behandelt.
Kardinalität von Sequenzen
Wie bereits erwähnt, liefert jeder XQuery-Ausdruck eine Sequenz. Oft hat der Autor eines Ausdrucks aber eine genaue Vorstellung davon, ob die sich ergebende Sequenz aus genau einem Eintrag bestehen soll, ob sie leer sein darf oder nicht. Mit den Funktionen fn:zero-or-one(), fn:one-or-more(), fn:exactly-one(), fn:exists() und fn:empty() kann man die gewünschten Eigenschaften einer Sequenz entsprechend sicherstellen. Die Anzahl der Einträge einer Sequenz kann mit fn:count() bestimmt werden. Die folgende Tabelle zeigt die Signaturen dieser Funktionen.
Signatur | Beschreibung |
---|---|
fn:zero-or-one( $seq as item()*) as item()? | liefert die Eingabesequenz, falls sie höchstens einen Eintrag hat, ansonsten wird ein Fehler erzeugt |
fn:one-or-more( $seq as item()*) as item()+ | liefert die Eingabesequenz, falls sie mindestens einen Eintrag hat, ansonsten wird ein Fehler erzeugt |
fn:exactly-one( $seq as item()*) as item() | liefert die Eingabesequenz, falls sie genau einen Eintrag hat, ansonsten wird ein Fehler erzeugt |
fn:empty( $arg as item()*) as xs:boolean | liefert true, wenn die Eingabesequenz leer ist, sonst false |
fn:exists( $arg as item()*) as xs:boolean | liefert true, wenn die Eingabesequenz nicht leer ist, sonst false |
fn:count( $seq as item()*) as xs:integer | liefert die Anzahl der Einträge einer Sequenz |
Tab. Funktionen zur Abfrage der Kardinalität von Sequenzen
Die folgenden Ausdrücke liefern jeweils ihr Eingabeargument zurück:
fn:zero-or-one(())
fn:zero-or-one(1)
fn:zero-or-one((1))
fn:exactly-one((1))
fn:one-or-more(1)
fn:one-or-more((1,2))
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |