Aufheben der Sortierung
Wird hingegen aus Anwendungssicht auf eine Sortierung vollkommen verzichtet, so kann dies dem System mit Hilfe der Funktion fn:unordered()mitgeteilt werden. Der Hinweis, dass auf eine Sortierreihenfolge (auch auf die Dokumentreihenfolge) nicht Rücksicht genommen werden muss, eröffnet dem ausführenden System Freiheiten zur Optimierung und effizienteren Ausführung der XQuery-Anfrage.
Die Funktion fn:unordered()erwartet als Parameter eine Sequenz und liefert diese Sequenz mit einer nicht deterministisch vorhersagbaren Ordnung. Da das Aufheben einer Sortierreihenfolge als Funktion in XQuery realisiert ist, kann die Sortierung für einen ganzen FLWOR-Ausdruck oder auch nur für einzelne Teile bzw. Teilausdrücke verwendet werden.
Sollen beispielsweise Preise für medizinische Gegenstände in eine andere Währung überführt und dabei auf eine explizite Sortierung verzichtet werden, so kann die Sortierung bereits bei der Auswertung des Pfadausdrucks zur Initialisierung der Laufvariablen über alle medizinischen Gegenstände aufgehoben werden.
for $i in fn:unordered(fn:doc("Verbrauchsartikel.xml")//Artikel)
return
<USD-Preis>{ $i/Einzelpreis div 1.21 }</USD-Preis>
Alternativ ist die Aufhebung der Sortierung jedoch auch schon auf Ebene des gesamten FLWOR-Ausdrucks anwendbar:
fn:unordered(for $i in fn:doc("Verbrauchsartikel.xml")//Artikel
return
<USD-Preis>{ $i/Einzelpreis div 1.21 }</USD-Preis>)
Während sich das Optimierungspotenzial bei einfachen FLWOR-Ausdrücken in Grenzen hält, ermöglicht das Aufheben der Sortierung bei Verbund- und geschachtelten FLWOR-Ausdrücken einen erheblichen Freiraum zur effizienteren Gestaltung der Anfrageausführung.
Angemerkt sei an dieser Stelle jedoch nochmals, dass grundsätzlich die Dokumentordnung gilt, die entweder explizit mit einem anwendungsspezifischen Sortierkriterium überlagert bzw. durch Einsatz der fn:unordered()-Funktion aufgehoben werden muss.
Quelle: "XQuery – Grundlagen und fortgeschrittene Methoden", dpunkt-Verlag, Heidelberg (2004)
<< zurück | vor >> |