• +49-(0)721-402485-12
Ihre Experten für XML, XQuery und XML-Datenbanken

Where-Klausel

Analog zum SELECT-FROM-WHERE-Block in einer SQL-Anfrage ermöglicht die where-Klausel von XQuery die Filterung der Datenströme. Wird der Ausdruck einer where-Klausel mit der gerade aktuellen Variablenbelegung zu true ausgewertet, so wird die Ausführung der return-Klausel angestoßen. Andernfalls wird die gerade gültige Belegung verworfen. Innerhalb einer where-Klausel können (müssen aber nicht) alle bisher eingeführten Variablen referenziert werden.

Folgende Anfrage liefert beispielsweise eine Liste aller Ärzte und Pfleger des Krankenhauses, die in den kommenden Jahren zur Verabschiedung in den Ruhestand anstehen, d. h. im Jahr 2004 mindestens 60 Jahre alt sind:

for $b in fn:doc("Hochwaldklinik.xml")//(Arzt | Pfleger)
where $b/Geburtsdatum < xs:date ("1944-01-01")
return
<MedizinischesPersonal>
{$b/@Station, $b/Name}
</MedizinischesPersonal>

Das Ergebnis der Auswertung einer where-Klausel entspricht dem effektiven booleschen Wert ("effective boolean value") des jeweiligen Ausdrucks. Explizit kann für jeden beliebigen Wert durch Anwendung der Funktion fn:boolean() der effektive boolesche Wert ermittelt werden. Bei der Ermittlung des Wahrheitswertes der where-Klausel wird diese Funktion implizit auf den Ausdruck angewandt. Obige where-Klausel wird demnach intern wie folgt ausgewertet:

...
where fn:boolean($b/Geburtsdatum < xs:date ("1944-01-01"))

Weitere Möglichkeiten der Filterung

Um beispielsweise nur jeden zehnten ambulant behandelten Patienten für eine statistische Erhebung auszugeben, kann die Modulo-Operation auf die Positionsvariablen angewendet werden:

for $p at $i in fn:collection("Patienten")//Patient_ambulant
where $i mod 10 = 0
return
<Patient>{ $p/Name, $p/Anamnese }</Patient>

Da ein Prädikat aus Ausdrücken gebildet wird, können alle Funktionen verwendet werden, um eine Filterbedingung für eine where-Klausel zu konstruieren. Folgender FLWOR-Ausdruck verwendet die fn:count()-Funktion zur Ermittlung der Anzahl der Elemente, die aktuell an die Variable $x gebunden sind. Durch Verwendung der for-Klausel und der damit einhergehenden Semantik wird der return-Operator niemals ausgeführt.

for $x in (1,2,3)
where fn:count ($x) > 1
return
<Text>Dieser Text wird nie erscheinen</Text>

 

Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)

<< zurückvor >>