Logo

Today I Learned: Mengenoperatoren in XPath 2.0

XPath 2.0 führt die Operatoren union, intersect und except ein, mit denen die Vereinungs-, Schnitt- bzw. Differenzmenge berechnet werden können. Diese Operatoren gelten aber nur für Knotenmengen.

Für den Vergleich von Mengen atomischer Werte (Zeichenketten usw.) listet Kay 2008, S. 631 Kay, Michael. XSLT 2.0 and XPath 2.0, 4th Edition. Indianapolis, IN: Wiley Publishing, 2008. die entsprechenden Äquivalente:

Vereinigungsmenge
distinct-values($A, $B)
Schnittmenge
distinct-values($A[. = $B])
Differenzmenge
distinct-values($A[not(. = $B)])

Kay 2008 (ebd.) führt auch die in XPath 1.0 möglichen Ausdrücke auf, um die Schnitt- bzw. Differenzmenge von Knotenmengen zu berechnen.

Schnittmenge
$A[count(. | $B) = count($B)]
Lies: Alle Elemente von $A für die gilt, dass die Vereinigungsmenge des Elements mit der Menge $B die selbe Anzahl an Knoten enthält wie die Menge $B; das Element also in $B enthalten ist.
Differenzmenge
$A[count(. | $B) != count($B)]