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

Klammerung in der Return-Klausel

Neben der Einbettung von XQuery-Ausdrücken in die return-Klausel ist an dieser Stelle noch auf eine Besonderheit bei der Vorrangregelung mit Bezug auf die Konkatenation von einzelnen XQuery-Ausdrücken durch den Kommaoperator einzugehen. Im Allgemeinen wird ein Komma gesetzt, um die Ergebnisse der beiden Operanden in Form einer einzelnen Sequenz zusammenzusetzen. Da der Kommaoperator die niedrigste Stufe bei der Vorrangregelung einnimmt, müssen bei dessen Nutzung in der return-Klausel die Ausdrücke entsprechend geklammert werden. Folgendes Beispiel illustriert die Besonderheit:

for $a in fn:doc("Hochwaldklinik.xml")//Arzt
where $a/Adresse/Stadt = "Berlin"
return <Arzt>{ $a/Name/Nachname }</Arzt>
<Kommentar>Ein Arzt aus Berlin</Kommentar>

Dabei ist zunächst anzumerken, dass obige XQuery-Anweisung syntaktisch nicht korrekt ist, da die return-Klausel (in jedem Iterationsschritt) zwei unabhängig voneinander existierende Knoten – und keine Knotensequenz – als Ergebnis zurückliefert. Dies müsste durch folgende modifizierte return-Klausel geändert werden:

...
return (<Arzt>{ $a/Name/Nachname }</Arzt>,
<Kommentar>Ein Arzt aus Berlin</Kommentar>)

Dabei sorgt der Kommaoperator für die Bildung einer Sequenz auf Ebene der beiden Elemente Arzt und Kommentar. Die Klammerung sorgt zusätzlich für die korrekte Zuordnung des Elementes Kommentar, so dass die Auswertung der Anfrage in folgendem Ergebnis resultiert:

<Arzt>Nauman</Arzt>
<Kommentar>Ein Arzt aus Berlin</Kommentar>

<Arzt>Shore</Arzt>
<Kommentar>Ein Arzt aus Berlin</Kommentar>

<Arzt>Meier</Arzt>
<Kommentar>Ein Arzt aus Berlin</Kommentar>

Zu beachten ist an dieser Stelle, dass der Kommaoperator die geringwertigste Stellung bei der Vorrangregelung besitzt. Würde der obige Ausdruck ohne Klammerung formuliert, so würde der Kommaoperator nicht innerhalb der Elementkonstruktion der return-Klausel, sondern auf Ebene des gesamten FLWOR-Ausdrucks und der Elementkonstruktion des Kommentarknotens wirken und somit zu folgendem Ergebnis führen:

<Arzt>Nauman</Arzt>
<Arzt>Shore</Arzt>
<Arzt>Meier</Arzt>
<Kommentar>Ein Arzt aus Berlin</Kommentar>

Die folgende Abbildung skizziert die Situation mit Blick auf die Hierarchiebildung der involvierten XQuery-Ausdrücke:

Verwendung des Kommaoperators in der Return-Klausel

Abb. Verwendung des Kommaoperators in der Return-Klausel

 

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

<< zurückvor >>