Universelle Quantifizierung
Eine mit dem Schlüsselwort every eingeleitete universelle Quantifizierung liefert dann true, wenn für alle Belegungen der innerhalb des quantifizierenden Ausdrucks gebundenen Variablen der nach dem satisfies-Schlüsselwort stehende Ausdruck mit true evaluiert wird. Entsprechend ergibt nachfolgender Ausdruck false, da nicht alle Zeichenketten, die an $x gebunden werden, die geforderte Länge aufweisen.
every $x in ("Lehner", "Schöning")
satisfies fn:string-length($x) = 6
Im Gegensatz zur existenziellen Quantifizierung liefert eine universelle Quantifizierung true, falls die Variablen an eine leere Sequenz gebunden werden. Die Auswertung einer universellen Quantifizierung bricht mit dem Wert false ab, sobald eine Belegung gefunden worden ist, die den zu überprüfenden Ausdruck nicht befriedigt. Da die Strategie, nach welcher die Variablenbelegungen getestet werden, implementierungsabhängig ist, kann folgender Ausdruck entweder in false oder in einen Laufzeitfehler münden.
every $x in ("Lehner", "Schöning", 3.1416)
satisfies fn:string-length($x) = 6
Im Fall einer existenziellen Quantifizierung wäre das Ergebnis für obigen Ausdruck ebenfalls offen und kann zwischen true und einem Laufzeitfehler variieren.
Die universelle Quantifizierung wird im Anwendungsbeispiel an der Aufgabe illustriert, alle Patienten zu finden, die bisher nur mit Morphium behandelt wurden und für die sich somit der Verdacht auf eine Medikamentenabhängigkeit ergibt:
<MedikamentenabhängigePatienten>
{
let $m := fn:doc("Verbrauchsartikel.xml")//
Artikel[Bezeichnung = "Morphium"]
for $p in fn:collection("Patienten")/*
where every $a in $p//verbrauchter_Artikel
satisfies ($a/@Artikel_id = $m/@ID)
return
<Patient>{ $p/Name/Nachname, $p/Name/Vorname }</Patient>
}
</MedikamentenabhängigePatienten>
Dazu werden zunächst Morphium-Medikamente an die Variable $m gebunden. Im universell quantifizierenden Ausdruck wird anschließend überprüft, ob jedes für den aktuell betrachteten Patienten verbrauchte Medikament mit einem Morphium-Medikament korrespondiert. In einem entsprechenden Fall wird die where-Bedingung mit true ausgewertet und der Patientenname ausgegeben.
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |