XPath und XQuery. Robert Tolksdorf Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme

Ähnliche Dokumente
XPath & Co. Prof. Dr.-Ing. Robert Tolksdorf Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme

Seminar: XML und intelligente Systeme

XPath & XQuery Standardisierte Abfragesprachen für XML-Dokumente. Sebastian Apel

Dokumentverarbeitung

Semistrukturierte Daten

XPATH (XPATH) Lernziele

Datenbanksysteme. XML und Datenbanken. Burkhardt Renz. Sommersemester Fachbereich MNI Technische Hochschule Mittelhessen

XQuery 2013 S Seite 1 h_da S

XSL. extended Stylesheet Language. Die Stylesheet Sprache für XML

XML Path Language (XPath)

Inhalt. Beispiel: XML Dokument. Beispiel: Dokumentenbaum. XPath VU Semistrukturierte Daten 1. Datenmodell

Projektseminar Texttechnologische Informationsmodellierung

Anfragen an XML-Dokumente mit XPath

XQuery. XML Query Language. eine Abfragesprache für XML. Ulrike Henny. IDE Autumn School 2012, Chemnitz

XPath 1.0 Pfadausdrücke zur Adressierung von XML-Fragmenten

INVENTARNR NAME BENUTZNR

Implementierung der XPath-Anfragesprache für XML-Daten in RDBMS unter Ausnutzung des Nummerierungsschemas DLN

XML-Datenbanken. Autor: Nan Zhang Veranstaltung: XML in Bioinformatik

FileMaker Konferenz 2010 XML / XSLT. Ein Workshop mit [x] cross solution Armin Egginger

XML 1. Einführung, oxygen. Ulrike Henny. IDE Summer School 2013, Chemnitz

Anfragen & Transformation

XML Path Language (XPath)

Projektseminar "Texttechnologische Informationsmodellierung"

XQuery. Sebastian Krug

XML-QL. Querysprachen für XML. Semistrukturierte Datenmodell und XML Datenmodell. Beispiel

Klaus Schild, XML Clearinghouse Transformation von XML-Dokumenten

XSLT, XPath und XQuery Marco Skulschus Marcus Wiederstein Sarah Winterstone

XML-Verarbeitung. XPath XSL die extensible Stylesheet Language. Torsten Schaßan SCRIPTO Modul 4: EDV Wolfenbüttel

XML in Datenbanken XQuery und exist 10a

Index. Index CDATA 113, 183. Achse 430. child 425. all 191. choice 187, 191, 197, 393. ancestor 428. choose 272. Anwendung 351; Beispiel 302

Institut für Dokumentologie und Editorik. XML-Datenbanken und XQuery

XSLT. Heutige Vorlesung. Warum XML-Dokumente transformieren? XSLT zur Transformation von XML-Dokumenten XSL-FO zur Erzeugung von druckfähigem Layout

06 Formatierungssprachen, XSL. Manuel Burghardt Lehrstuhl für Medieninformatik

Ruhr.pm XML-Daten verarbeiten mit XML::LibXML Autor: Datum:

Templat-Regeln: XSLT Transformation: XML-Dokumente als Bäume: sieben Arten von Knoten. XSLT Verarbeitungsmodell für Templat-Regeln.

Speicherung von XML in (objekt-)relationalen Datenbanken. Burkhard Schäfer

Transformation von XML-Dokumenten. IDE SummerSchool 2013, Chemnitz

Textnavigation mit XPath

