XPath und XQuery Marko Harasic

Slides:



Advertisements
Ähnliche Präsentationen
Verarbeiten und Präsentieren von
Advertisements

XML: Extensible Markup Language
10. Grundlagen imperativer Programmiersprachen
eXist Open Source Native XML Database
FH-Hof Einbindung von JavaScript Anweisungen
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
DOM (Document Object Model)
XPATH XML Path Language. Xpath – XML Path Language IT Zertifikat - Daten und Metadatenstandards: XPath 2 Entwicklung des W3C Adressierungssprache für.
XML - Abfragesprache Xpath. Problemstellung Unsere XML-Datei steht und wir wollen alle 1. Titel aller vergangenen Sendungen automatisch aus den Playlists.
XML-Schema HKI Proseminar Wintersemester 2010/11 Dozentin: Frau Kurz von Jan Kohl und Christian Lütticke.
Das XQuery-Datenmodell. Gliederung Sequenzen Atomare Werte Knoten Knoteneigenschaften Sequenztypen und Knotenzugriffsfunktion Typabfrage Gleichheit von.
XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath Anfragesprache.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
XML Standardisierungen und Abfragesprachen
Einführung XML XML Einführung Andreas Leicht.
XML-Algebren Martin Winkler.
Katharina Bellon Technische Universität Kaiserslautern Fachbereich Informatik Lehrgebiet Datenverwaltungssysteme Verarbeitung von XML-Strömen.
XPointer Die Xpointer beschreiben einen Ort oder Bereich innerhalb einer XML-Instanz. Die XPointer bauen auf der XML Path Language auf. Die XPointer ist.
Xlink / Xpointer - Framework
Einführung in die Programmierung Anweisungen und Datentypen
XQuery-Anfragen Spezifikations- und Selektionsmethoden für Daten und Dienste Markus Mauch.
Übung 2: XML / XQuery Übung 2: XML / XQuery.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
1 Seminar 2004/2005 von Auszeichnungssprache XPath Ein Referat von Wei CAI
XML Path Language XPath
Quilt: Eine XML Anfragesprache für heterogene Datenquellen
Die Persistenzschicht
- XML-Path Language (xPath) ist eine Empfehlung des W3C - es wurde entwickelt, um durch ein XML- Dokument zu navigieren - und ist ein großer Teil von.
XSLT.
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Xpath und XQuery.
XML - Konzepte XHTML XML Base XPath XInclude XLink XForms XPointer
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Datenbanktechnologie Daniel Ebner SS Mai Ulrike Lohner.
XPath Was ist XPath XPath ist eine Syntax für das Definieren der Teile eines XML-Dokumentes. XPath benutzt Pfade, um XML-Elemente zu definieren. XPath.
XSL und XSLT1 eXstensible Stylesheet Language und eXstensible Stylesheet Language Transformation.
XML-Query. Übersicht Was ist XML-Query? Vergleich RDB XML-Dokument Syntaktisches und Use-Cases Kritik und Diskussion.
Verarbeiten von XML-Daten
XSLT Voraussetzungen, trivial
Einführung in PHP.
Datentypen: integer, char, string, boolean
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
PHP: Operatoren und Kontrollstrukturen
© 2001 Sven Dammann1 Aufbau Integrierter Informationssysteme XML Bearbeitung und relationale Abbildung Sven Dammann Martin-Luther-Universität Halle-Wittenberg.
XQuery 1.0 – Arbeitsweise Mögl. Eingaben Das wird berücksichtigt: Typen von XPath und XML Schema Namensräume, Module Ergebnis: XML-Instanz.
Hauptseminar Web-Services und verteilte Datenbanken Thema XML, DTDs und XML-Schema XML, DTDs und XML-Schema - Stefan Kurz, 25. April 2003.
XPath Datenmodell und Sequenzen Universität zu Köln – Historisch-Kulturwissenschaftliche Informationsverarbeitung Datenbanktechnologie – Daniel Ebner –
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
XPath und XQuery Marko Harasic Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme
Document Type Definitions (DTDs) Marko Harasic Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme
Objektorientiertes Modellieren und Programmieren mit Java
Einführung in XML 1-Tages-Kurs.
Anforderungen an die neue Datenstruktur
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Hello World! Javakurs 2013 Arne Kappen
Datentypen: integer, char, string, boolean
Vorlesung #5 SQL (Teil 2).
Vorstellung der geplanten Projekte
Vorlesung #6 SQL (Teil 3).
Document Type Definitions (DTDs)
Datentypen: integer, char, string, boolean
Felder in Java.
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Funktionen, GROUP BY, HAVING Views anlegen und verwenden
Templates
SS 04 Christiane Rauh Christian Hellinger
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
9. Vererbung und Polymorphie
Datentyp- umwandlung.
The Programming Language Pascal
 Präsentation transkript:

XPath und XQuery Marko Harasic 9/13/2018 XPath und XQuery Marko Harasic Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme harasic@inf.fu-berlin.de Name, Abteilung

Sprachfamilie AG Netzbasierte Informationssysteme http://www.ag-nbi.de 9/13/2018 Quelle:http://www.jeckle.de/images/xml/languageFamily.gif AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

XML Path Language (XPath) 9/13/2018 XML Path Language (XPath) Name, Abteilung

Standard zum Zugreifen auf beliebige Teile eines XML-Dokuments XPath 9/13/2018 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/ AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Zugrundelegendes Dokumentenmodell 9/13/2018 ä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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Knotentypen (I) Wurzelknoten Elementknoten Attributknoten 9/13/2018 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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Knotentypen (II) Textknoten Namensraumknoten Kommentarknoten 9/13/2018 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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Dokumentenreihenfolge 9/13/2018 Baummodell als Basis feste Dokumentreihenfoge (document order) = Reihenfolge der Start-Tags im Dokument Tiefensuche 1 <buch> <autoren> <name> Anna Baum</name> <name>Hans Gruber</name> </autoren> <titel>Ein Buch</titel> <preis>45</preis> </buch> 2 3 4 5 6 AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

(De)Serialisierung Deserialisierung <buch> <autoren> <name> Anna Baum</name> <name>Hans Gruber</name> </autoren> <titel>Ein Buch</titel> <preis>45</preis> </buch> Serialisierung Deserialisierung – Erzeugung eines Baums aus einem Dokument Serialisierung – Erzeugung eines Dokuments aus einem Baum AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

* beliebiges Kind-Element @* beliebiges Attribut Pfad-Ausdrücke 9/13/2018 . 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“ AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Absolute und relative Pfade 9/13/2018 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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Element-, Attribut- oder Text-Knoten Beispiel: Kontext-Knoten 9/13/2018 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) Wie geasagt, XPath-Pfade werden in XSLT immer bzgl. eines bestimmten Kontext-Knotens ausgewertet. AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

child::buch/descendant::autoren[attribute::id=`E16-2`] Lokalisierungsstufe Achse 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: :: Trennzeichen zwischen Achsenbezeichner und Knotentest Achsenbezeichner::Knotentest[Prädikat1][Prädikat2] AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Achsen self:: 6 child:: 10, 11 parent:: 2 descendant:: 10, 11, 13 9/13/2018 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 attribute:: (Kürzel @) namespace:: (Bezeihungen wie ähnlich dem DOM-Baum) Descendant – Nachkommen Ancestor - Vorfahr preceding-sibling – vorheriger Geschwister-knoten preceding-vorherige following-sibling – nöchste Geschwister-Knoten Quelle: http://swt.cs.tu-berlin.de/informatik2000/skripte/xml-datenbank.pdf AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

child::buch/descendant::autoren[attribute::id=`E16-2`] Knotentest 9/13/2018 Achse 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() Die Knotenmenge, die durch die gewählte Achse ausgewählt wird, kann anschließend durch den s.g. Knotentest weiter gefiltert werden. child::text()- liefert alle Textknoten, die Kinder des Kontextknoten sind child::node() – liefert alle Knoten, die Kinder des Kontextknoten sind, unabhängig vom jeweiligen Typ AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

child::buch/descendant::autoren[attribute::id=`E16-2`] Prädikate 9/13/2018 Achse 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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Prädikate – Randbedingungen für Pfade 9/13/2018 <order id="4711"> <item item-id="E16-2"> <name>buch</name> </item> </order> order/item[@item-id = 'E16-2'] item-Elemente, die Kind von order sind und Attribut item-id mit Wert 'E16-2' haben 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> <item item-id="E16-3"/> </orders> addition, subtraktion, multplikation… AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

9/13/2018 XPath Funktionen Name, Abteilung

Auswertung von XPath-Ausdrücke 9/13/2018 Grundlegende Datentypen node-set – eine ungeordnete Knotenmenge string – Zeichenfolge boolean – true und false number – Fließkommazahl AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Knotenmenge-Funktionen number last() eine Zahl, die die Größe der aktuellen Knotenmenge entspricht number position() Position eines Knotens number count(node-set) Anzahl der Knoten in der Knotenmenge Beispiele: order/item[position() = 1] order/item[position() = last()] AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

order/item[not(position()=last())] Boolesche Funktionen 9/13/2018 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())] AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Numerische 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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

/AAA /AAA/CCC Beispiele Wähle das Wurzelelement AAA aus: 9/13/2018 Wähle das Wurzelelement AAA aus:      <AAA>           <BBB/>           <CCC/>           <BBB/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC/>   </AAA> Wähle alle CCC Elemente aus, die Kinder des Elements AAA sind:      <AAA>           <BBB/>           <CCC/>           <BBB/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC/>      </AAA> absolute Pfade /AAA /AAA/CCC AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

//BBB //DDD/BBB Beispiele 9/13/2018 //BBB //DDD/BBB       <AAA>           <BBB/>           <CCC/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC>                <DDD>                    <BBB/>                    <BBB/>                </DDD>           </CCC>      </AAA>      <AAA>           <BBB/>           <CCC/>           <BBB/>           <DDD>                <BBB/>           </DDD>           <CCC>                <DDD>                    <BBB/>                    <BBB/>                </DDD>           </CCC>      </AAA> //BBB: Wähle alle BBB Elemente aus //DDD/BBB: Wähle BBB Elemente aus, die Kinder von DDD sind: AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

/*/*/*/BBB //* Beispiele 9/13/2018 /*/*/*/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> /*/*/*/BBB – wähle alle BBB Elemente aus, die sich auf der dritten Ebene befinden //* - Wähle alle Elemente aus AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

<AAA> <BBB id="b1"/> <BBB id="b2"/> Beispiele 9/13/2018 /AAA/BBB[last()] //@id      <AAA>           <BBB/>           <BBB/>           <BBB/>           <BBB/>      </AAA>  <AAA>   <BBB id="b1"/>   <BBB id="b2"/> <BBB name="bbb"/> <BBB/> </AAA> /AAA/BBB[last()] - Wähle das letzte BBB Kind des AAA Elements aus //@id - Wähle alle "id" Attribute aus: AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

 http://ponderer.org/download/xpath/ und andere Beispiele 9/13/2018 //CCC | //BBB      <AAA>           <BBB/>           <CCC/>           <DDD>                <CCC/>           </DDD>           <EEE/>      </AAA> //CCC|//BBB - Wähle alle CCC und BBB Elemente aus //CCC/following-sibling::* - Wähle alle folgenden Geschwister des Kontextknotens aus: XPath-Demo-Applikation  http://ponderer.org/download/xpath/ und andere AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Erweitertes Datenmodell 9/13/2018 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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de Name, Abteilung

Unterstützung der XML-Schema Datentypen XPath 1.0 number – Fließkommazahl XPath 2.0 integer decimals single precision Datums-, Zeit- und Dauerwerte AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Kombination von Knotensequenzen 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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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/ AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

9/13/2018 XQuery Name, Abteilung

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/ AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Einfache Anfrage XPath Ausdruck ist eine Anfrage an ein XML-Dokument doc('test')//student Ergebnis der Anfrage: Alle <student>-Knoten AG Netzbasierte Informationssysteme http://www.ag-nbi.de

XQuery Komplexe Anfrageausdrücke als FLWOR („Flower“) For Auswahl von Elementen Let Wertzuweisung an Variablen Where Filtern von Elementen Order by Ergebnisordnung Return Ergebnisrückgabe AG Netzbasierte Informationssysteme http://www.ag-nbi.de

for $d in fn:doc("depts.xml")/depts/deptno 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> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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> <two/> <three/> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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 <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> <result course="Math 101" grade="A"/> <result course="XML 101" grade="A-"/> <result course="Physics 101" grade="B+"/> <result course="XML 102" grade="A"/> </students> Beispiele nach Anders Møller and Michael I. Schwartzbach. An Introduction to XML and Web Technologies Addison-Wesley, 2006 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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> <two/> <three/> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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 AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

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() <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> <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> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

<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.! AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Ergebnis <authlist> <author> <name>Abiteboul</name> <books> <title>Data on the Web</title> </books> </author> <name>Buneman</name> <author> <name>Stevens</name> <books> <title>Advanced Programming in the Unix Environment</title> <title>TCP/IP Illustrated</title> </books> </author> <name>Suciu</name> <title>Data on the Web</title> </authlist> AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Return Klausel Return Klausel bei allen Tupeln angewandt die durch den where-Filter gekommen sind Return Ergebnisse zusammengehängt als Ergebnis der Anfrage AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Kontrollstrukturen Grade Point Average 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 }; declare function local:gpa($s) { fn:avg(for $g in $s/results/result/@grade return local:grade($g)) Grade Point Average AG Netzbasierte Informationssysteme http://www.ag-nbi.de

Kontrollstrukturen Abstraktion und Fallunterscheidung <gpas> { for $s in fn:doc("students.xml")//student return <gpa id="{$s/@id}" gpa="{local:gpa($s)}"/> } </gpas> <gpa id="100026" gpa="1.666666666666666667"/> <gpa id="100078" gpa="3.75"/> AG Netzbasierte Informationssysteme http://www.ag-nbi.de