Quantifizierende Ausdrücke

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 4.)

Keywords: some, every, in, satisfies

Mittels eines quantifizieren­den Ausdrucks (quantified expression) sind Aussagen über die Zusammenset­zung von Sequenzen oder über Relationen zwischen ihnen möglich. Das Ergebnis eines solchen Ausdrucks ist stets true oder false, weswegen man sie als verwandt zu den Vergleichsausdrücken betrachten kann.

Bei quantifizierten Ausdrücken unterscheidet man zwischen so genannter exis­tenzieller und universaler Quantifizierung. Am Beginn des Ausdrucks steht im ersten Fall das Keyword every, im zweiten das Keyword some.

Nach dem einleitenden Keyword folgen ein oder mehrere durch Komma getrennte Ausdrücke, die mittels des Keywords in je eine temporäre Variable an eine Sequenz binden. Den Abschluss bilden das Schlüsselwort satisfies und ein zu erfüllender Ausdruck, gegen den getestet wird.

Existenzielle Quantifizierung

Einfach ausgedrückt, spricht man von »existenzieller Qualifizierung«, wenn innerhalb der geprüften Sequenz ein Item existiert, dass die gestellte Bedin­gung erfüllt:

some $x in $sequenz 
     satisfies $bedingung

Die Variablenbindung an $x geschieht nacheinander für jedes Item der Sequenz $sequenz.

Der Testausdruck $bedingung referenziert die temporäre Variable. Ist für eine dieser gebundenen Variablen die Bedingung erfüllt, so ist der Gesamtausdruck true, erfüllt keines die Bedingung oder ist die der Variablenbindung zugrunde liegende Sequenz leer, so ergibt der Ausdruck false.

Auch mehrere Variablenbindungen mit ebenso vielen Sequenzen sind mög­lich:

some $a in $sequenz_a,
     $b in $sequenz_b,
     ...,
     $n in $sequenz_n
     satisfies $bedingung

Existieren mehrere Bindungen, so werden bei der Auswertung alle möglichen Tupel ($a, $b, ..., $n) jeweils gegen die Bedingung geprüft, die in diesem Fall Referenzen aller Variablen $a bis $n enthalten wird. Die Tupel werden formal anhand des kartesischen Produktes der jeweiligen Variablenbindungen gebil­det. (Eine komplizierte Methode, auszudrücken, dass alle denkbaren Kombinationen erfasst werden, an der jeweils ein Item jeder Menge beteiligt ist.)

Hat (in einem einfachen Fall) beispielsweise eine Sequenz A zwei Items a1 und a2 und eine Sequenz B ebenfalls zwei Items b1 und b2, so werden die Tupel (a1, b1), (a1, b2), (a2, b1), (a2, b2) gebildet. Für die gebundenen Variablen $a, $b gilt folglich:

($a, $b) = 
(a1, b1) | (a1, b2) | (a2, b1) | (a2, b2)

Der so formulierte Ausdruck ist dann true, wenn in der gebildeten Menge ein Tupel existiert, für das die Bedingung erfüllt ist.

Existiert kein solches Tupel, so ist das Ergebnis false. Ist eine der beteiligten Sequenzen leer, so können keine Tupel gebildet werden und der Rückgabewert ist ebenfalls false.

Beispiel 1 – eine gebundene Variable

some $x in /buecher/buch/autor 
     satisfies $x = "James Joyce"

Dieser Ausdruck ergibt dann true, wenn der Autor eines der getesteten Bücher »James Joyce« heißt.

Eine Entsprechung in XPath 1.0 würde lauten:

/buecher/buch/autor = "James Joyce"

Beispiel 2 – zwei gebundene Variablen

some $x in (1, 2, 3),
     $y in (2, 3, 4) 
     satisfies $x + $y = 4

Dieser Ausdruck ergibt true, da er für die Tupel ($x=1, $y=3) oder ($x=2, $y=2) erfüllt ist.

Rückblick auf XPath 1.0

In XPath 1.0 existiert nur ein im Sinne eines quantifizierenden Ausdrucks verwendbarer Operator: das Gleichheitszeichen, das dem Wesen nach einem existenziellen Qualifizierer entspricht (siehe oben, Beispiel 1).

Universale Quantifizierung

Die universale Quantifizierung unterscheidet sich von der existenziellen dadurch, dass in diesem Fall alle Items der Bindung bzw. im Fall mehrerer Bin­dungen alle Tupel die gestellte Bedingung erfüllen müssen.

Beispiel 1 – eine gebundene Variable

every $x in /buecher/buch/autor 
      satisfies $x = "James Joyce"

Dieser Ausdruck ergibt dann true, wenn der Autor aller getesteten Bücher »James Joyce« heißt. Sobald ein einziges Autor-Element einen anderen Wert hat, wird false zurückgegeben. Ein entsprechender Ausdruck ist in XPath 1.0 nicht formulierbar.

Beispiel 2 – zwei gebundene Variablen

every $x in (1, 2, 3),
      $y in (2, 3, 4) 
      satisfies $x + $y = 4

Dieser Ausdruck ergibt false, da er für die Tupel ($x=1, $y=2) oder ($x=2, $y=3) und so fort nicht erfüllt ist.

Achtung – Vorsicht bei leeren Sequenzen
Die universale Quantifizierung gibt per Definition dann den Wert true zurück, wenn eine der Variablenbindungen an eine leere Sequenz erfolgt – in diesem Fall können keine Tupel gebildet werden, die geprüft werden könnten. Dies gilt auch für eine einzige Variablenbindung wie in Beispiel 1, falls die Sequenz leer ist. Der universale Quantifizierer every ver­hält sich somit umgekehrt zum existenziellen mit some.

Rückblick auf XPath 1.0:

Für die universalen Quantifizierer gibt es keine Analogie in XPath 1.0.

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XPath bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn