XML-Abfrage- und Transformationssprachen (Weiter-) Entwicklung der Standards bisher betrachtet XQuery 1.0 XPath 1.0 XPath 2.0 XSLT 1.0 XSLT 2.0 1999 2007 142 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen Warum weiter- bzw. neuentwickeln? - XML ist weitverbreitetes Datenaustausch und Datenspeicherformat - State of the Art • XPath 1.0 ist „nur“ Lokatorsprache • XSLT 1.0 ist Transformationssprache • „vollwertige“ Abfragesprache (a la SQL) fehlt - XQuery soll Möglichkeit bieten einfach, flexibel und effizient auf Informationen in XML-Daten(-banken) zuzugreifen 143 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XML-Abfragesprachen XML-Schemasprachen XPath DTD XQuery XML-Transformationssprache XML-Schema XSLT ... XML Relationale DBMS 144 XML in DBMS Dedizierte XML-DBMS XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen Weiterentwicklungen in Beziehung zueinander - XPath 2.0 bildet die Basis für die Empfehlungen XQuery 1.0 und XSLT 2.0 - alle 3 Standards wurden gemeinsam am 23.01.2007 verabschiedet XQuery 1.0 XPath 2.0 145 + XSLT 2.0 XPath 2.0 XQuery 1.0 and XPath 2.0 Data Model (XDM) + XQuery 1.0 and XPath 2.0 Formal Semantics + XQuery 1.0 and XPath 2.0 Functions and Operators XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Überblick über die Weiterentwicklungen - Erweiterung der Datenmodells • Sequenzen • umfangreicheres Typkonzept - zusätzliche Formen von Ausdrücken - neue Funktionen und Operatoren 146 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Erweiterung des Datenmodells - Sequenz • (in gewisser Weise) Ersatz für Knotenmengen • ist keine Menge, daher Duplikate möglich (vgl. Knotenmenge) • Notation - Sequenz wird üblicherweise (nicht verpflichtend) durch umschließende Klammerung mit „(“ und „)“ definiert - Sequenzinhalte (Items) werden durch Kommas separiert (1, vorlesung/@titel, "Ein Text") 147 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Erweiterung des Datenmodells - Zusammensetzung von Sequenzen Sequenz (1, vorlesung/@titel, "Ein Text") 148 Item Item Item (atomarer Wert – Integer) (Knoten – Attributknoten) (atomarer Wert – String) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Erweiterung des Datenmodells - Besonderheiten von Sequenzen • leere Sequenz () - ist ungleich „Nichts“ • einelementige Sequenz - ist gleich dem enthaltenen Item (xyz) = xyz • Kombination von Sequenzen - ergibt stets eine „abgeflachte Sequenz“ - daher keine Verschachtelung möglich (1,(2,3)) = (1,2,3) 149 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Erweiterung des Datenmodells - Pfadausdruck • Weiterentwicklung des Lokalisierungspfads • besteht aus mehreren durch „/“ getrennten Lokalisierungsschritten - Lokalisierungsschritt setzt sich zusammen aus • Achse, Knotentest und (optional) Prädikaten (vgl. XPath 1.0) • einem beliebigen Ausdruck (bspw. Funktionsaufruf)* - Besonderheiten (vgl. mit XPath 1.0) • Achse namespace zwar noch verfügbar, aber deprecated • Bezeichnung für XPath 1.0 Wurzelknoten nun Dokumentknoten * Voraussetzung dafür ist jedoch, dass das Ergebnis des vorangehenden Lokalisierungsschrittes eine Sequenz von Knoten ist 150 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Erweiterung des Datenmodells - analog zu XPath 1.0 Repräsentation von XML-Dokumenten als Baum mit verschiedenartigen Knoten - Knotentypen • Dokumentknoten • Elementknoten • Attributknoten • Namensraumknoten • Verarbeitungsanweisungsknoten • Kommentarknoten • Textknoten 151 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Erweiterung des Datenmodells - Umgang mit Duplikaten • Sequenz ≠ Menge • Duplikate sind daher erlaubt (1,1,2) (1,1,2) • Aber: Duplikate in Zwischenergebnissen werden vor Abarbeitung eines nachfolgenden Lokalisierungsschrittes eliminiert. (vorlesung, vorlesung) (MustermannMax58NormalverbraucherOtto610, MustermannMax58NormalverbraucherOtto610) (vorlesung, vorlesung)/@titel 152 (XML ...) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Erweiterung des Datenmodells - sehr umfangreiches Typkonzept im Gegensatz zu XPath 1.0 (Knotenmenge, Zahl, Zeichenkette und Wahrheitswert) - Basis für XPath 2.0 Typsystem ist XML-Schema • Übernahme der Built-in Datentypen (inklusive der 19 primitiven und den davon abgeleiteten Datentypen) von XML-Schema • Ergänzung um 5 weitere Typen - Möglichkeit zur Verwendung eigener per Restriktion von den vorhandenen Datentypen abgeleiteter Typen 153 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Typkonzept Legende Union types Types defined by XPath 2.0 Item type Node type User defined types (user defined atomic types are not shown) Built-in atomic types Built-in complex types Built-in simple, non-atomic types Built-in primitv types (XML-Schema) 154 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Typkonzept - Sequenztypen setzt sich zusammen aus Itemtyp und Kardinalität (Ausnahme leere Sequenz – empty-sequence()) - Itemtypen • Knotentyp (element(), attribute(), ...) oder • atomarer Typ (xs:string, xs:integer, ...) - Kardinalitäten • "*" – beliebig häufiges Vorkommen, einschließlich keinmal • "+" – mehrfaches Vorkommen, mindestens einmal • "?" – optionales Vorkommen, maximal einmal • keine Angabe – genau einmaliges Vorkommen 155 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – Typkonzept - Sequenztypen • Prüfung auf bestimmten Typ bspw. möglich per instance of [Sequenztyp] • Beispiele (vorlesung/teilnehmer instance of element()) (false) (4711 instance of xs:integer) (true) 156 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - XPath Kommentare in Ausdrücken • keine Bedeutung für die Auswertung von Ausdrücken, daher auch keine Möglichkeit XPath Kommentare zu selektieren (vgl. Kommentarknoten) • durch Klammerung zuzüglich Doppelpunkt gekennzeichnet ((:erstes Item der Sequenz:) vorlesung/teilnehmer) • an (nahezu) beliebiger Stelle verwendbar (vorlesung/(:auch hier erlaubt:)teilnehmer) (vorlesung/teil(:hier nicht erlaubt:)nehmer) • Schachtelung möglich ((:Ein (:Kommentar:) im Kommentar:) vorlesung) 157 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - Bedingungsausdrücke • mächtiges Konstrukt (vgl. Prädikate) • Bedingungen nach folgendem Muster spezifizierbar if (condition) – Bedingung definieren then (expression) – auszuwertender Ausdruck für den Fall, dass Bedingung erfüllt ist else (expression) – auszuwertender Ausdruck für den Fall, dass Bedingung nicht erfüllt ist • Angabe von else-Bedingung ist verpflichtend • Klammerung der expression‘s ist nicht notwendig 158 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - Bedingungsausdrücke am Beispiel • alle Namen (vollständig) der Teilnehmer ausgeben und mögliche zweite Vornamen berücksichtigen (vorlesung/teilnehmer/ concat(vorname, " ", ( if (zweiter_vorname) then concat (zweiter_vorname, " ") else "" ), name)) (Max Mustermann, Otto Normalverbraucher) 159 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - for-Ausdrücke • ermöglichen „loopen“ bzw. interieren über Sequenzen mithilfe von Variablen • nach folgendem Muster spezifizierbar for $meineVariable in expression return expression definiert Rückgabeergebnis definiert Iterationsvariable(n) und die bindende Sequenz („binding sequence“) 160 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - for-Ausdrücke • Variablen werden durch Präfix $ und einen frei wählbaren Bezeichner gekennzeichnet • Mehrere Variablen - Verwendung beliebig vieler (mindestens einer) Variable in forAusdrücken durch Kommas separiert möglich - Abarbeitung entspricht dann dem kartesischem Produkt (for $var1 in (1, 2, 3), $var2 in ("a", "b") return concat($var1, $var2)) 161 (1a, 1b, 2a, 2b, 3a, 3b) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - for-Ausdruck am Beispiel • die Anzahl der eingeschriebenen Studenten pro Studienfach ermitteln (for $var1 in distinct-values(vorlesung/teilnehmer/studienfach) return concat( "Studienfach ", $var1, ": ", count(vorlesung/teilnehmer[studienfach = $var1]), " Teilnehmer")) (Studienfach 8: 1 Teilnehmer, Studienfach 10: 1 Teilnehmer) 162 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - Quantifizierungsausdrücke (some und every) • ermöglichen Prüfungen auf notwendiges Erfüllen von „Bedingungen“ (ebenfalls unter Nutzung von Variablen) - some – Prüfung mindestens einmal erfüllt - every – Prüfung für alle erfüllt • Ergebnis ist ein Wahrheitswert • nach folgendem Muster spezifizierbar quantifier $meineVariable in expression satisfies expression definiert Prüfausdruck definiert Variable(n) und die bindende Sequenz („binding sequence“) 163 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – zusätzliche Formen von Ausdrücken - Quantifizierungsausdrücke (some und every) am Beispiel • beginnt der Name aller Vorlesungsteilnehmer mit „Muster“? (every $var1 in vorlesung/teilnehmer satisfies starts-with($var1/name, "Muster")) (false) • beginnt der Name mindestens eines Vorlesungsteilnehmers mit „Muster“? (some $var1 in vorlesung/teilnehmer satisfies starts-with($var1/name, "Muster")) (true) 164 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - arithmetische Operatoren • +, -, *, div, mod, idiv • idiv ≙ ganzzahliger Division (vgl. div in XPath 1.0) (5 idiv 2) (2) • div ≙ „normaler“ Division (5 div 2) (2,5) - boolesche Operatoren • and, or 165 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - Vergleichsoperatoren • gezieltere und transparentere Vergleiche als in XPath 1.0 (vor allem wegen erweitertem Typsystem und Sequenzkonzept) • Sequenzvergleiche - Ergebnis ist true, wenn mindestens ein Item aus der einen Sequenz den Vergleich mit einem Item aus der anderen Sequenz erfüllt (vgl. Knotenmengenvergleiche bei XPath 1.0) - Operatoren: =, !=, <, >, <=, >= (1, 2, 3) = (1, 2, 3) 166 (true) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - Vergleichsoperatoren • Einzelwertvergleiche - Operatoren: eq, ne, lt, gt, le, ge (logisch wie =, !=, <, >, <=, >=) (4 lt 5 and 8 eq 8) (true) • Identitätsvergleich von Knoten per is - vergleicht zwei Knoten hinsichtlich ihrer Identität (vorlesung/teilnehmer[@matrikel = 4711] is vorlesung/teilnehmer[@matrikel = 4711]) (true) 167 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - Mengenoperatoren • zur Kombination von Knotensequenzen • union (vgl. „|“ bei Xpath 1.0) Vereinigung der Sequenzen • intersect Schnittmenge der Sequenzen • except Ausschluss einer Sequenz 168 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - Mengenoperatoren • union (vorlesung/teilnehmer[@matrikel = "4711"]/@matrikel union vorlesung/teilnehmer[@matrikel = "4736"]/@matrikel) (4711, 4736) • intersect (vorlesung/teilnehmer[@matrikel = "4711"]/@matrikel intersect vorlesung/teilnehmer/@matrikel) (4711) 169 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - Mengenoperatoren • except (vorlesung/teilnehmer/@matrikel except vorlesung/teilnehmer[@matrikel = "4736"]/@matrikel) (4711) 170 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - sonstige Operatoren • Range-Operator to - zur Erzeugung einer Sequenz von aufsteigenden Integer-Zahlen (1 to 5) (1, 2, 3, 4, 5) - Kombinationen möglich (1 to 5, 7, 9 to 12) (1, 2, 3, 4, 5, 7, 9, 10, 11, 12) - absteigende Sequenzen lassen sich mit Hilfe der reverseFunktion erzeugen reverse(1 to 5) 171 (5, 4, 3, 2, 1) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - sonstige Operatoren • Typabgleiche instance of - Prüfung auf bestimmten Sequenztyp (4711 instance of xs:integer) (true) • Typkonvertierung cast as - Durchführung zulässiger Typkonvertierungen (4711 cast as xs:string instance of xs:integer) (false) - Zulässigkeit prüfbar per castable as 172 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - weitreichende Erweiterung der Funktionen aus XPath 1.0 - Funktionen durch Namensraumspräfix fn gekennzeichnet (Angabe optional, da per Default fn) - Zugriffsfunktionen (Accessors) • node-name gibt den (qualifizierten) Namen eines Knotens zurück (vorlesung/teilnehmer[@matrikel = "4711"]/*/node-name(.)) (name, vorname, semester, studienfach) • data transformiert eine Sequenz von beliebigen Items in eine Sequenz mit nur atomaren Werten 173 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - arithmetische Funktionen • min, max ermittelt das Minimum bzw. Maximum von einer Sequenz (min((3,1,7,2))) (1) (max((3,1,7,2))) (7) • avg berechnet den Durchschnitt der Werte von einer Sequenz (avg(vorlesung/teilnehmer/semester)) 174 (5.5) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - Datum- und Zeitfunktionen • current-dateTime gibt einen aktuellen Zeitstempel zurück (max((3,1,7,2))) (2012-11-13T09:55:46.106Z) • year-from-dateTime extrahiert aus einem Zeitstempel die Jahresangabe (year-from-dateTime( xs:dateTime("2012-11-13T09:55:46.106Z") )) (2012) 175 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren - Sequenzfunktionen • subsequence extrahiert einen Teil einer Sequenz) anhand einer Startposition und einer (optionalen) Länge der Subsequenz (subsequence((10 to 20), 4, 3)) (13, 14, 15) • index-of - ermittelt die Position(en) eines Items in einer Sequenz (index-of((1,2,5,3,5,7), 5)) (3, 5) • distinct-values • reverse 176 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 – neue Funktionen und Operatoren es gibt noch viel mehr… (http://www.w3.org/TR/xpath-functions/) 177 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XPath 2.0 178 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XML Query Language (XQuery) - eine auf XPath 2.0 aufbauende deskriptive Abfragesprache für XML-Daten (vgl. SQL für relationale Daten) - XQuery erweitert XPath 2.0 um folgende Aspekte • FLOWR-Ausdrücke • Konstruktoren zur Erzeugung von Knoten • Möglichkeiten zur Modularisierung (bspw. Auslagerung selbstdefinierter Funktionen in XQuery-Module – meist xqm-Dateien) • zusätzliche Formen von Ausdrücken (bspw. Validierungsausdrücke) SQL XML-QL XPath OQL Lorel UnQL 179 XQL Quilt XQuery XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - Zusammensetzung der FLWOR-Ausdrücke (gesprochen „flower“) • For – definiert eine Variable, die eine Liste von Elementen durchläuft • Let – definiert eine Variable, deren Wert eine ganze Liste von Elementen ist • Where – filtert das Ergebnis (ausgewählten Elemente) anhand einer Bedingung • Order by – sortiert das Ergebnis • Return – liefert das Ergebnis als Sequenz in der angegebenen Form zurück - mindestens eine for- oder let-Klausel, sowie die return-Klausel muss in einem gültigen FLWOR-Ausdruck enthalten sein - weitere Klauseln (where und order by) sind optional - vgl. SELECT ... FROM ... WHERE ... ORDER BY 180 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - for- und let-Klausel • in for-Klausel wird eine Variable definiert, die an jedes Element (Item) der Sequenz einzeln gebunden wird (per in) • in let-Klausel wird eine Variable definiert, die an die ganze Sequenz gebunden wird (per :=) for $var1 in (1,2) let $var2 := ("a","b") return <tuple> <for_var>{$var1}</for_var> <let_var>{$var2}</let_var> </tuple> 181 (<tuple> <for_var>1</for_var> <let_var>a b</let_var> </tuple>, <tuple> <for_var>2</for_var> <let_var>a b</let_var> </tuple>) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - Verwendung mehrere Variablen • werden in for-Klausel entweder durch Komma separiert oder durch mehrfache Verwendung der Klausel definiert • Abarbeitung erfolgt durch Bildung des Kreuzprodukts for $var1 in (1,2) for $var2 in (3,4) return <tuple> <for1_var>{$var1}</for1_var> <for2_var>{$var2}</for2_var> </tuple> (<tuple><for1_var>1</for1_var><for2_var>3</for2_var></tuple>, <tuple><for1_var>1</for1_var><for2_var>4</for2_var></tuple>, <tuple><for1_var>2</for1_var><for2_var>3</for2_var></tuple>, <tuple><for1_var>2</for1_var><for2_var>4</for2_var></tuple>) 182 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - Verwendung mehrere Variablen • werden in let-Klausel entweder durch Komma separiert oder durch mehrfache Verwendung der Klausel definiert • Abarbeitung erfolgt unabhängig von anderen „let-Variablen“ und daher durch Zuweisung der ganzen Sequenz an die Variable let $var1 := (1,2) let $var2 := (3,4) return <tuple> <let1_var>{$var1}</let1_var> <let2_var>{$var2}</let2_var> </tuple> (<tuple><let1_var>(1,2)</let1_var><let2_var>(3,4)</let2_var></tuple>) 183 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - Gültigkeitsbereich der Variablen • der Wert einer Variablen, die in einer for- oder let-Klausel gebunden wurde, ist für alle nachfolgenden Klauseln (unverändert) sichtbar let $var1 := 0 for $var2 in ("a","b") let $var1 := $var1 + 1 return <tuple> <let_var>{$var1}</let_var> <for_var>{$var2}</for_var> </tuple> <tuple><let_var>1</let_var><for_var>a</for_var></tuple> <tuple><let_var>1</let_var><for_var>b</for_var></tuple> • Beispiel zeigt gleichzeitig noch Überdeckung von Variablen - „neue“ Variable $var1 überdeckt „alte“ Variable $var1 - daher im Ergebnis stets der Wert 1 für die Variable $var1 184 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - Erkurs: Laden von Dokumenten mit doc() • lädt ein XML-Dokument von einer übergebenen Uri • Dokument kann an Variable (bspw. per let-Klausel) gebunden werden let $document := doc("http://www.informatik.uni-jena.de/dbis/lehre/ws2012/xml/Beispiel.xml") return $document <vorlesung titel="XML ..."> <teilnehmer matrikel="4711"> <name>Mustermann</name> <vorname>Max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> <teilnehmer matrikel="4736"> <name>Normalverbraucher</name> <vorname>Otto</vorname> <semester>6</semester> <studienfach>10</studienfach> </teilnehmer> </vorlesung> 185 Hinweis: weitere Beispiele verwenden z. T. Variable $document (let-Klausel aus Kompaktheitsgründen vernachlässigt) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - where-Klausel • ermöglicht die gezielte Einschränkung der durch die for- und letKlausel in den jeweiligen Variablen gehaltenen (Zwischen-)Ergebnisse • anschließende return-Klausel wird nur für die verbleibenden Elemente ausgewertet for $vorl in $document/vorlesung let $t_zahl := count($vorl/teilnehmer) where $t_zahl > 0 return data($vorl/@titel) XML ... 186 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - where-Klausel • weiteres Beispiel mit Quantifizierungsausdrücken In welchen Vorlesungen ist mindestens ein Teilnehmer im 6ten Semesters? for $vorl in $document/vorlesung where some $t_sem in count($vorl/teilnehmer[semester = 6]) satisfies $t_sem > 0 return data($vorl/@titel) XML ... 187 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - where-Klausel • weiteres Beispiel mit Quantifizierungsausdrücken Welche Teilnehmer heißen mit zweiten Vornamen nur „Moritz“? Welche Teilnehmer, die einen zweiten Vornamen haben, heißen mit zweiten Vornamen nur „Moritz“? for $teiln in $document/vorlesung/teilnehmer where every $zw_name in $teiln/zweiter_vorname satisfies $zw_name = "Moritz" return data($teiln/@matrikel) 4711 4736 188 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - order by-Klausel • sortiert das Ergebnis nach bestimmten Werten und beeinflusst daher die Ergebnisausgabe der return-Klausel • Sortierreihenfolge: ascending oder descending for $teiln in $document/vorlesung/teilnehmer order by $teiln/@matrikel descending return $teiln/name <name>Normalverbraucher</name> <name>Mustermann</name> 189 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - order by-Klausel • Umgang mit nicht vorhandenen Werten - empty least – Interpretation als kleinste Werte - empty greatest – Interpretation als größte Werte for $teiln in $document/vorlesung/teilnehmer order by $teiln/@matrikel descending empty least return $teiln/name <name>Normalverbraucher</name> <name>Mustermann</name> <name>externer Teilnehmer</name> * • Beibehaltung der Dokumentreihenfolge mit stable order by * Annahme: unser Beispiel-XML-Dokument enthält noch einen (externen) Teilnehmer ohne Matrikelnummer 190 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – FLWOR-Ausdrücke - return-Klausel • konstruiert das Ergebnis des FLWOR-Ausdrucks • Erzeugung von Sequenzen muss zwingend mit Klammerung erfolgen, da einfache Kommatrennung einen weiteren Ausdruck erwarten lässt let $var1 := (1) let $var2 := (2) return $var1, $var2 Fehler let $var1 := (1) let $var2 := (2) return ($var1, $var2) * (1, 2) * Fehler, da $var2 als neuer Ausdruck interpretiert wird und in diesem nicht vorbelegt ist 191 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten - zwei Formen von Konstruktoren • direkte Konstruktoren (XML-ähnliche Syntax) • berechnete Konstruktoren (abweichende Syntax, basierend auf umschlossenen Ausdrücken) - Konstruktoren für folgende Knoten vorhanden • Elementknoten • Attributknoten • Dokumentknoten • Textknoten • Kommentarknoten • Verarbeitungsanweisungsknoten 192 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten direkte Konstruktoren - Elementknoten <name>Inhalt</name> element name {Inhalt} - Attributknoten name="Inhalt" attribute name {Inhalt} document {Inhalt} - Dokumentknoten 193 berechnete Konstruktoren - Textknoten Inhalt text {Inhalt} - Kommentarknoten <!--Inhalt--> comment {Inhalt} - Verarbeitungsanweisungsknoten <?name Inhalt?> processing-instruction name {Inhalt} XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten - Anwendung bspw. in return-Klausel der FLWOR-Ausdrücke XQuery (FLWOR) XML HTML <vorlesung titel="XML ..."> <teilnehmer matrikel="4711"> <name>Mustermann</name> <vorname>Max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> </vorlesung> 194 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 – Konstruktoren zur Erzeugung von Knoten let $vorl := $document/vorlesung for $teiln in $vorl/teilnehmer return <html> <head> <title>Liste</title> </head> <body> <h1>Vorlesung: {data($vorl/@titel)}</h1> <h2>Student: {data($teiln/@matrikel)}</h2> <font>{concat( $teiln/vorname, " ", $teiln/name, ", Semester ", $teiln/semester, ", Studienfach ", $teiln/semester )} </font> </body> </html> 195 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery 1.0 196 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XSLT 2.0 – Überblick über die Weiterentwicklungen - Anpassung an neues XPath 2.0 Datenmodell (Sequenzen) - Erstellung benutzerdefinierter Funktionen - Gruppierung von Knoten (xsl:for-each-group) - Erzeugung mehrerer Ausgabedokumente in einer Transformation - verbesserte Analyse von Text (xsl:analyze-string) - ... XSLT 2.0 197 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery oder XSLT XSLT - Klassifizierung von XML-Dokumenten • dokumentorientiert - (semi-strukturiertes) XML zur Präsentation, Strukturierung oder Konvertierung von Dokumenten in (viel) Text und (wenig) Felddaten - kaum vorhandene bzw. wenige strenge Schemadefinitionen - Dokumentreihenfolge relevant - in der Regel Zugriff auf komplette Dokumente - Beispiel: Zeitungsartikel <schlagzeile id="0815"> <titel>XML-Vorlesung zu 50% geschafft!</titel> <inhalt> Jena, die Teilnehmer der Jenaer XML-Vorlesung haben knapp die Hälfte des Lehrinhalts vermittelt bekommen. Sie sind noch immer total fasziniert vom Vorlesungsstoff und können es kaum erwarten, noch mehr davon zu hören. </inhalt> </schlagzeile> 198 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen XQuery oder XSLT XQuery - Klassifizierung von XML-Dokumenten • datenorientiert - XML zum Zweck der (stark) strukturierten und typisierten Speicherung und dem standardisierten Austausch von Daten (zumeist als Felddaten) - strenge Schemadefinitionen - Dokumentreihenfolge meist unrelevant - zumeist gezielter Zugriff auf einzelne Dokumentteile nötig - Beispiel: Teilnehmer-XML-Dokument zur XML-Vorlesung - XML-Dokumente lassen sich nicht immer strikt in einen der beiden Typen einteilen, daher sind in der Praxis häufig Mischformen anzutreffen - Einsatz von XQuery oder XSLT nicht nur von Klassifizierung abhängig 199 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen Es geht (sogar) noch weiter... aktuell (noch) Working Drafts 1999 XQuery 1.0 XQuery 3.0 XPath 1.0 XPath 2.0 XPath 3.0 XSLT 1.0 XSLT 2.0 XSLT 3.0 2007 201x? 200 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Abfrage- und Transformationssprachen Exkurs: XQuery Update Facility - XQuery ist selbst „nur“ eine Abfragesprache - keine Möglichkeit zur „in-place“ Manipulation von XML-Dokumenten - Verabschiedung von XQuery Update Facility im März 2011 - ergänzt XQuery um Manipulationsoperatoren • insert() – fügt einen Knoten in einen oder vor bzw. nach einem anderen Knoten ein • delete() – entfernt einen oder mehrere Knoten • replace() – ersetzt einen Knoten oder dessen Inhalt durch Sequenz bzw. Wert • rename() – benennt einen Knoten um (nur Elemente, Attribute und Verarbeitungsanw.) • ... 201 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XML-Datenmodellierung / XML-Schemasprachen Zusammenfassung - XPath ist eine Lokatorsprache, die für die Verwendung in XSLT und später auch XQuery konzipiert wurde - während XPath 1.0 mithilfe von Lokalisierungspfaden (über Achsen, Knotentests und Prädikate) gezielt Dokumentteile lokalisiert, besitzt XPath 2.0 durch verschiedene Ausdrücke weitreichendere Abfragemöglichkeiten - erst XQuery stellt (vor allem) durch die speziellen FLWOR-Ausdrücke und das durch das XPath 2.0 Datenmodell vorgegebenen Sequenz-Konzept eine „vollwertige“ deskriptive Abfragesprache für XML-Dokumente dar - XSLT ist eine Transformationssprache und kann mithilfe des TemplateMechanismus vorhandene Dokumente in unterschiedlichste Strukturen/Formate transformieren - die genannten Standards werden kontinuierlich weiterentwickelt und befinden sich aktuell vor ihrer nächsten (Major-)Empfehlung 202 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen