XQUERY

Inhalt


Definition

XQuery steht für XML? Query Language und ist hauptsächlich eine funktionale Sprache [5], bei der während einer Abfrage auch verschachtelte Ausdrücke ausgewertet werden können.

Dieser Begriff wird als SQL-ähnliche Abfragesprache für etwa XML-Dokumente genutzt. Mit XQuery kann man Attribute oder Elemente aus XML-Dokumenten selektieren, Daten aus verschiedenen Dokumenten zusammenfügen, Daten modifizieren, Daten berechnen, Elemente oder Attribute zu Dokumenten hinzufügen sowie Ergebnisse sortieren. Die Ähnlichkeit zu SQL ist nicht zufällig. Im Jahr 2001 veröffentlichte das W3C eine InfoSet-Empfehlung zu XML-Dokumenten.

Das Datenmodell für XPath und XQuery baut darauf auf. Da XQuery 1.0 eine Erweiterung von XPATH 2.0 ist, können beide mit dem gleichen Datenmodell arbeiten. Das W3C beschreibt in den XQuery Requirements, wie das XQuery-Datenmodell arbeiten soll. Das XQuery-Datenmodell ist trotz der Gemeinsamkeiten nicht mit dem W3C-Infoset-Modell identisch, da es auch Werte akzeptieren soll, die in einem unvollständigen oder nicht wohlgeformten XML-Dokument vorkommen. Beispiel ist ein Dokument, welches aus einer Sequenz besteht, aber kein Wurzelelement hat. Die Struktur für Ein- und Ausgabe wird ebenfalls in diesem Datenmodell beschrieben. Den Kern für die XQuery-Abfragen bilden die FLWOR-Ausdrücke. Diese sollen, ähnlich wie die SQL Konstrukte, die XQuery-Abfragen durchführen. XQuery enthält zwei Arten von Funktionen. Die vordefinierten und die benutzerdefinierten Funktionen.

Der XQuery-Prozessor verwendet nur geeignete Informationen zu einer festgelegten Syntax. Seit dem Jahr 2007 ist XQuery eine durch das W3C standardisierte Abfragesprache für XML-Datenbanken. Wie XML? ist XQuery auch ein Branchenstandard.[1]([2] S.359f)


Unterschiede bei Abfragen von XQuery und SQL

Bei XQuery sind die Abfragen immer case sensitive. Ein weiterer wichtiger Unterschied im Vergleich zu SQL ist die fehlende Möglichkeit die Datenquelle bei XQuery zu aktualisieren. Bei SQL ist das eine der grundlegenden Funktionen. Bei XQuery können ebenfalls keine Datenquellen selbständig erstellt werden, das bedeutet die Datenquelle muß als fertiges XML-Dokument, als XML-Stream oder als XML-Daten aus anderen Datenquellen bereits vorliegen.
Ebenso kann ein Wert einer Variablen nur einmal zugewiesen werden. Dies ist lediglich zur Mehrfachnutzung und zur besseren Übersicht für den Benutzer gedacht. Für XSLT gilt das ebenso. Es ist also zuerst eine Transformation der zu verarbeitenen Daten in ein XML-Format notwendig, bevor eine Abfrage mit XQuery gestartet werden kann. Die Ausgabe der Ergebnisse kann wieder in verschiedenen Formaten erfolgen, etwa XML, HTML, Text oder ein anderes Format wie PDF.[3]


Arbeitsweise und Abfragen mit XQuery

XQuery ist ein mächtiges und komplexes Werkzeug zur Abfrage von XML-Datenbeständen, d.h. XQuery dient der Selektion und anschließenden Transformation von XML-Dokumenten. XQuery verwendet XPath 2.0 und XML-Schema. In der Syntax ist XQuery angelehnt an C, SQL und XSLT. Die Datentypen für XQuery sind die XML-Schema Typen.
Der große Unterschied zwischen XPATH und XQuery liegt darin, dass bei XQuery nicht nur eine Sequenz ausgewählt und zurückgegeben werden kann, sondern daß dabei ebenso die Ergebnisse und Strukturen für ein Ergebnis-XML-Dokument während der Abfrage erzeugt werden können.([6], S.292)
XQuery ist aber nicht auf XML? begrenzt, sondern kann eine Kombination von verschiedenen Datenquellen nutzen. Das schließt relationale Datenbanken, Webseiten, CGI-Skripten mit ein. XQuery konkurriert nicht nur mit anderen Abfragesprachen sondern auch direkt mit XSLT([2] S.363).

