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