Datenbanksysteme 2 Frühjahr-/Sommersemester April Darf man in der XML Declaration die Versionsnummer weglassen? (d.h.

Einführung in die Programmierung mit VBA

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

Konzept und Realisierung Extensible Stylesheet Language

Weiterführende Literatur: M. Knobloch, M. Kopp: Web-Design mit XML, dpunkt-verlag 2001

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

5. Programmierschnittstellen für XML

DOM und XPath 05. G. Görz, J. Schneeberger Department Informatik KI.

- Wiederholung/Übung -

Linux I II III Res WN/TT NLTK XML Weka E XML BNC XSLT BNC/XML 7 BNC/XML XML BNC XSLT. Ressourcen-Vorkurs

Grundlagen der Extensible Stylesheet Language

8.3 Das Verarbeitungskonzept von XQuery

Modul 122 VBA Scribt.docx

XSLT: Transformation von XML-Dokumenten

5. Programmierschnittstellen für XML

Prof. Dr. Martin Leischner Fachbereich Informatik XML. Prof. Dr. Martin Leischner Fachbereich Informatik. Anwendungen (SOAP,WSDL, ) Verknüpfungen XSL

XSL Templates. Mit Templates arbeiten. XSL Templates

EXCEL VBA Cheat Sheet

Kapitel 6: SQL und XML

Einführung in XML Einführung in XML. Erik Wilde Institut für Technische Informatik und Kommunikationsnetze (TIK) ETH Zürich

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

XQuery Implementation in a Relational Database System

Programmierkurs Python I

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

XML-Abfrage- und Transformationssprachen. (Weiter-) Entwicklung der Standards. XQuery 1.0. bisher betrachtet. XPath 2.0. XPath 1.0 XSLT 2.0 XSLT 1.

Berner Fachhochschule Software Schule Schweiz JDOM. Beatrice Amrhein. Oktober 06

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Datenbanksysteme 2015 Kapitel 10

IT-Zertifikat: Daten- und Metadatenstandards. Transformation von XML-Dokumenten mit XSLT (und XPATH) XSLT kurz und knackig. XSLT und die Praxis

Herzlich Willkommen. Über mich Termine Literatur Über PHP

Web-Programmierung (WPR)

MCSA: SQL 2016 Database Development

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Tutorium für Fortgeschrittene

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Programmierkurs Python I

SQL als Zugriffssprache

dbis Praktikum DBS I SQL Teil 2

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Referat 11: Einführung in XPath

R-Wörterbuch Ein Anfang... ein Klick auf einen Begriff führt, sofern vorhanden, zu dessen Erklärung.

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

VU Semistrukturierte Daten 2. XQuery (Teil 2) Inhalt

Algorithmen und ihre Programmierung

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

XSLT Beispiele. Cooktop -

JAVA-Datentypen und deren Wertebereich

7. XML-Datenbanksysteme und SQL/XML

Beispiele elementarer Datentypen Ganze Zahlen (integer) Unterbereiche Gleitkommazahlen Festkommazahlen

Seminar 1 SQL Abfragen DML. MatrNr Name Vorname Age Gruppe Schmidt Hans Meisel Amelie

In diesem Abschnitt wollen wir uns mit dem Thema XML Datenbank beschäftigen. Das Ziel ist, herauszufinden, was XML Datenbank überhaupt sind und was

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit

Gruppe A PRÜFUNG AUS SEMISTRUKTURIERTE DATEN Kennnr. Matrikelnr. Familienname Vorname

Syntax der Sprache PASCAL

Datenbankadministration

Gliederung. Service Oriented Architecture - XML Technologies. 1 von 11

1. Übung zur Vorlesung Service-orientierte Architekturen

Automaten und formale Sprachen. Lösungen zu den Übungsblättern

Semistrukturierte Daten

Transkript:

XPath und XQuery Robert Tolksdorf Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme tolk@inf.fu-berlin.de

XML Path Language (XPath)

XPath Standard zum Zugreifen auf beliebige Teile eines XML-Dokuments keine XML-Anwendung wird von XSLT und XQuery benutzt Adressierungspfaden eines Dateisystems ähnlich aber wesentlich mächtiger: z.b. /order/item XPath 1.0 W3C-Recommendation seit Nov. 1999 http://www.w3.org/tr/xpath XPath 2.0 W3C-Recommendation seit Jan. 2007 http://www.w3.org/tr/xpath20/ 3

Zugrundelegendes Dokumentenmodell ähnliches Modell wie in DOM XML-Dokument als Baum mit Elementen, Attributen und PCDATA als Knoten virtuelle Dokument-Wurzel (Wurzelknoten): durch "/" repräsentiert (links von "/" steht nichts) Wurzel-Element immer Kind von "/": z.b. /root 4

Knotentypen (I) Wurzelknoten oberster Knoten im Baum, dessen Kind der Elementknoten des Dokumentelements ist string-wert: Verkettung der Zeichendaten aller Textknoten-Kinder in der Dokumentenreihenfolge Elementknoten Knoten für ein Element string-wert: Verkettung der Zeichendaten aller Textknoten-Kinder des Elements Attributknoten Knoten für jedes Element zugeordnete Attribut string-wert: Normalisierter Attributwert 5

Knotentypen (II) Textknoten Knoten der Zeichendaten enthält string-wert: die Zeichendaten des Textknotens Namensraumknoten der Namensraum ist jeweils einem Elementknoten als Elternknoten zugeordnet, ist aber nicht Kind dieses Elementknoten string-wert: URI des Namensraum Kommentarknoten Knoten für jeden einzelnen Kommentar string-wert: Kommentarinhalt 6

Dokumentenreihenfolge Baummodell als Basis feste Dokumentreihenfoge (document order) = Reihenfolge der Start-Tags im Dokument Tiefensuche 1 2 5 6 3 4 1 <buch> 2 <autoren> 3 <name> Anna Baum</name> 4 <name>hans Gruber</name> </autoren> 5 <titel>ein Buch</titel> 6 <preis>45</preis> </buch> 7

(De)Serialisierung <buch> <autoren> <name> Anna Baum</name> <name>hans Gruber</name> </autoren> <titel>ein Buch</titel> <preis>45</preis> </buch> Deserialisierung Serialisierung 3 1 2 5 6 4 Deserialisierung Erzeugung eines Baums aus einem Dokument Serialisierung Erzeugung eines Dokuments aus einem Baum 8

Zugriff auf Elemente und Attribute Elemente werden einfach über ihren Namen identifiziert: z.b. order oder order/item Attribute werden mit "@name" identifiziert: z.b. @id oder order/@id <?xml version="..." encoding=" "?> <order id="o56"> <item item-id="e16-2"> <name>buch</name> </item> </order> 9

Pfad-Ausdrücke. aktueller Knoten.. Eltern-Knoten * beliebiges Kind-Element @* beliebiges Attribut // überspringt 0 Hierarchie-Ebenen nach unten [] spezifiziert ein Element Auswahl (Vereinigung) Beispiel: * @* Kind-Element oder Attribut des aktuellen Knotens 10

Absolute und relative Pfade absolute Pfade beginnen mit / z.b. /order/item lesen: ( )Folge dem Pfad von der Dokument-Wurzel zu einem Kind-Element order und von dort aus zu einem Kind-Elementen item! relative Pfade beginnen mit einem Element oder Attribut z.b. order/item lesen: ( ) item-elemente, die Kind eines Elementes order sind Element order kann an beliebiger Stelle des XML- Dokumentes stehen 11

Kontext-Knoten XPath-Pfade werden in XSLT immer bzgl. eines bestimmten Kontext-Knotens ausgewertet: Element-, Attribut- oder Text-Knoten Beispiel: <xsl:template match="p"> <DIV> <xsl:value-of select="."/> </DIV> </xsl:template> Was bedeutet hier aktueller Knoten "."? "." = Kontext-Knoten Kontext-Knoten = Knoten, auf den das Template angewandt wird (hier ein p-element) 12

Ausführliche Schreibweise <?xml version="..." encoding=" "?> <buch> <autoren item-id="e16-2"> <name> Anna Baum</name> <name>hans Gruber</name> </autoren> <titel>ein Buch</titel> <preis>45</preis> </buch> chse Knotentest Achse Knotentest Prädikat child::buch/descendant::autoren[attribute::id=`e16-2`] Lokalisierungsstufe Lokalisierungsstufe 13

Lokalisierungsstufe chse Knotentest Achse Knotentest Prädikat child::buch/descendant::autoren[attribute::id=`e16-2`] Lokalisierungsstufe Lokalisierungsstufe besteht aus: einem Achsenbezeichner einem Knotentest einem oder mehreren Prädikat (optional) in der Form: Achsenbezeichner::Knotentest[Prädikat1][Prädikat2] :: Trennzeichen zwischen Achsenbezeichner und Knotentest 14

Achsen self:: 6 child:: 10, 11 parent:: 2 descendant:: 10, 11, 13 descendant-or-self:: 6, 10, 11, 13 ancestor:: 2, 1 ancestor-or-self:: 6, 2, 1 preceding-sibling:: 5 preceding:: 5, 2, 1 following-sibling:: 7 following:: 10,11,13, 7, 3, 4, 8, 12, 9 Quelle: http://swt.cs.tu-berlin.de/informatik2000/skripte/xml-datenbank.pdf attribute:: (Kürzel @) namespace:: 15

Knotentest chse Knotentest Achse Knotentest Prädikat child::buch/descendant::autoren[attribute::id=`e16-2`] Lokalisierungsstufe Lokalisierungsstufe Filterung der Knotenmenge Filterungs-Kriterium: Knotenname z.b.: child::buch Knotentyp z.b.: child::text() child::node() 16

Prädikate chse Knotentest Achse Knotentest Prädikat child::buch/descendant::autoren[attribute::id=`e16-2`] Lokalisierungsstufe Lokalisierungsstufe Verfeinerung der Filterung durch Prädikate Anzahl der Prädikate 0 [ ] Bedingung Prädikatausdruck unterstützen logische Operatoren: <, >,,, =,!= >, < müssen als Entity-Referenzen > und < benutzt werden numerische Operatoren: +, -, *, div, mod 17

Prädikate Randbedingungen für Pfade order/item[@item-id = 'E16-2'] item-elemente, die Kind von order sind und Attribut item-id mit Wert 'E16-2' haben <order id="4711"> <item item-id="e16-2"> <name>buch</name> </item> </order> Randbedingungen können an beliebiger Stelle in einem Pfad vorkommen: order[@order-id = '4711']/item <orders> <order id="4711"> <item item-id="e16-2"> <name>buch</name> </item> </order> <order id="4711"> <item item-id="e16-3"/> </order> </orders> 18

XPath Funktionen

Auswertung von XPath-Ausdrücke Grundlegende Datentypen node-set eine ungeordnete Knotenmenge string Zeichenfolge boolean true und false number Fließkommazahl 20

Knotenmenge-Funktionen Funktionen: number last() number position() eine Zahl, die die Größe der aktuellen Knotenmenge entspricht Position eines Knotens number count(node-set) Anzahl der Knoten in der Knotenmenge Beispiele: order/item[position() = 1] order/item[position() = last()] 21

String-Funktionen Funktionen: string string(object) interpretiert ein übergebenes Argument als Zeichenkette string string-length(string) Länge vom String (Anzahl der Zeichen) boolean starts-with(string, string) true wenn die erste Zeichenkette mit der zweiten Zeichenkette anfängt 22

Boolesche Funktionen Funktionen: boolean boolean(object) Objekt ist +0,-0,NaN, {}, "" => false, sonst true boolean not(boolean) Negation boolean true() immer true boolean false() immer false Beispiel: order/item[not(position()=last())] 23

Numerische Funktionen Funktionen: number number(object) interpretiert Zeichenkette als Zahl number sum(node-set) Gesamtsumme der Zahlenwerte der Knotenmenge (nach Umwandlung) number round(number) rundet den Wert zur nächsten Ganzzahl Beispiel: number(3xy) 3 24

Beispiele Wähle das Wurzelelement AAA aus: <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> /AAA Wähle alle CCC Elemente aus, die Kinder des Elements AAA sind: <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> /AAA/CCC 25

Beispiele //BBB <AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> //DDD/BBB <AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> 26

Beispiele /*/*/*/BBB //* <AAA> <XXX> <DDD> <BBB/> <FFF/> </DDD> </XXX> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA> <AAA> <XXX> <DDD> <BBB/> <FFF/> </DDD> </XXX> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA> 27

Beispiele /AAA/BBB[last()] <AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> //@id <AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/> <BBB/> </AAA> 28

Beispiele //CCC //BBB //CCC/following-sibling::* <AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> <AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <EEE/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </XXX> </AAA> http://ponderer.org/download/xpath/ und andere 29

XPath 2.0 Januar 2007 W3C Recommendation für neue Version von XPath zeitgleich mit XQuery 1.0 & XSLT 2.0 erweitertes Datenmodell neue Konstrukte für Ausdrücke neue Datentypen neue Operatoren erweiterte Funktionsbibliothek 30

Erweitertes Datenmodell Berücksichtigung einzelner Werte (atomic values) Daten unterschiedlichen Typs: Zeichenfolgen, Zahlen, logische Werte, Datums- und Zeitwerte qualifizierte Namen & URIs einfache Sequenzen & Listen Ergebnis eines XPath Ausdrucks: Auswahl von Knoten, Einzelwert oder Sequenz XPath 2.0 auf Knotenbaum nur Daten auslesen XPath 2.0 auf Einzelwerten & Sequenzen neue Werte/Sequenzen erzeugen 31

Konstrukte für Ausdrücke für Operationen mit Sequenzen Verwendung des for-ausdrucks Beispiel for $i in 1 to 3 return $i*$i Variable (Bereichsvariable) binding sequenz return-ausdruck Ergebnis: 1, 4, 9 32

Weitere Ausdrucke bedingter Ausdruck if if @menge > 1000 then "gut" else "weniger gut" quantifizierende Ausdrücke some und every some $a in $lager/artikel satisfies $lager/artikel/menge=0 wahr, wenn die Menge mind. bei einem Artikel = 0 every $a in $lager/artikel satisfies $lager/artikel/menge>0 wahr, wenn von allen Artikeln mind. einer vorhanden ist. 33

Datentypen Unterstützung der XML-Schema Datentypen XPath 1.0 number Fließkommazahl XPath 2.0 integer decimals single precision Datums-, Zeit- und Dauerwerte 34

Operatoren Knotenvergleiche is prüft, ob zwei Ausdrücke den selben Knoten liefern <<, >> prüfen, welcher von zwei Knoten in der Dokumentreihenfolge früher oder später erscheint Kombination von Knotensequenzen union Vereinigung zwei Knotensequenzen zu einer Sequenz intersect erzeugt aus zwei Sequenzen eine Sequenz, die Knoten enthält, die in beiden vorkommen except erzeugt aus zwei Sequenzen eine Sequenz, die Knoten enthält, die in der ersten Sequenz aber nicht in der zweiten vorkommen 35

Funktionen in Xpath (und Xquery) Xpath, Xquery und XSLT Ausdrücke können Funktionen verwenden Vereinheitlicht in Standard XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition) W3C Recommendation 14 December 2010 http://www.w3.org/tr/xpath-functions/ 36

