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

Weitere Ausdrücke

Neben Vergleichsausdrücken erlaubt XQuery die Angabe von logischen, quantifizierenden und konditionalen Ausdrücken, die im Rahmen dieses Abschnitts aufgearbeitet werden.

Logische Ausdrücke

In XQuery wird ein logischer Ausdruck entweder aus einem and- oder einem or-Ausdruck gebildet, wobei das nachfolgende Grammatikfragment die Vorrangregelung zwischen or und and deutlich macht:

OrExpr::=AndExpr ( or AndExpr )*
AndExpr::=InstanceofExpr ( and InstanceofExpr )*

Der effektive boolesche Wert wird dabei für jeden Operanden ermittelt. In Abhängigkeit vom Auftreten eines Laufzeitfehlers bei dieser Ermittlung ergibt sich gemäß unten stehender Tabelle der Wert des entsprechenden logischen Ausdrucks.

Ergebnistabelle für logische Ausdrücke

ANDOperand 1
truefalseerror
Operand 2true truefalseerror
falsefalse falsefalse / error
errorerrorfalse / errorerror
OROperand 1
truefalseerror
Operand 2truetruetruetrue / error
falsetruefalseerror>
errortrue / errorerrorerror

Werden beide Operanden zu true evaluiert, so ergibt sich sowohl für einen and- als auch für einen or-Ausdruck der effektive boolesche Wert true. Tritt bei der Bestimmung des booleschen Wertes auf einer Seite ein Laufzeitfehler auf, so wird mit zwei Ausnahmen der Fehler an die aufrufende Umgebung weitergereicht: Ist ein Operand eines and-Operators bereits zu false evaluiert worden, kann implementierungsabhängig der false-Wert weitergegeben werden, unabhängig davon, ob bei der Auswertung des zweiten Operanden ein Fehler aufgetreten ist oder nicht.

Der analoge Fall gilt auch für die Verknüpfung mit dem or-Operator, wobei nach der Feststellung eines wahren Wertes das Gesamtergebnis zu true evaluiert werden darf, obwohl die Auswertung des zweiten Operators einen Laufzeitfehler hervorgebracht hat bzw. in einem Laufzeitfehler resultieren würde. Die Auswertung logischer Ausdrücke ist somit nicht deterministisch im Fall einer Existenz von Fehlern. Des Weiteren ist zu beachten, dass die beiden Operatoren als Ergebnis den Wert true bzw. false zurückgeben, falls mindestens einer der beiden Operanden die leere Sequenz als Wert aufweist, wobei der effektive boolesche Wert für eine leere Sequenz false ist. Dieses Verhalten steht dabei im Gegensatz zur Semantik bei arithmetischen Operatoren, die in diesem Fall in einer leeren Sequenz resultieren würden.

Der erste der folgenden logischen Ausdrücke, wie sie üblicherweise in der where-Klausel eines FLWOR-Ausdrucks auftreten können, liefert entweder den Wert true oder einen Laufzeitfehler:

(: Ausdruck 1 :) "Kurt" ne "Emil" or 4711 idiv 0 = 13
(: Ausdruck 2 :) "Kurt" eq "Kurt" or 4711 idiv 0 = 13
(: Ausdruck 3 :) "Kurt" eq "Kurt" and 4711 idiv 0 = 13

In Analogie dazu ist das Ergebnis des zweiten Ausdrucks ebenfalls nicht eindeutig und kann entweder in true oder einem Laufzeitfehler resultieren. Der dritte Ausdruck hingegen muss gezwungenermaßen in einen Laufzeitfehler münden, da für einen and-Ausdruck der zweite Operand zwingend (ohne Fehler) ausgewertet werden muss, sofern der erste Ausdruck zu true evaluiert worden ist.

 

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

<< zurückvor >>