XQuery
Jan Woschofius
Übersicht
1.
Was ist XQuery
2.
XQuery / XSLT
3.
FLWOR
4.
Extensions
Was ist XQuery
XQuery ist für XML , was SQL für
Relationale Datenbanken ist.
XQuery sucht und findet Elemente und
Attribute aus XML Dateien
Ist Abfragesprache und funktionale
Sprache
XQuery
W3C Recommendation January 23, 2007
Aus XML-QL hervorgegangen
Ist selbst kein XML
Turingvollständig
Baut auf XPath 2.0 auf
Parallele Entwicklung von XSLT 2.0 und XQuery
Aber unterschiedlicher Focus der 2 Ansätze
Vergleich XQuery / XSLT
Gleiche Datenmodel, Funktionsbibliothek,
XPath 2.0
XSLT -> Transformationssprache,
XQuery -> DB Abfragesprache
XSLT 2.0 Vorteile bei Formatierungen,
Namespaces
Vergleich XQuery / XSLT
XQuery leichter zu lernen als XSLT, da
kleinere Sprache
XQuery hat keinen Updatemechanismus
(XSLT löst das über Patterns)
Basisregeln
XQuery beachtet Groß-/Kleinschreibung
XQuery Elemente, Attribute, und
Variablen müssen gültige XML Namen
sein
XQuery String Werte mit “ oder „
Variable wird definiert mit $ gefolgt vom
Namen, z.B. $bookstore
XQuery Kommentare mit (: und :),
z.B. (: XQuery Comment :)
Sequenzen
Wichtiger Grundbestandteil von XQuery
Alles baut auf Sequenzen auf
Realisiert als geordnete Liste
XML-Dokument kann Liste sein
Sequenzen werden geklammert
◦ (1 , 2 , 3 , 3)
Sequenzen wichtig bei Unterscheidung der
Vergleichsoperationen (siehe entsprechende Folie)
Selektion über Pfad
Dokument öffnen:
◦ doc("books.xml")
Pfad auswählen (XPath):
◦ doc("books.xml")/bookstore/book/title
Einschränken:
◦ doc("books.xml")/bookstore/book[price<30]/
title
Ausdrücke
XQuery besteht aus Ausdrücken
Bereits einfache Ausdrücke sind gültige XQueries
und werden entsprechend verarbeitet
“Hello World”
2+2
◦ 4
substring(“Langer Satz”,1,4)
◦ “Lang”
FLWOR
Eigentliches Kernstück von XQuery
Akronym für "For, Let, Where, Order by,
Return”
Vergleichbar mit SQL
Beispiel:
◦ for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
FOR
Binded eine Variable zu jedem Element,
dass durch den IN-Ausdruck
zurückgeliefert wird
Führt zu einer Iteration über diese
Elemente
Mehrere FOR-Ausdrücke können pro
FLOWR Ausdruck existieren
FOR .. IN ..
FOR
for $x in doc("books.xml")/bookstore/book
return $x/title
◦
◦
◦
◦
<title lang="en">Everyday Italian</title>
<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
FOR
Loop für eine bestimmte Anzahl mit TO
◦ for $x in (1 to 5)
return <test>{$x}</test>
◦ <test>1</test>
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>
FOR
AT zum Zählen der Iterationen
◦ for $x at $i in
doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>
◦ <book>1.
<book>2.
<book>3.
<book>4.
Everyday Italian</book>
Harry Potter</book>
XQuery Kick Start</book>
Learning XML</book>
FOR
Mehr als ein Ausdruck pro FOR erlaubt
◦ for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>
◦ <test>x=10 and y=100</test>
<test>x=10 and y=200</test>
<test>x=20 and y=100</test>
<test>x=20 and y=200</test>
LET
Dient der Variablenzuweisung
Führt nicht zu Iterationen
◦ let $x := (1 to 5)
return <test>{$x}</test>
◦ <test>1 2 3 4 5</test>
WHERE
Spezifizierung von Einschränkungen
Ähnlich dem SQL-Pedant
◦ where $x/price>30 and $x/price<100
ORDER BY
Sortieren des Ergebnisses
◦ for $x in doc("books.xml")/bookstore/book
order by $x/title ascending
return $x/title
◦ <title lang="en">Everyday Italian</title>
◦ <title lang="en">Harry Potter</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>
RETURN
Spezifiziert, was genau zurückgegeben
werden soll
◦ for $x in doc("books.xml")/bookstore/book
return $x/title
◦ <title lang="en">Everyday Italian</title>
<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>
Verbundoperationen (Joins)
Stärke von XQuery
Erlaubt das Verbinden von verschiedenen
Datenquellen
Beispiel:
◦ for $row in doc("db10000.xml")//table/row
◦ for $x in ("0024", "0097", "0524")
◦ where data($row/id) eq $x
◦ return $row
Vergleichsoperationen
Vergleiche: =, !=, < , <=, >, >=
Wertvergleich: eq, ne, lt, le, gt, ge
$bookstore//book/q > 10
◦ Wahr, falls irgendein q Element größer 10 ist
$bookstore//book/q gt 10
◦ Wahr, falls ein q Element existiert und dieses
größer 10 ist
◦ Bei mehreren q‟s kommt es zu einem Error
Funktionen
XQuery nutzt Funktionen zum Extrahieren
Über 100 eingebaute Funktionen
XQuery 1.0, XPath 2.0, und XSLT 2.0 haben
die gleiche Funktionsbibliothek
Collection() dient der Verbindung zu
richtiger Datenbank
Funktionen - Beispiele
In einem Element
◦ <name>{uppercase($booktitle)}</name>
In einem Pfad-Ausdruck
◦ doc("books.xml")/bookstore/book[substring(ti
tle,1,5)='Harry']
In einem LET-Ausdruck
◦ let $name := (substring($booktitle,1,4))
Elementinhalt
Auswahl des Inhaltes eines Elementes über
data()
◦ for $x in doc("books.xml")/bookstore/book/title
order by $x
return data($x)
◦ Everyday Italian
Harry Potter
Learning XML
XQuery Kick Start
Beispiel HTML Liste
<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{$x}</li>
}
</ul>
<ul>
<li><title lang="en">Everyday Italian</title></li>
<li><title lang="en">Harry Potter</title></li>
<li><title lang="en">Learning XML</title></li>
<li><title lang="en">XQuery Kick
Start</title></li>
</ul>
Beispiel HTML Liste
<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{data($x)}</li>
}
</ul>
<ul>
<li>Everyday Italian</li>
<li>Harry Potter</li>
<li>Learning XML</li>
<li>XQuery Kick Start</li>
</ul>
XQueryX
W3C Recommendation 23 January 2007
Nicht praktisch für Menschen
Eher für maschinelle Verarbeitung
Ermöglicht XQuery in einer kompletten
XML Pipeline einzusetzen
Siehe Beispiel
Erweiterungen
Volltextsuche:
◦ “XQuery 1.0 and XPath 2.0 Full-Text”
◦ W3C Candidate Recommendation 28 January
2010
Erweiterungen
Updatemechanismus:
◦ „XQuery Update Facility“
◦ W3C Candidate Recommendation on 9 June
2009
◦ Erlaubt Änderungen am Datenmodell
◦ Einfügen, Löschen, Modifizieren und
Hinzufügen
Ende