flwor

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