Zusätzlich Funktionen Zugriffe Numerische Funktionen Zeichenketten Zeit, Datum Knoten Listen Kardinalitäten Statistik Verarbeitungskontext http://www.w3schools.com/xpath/xpath_functions.asp gute Darstellung 37

XQuery

Was ist XQuery? XQuery ist die Abfragesprache für XML-Daten XML-Dateien & alles was in XML darstellbar ist (auch DBs) ist für XML das, was SQL für Datenbanken basiert auf XPath-Ausdrücken ist sein Januar 2007 eine W3C Recommendation http://www.w3.org/tr/xquery/ 39

XQuery kann benutzt werden um Informationen zu extrahieren, um sie in Web Services zu nutzen in Web-Dokumenten nach relevanten Informationen zu suchen XML in andere Sprachen zu transformieren Reports zu generieren 40

Einfache Anfrage XPath Ausdruck ist eine Anfrage an ein XML-Dokument doc('test')//student Ergebnis der Anfrage: Alle <student>-knoten 41

XQuery Komplexe Anfrageausdrücke als FLWOR ( Flower ) For Auswahl von Elementen Let Where Order by Return Wertzuweisung an Variablen Filtern von Elementen Ergebnisordnung Ergebnisrückgabe 42

Beispiel for $d in fn:doc("depts.xml")/depts/deptno let $e := fn:doc("emps.xml")/emps/emp[deptno=$d] where fn:count($e) >= 10 order by fn:avg($e/salary) descending return <big-dept> { $d, <headcount>{fn:count($e)}</headcount>, <avgsal>{fn:avg($e/salary)}</avgsal> } </big-dept> 43

For Klausel For erzeugt einen Strom aus Objekttupeln Dieser wird iterativ verarbeitet for $s in (<one/>, <two/>, <three/>) return <out>{$s}</out> <out> <one/> </out> <out> <two/> </out> <out> <three/> </out> 44

XML Knoten Strom aus zu betrachtenden Knoten mit XPath Ausdruck for $s in doc('test')//student return $s/name/text() Ergibt Joe AverageJack Doe doc(uri) betrachtet das Document bei URI Beispiele nach Anders Møller and Michael I. Schwartzbach. An Introduction to XML and Web Technologies Addison-Wesley, 2006 <students> <student id="100026"> <name>joe Average</name><age>21</age> <major>biology</major> <results> <result course="math 101" grade="c-"/> <result course="biology 101" grade="c+"/> <result course="statistics 101" grade="d"/> </results> </student> <student id="100078"> <name>jack Doe</name><age>18</age> <major>physics</major> <major>xml Science</major> <results> <result course="math 101" grade="a"/> <result course="xml 101" grade="a-"/> <result course="physics 101" grade="b+"/> <result course="xml 102" grade="a"/> </results> </student> </students> 45

let Klausel Let ist eine Zuweisung innerhalb einer Iteration über den Tupelstrom: for $s in (<one/>, <two/>, <three/>) let $t := ($s, <four/>, <five/>) return <out>{$t}</out> <out> <one/> <four/> <five/> </out> <out> <two/> <four/> <five/> </out> <out> <three/> <four/> <five/> </out> 46

Am Beispiel for $s in doc("test")//student let $m := $s/major/text() return <studies> {$s/name/text()}: {$m} </studies> <studies>joe Average: Biology</studies> <studies>jack Doe: PhysicsXML Science</studies> 47

where Klausel Filter der mit allen aus for und let erzeugten Tupeln geprüft wird Bei true wird return Klausel ausgeführt for $s in fn:doc("students.xml")//student let $m := $s/major where fn:count($m) ge 2 return <double>{ $s/name/text() }</double> <double>jack Doe</double> 48

Verarbeitungsreihenfolge Bearbeitung und Ausgabe entsprechend dem Tupelstrom Änderbar durch ordering mode unordered { for $p in fn:doc("parts.xml")/parts/part[color = "Red"], $s in fn:doc("suppliers.xml")/suppliers/supplier where $p/suppno = $s/suppno return <ps> { $p/partno, $s/suppno } </ps> } ordered: Entsprechend Standard, Dokumentenordnung unordered: Implementierungsabhängig, nichtdeterministisch 49

order by Klausel order by Klausel ordnet den Tuplestrom entsprechend um und wendet dann die Return Klausel an for $s in fn:doc("students.xml")//student let $m := $s/major where fn:count($m) ge 2 order by $s/@id return <double> { $s/name/text() } </double> 50

