Quantifizierende Ausdrücke mit mehreren Variablen
Wie der Auszug aus der Grammatik für quantifizierende Ausdrücke zu Beginn dieses Abschnitts zeigt, können mehrere Variablen temporär für den jeweiligen Ausdruck gleichzeitig gebunden werden. Die Semantik, die sich dahinter verbirgt, besteht darin, dass alle Kombinationen von Variablenbelegungen für den Test des zu befriedigenden Ausdrucks herangezogen werden. Im Fall universeller Quantifizierung müssen demnach alle möglichen Belegungen den zu überprüfenden Ausdruck zu true evaluieren; bei existenzieller Quantifizierung muss mindestens eine Kombination möglicher Variablenbelegungen gefunden werden, die den zu befriedigenden Ausdruck zu true evaluiert.
(: Ausdruck 1 :) some $x in (1,2,3), $y in (2,3,4)
satisfies $x*$y = 6
(: Ausdruck 2 :) every $x in (1,2,3), $y in (2,3,4)
satisfies $x*$y = 6
Während der erste Ausdruck zu true evaluiert wird, da es mindestens eine Kombination der Belegung der beiden Variablen $x und $y ($x=2, $y=3 bzw. $x=3, $y=2) gibt, die die geforderte Gleichung erfüllt, trifft dies für den zweiten Ausdruck nicht zu, da mindestens (irgend-)eine Kombination die Gleichung nicht erfüllt.
Darüber hinaus erlaubt die Bindung von Variablen in quantifizierenden Ausdrücken in Analogie zur Bindung von Variablen in let- und for-Klauseln eines FLWOR-Ausdrucks eine explizite Typzusicherung durch das Schlüsselwort as. Der erste Ausdruck würde in einem Typfehler resultieren, da die Elemente der Sequenz nicht dem angegebenen Typ xs:integer entsprechen. Der zweite Ausdruck hingegen würde true ergeben, da nach der expliziten Konvertierung numerischer Werte in eine ganze Zahl der Ausdruck $x*2=6 durch das erste Element in der Sequenz erfüllt sein würde.
(: Ausdruck 1 :) some $x as xs:integer in (3.141592654, 2.718281828)
satisfies $x*2 = 6
(: Ausdruck 2 :) some $x as xs:integer in (xs:integer(3.141592654),
xs:integer(2.718281828))
satisfies $x*2 = 6
Im Fall einer Konvertierungsverletzung ist die Generierung eines Laufzeitfehlers implementierungsabhängig. Zum Beispiel könnten die beiden folgenden Anweisungen in einen Laufzeitfehler münden oder true bzw. false liefern.
some $x as xs:integer in (3, "Lehner", "Schöning"
satisfies $x*2 = 6
every $x as xs:integer in (2, "Lehner", "Schöning")
satisfies $x*2 = 6
Sofern der XQuery-Prozessor das Konzept der statischen Typprüfung implementiert hat, können entsprechende Fehler bereits zur Übersetzungszeit gefunden werden.
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |