XML-Querysprachen

Werbung
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
Herunterladen