Die Historie und zeitliche Einordnung von XQuery findet man in der nebenstehenden Grafik.


Abb. 1: XQuery Historie [Quelle: o.Autor]


Syntax des Beispiels

Die Syntax des Beispiels wird durch die zur Verfügung stehenden FLWOR-Ausdrücke deutlich, diese sind in ihrer Arbeitsweise an SQL angelehnt und sollen etwa die Abfragen in XML-Datenbanken ermöglichen.


Beispiel:

 <liste>
  {
     for $x in fn:doc("bib.xml")/bib/buch
     where $x/preis > 30
     order by $x/titel
     return $x/titel
  }
 </liste>

In diesem Beispiel sollen alle Bücher, dessen Preise teurer als 30 Währungseinheiten sind, nach Titel aufsteigend sortiert und nur der Titel der entsprechenden Bücher ausgegeben werden. Aufsteigende Sortierung (ASCENDING) ist standardmäßig eingestellt.


Liste der Implementierungsmöglichkeiten und Spezifikation der W3C

Eine Liste von W3C-Implementierungen findet man hier, ebenso die komplette W3C-Spezifikation.


Vorteile [2, S.29ff][6, S.36-40]

  • Einfachheit
  • Vielseitiger Einsatz
  • Gute Lesbarkeit
  • Standardisierung, Interoperabilität
  • Trennung von Inhalt und Form
  • einfache Erstellung von verschiedenen Abfragen (einfache und komplexe Abfragen inclusive Berechnungsmöglichkeiten)
  • Ausgabesteuerung der XML-Inhalte
  • Fallunterscheidung
  • Eigene Funktionen

Nachteile

  • XML und Co. sind keine eigenen Programmiersprachen, dennoch in Kombination mit XML-Familie, XML-Standards sowie anderen Anwendungen, Webservices sehr umfangreich als Schnittstelle einsetzbar.

Einsatzgebiete und Verwendungsmöglichkeiten von XML und XQuery [6, S.40f, 300, 371ff, 393]

  • Einsatz als globales Datenaustauschformat d.h. als Import-/Export-Schnittstelle für etwa andere Datenbanken / Webservices
  • Integration von XML und Co. in der Datenbank
  • Erstellung und Bereitstellung von Webservices für die Integration von mehreren Anwendungen auf verschieden Plattformen oder in verschiedenen Programmiersprachen.
  • XML-Erzeugung mit Steuerung der Ausgabe
  • XML-Verarbeitung (Validierung von XML auf Basis von XML-Schema Strukturen und -regeln, Transformation und Verarbeitung von übernommenen oder gespeicherten XML-Inhalten mit DOM oder XSLT,
  • Abfragen mit XPath oder XQuery)
  • Serialisierung und Deserialisierung
  • Direkte Speicherung von XML
  • Zerlegung von XML in relationale Daten

XML-Speichermodelle

  • Einsatz des Dateisystems
  • Relatonale Speicherung
  • Objektrelationale Speicherung
  • Einsatz des XML-Datentyps

XQuery-Trainer

Das edb-Datenbank E-Learning-Portal enthält einen XQuery-Trainer.


XQuery-Programmpakete

Die bekanntesten XQuery - Prozessoren sind von Altova, Saxonica und DataDirect.
Altova bietet XML, XSLT und XQuery - Prozessoren auch als Community - Edition kostenlos an. Es ist möglich per Konsole (Kommandozeile) XQuery - Abfragen auszuführen. Für Java-Anwendungen gibt es eine XQuery API for Java (XQJ), für Datenbanken ab „SQL:2003“ steht der Datentyp XML bereit und für Microsoft .Net Framework ab Ver.3.5 steht XQuery und XPath 2.0 ebenfalls zur Verfügung.([2] S.375f)


Fazit

XQuery ist eine weniger aufwendige Alternative, als etwa XSLT. Bei der Abfrage von XML-Daten kann XQuery auch punkten, da es XPath 2.0 und XSLT in den Schatten stellt. Vor allem bei der Zusammenführung aus mehreren Datenquellen bietet XQuery Vorteile. XQuery Version 1.0 ist aber nur auf die Abfrage von Daten beschränkt. Änderungen an den ausgewerteten Datenquellen sind nicht vorgesehen. Das W3C hat dafür 2008 eine Candidate Recommendation für eine XQuery Update Facility 1.0 heraus gegeben. Diese Lücke wird also wahrscheinlich bald geschlossen sein.([2] S.376f)[4]

Quellen:


Weiterführende Links:

siehe auch

Kategorie: XML, X