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

Sequenztypen und Knotenzugriffsfunktionen

Es gibt einige Konstrukte in XQuery, bei denen es notwendig ist, den jeweils erwarteten Typ anzugeben. Beispielsweise müssen bei einer Funktionsdefinition die Typen der Eingabeparameter und des Rückgabewerts definiert werden. Hierzu stellt XQuery eine Syntax zur Verfügung, die ein breites Spektrum von loser bis zu sehr strikter Typdefinition bietet. Da die Sequenz der grundlegende Datentyp von XQuery ist, heißen diese Typdefinitionen "Sequenztypen".

Sequenztypdefinitionen

Bei Sequenztypen kann man zum einen angeben, aus welchen Typen die Sequenz bestehen darf, zum anderen kann man Häufigkeitsbedingungen vorgeben.

Häufigkeitsangaben

Die Syntax für diese Häufigkeitsangaben ist aus der XML-DTD entliehen. Die folgende Tabelle gibt einen Überblick über die vier Möglichkeiten zur Häufigkeitsangabe.

SymbolBedeutung
(keines)Sequenz mit genau einem Eintrag
?Sequenz mit höchstens einem Eintrag
+Sequenz mit mindestens einem Eintrag
*Sequenz mit unbeschränkter Anzahl von Einträgen

Tab. Häufigkeitsangaben bei Sequenztypdefinitionen

Als spezielle Häufigkeitsangabe steht noch empty() zur Verfügung, das die leere Sequenz bezeichnet. Bei den regulären Ausdrücken aus XQuery und XML Schema gibt es feinere Häufigkeitsangaben (Mindest- und Höchstzahl), die aber in anderen Teilen von XQuery keine Verwendung finden.

Eintragstypen

Als Eintragstypen stehen atomare Typen oder Knotentypen zur Wahl. Der allgemeinste Eintragstyp item() lässt sowohl atomare Werte als auch Knoten zu. Daher ist

item()*

der allgemeinste Sequenztyp. Alle Sequenzen, auch leere, passen zu diesem Typ.

Als atomare Typen können alle in XML Schema definierten einfachen Typen, aber auch alle bekannten benutzerdefinierten einfachen Typen verwendet werden, wie zum Beispiel:

xs:integer+
meinNamensraum:meineSchuhgröße?

Hierbei ist zu beachten, dass XQuery bei einer solchen Definition nicht nur den angegebenen Typ, sondern auch jeden davon mit durch Erweiterung oder Restriktion abgeleiteten Typ akzeptiert. Wenn also der Typ

xs:string

als Sequenztyp gegeben ist, wird auch der Typ Zimmernummer_T akzeptiert, da er von xs:token und der wiederum von xs:string abgeleitet ist.

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>