• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

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.

SignaturBeschreibung
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ückvor >>