Wertevergleich
Ausdrücke, die einen Wertevergleich beschreiben, werden dazu verwendet, um einzelne Ausprägungen, d. h. atomare Werte, unterschiedlicher Datentypen miteinander zu vergleichen. Wertevergleichsausdrücke finden sich üblicherweise in where-Klauseln von FLWOR-Ausdrücken wieder. Im folgenden Beispiel, in dem alle Patienten des Arztes Stefan Müller ermittelt werden, findet sich ein Wertevergleich in der where-Klausel bei dem Test auf den korrekten Nachnamen.
for $p in fn:collection("Patienten")/*
let $a := xqb:follow-xlink($p/Arzt/@xlink:href)//Name
where $a//Nachname eq "Müller"
and $a//Vorname = "Stefan"
return $p/Name
In diesem Zusammenhang ist auf zwei besondere Situationen hinzuweisen. Der Vergleich von zwei leeren Zeichenketten – unter Berücksichtigung der Dualität von einelementiger Sequenz und atomarem Wert – liefert den Wahrheitswert true :
let $a := ("")
let $b := ""
where $a eq $b
return
<Text>Leere Zeichenketten sind identisch</Text>
Anders verhält es sich bei einem Wertevergleich von zwei NaN-Werten, wobei grundsätzlich der Wahrheitswert false zurückgeliefert wird, d. h. NaN != NaN. Ist es explizit erforderlich, auf NaN zu testen, so muss für den Test auf den Wert NaN auf einen Trick mit der Konvertierung des NaN-Wertes in eine Zeichenkette und einem anschließenden Vergleich mit dem String "NaN" zurückgegriffen werden.
let $x := xs:double("NaN")
where xs:string($x) eq "NaN"
return
<Text>
Test auf NaN-Wert einer Zahl vom Datentyp xs:double()
</Test>
Die let-Klausel bindet dabei den Wert NaN an die Variable $x, der in der where-Klausel in eine Zeichenkette konvertiert und dann mit dem String "NaN" verglichen wird.
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |