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.
Symbol | Bedeutung |
---|---|
(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ück | vor >> |