XML-Querysprachen Angefertigt für das Seminar: "Data on the Web" Leitung: Prof. Dr. M. Scholl Vorgelegt von Christoph Sturm Sommersemester 2001 INHALTVERZEICHNIS 1 Einleitung _____________________________________________________________1 2 Anforderungen an eine XML-Querysprache _________________________________1 3 Übersicht über XML-Querysprachen _______________________________________3 3.1 LOREL __________________________________________________________________ 3 3.2 XML-QL _________________________________________________________________ 4 3.3 XML-GL _________________________________________________________________ 4 3.4 XSL _____________________________________________________________________ 5 3.5 XQL _____________________________________________________________________ 6 4 Quilt [Chamberlin 2000] _________________________________________________6 5 XML Query ____________________________________________________________8 5.1 Die XML Query Algebra [Fankhauser 2001a] __________________________________ 9 5.2 XQuery [Chamberlin 2001] __________________________________________________ 9 5.3 Bewertung von XQuery ____________________________________________________ 12 6 Zusammenfassung _____________________________________________________13 Abkürzungsverzeichnis______________________________________________________14 Literaturverzeichnis ________________________________________________________14 XML-Querysprachen 1 Einleitung Der Austausch und die Verfügbarkeit von Informationen wird immer wichtiger. Um dies zu gewährleisten ist ein einheitliches Dateiformat nötig, das alle Arten von Informationen verarbeiten kann. Auch benötigt man eine Abfragesprache für eben dieses Dateiformat, die das Auffinden und Selektieren der dort enthaltenen Informationen ermöglicht. Mit dem Dateiformat XML (extensible markup language) entstand eine neue universelle "Auszeichnungssprache" mit der es möglich ist, sehr viele unterschiedliche Informationen zu speichern. Hierzu zählen unstrukturierte Dokumente aber auch relationale Datenbanken und Objekt-Beschreibungen. Schon früh nach dem Erscheinen von XML gab es verschiedene Vorschläge für eine entsprechende Abfragesprache. Die aktuellen Bestrebungen gehen zunehmend in Richtung der Entwicklung einer universellen Abfragesprachen. Diese Arbeit möchte einen Überblick über die vorhandenen Abfragesprachen für XML Dokumente geben. Hierzu wird zunächst eine Auswahl der frühen Abfragesprachen vorgestellt, um anschließend einen Einblick in den aktuellen Entwicklungsstand von universellen Abfragesprachen zu gewähren. Sie befasst sich ausschließlich mit den Eigenschaften der Sprachen zum Abfrage von Daten, nicht jedoch mit den Datendefinitionsund Datenmanipulationskomponenten die diese Sprachen eventuell beinhalten. Des Weiteren hat das World Wide Web Konsortium (W3C) den Bedarf an einer für den Menschen lesbaren Syntax und einer XML basierten Syntax erkannt. Erstes wird in den vorzustellenden Sprachen zu verwirklichen gesucht. 2 Anforderungen an eine XML-Querysprache Um die im Folgenden vorgestellten Abfragesprachen bewerten und einordnen zu können, ist es nötig, die Anforderungen an eine solche Sprache zu spezifizieren. Hierbei wird auf Quass [Quess 1998] Bezug genommen. Die Anforderungen im Einzelnen: 1. Klar strukturierter Aufbau: Die Abfragesprache sollte einen klar strukturierten Aufbau besitzen, der es erlaubt, einfache Anfragen auch einfach auszudrücken. Als Beispiel für einen klar strukturierten Seite 1 XML-Querysprachen Aufbau sei hier der "select-from-where" (SFW) Block in SQL (structured query language) genannt. 2. Pfadangaben: Das Konstrukt der Pfadangaben (path expressions) ermöglicht dem Benutzer einen leichten Zugang zu verschachtelten Elementen. Da solche in XML Dokumenten häufig auftreten, ist dieses Kriterium sehr wichtig. 3. XML Dokument als Ergebnis: Das Ergebnis einer Anfrage sollte wiederum ein XML Dokument darstellen. Dies kann dadurch erreicht werden, dass die zurückgegebenen Ergebnisse in XML Tags eingebettet sind (z.B.: <ergebnis> SELECT a.name FROM angestellte a </ergebnis>). 4. Abfragen von XML Tags und Attribute: Da ein XML Datenelement Daten, Tags und Attribute enthält ist es für eine Abfragesprache von existenieller Bedeutung diese auch Abfragen zu können. Sie sollten deshalb auch in jedem Teilbereich der Abfrage erreichbar sein. 5. Intelligente Überprüfung der Typkorrektheit von Anfragen: Aufgrund der unterschiedlichen Datentypen sollte die Querysprache nötige Typkonversionen selbst feststellen und durchführen können. 6. Behandlung unerwarteter Daten: Eine Abfragesprache sollte Daten - die an einer Stelle eigentlich nicht erwartet wurden zumindest in beschränkter Art und Weise korrekter verarbeiten können. Grund hierfür ist, dass die Daten in einem XML Dokument nicht unbedingt einer genau spezifizierten DTD (document type definition) entsprechen müssen. 7. Formulierung gültiger Anfragen ohne Wissen über die Dokumentenstruktur: Es erscheint sinnvoll, Abfragen auch dann formulieren zu können, wenn die exakte Struktur des Dokumentes nicht bekannt ist. Deshalb muss die Verwendung von sogenannten "Wildcards" erlaubt sein. 8. Nicht spezifizierte Attribute zurückgeben: Hier ist die Eigenschaft der Sprache gefordert auch Attribute und Elemente zurückgeben zu können, deren Namen dem Anfragenden nicht bekannt sind (z.B. Gebe alle Kindelemente von Element x aus). 9. Anfrage sollte strukturiertes Ergebnis zurückgeben können: Hierdurch wird die Restrukturierung eines XML Dokuments durch eine Anfrage möglich. Anstatt einer Menge an Elementen muss hierzu eine Art Baumstruktur zurückgegeben werden. Seite 2 XML-Querysprachen 10. Beibehaltung der Ordnung des Ursprungsdokuments: Es sollte möglich sein, die Ordnung der Elemente - wie sie im Quelldokument vorherrscht - auch in dem Ergebnis der Abfrage beizubehalten. 3 Übersicht über XML-Querysprachen In der folgenden Abbildung 1 wird ein Überblick über die wichtigsten XML Querysprachen gegeben. Die Sprachen sind in verschiedene Phasen eingeteilt, die ihrem ungefähren Entstehungszeitraum entsprechen. Die Verbindungen und Einflüsse zwischen diesen unterschiedlichen Sprachen sind durch die Pfeile gekennzeichnet. Alle Sprachen sind mehr oder weniger stark von den beiden Sprachen SQL und OQL (object query language) beeinflusst. Deshalb sind diese auch im Diagramm aufgezeigt, ohne jedoch die expliziten Beziehungen zu den XML-Querysprachen aufzuzeigen. Ähnlich verhält es sich mit XPath (XML Path Language). Auch diese hatte mehr oder weniger starken Einfluss auf alle XMLQuerysprachen. Abbildung 1: XML-Querysprachen Im Folgenden widme ich mich den einzelnen Querysprachen und stelle diese kurz vor. 3.1 LOREL Lorel wurde von der Stanford Universität als Abfragesprache für halbstrukturierte Dokumente entwickelt und auf XML-Dokumente erweitert. Es handelt sich hierbei um eine sehr Seite 3 XML-Querysprachen benutzerfreundliche Abfragesprache im Stil von SQL und OQL. Grundlegender Aufbau einer Abfrage: 'select' { select_expr } [ 'from' { from_expr }] [ 'where' {where_expr }] "Select_expr", "from_expr" und "where_expr" enthalten ihrerseits wiederum Abfragen. Lorel ist zudem mehr als eine Abfragesprache, da sie auch die Datenmanipulation (einfügen, löschen und ändern) unterstützt. [Bonifati 2000] 3.2 XML-QL Hierbei handelt es sich um eine Vorschlag zum Entwurf einer Querysprache für XML der von den AT&T Labs beim W3C eingebracht wurde [Bonifati 2000]. Die Sprache ist sehr stark an SQL angelehnt. Erweitert wird sie durch die "CONSTRUCT" Anweisung, in der das Ergebnisses erzeugt wird. Hierbei verwendet sie ein "element pattern" um das Ergebnis in ein XML Dokument einfügen zu können. Grundlegende Syntax einer Query: Query ::= 'where' { Predicate } 'construct' { '{' Query '}' } Das Ergebnis wird in "construct" gebildet und ist ein Teil des XML Dokuments. Der Inhalt des XML Dokumentes wird durch Auswertung der "Predicate" Anweisungen gebildet. [Bonifati 2000] 3.3 XML-GL Bei XML-GL handelt es sich um eine graphische Abfragesprache für XML Dokumente. Sie basiert auf einer graphischen Repräsentation des XML Dokuments und der DTD (bzw. XMLSchemas) als beschriftete "XML Graphen". Alle Sprachelemente werden visuell dargestellt. Deshalb eignet sich XML-GL sehr gut für eine benutzerfreundliche Programmoberfläche [Bonifati 2000]. Ein Beispiel einer solchen Anfrage ist in Abbildung 2 zu sehen. Seite 4 XML-Querysprachen Abbildung 2 : XML-GL Anfrage [Bonifati 2000] Die grafische Repräsentation der Abfrage erfolgt also in Form zweier azyklischer Graphen. Die linke Seite repräsentiert hierbei die Anfrage mit der Angabe des abzufragenden Dokuments und den Bedingungen, die die Elemente des Dokuments erfüllen müssen. Die rechte Seite gibt an wie das neue Dokument konstruiert wird. Die in Abbildung 2 dargestellt Anfrage würde alle Elemente "<manufacturer>" zurückgeben, die ein Element "<model>" beinhalten, das wiederum ein Element "<rank>" enthält, das kleiner oder gleich zehn ist. Durch die im rechten Graphen dargestellte Konstruktionsanweisung werden auch alle Subelemente der Elemente < manufacturer> mit ins Ergebnis aufgenommen. [Bonifati 2000] 3.4 XSL Ursprünglich handelte es sich bei XSL (extensible stylesheet language) um eine Sprache, die zur Formatierung von XML Dokumente entwickelt wurde. Sie besitzt jedoch Fähigkeiten, die die Basis für eine Abfragesprache bilden könnten. Die eigentlichen Abfrage würden hierbei in das "Template" Tag eingebettet. '<xsl:template' ['match=' pattern_expr] '>' {'<xsl:directive>'} {'<result-elements>'} '</xsl:template>' "Pattern_expr" enthält dabei eine Angabe in XPath Schreibweise. "Result-elements" sind die neuen Ergebniselemente und in "xsl:directive" stehen die Queryanweisungen. Die verschiedenen "xsl:directive" sind: "xsl:for-each", "xsl:value-of" "xsl:copy-of" usw. Für detaillierter Informationen sei auf [Bonifati 2000] verwiesen. Seite 5 XML-Querysprachen 3.5 XQL XQL ist ein weiterer Vorschlag einer Abfragesprache für XML Dokumente. Mit ihr ist es möglich, Elemente und Text aus XML Dokumenten auszuwählen. Ziel ist es, eine kompakte und einfache Sprache mit eingeschränkter Ausdrucksmächtigkeit zu erhalten. XQL ist syntaktisch stark mit der Syntax von URI (uniform resource identifier) verwandt, die zum Navigieren durch eine physikalische Struktur verwendet wird. Entgegen URI ist bei XQL die Navigation durch den XML Baum angegeben. Query Path ::= ::= [ './' | '/' | '//' | './/'] Element [ '[' Predicate ']' ] [Path] [ '/' | '//' ] Element [ '[' Predicate ']' ] [Path] Eine Anfrage ist also entlang des Pfades in dem Dokument spezifiziert. "Predicate" (in der XQL Terminologie auch als Filter bezeichnet) wird auf die Elemente, die man während der Navigation durch den Pfad passiert, angewandt. 4 Quilt [Chamberlin 2000] Quilt stellt den Versuch dar, eine unfassende Querysprache zu entwickeln, die ähnlich flexibel einsetzbar ist wie XML selbst. Um dies zu erreichen, versuchte man aus verschiedenen anderen Sprachen jene Fähigkeiten zu übernehmen, in denen diese Stärken hatten. So extrahierte man aus XPath, XQL, XML-QL, SQL, OQL, und andere. Bei Quilt handelt es sich, wie bei OQL, um eine funktionale Sprache, wobei jede Anfrage einen Ausdruck darstellt. Da Quilt verschiedene Ausdrücke unterstützt, können die Anfragen unterschiedliche Formen annehmen. Diese unterschiedlichen Formen können wiederum ineinander geschachtelt sein. Ergebnis und Quelle einer Quilt Anfrage sind immer XML Dokumente. Es gibt verschiedene Grundformen eines Quilt Ausdrucks, die nun im Folgenden erläutert werden. Path Expression: Diese Ausdrücke basieren auf XPath, das vom W3C erstellt wurde. Mit diesen ist es möglich eine Hierarchie von Knoten, wie sie in einem XML Dokument vorkommen, zu durchwandern. Als Ergebnis solcher Ausdrücke erhält man eine Menge von Knoten. Seite 6 XML-Querysprachen Element Constructors: Wird zum Erzeugen eines Element Knotens verwendet. Hierbei gibt es die Möglichkeit, den Namen und die Attribute anzugeben. Durch die Verwendung von Variablen lassen sich diese zusätzlich flexibel gestalten. FLWR Expressions: [Chamberlin 2001] FLWR (ausgesprochen: "flower") steht für FOR, LET, WHERE, RETURN, die in der angegebenen Reihenfolge stehen müssen. Da dieser Ausdruck eine fundamentale Bedeutung für die Sprache hat, wird er genauer vorgestellt. Der erste Teil des FLRW Ausdrucks besteht aus der "For"- und der optionalen "Let"- Anweisung. Diese binden Werte, die wiederum als Ausdruck dargestellt werden, an eine oder mehrere Variablen. Der "For"-Ausdruck kann zum Beispiel eine "Path Expression" beinhalten, die eine Menge an Knoten zurückliefert. Die Variablen des "For"-Ausdrucks werden dann zu einem individuellen Wert der "Path Expression" gebunden. Das heißt, die Variablen iterieren über die Werte, die von der "Path Expression" zurückgegeben werden. Die "Let"-Anweisung wird ebenfalls zum Binden von Variablen an Ausdrücke benutzt. Im Gegensatz zum "For"-Ausdruck werden die Variablen hier nicht an individuelle Werte sondern an die gesamte Menge gebunden. Somit findet keine Iteration statt und die Variable wird einmalig an einen Wert gebunden. Ein Beispiel soll diesen Unterschied nochmals verdeutlichen: Die Anweisung FOR $x IN /bibliothek/buch/ resultiert in vielen Bindungen der Variable x, wobei sie jedes x an ein einzelnes Buch der Bibliothek bindet. Im Gegensatz hierzu liefert die Anweisung LET $x := /bibliothek/buch eine einzelne Bindung der Variablen x, nämlich an die Menge aller Bücher. Durch die "where"-Klausel lassen sich die Bindungen der Variablen einschränken bzw. selektieren. Der "return"-Ausdruck erzeugt schließlich das Ergebnis. Er wird für jede Bindung der Variablen ausgeführt und enthält zumeist einen "Element Constructor", der an Variablen gebunden ist. Operatoren in Ausdrücken: In Quilt sind Infix- und Prefixoperatoren möglich. Operatorbeispiele sind UNION, INTERSECT, EXCEPT usw. Seite 7 XML-Querysprachen Bedingungsausdrücke: Innerhalb einer Query können Ausdrücke wie "if then else" auftreten. Dies ist immer dann sinnvoll, wenn die Struktur der zurückgegebenen Information von einer Bedingung abhängt. Die Bedingung muss vom Typ Boolean sein oder in diesen Typ umgewandelt werden können. Funktionen: In Quilt sind einige vorgefertigte Funktionen enthalten. Beispiele sind hier "document", die das Wurzelelement eines Dokumentes zurückgibt; Aggregationsfunktionen wie "sum", "count", "avg", wie sie aus SQL bekannt sind und andere. Zusätzlich lassen sich auch eigene Funktionen erstellen. Quantor: Quantoren benötigt man, um die Existenz von Elementen zu überprüfen, die eine bestimmte Bedingung erfüllen, oder um zu überprüfen, ob alle Elemente eine bestimmte Bedingung erfüllt. Dies kann durch den "exist"- oder den "some"- Quantor in Quilt überprüft werden. Variablenbindung: Ein Ausdruck wird in Anfragen des Öfteren mehr als einmal verwendet. In solchen Fällen ist die Bindung dieses Ausdrucks an eine Variable von Vorteil. Dies soll als grober Überblick genügen, denn wie bereits dargestellt, gingen die Sprachkonstrukte fast vollständig in den neuen Vorschlag des W3Cs ein und werden dort detaillierter besprochen. 5 XML Query XML Query dient als Oberbegriff aller Bestrebungen des W3C flexible Abfragemöglichkeiten für Dokumente im Internet bereitzustellen. Hierzu gehört natürlich auch die Arbeit an einer XML-Querysprache, die im Folgenden näher erläutert wird. Seite 8 XML-Querysprachen 5.1 Die XML Query Algebra [Fankhauser 2001a] Die Algebra stellt die formale Basis für eine Querysprache dar. Beim Entwurf dieser Algebra wurde man vor allem von Systemen wie SQL und OQL inspiriert, aber auch von den zuvor schon vorgestellten Systemen wie Quilt, XML-QL, XSL und anderen. Für eine Abfragesprache ist es üblich, sie in ihre Algebra zu übersetzen, da dies die Überprüfung der Abfrage auf Korrektheit erlaubt. Des Weiteren benutzt man die Algebra, um Abfrageoptimierungen durchzuführen. Die vom W3C veröffentlichte Algebra beinhaltet die Bedeutungen einer Vielzahl an Querysprachen, wie z.B. XML-QL, XQL und X-Query. Mittlerweile hat das W3C den Workingdraft allerdings in XQuery Formal Semantics umbenannt.[Fankhauser 2001b]. Da diese formalen Grundsätze in die Querysprache XQuery eingegangen sind, erwähne ich dies nur am Rande. Wichtiger ist mir die Beschäftigung mit der konkreten Querysprache XQuery. 5.2 XQuery [Chamberlin 2001] XQuery wurde erstmals am 16. Februar 2001 vom W3C in einem Working Draft vorgestellt. Die Sprache basiert auf der formale Semantik, wie sie in der XML-Query-Algebra bzw. XML Query Formal Semantics vorgegeben wird. Bei XQuery handelt es sich, wie bei OQL, um eine funktionale Sprache, weshalb auch jede Anfrage als ein Ausdruck dargestellt werden kann. XQuery unterstützt eine Vielzahl unterschiedlicher Ausdrücke, die jeweils wieder ineinander verschachtelt sein können. Input und Output einer Query stellen Instanzen eines speziellen Datenmodells dar, das auch von XPath 2.0 benutzt wird. Dieses akzeptiert neben XML Dokumente auch wohlgeformte (also richtig geschachtelte Tags, root Element, usw.) Stücke eines Dokumentes, eine Reihe von Dokumente oder eine Reihe von wohlgeformten Dokumentstücken. Grundsätzlich besteht in XQuery die Möglichkeit zu folgenden Ausdrucksformen: • Path Expression • Element Constructors Seite 9 XML-Querysprachen • FLWR Expressions • Ausdrücke mit Operatoren und Funktionen • Bedingte Ausdrücke • Quantifiers • Ausdrücke zum Testen und Ändern von Datentypen Die Ausdrucksgrundformen von Quilt und XQuery sind demnach nahezu identisch, sie unterscheiden sich lediglich in den Ausdrücken mit Operatoren und Funktionen bzw. den Ausdrücken zum Testen und Ändern von Datentypen. Deshalb werde ich meine weiteren Ausführungen auf diese beiden Punkte beschränken. Ausdrücke mit Operatoren: XQuery beinhaltet alle grundlegenden arithmetische Operationen für Addition, Subtraktion, Multiplikation und Division. Wenn beide Operanden einen numerischen Wert darstellen, ist die Berechnung kein Problem. Schwieriger wird es, wenn einer der Operanden ein Knoten ist. In diesem Fall wird versucht, ob der Inhalt dieses Knotens durch eine Funktion (data ()) extrahiert und in eine Zahl umgewandelt werden kann. Ist dies nicht möglich, kommt es zu einem Fehler. Stellt einer der Operanden keine einzelne Zahl, sondern eine Zahlenreihe dar, dann ist das Resultat des Operators ebenfalls eine Zahlenreihe. Diese wird durch die paarweise Anwendung des Operanden mit den numerischen Operator und jedem einzelnen Element der Zahlenreihe des zweiten Operanden erzeugt. Natürlich gibt es daneben noch Vergleichsoperatoren. In XQuery gibt es Vergleichsoperatoren „<“, „>“ usw. die einfache Wertvergleiche durchführen. Daneben gibt es noch die speziellen Operatoren „==“ und „!==“. Diese führen eine Vergleich auf „node identity“ durch. Wenn beide Operanden von „==“ der selbe Knoten sind, ergibt dieser "wahr", ansonsten "falsch". Ist einer der Operanden eine Menge von Knoten erfolgt das Vorgehen passungsgleich. Daneben gibt es natürlich die logischen Operatoren und die mengen- bzw. reihenbezogenen Operatoren. Hierzu gehört der „ , “ Operator, der alle Elemente einer Reihe voneinander trennt, die Operatoren "UNION", "INTERSECT" und "EXCEPT", die benutzt werden, um Reihen zu kombinieren und um neue Reihen zu erzeugen. Von XQL hat XQuery noch die Seite 10 XML-Querysprachen Operatoren BEFORE und AFTER geerbt, die das Suchen innerhalb des Baumes von einer bestimmten Stelle aus erlauben. Zur Erklärung der letzten Grundform von Ausdrücken in XQuery ist es zunächst nötig, die Datentypen von XQuery zu erläutern. Die Typisierung von XQuery basiert auf XML-Schema. Dies bedeutet, dass alle Basisdatentypen und abgeleiteten Datentypen von XML-Schema in Anfragen verwendet werden können. Des Weiteren können auch benutzerdefinierte Datentypen, die nach den Regeln von XML-Schema definiert wurden, in XQuery benutzt werden. In XQuery erscheinen die Typenbezeichnungen in Funktionsdeklarationen und bei den Operatoren auf Datentypen, auf die ich später zurückkommen werde. Beispiele für Datentypen sind: • String • Integer • Decimal • Float • ... Funktionen in XQuery: Die in XQuery enthaltenen Funktionen entsprechen größtenteils jenen in Quilt. In XQuery wurde aber die Möglichkeit eigene Funktionen zu definieren erstmals detaillierter festgelegt. Wie bei jeder Programmiersprache enthält die Funktionsdefinition den Namen der Funktion, den Namen und den Datentyp der Parameter und den Datentyp des Ergebnisses. Des Weiteren wird im Funktionskörper festgelegt, wie das Resultat der Funktion berechnet wird. Hierzu können wiederum Funktionen aufgerufen werden. Wird einem Funktionsparameter kein Datentyp zugewiesen, ist er automatisch vom Typ "any node". Wurde der Ergebnistyp nicht festgelegt, ist er automatisch vom Typ "any sequence of nodes". XQuery Version 1 erlaubt das Überladen von benutzerdefinierten Funktionen nicht. Unter bestimmten Bedingungen ist es in XQuery möglich, eine Funktion mit Parametern aufzurufen, die nicht genau mit denen in der Funktionsdefinition deklarierten Datentypen übereinstimmen (z.B. automatische Konvertierung von Float in Integer). Seite 11 XML-Querysprachen Nun komme ich zu den Operatoren auf Datentypen. Es sind dies die Operatoren "INSTANCEOF", "TYPESWITCH", "CASE", und "CAST". "INSTANCEOF" stellt fest, ob der erste Operand vom vorgegebenen Datentyp ist und gibt dementsprechend "wahr" oder "falsch" zurück. Durch den Operator "TYPESWITCH" wird eine Reihe von "CASE" Anweisungen eingeleitet. Die Auswahl des "CASE"-Statements erfolgt nach dem Typ des übergebenen Parameters. Der CAST Operator ist für das Konvertieren eines Datentyps in einen anderen zuständig. Ein Beispiel für eine Funktionsdefinition in XQuery, die Operatoren auf Datentypen benutzt, ist im Folgendem dargestellt. DEFINE FUNCTION sound(animal $a) RETURNS xsd:string { TYPESWITCH ($a) CASE duck RETURN "quack" CASE dog RETURN "woof" DEFAULT RETURN "No sound" } Die Funktion mit dem Namen "sound" besitzt einen Parameter vom Typ "animal" und gibt als Ergebnis "string" zurück. Intern, also im Funktionskörper, wird durch "TYPESWITCH" der Typ der Variablen "a" nochmals genauer überprüft und je nach Ergebnis eine entsprechender String zurückgegeben. 5.3 Bewertung von XQuery Inwieweit genügt XQuery nun den unter Punkt 2 gestellten Anforderungen? Der klare einfache Aufbau kann als erfüllt angesehen werden zumal dem FLWR Block eine ähnlich zentrale Bedeutung wie dem SFW Block bei SQL zukommt. Die Pfadangaben werden in XQuery durch XPath ebenfalls vollständig integriert. Die Anforderung, dass XML Dokumente als Ergebnis zurückgegeben werden können, ist ebenfalls erfüllt, denn jedes Ergebnis einer Anfrage stellt eine Instanz des auch von XPath benutzten Datenmodells dar. Die intelligente Typkontrolle ist durch das umfangreiche Regelwerk bei Funktionsparametern und bei Operatoren ebenfalls vorhanden. Dieses übernimmt auch gleich die Behandlung unerwarterter Daten. Hier sind allerdings noch einige offene Fragen im aktuellen Working Seite 12 XML-Querysprachen Draft vorhanden. Für die Formulierung von Anfragen muss man nicht unbedingt die genaue Struktur des Dokuments kennen und nicht jeder Elementtyp, der im Ergebnis auftritt, muss in der Query festgelegt worden sein. Dies wird unter anderem durch Funktionen wie "document()" gewährleistet. Natürlich kann das Ergebnis strukturiert werden (durch Element Constructor) und auch die Reihenfolge des Ausgangsdokumentes kann beibehalten werden (Standardverhalten von XQuery). Somit werden alle gestellten Anforderungen von XQuery auf einen ersten Blick erfüllt. Ein umfassenderes und detaillierteres Urteil ist zum jetzigen Zeitpunkt noch nicht möglich, da die endgültige Spezifikation der Sprache noch aussteht. 6 Zusammenfassung Bei den hier vorgestellten Sprachen handelt es sich fast ausschließlich um Prototypen, deren Entwicklung noch lange nicht abgeschlossen ist. An Quilt und XQuery hat man gesehen, dass es schon in diesem sehr frühen Stadium der Entwicklung einer Abfragesprache von Vorteil ist, verschiedene Ansätze geschickt miteinander zu kombinieren. Der aussichtsreichste Kandidat, der sich als Standard etablieren könnte, ist sicherlich XQuery, auch wenn diese Sprache noch einen weiten Weg vor sich hat. Sie ist nicht nur die derzeit umfassenste Sprache, deren formale Grundlagen, nämlich die "XML Query Algebra" schon seit längerem ausgearbeitet wurde. Vielmehr bestehen von ihr zahlreiche Querverbindungen zu anderen Randgebieten der Abfragesprachen in XML wie XPATH, XML-SCHEMA usw. Für den weiteren Werdegang ist zu berücksichtigen, dass auch die Unterstützung der Querysprache durch die Datenbankhersteller von entscheidender Bedeutung sein wird. Seite 13 XML-Querysprachen ABKÜRZUNGSVERZEICHNIS DTD OQL SFW SQL URI W3C XML XPath XSL Document type definition object query language Select from where structured query language Uniform resource identifier World wide web consortium extensible markup language XML path language Extensible stylesheet language LITERATURVERZEICHNIS [Bonifati 2000] [Chamberlin 2000] [Chamberlin 2001] [Fankhauser 2001a] [Fankhauser 2001b] [Quass 1998] Bonifati, Angela; Ceri Stefano. 2000. "Comparative Analysis of Five XML Query Languages" http://www.acm.org/sigmod/record/issues/0003/bonifati.pdf.gz, (01.03.2001) Chamberlin, Don; Robie, Jonathan; Florescu, Daniela. 2000. "Quilt: An XML Query Language for Heterogeneous Data Sources" http://www.research.att.com/conf/webdb2000/program.html, (01.03.2001) Chamberlin, Don u.a. 07.06.2001. "XQuery 1.0: An XML Query Language" W3C Working Draft http://www.w3.org/TR/2001/WDxquery-20010607, (10.06.2001) Fankhauser, Peter u.a. 15.02.2001. "The XML Query Algebra" W3C Working Draft http://www.w3.org/TR/2001/WD-query-algebra20010215, (01.03.2001) Fankhauser, Peter u.a. 07.06.2001. "XQuery 1.0 Formal Semantics" W3C Working Draft http://www.w3.org/TR/2001/WD-querysemantics-20010607 (10.06.2001) Quass, Dallan. 11/98. "Ten Features Necessary for an XML Query Language" http://www.w3.org/TandS/QL/QL98/pp/quass.html, (01.03.2001) Seite 14