order by Sortieren nach mehreren Kriterien: for $s in doc("students.xml")//student order by fn:count($s/results/result[fn:contains(@grade,"a")]) descending, fn:count($s/major) descending, xs:integer($s/age/text()) ascending return $s/name/text() <students> <student id="100026"> <name>joe Average</name><age>21</age> <major>biology</major> <results> <result course="math 101" grade="c-"/> <result course="biology 101" grade="c+"/> <result course="statistics 101" grade="d"/> </results> </student> <student id="100078"> <name>jack Doe</name><age>18</age> <major>physics</major> <major>xml Science</major> <results> <result course="math 101" grade="a"/> <result course="xml 101" grade="a-"/> <result course="physics 101" grade="b+"/> <result course="xml 102" grade="a"/> </results> </student> </students> 51

Beispiel aus Standard <bib> <book> <title>tcp/ip Illustrated</title> <author>stevens</author> <publisher>addison-wesley</publisher> </book> <book> <title>advanced Programming in the Unix Environment</title> <author>stevens</author> <publisher>addison-wesley</publisher> </book> <book> <title>data on the Web</title> <author>abiteboul</author> <author>buneman</author> <author>suciu</author> </book> </bib> 52

<authlist> { for $a in fn:distinct-values($bib/book/author) order by $a return <author> <name> {$a} </name> <books> { for $b in $bib/book[author = $a] order by $b/title return $b/title } </books> </author> } </authlist> Xquery Dokumente bestehen aus Ausdrücken wie Literalen, Variablen, FLWORs etc.! 53

Ergebnis <authlist> <author> <name>abiteboul</name> <books> <title>data on the Web</title> </books> </author> <author> <name>buneman</name> <books> <title>data on the Web</title> </books> </author> <author> <name>stevens</name> <books> <title>advanced Programming in the Unix Environment</title> <title>tcp/ip Illustrated</title> </books> </author> <author> <name>suciu</name> <books> <title>data on the Web</title> </books> </author> </authlist> 54

Return Klausel Return Klausel bei allen Tupeln angewandt die durch den where-filter gekommen sind Return Ergebnisse zusammengehängt als Ergebnis der Anfrage 55

Kontrollstrukturen Abstraktion und Fallunterscheidung declare function local:grade($g) { if ($g="a") then 4.0 else if ($g="a-") then 3.7 else if ($g="b+") then 3.3 else if ($g="b") then 3.0 else if ($g="b-") then 2.7 else if ($g="c+") then 2.3 else if ($g="c") then 2.0 else if ($g="c-") then 1.7 else if ($g="d+") then 1.3 else if ($g="d") then 1.0 else if ($g="d-") then 0.7 else 0 }; Grade Point Average declare function local:gpa($s) { fn:avg(for $g in $s/results/result/@grade return local:grade($g)) }; 56

Kontrollstrukturen Abstraktion und Fallunterscheidung <gpas> { for $s in fn:doc("students.xml")//student return <gpa id="{$s/@id}" gpa="{local:gpa($s)}"/> } </gpas> <gpas> <gpa id="100026" gpa="1.666666666666666667"/> <gpa id="100078" gpa="3.75"/> </gpas> 57