-
=
-
Prüft, ob zwei Ausdrücke gleich sind.
-
<
-
Prüft, ob der erste Ausdruck kleiner ist als der zweite. Innerhalb eines Attributs muss dieser Operator mit
&
lt;
kodiert werden.
-
<
=
-
Prüft, ob der erste Ausdruck kleiner oder gleich dem zweiten ist. Innerhalb eines Attributs muss dieser Operator mit & lt;= kodiert werden.
-
>
-
Prüft, ob der erste Ausdruck größer ist als der zweite. Innerhalb eines Attributs kann dieser Operator mit & gt; kodiert werden.
-
>
=
-
Prüft, ob der erste Ausdruck größer oder gleich dem zweiten ist. Innerhalb eines Attributs kann dieser Operator mit & gt;= kodiert werden.
-
!=
-
Prüft, ob zwei Ausdrücke ungleich sind.
-
and
-
Prüft, ob sowohl der erste als auch der zweite Ausdruck
true
sind. Ist der erste Ausdruck
false
, wird der zweite erst gar nicht ausgewertet.
-
or
-
Prüft, ob entweder der erste oder der zweite Ausdruck true sind. Ist der erste Ausdruck true , wird der zweite erst gar nicht ausgewertet.
Werte verschiedener Datentypen vergleichen
Für die ersten sechs Booleschen Operatoren ist der Vergleich von Werten verschiedener Datentypen kompliziert. Die verschiedenen Möglichkeiten sollen an dieser Stelle erläutert werden:
-
Wenn beide Objekte Boolesche Werte sind,
-
sind sie gleich, wenn sie denselben Wert haben. Bei Kleiner-als- und Größer-als-Vergleichen wird
false
als der kleinere Wert gegenüber
true
betrachtet (der Funktionsaufruf
number(false())
liefert den Wert
0
, während
number(true())
den Wert
1
liefert).
-
Wenn beide Objekte Zahlen sind,
-
funktionieren die Operatoren wie erwartet.
-
Wenn beide Objekte Strings sind,
-
sind sie gleich, wenn ihre Unicode-Zeichen identisch sind. Bei Kleiner-als- und Größer-als-Vergleichen werden die Zeichencodes verglichen.
-
Wenn kein Objekt eine Knotenmenge ist und der Operator = oder != ist,
-
dann werden die beiden Objekte in den gleichen Objekttyp konvertiert und der Vergleich funktioniert wie oben beschrieben. Ist eins der Objekte ein Boolescher Wert, werden die Objekte in Boolesche Werte konvertiert (wie beim Aufruf der Funktion
boolean()
). Handelt es sich bei keinem der Objekte um einen Booleschen Wert, wird als Nächstes eine Konvertierung in eine Zahl versucht. Ist eins der Objekte eine Zahl, werden die Objekte in numerische Werte konvertiert (wie beim Aufruf der Funktion number() ). Andernfalls werden alle Objekte in Strings konvertiert (wie beim Aufruf der Funktion
string()
).
-
Wenn kein Objekt eine Knotenmenge ist und der Operator < , > oder > = ist,
-
werden die Objekte in Zahlen konvertiert und dann verglichen.
-
Wenn eines oder beide Objekte Knotenmengen sind,
-
dann wird's kompliziert. Wenn beide Objekte Knotenmengen sind, ist ein Vergleich dann true, wenn der String-Wert von mindestens einem Knoten in der ersten Knotenmenge gleich dem String-Wert von mindestens einem Knoten in der zweiten Knotenmenge ist. Ist ein Objekt eine Knotenmenge und das andere eine Zahl, ein String oder ein Boolescher Wert, so ist der Vergleich true, wenn es mindestens einen Knoten in der Knotenmenge gibt, dessen numerischer, String- oder Boolescher Wert gleich dieser Zahl, diesem String oder diesem Booleschen Wert ist.
|