Скачать презентацию XML-Anfragesprachen Schwerpunkt XQuery Prof T Kudraß Скачать презентацию XML-Anfragesprachen Schwerpunkt XQuery Prof T Kudraß

f98dc6a7bc05c258cc48c7026b6b466a.ppt

  • Количество слайдов: 52

XML-Anfragesprachen (Schwerpunkt XQuery) XML-Anfragesprachen (Schwerpunkt XQuery)

© Prof. T. Kudraß, HTWK Leipzig Übersicht l l l l 2 Anforderungen an © Prof. T. Kudraß, HTWK Leipzig Übersicht l l l l 2 Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath Anfragesprache XQuery Weitere Anfragesprachen (XML-QL, XQL) XML und Änderungsoperationen XML und SQL Ausblick 2

© Prof. T. Kudraß, HTWK Leipzig Allgemeine Anforderungen l Ad-hoc-Formulierung – l Deskriptivität – © Prof. T. Kudraß, HTWK Leipzig Allgemeine Anforderungen l Ad-hoc-Formulierung – l Deskriptivität – l kompakte Notation, verwendbar in URLs Mengenorientiertheit – – 3 Umschreiben des gewünschten Ergebnisses, nicht Konstruktionsweg Kompaktheit – l Anfragen direkt, ohne Erstellung kompletter Programme Anfragen auf Mengen von Objekten und Dokumenten Nicht nur auf einzelnen Objekten und XMLDokumenten oder –fragmenten operieren 3

© Prof. T. Kudraß, HTWK Leipzig Allgemeine Anforderungen (2) l Adäquatheit – l Orthogonalität © Prof. T. Kudraß, HTWK Leipzig Allgemeine Anforderungen (2) l Adäquatheit – l Orthogonalität – l Resultat (XML) kann wieder als Eingabe (XML) einer nächsten Anfrage dienen Vollständigkeit – 4 Sprachkonstrukte uneingeschränkt miteinander kombinieren Abgeschlossenheit – l alle Konstruktoren des zugrundeliegenden Modells unterstützt gemäß Datenmodell gespeicherte Informationen lassen sich verlustfrei durch Query wiedergewinnen 4

© Prof. T. Kudraß, HTWK Leipzig Allgemeine Anforderungen (3) l Optimierbarkeit – l Effizienz © Prof. T. Kudraß, HTWK Leipzig Allgemeine Anforderungen (3) l Optimierbarkeit – l Effizienz – l jede Operation wird durch Algorithmus effizient umgesetzt Sicherheit – – l kleine Menge an Grundoperationen mit Optimierungsregeln syntaktisch korrekte Query liefert endliche Menge, Anfrage terminiert Eingeschränktheit keine vollständige Programmiersprache Garantiert Optimierbarkeit, Effizienz und Sicherheit – 5 5

© Prof. T. Kudraß, HTWK Leipzig XML-Anforderungen (1) l Einbettung – – l Server-Verarbeitung © Prof. T. Kudraß, HTWK Leipzig XML-Anforderungen (1) l Einbettung – – l Server-Verarbeitung – l Geeignet für Server-side Processing erfordert Abgeschlossenheit, Kontextfreiheit Ordnungserhaltung (Order Preserving) – – 6 Anfragen in XML einbetten oder als XML formulieren XML-Fragmente in Anfrage fester Teil in Ergebnis Abfolge von Elementen, Schachtelungsreihenfolge Vor allem bei mixed Content Nicht für alle Anwendungen benötigt (mögliches Abschalten aus Effizienzgründen) Probleme bei relationaler Speicherung 6

© Prof. T. Kudraß, HTWK Leipzig XML-Anforderungen (2) l Hyperlinks – l Flexible Typen © Prof. T. Kudraß, HTWK Leipzig XML-Anforderungen (2) l Hyperlinks – l Flexible Typen – – – l l 7 l Ausnutzen und Verfolgen von Links in ( ID/IDREF ) und zwischen ( XLink, XPointer ) Dokumenten Verarbeiten von unbekannten oder wechselnden Typen Mechanismen zur expliziten Typkonvertierung Unterstützung eines erweiterbaren und robusten (fehlertoleranten) Typkonzepts Unterstützung des Zugriffs auf Metadaten und Schemainformationen (gleiche Mittel) Berücksichtigung von Namensräumen Protokoll-Unabhängigkeit 7

© Prof. T. Kudraß, HTWK Leipzig Grundoperationen l l l l Selektion (anhand von © Prof. T. Kudraß, HTWK Leipzig Grundoperationen l l l l Selektion (anhand von Inhalt, Struktur, Attributwert) Extraktion und Reduktion (vergleichbar Projektion) Kombination (Join) Restrukturierung von Elementen Aggregation (z. B. arithmetische Funktionen) Gruppierung (Schachtelung bzw. Entschachtelung von Elementstrukturen) Volltextoperationen (literal bzw. Phrasen-, Stammformsuche, etc. ) Datenmanipulation – – 8 über APIs wie DOM, SAX Auch Änderungsoperationen über XML-Anfragesprache 8

© Prof. T. Kudraß, HTWK Leipzig Stand der Entwicklung 9 9 © Prof. T. Kudraß, HTWK Leipzig Stand der Entwicklung 9 9

© Prof. T. Kudraß, HTWK Leipzig XPath 1. 0 - Einführung l W 3 © Prof. T. Kudraß, HTWK Leipzig XPath 1. 0 - Einführung l W 3 C Recommendation vom Nov 1999 – l l l 10 siehe: http: //www. w 3. org/TR/xpath Grundlage für XQuery, XSLT, weitere Standards geht von abstrakter Baumstruktur des XMLDokuments aus dient zur Adressierung von Teilen eines Dokumentes kompakte Nicht-XML-Syntax, keine vollständige QL zur Selektion und Extraktion von Knotenmengen 10

© Prof. T. Kudraß, HTWK Leipzig XPath 1. 0 - Einführung l Knotenarten – © Prof. T. Kudraß, HTWK Leipzig XPath 1. 0 - Einführung l Knotenarten – – l Datentypen – – l atomare Werte: boolean, number, string Knotenmengen (node-set) Grundlegendes Konstrukt sind XPath-Ausdrücke – – – 11 7 Knotenarten auf Basis des XML Information Set – ähnlich zu DOM Wichtigste: Wurzel, Element, Attribut, Text Pfadausdrücke (location paths) logische und mathematische Verknüpfungen Funktionsaufrufe Relativ zu einem Kontext ausgewertet Keine Variablenbindung 11

© Prof. T. Kudraß, HTWK Leipzig XPath 1. 0 - Pfadausdrücke l l l © Prof. T. Kudraß, HTWK Leipzig XPath 1. 0 - Pfadausdrücke l l l XPath-Ausdrücke relativ zu einem Kontext ausgewertet Extraktion der interessierenden Bestandteile Selektion von Knotenmengen aufgrund ihrer Struktur und den in ihnen enthaltenen Werten Formulierung von Bedingungen an diese Knotenmenge mehrere Steps, Kopplung mit “/“ Schritt (Location Step) axis: : node-test[predicate] – – – 12 axis: Beziehung Kontextknoten u. zu selektierende Knoten node-test: Knotentyp und Namen des zu sel. Knoten predicate: Einschränkung best. Elemente durch Prädikate 12

© Prof. T. Kudraß, HTWK Leipzig Navigationsachsen in XPath Klettke/Meyer “XML & Datenbanken“ 13 © Prof. T. Kudraß, HTWK Leipzig Navigationsachsen in XPath Klettke/Meyer “XML & Datenbanken“ 13 13

© Prof. T. Kudraß, HTWK Leipzig Knotentest in XPath Einschränken des Knotentyps - node(): © Prof. T. Kudraß, HTWK Leipzig Knotentest in XPath Einschränken des Knotentyps - node(): alle Knoten - text(): alle Textknoten - *: alle Elementknoten - comment(): Kommentarknoten - Angabe eines Knotennamens Beispiele descendant: : * alle untergeordneten Elemente des Kontextknotens child: : href alle Elemente vom Typ href attribute: : id Attribut id des Kontextknotens 14 14 Quelle ebd.

© Prof. T. Kudraß, HTWK Leipzig Prädikate in XPath Selektionsprädikate - logische Operatoren (and, © Prof. T. Kudraß, HTWK Leipzig Prädikate in XPath Selektionsprädikate - logische Operatoren (and, or) - Vergleichsoperatoren ( “<“ , “<=“ , “>=“ , “!=“ ) - Operationen auf numerischen Werten ( “+“ , “-“ , “*“ , div, mod ) - Vereinigung von Knotenmenge ( “|“ ) - Ändern der Auswertreihenfolge durch Klammerung von Teilausdrücke mit “(“ und “)“ ) Beispiele § /descendant-or-self: : node()/album/song[2] § //album/song[last()-1]/title § //hotel[zimmertyp/attribute: : typ = ‘Doppelzimmer’] § /hotel/adresse/ort[@Name=“Leipzig“] 15 15

© Prof. T. Kudraß, HTWK Leipzig XQuery l l Überblick und Datenmodell Einfache Ausdrücke © Prof. T. Kudraß, HTWK Leipzig XQuery l l Überblick und Datenmodell Einfache Ausdrücke FLWOR-Ausdrücke Erweiterte XQuery-Ausdrücke: – – l l Benutzerdefinierte Funktionen Erweiterte Konzepte – – l l 16 Verbund Gruppierung Modulkonzept XQuery Prolog Verarbeitungskonzept Implementierungen 16

© Prof. T. Kudraß, HTWK Leipzig Sprachüberblick l l l W 3 C Recommendation © Prof. T. Kudraß, HTWK Leipzig Sprachüberblick l l l W 3 C Recommendation vom Januar 2007 - (siehe: http: //www. w 3. org/TR/xquery) geht aus Quilt hervor (inoffizieller Vorschlag des W 3 C), basierend auf XPath, beeinflusst durch SQL, XML-QL Ausdrücke beliebig ineinander schachtelbar – – – 17 Elementkonstruktoren Pfadausdrücke zur Selektion (wie XPath) FLWOR-Ausdrücke (ähnlich SQL - SFW) datenspezifische Operatoren, standard- und selbstdef. Funktionen bedingte Anweisungen, Test von Datentypen, Typumwandlung Verwendung von Quantoren: every und some 17

© Prof. T. Kudraß, HTWK Leipzig Datenmodell l Dokument als Baumstruktur (XPath 1. 0) © Prof. T. Kudraß, HTWK Leipzig Datenmodell l Dokument als Baumstruktur (XPath 1. 0) XQuery nutzt XPath 2. 0 -Standard Modell basiert auf XPath 1. 0 + Erweiterungen – – – l Objekt dieses Datenmodells ist geordnete Menge von Knoten = Sequenz (Aneinanderreihung von atomaren Werten oder Knoten – ohne Schachtelung) – – – l einzelne XML-Dokumente wohlgeformte Fragmente eines Dokuments Sequenzen von Dokumenten und Fragmenten als Wert eines XQuery-Ausdrucks Sequenzen können nicht geschachtelt sein Duplikate in Sequenz möglich Elemente einer Sequenz sind sortiert und hinsichtlich Position unterscheidbar Dualität von Elementen und Sequenz der Länge 1 () äquivalent zu 18 18

© Prof. T. Kudraß, HTWK Leipzig Datenmodell (2) l Operationen zur Analyse und Modifikation © Prof. T. Kudraß, HTWK Leipzig Datenmodell (2) l Operationen zur Analyse und Modifikation von Sequenzen – – – l Datentypen – – – l allgemeinste Form eines Eintrags vom Typ item() Einfache oder komplexe Datentypen Sprachkonstrukte aus XML Schema (vgl. Typhierachie) Atomisierung – 19 Kommaoperator (1, ), (3) liefert: (1, , 3) to-Operator 2 to 5 liefert: (2, 3, 4, 5) Eliminierung von Duplikaten fn: distinct-values((2, 5, 3, 7, 3, 5, 5)) liefert: (2, 5, 3, 7) XML-Dokument synonym mit zugehöriger Instanz des XQuery. Datenmodells 19

© Prof. T. Kudraß, HTWK Leipzig Unterschiede zu XPath 1. 0 l l l © Prof. T. Kudraß, HTWK Leipzig Unterschiede zu XPath 1. 0 l l l l 20 Grunddatentypen auf der Basis von XML Schema Teil 2 XPath 1. 0 kennt nur Knotenmengen, boolesche, numerische und Zeichenkettenwerte XPath 1. 0 ist mengenorientiert (ohne Duplikate), XPath 2. 0 basiert auf Sequenzen (Duplikate möglich) Unterstützung von Referenzen und Dokumentkollektionen Unterscheidung von Wertegleichheit (XPath 1. 0) und Knotenidentität Wesentlich umfangreichere Funktionsbibliothek Weitere Ausdrucksarten, z. B. Bereichsausdruck Voranstellen von Variablen oder Funktionsaufrufen vor Pfadausdrücken 20

XQuery Typhierachie © Prof. T. Kudraß, HTWK Leipzig 21 21 XQuery Typhierachie © Prof. T. Kudraß, HTWK Leipzig 21 21

© Prof. T. Kudraß, HTWK Leipzig Grundlagen l Konstanten oder Literale – – l © Prof. T. Kudraß, HTWK Leipzig Grundlagen l Konstanten oder Literale – – l Variablen: – l Beispiele: $name : = “Wolfgang Lehner“ let $hotel : = //hotel[typ=‘Pension‘] return $hotel Kommentare – – 22 Werte für einfache numerische und Zeichenkettenwerte (in Hochkommas) Beispiele: ‘Hotel Neptun‘, “ 12. 34“ {-- xs: string --} 123, -24, 0, +7 {-- xs: integer --} -24. 0, 123. 45, +. 23 {-- xs: decimal --} -123. 5 e 3, 200 e 6 {-- xs: double --} An beliebiger Stelle, ohne Bedeutung Syntax: geschachtelt durch ein Klammerpaar (: und : ) Beispiel: (: XQuery (: Kommentar : ) !! : ) Orthogonal zu einem Kommentar im XML-Dokument 22

© Prof. T. Kudraß, HTWK Leipzig Ausdrücke in XQuery l Arithmetische Ausdrücke – l © Prof. T. Kudraß, HTWK Leipzig Ausdrücke in XQuery l Arithmetische Ausdrücke – l Vergleichsausdrücke – – – l l l Basieren auf XPath 2. 0 (Erweiterungen gegenüber 1. 0) FLWOR-Ausdrücke Konditionale Ausdrücke Quantifizierende Ausdrücke – 23 fn: true(), fn: false(), fn: not() Pfadausdrücke – l Wertevergleich Allgemeiner Vergleich Knotenvergleich (Knotenidentität, Vergleich der relativen Positionierung) Logische Ausdrücke – l Funktionen und Operatoren – existenzielle Quantifizierung universelle Quantifizierung 23

© Prof. T. Kudraß, HTWK Leipzig Einfache Ausdrücke in XQuery l Arithmetische Ausdrücke – © Prof. T. Kudraß, HTWK Leipzig Einfache Ausdrücke in XQuery l Arithmetische Ausdrücke – – – l Vergleichsausdrücke (3 Vergleichsoperatoren) – – – l – and, or, not Beispiel: not($hotel/name eq $restaurant/name) Pfadausdrücke – 24 allgemein mit Sequenzen: =, !=, <, <=, >, >= einfache Wertvergleiche zwischen elementaren Werten: eq, ne, lt, le, gt, ge Vergleich der Knotenidentität: is (identisch), is not (nicht identisch), logische Ausdrücke: – l Mit arithmetischen Operationen Auswertereihefolge durch Klammerung beeinflussen Beispiel: ($preis-10) div 100 Basieren auf XPath 2. 0 (Erweiterungen gegenüber 1. 0) 24

© Prof. T. Kudraß, HTWK Leipzig Identität vs. Gleichheit (Beispiel) l l Zwei Knoten © Prof. T. Kudraß, HTWK Leipzig Identität vs. Gleichheit (Beispiel) l l Zwei Knoten sind identisch, wenn folgendes gilt: $knoten 1 is $knoten ---> true Beispiel: Harry Potter und der Stein der Weisen XQuery: let $titel : = doc("1. xml")//titel return { $titel[1] = $titel[1] } { $titel[1] is $titel[1] } { $titel[1] = $titel[2] } { $titel[1] is $titel[2] } Ergebnis: 25 true false 25

© Prof. T. Kudraß, HTWK Leipzig FLWOR-Ausdrücke l FLWOR-Ausdruck – – l 26 gesprochen © Prof. T. Kudraß, HTWK Leipzig FLWOR-Ausdrücke l FLWOR-Ausdruck – – l 26 gesprochen wie engl. “Flower“ Basis für Anfragen an XML-Datenbanken analog zu SELECT-FROM-WHERE in SQL steht als Abkürzung von for-let-where-order by-return Klauseln eines FLWOR-Ausdrucks 26

© Prof. T. Kudraß, HTWK Leipzig Struktur eines FLWOR-Ausdrucks FLWORExpr: : = (For. Clause © Prof. T. Kudraß, HTWK Leipzig Struktur eines FLWOR-Ausdrucks FLWORExpr: : = (For. Clause | Let. Clause)+ Where. Clause? Order. By. Clause? return Expr. Single For. Clause: : = for $Var. Name Type. Declaration? Positional. Var? in Expr. Single (, $Var. Name Type. Declaration? Positional. Var? in Expr. Single)* Let. Clause: : = let $Var. Name Type. Declaration? : = Expr. Single (, $Var. Name Type. Declaration? : = Expr. Single)* Type. Declaration: : = as Sequence. Type Positional. Var: : = at $Var. Name Where. Clause: : = where Expr Order. By. Clause: : = (order by | stable order by) Order. Spec. List: : = Order. Spec (, Order. Spec)* Order. Spec: : = Expr. Single Order. Modifier: : = (ascending | descending)? ((empty greatest) | empty least))? (collation String. Literal)? 27 27

© Prof. T. Kudraß, HTWK Leipzig Variablen l l l l 28 Nach der © Prof. T. Kudraß, HTWK Leipzig Variablen l l l l 28 Nach der erfolgten Bindung sind die Werte nicht mehr änderbar Variablenbindung nur innerhalb des aktuellen und aller eingeschlossenen Anfrageausdrücke sichtbar Wird Ausdruck verlassen, ist Variable ungebunden Zugriff auf ungebundenen Variablen Ausnahme Wird hingegen Variable mehrfach gebunden, ist immer unmittelbar zuvor erfolgte Bindung sichtbar Typ einer Variablen ergibt sich aus Bindung Variablenbindung erfolgt in for und let-Ausdrücken 28

© Prof. T. Kudraß, HTWK Leipzig let-Klausel l l 1. 2. 29 3. Bindet © Prof. T. Kudraß, HTWK Leipzig let-Klausel l l 1. 2. 29 3. Bindet Menge von Werten, die bei Auswertung eines Ausdrucks expr entstehen geschlossen an eine Variable $var Im einfachsten Fall folgt nach der let-Klausel ein return -Ausdruck Liefert den Variableninhalt als Ergebnis Beispiel: let $z : = //zimmertyp return $z Abarbeitung in 3 Schritten: Werte den XPath-Ausdruck //zimmertyp aus Weise die resultierende Knotenmenge an die Variable $z zu (Variablenbindung) Gebe die gesamte Sequenz von Knoten zurück 29

© Prof. T. Kudraß, HTWK Leipzig for-Klausel l l Für jedes Element der Ergebnismenge © Prof. T. Kudraß, HTWK Leipzig for-Klausel l l Für jedes Element der Ergebnismenge erfolgt eine Bindung an $var Wie bei let können mehrere Variablen gebunden werden Variablen für alle untergeordneten Ausdrücke sichtbar Beispiel: for $z in //zimmertyp return $z Abarbeitung anders als bei let – – – 30 $z wird jeweils an Elemente der Sequenz (Auswertung von //zimmertyp) gebunden Bindung erfolgt mehrfach, für jeden Zimmertyp genau einmal Nachfolgende Klauseln werden für jede Iteration und Bindung einmal ausgewertet return wird für jeden Schritt ausgewertet, Resultat zu einem Zwischenergebnis hinzugefügt Aufsummiertes Gesamtergebnis von return wird am Schleifenende zurückgegeben 30

© Prof. T. Kudraß, HTWK Leipzig Beispiel <hotel name=“Hotel Neptun“> <zimmertyp typ=“EZ“ preis=“ 180“ © Prof. T. Kudraß, HTWK Leipzig Beispiel 31 31

© Prof. T. Kudraß, HTWK Leipzig Beispiel (Forts. ) XQuery-Anfrage for $hotel in //hotel © Prof. T. Kudraß, HTWK Leipzig Beispiel (Forts. ) XQuery-Anfrage for $hotel in //hotel return $hotel/foto Ergebnis: 32 32

© Prof. T. Kudraß, HTWK Leipzig Vergleich LET- und FOR-Klauseln for $x in (<Arzt/>, © Prof. T. Kudraß, HTWK Leipzig Vergleich LET- und FOR-Klauseln for $x in (, ) let $y : = (, ) return ({ $x }, { $y }) liefert als Ergebnis 33 33

© Prof. T. Kudraß, HTWK Leipzig Geschachtelte FOR-Klauseln <billighotels> { for $h in //hotel © Prof. T. Kudraß, HTWK Leipzig Geschachtelte FOR-Klauseln { for $h in //hotel for $z in $h/zimmertyp where $z/@preis <= 100 return { data($h/@name) } { data($z/@preis) } } Ergebnis: 34 34

© Prof. T. Kudraß, HTWK Leipzig Geschachtelte FOR-Klauseln (2) <billighotels> { for $h in © Prof. T. Kudraß, HTWK Leipzig Geschachtelte FOR-Klauseln (2) { for $h in //hotel return { for $z in $h/zimmertyp where $z/@preis <= 100 return { data($z/@preis) } } } 35 Ergebnis: 35

© Prof. T. Kudraß, HTWK Leipzig where-Klausel zur Angabe eines Selektionsprädikats mit weitergehenden Filtermöglichkeiten © Prof. T. Kudraß, HTWK Leipzig where-Klausel zur Angabe eines Selektionsprädikats mit weitergehenden Filtermöglichkeiten in Bezug auf Gruppen (ähnlich zu HAVING) Beispiel: l Suche Pflegepersonal das nicht nach 1974 geboren ist l Betrachte nur jeden 5. Pfleger l Suche Pfleger, die 3 oder mehr Zertifikate (zum Nachweis bestimmter Fähigkeiten besitzen) 36 for $p at $i in fn: doc(“Klinik. xml“)//Pfleger where fn: not($p/Geburtsdatum > xs: date(“ 1974 -01 -01“)) and $i mod 5 = 0 and fn: count($p//Zertifikat) > 2 return {$p/@Station, $p/Name, } 36

© Prof. T. Kudraß, HTWK Leipzig order by-Klausel l l Explizite Angabe einer Sortierung © Prof. T. Kudraß, HTWK Leipzig order by-Klausel l l Explizite Angabe einer Sortierung für die Elemente einer Sequenz Spezifische Sortierordnungen – – l 2 wichtige Eigenschaften der order by-Klausel – – l Global im Prolog einer XQuery Lokal zusätzlich in der order by-Klausel Wenn keine eindeutige Reihenfolge, so ist Anordnung der Duplikate implementierungsabhängig, Angabe von stable erzwingt die Einhaltung der Dokumentreihenfolge Wenn Eigenschaften, nach denen sortiert wird, nicht existieren: Einordnung dieser Einträge explizit steuern mit Sortierungsmodifikator empty greatest bzw. empty least Beispiele: Zusätzlich zum Beispiel für where-Klausel: order by $p//Wohnort empty least, fn: get-year-from-date($p/Geburtsdatum) descending Weitere Beispiele bei Verbundoperationen 37 37

© Prof. T. Kudraß, HTWK Leipzig Elementkonstruktoren (return) l Literales XML wird in das © Prof. T. Kudraß, HTWK Leipzig Elementkonstruktoren (return) l Literales XML wird in das Ergebnis übernommen, ohne modifiziert zu werden TV l XML mit geschachtelten Ausdrücken erlaubt es, Element- und Attributinhalte durch XQuery-Ausdrücke berechnen zu lassen $zaus union $haus l XML mit berechneten Element- und Attributnamen bietet die Möglichkeit, die Bezeichner von XML-Elementen und Attributen durch XQuery-Ausdrücke zu berechnen element {$z} { attribute {$t} {“EZ“}, element {$a} {“Minibar“} } 38 38

© Prof. T. Kudraß, HTWK Leipzig Verbundoperationen l Verknüpfung von Datenbeständen aus unterschiedlichen Dokumenten/Dokumentteilen © Prof. T. Kudraß, HTWK Leipzig Verbundoperationen l Verknüpfung von Datenbeständen aus unterschiedlichen Dokumenten/Dokumentteilen – – l Verbundprädikat – – l – – 39 in where-Klausel eines FLWOR-Ausdrucks in Pfadausdruck eines Verbundpartners Verfolgung von Referenzen (ID/IDREF) – l durch Wertegleichheit (relationale Seele) durch Verfolgung von Referenzen (objektorientierte Seele) Funktion fn: id() liefert Elemente, deren ID-Attributwert mindestens einem der übergebenen IDREF-Werte entsprechen (Dereferenzierung) Funktion fn: idref() liefert Elemente, die auf die übergebenen Werte verweisen Referenzen in Form von XPointer/XLink nicht über Dokumentgrenzen hinweg auflösbar Symmetrische und einseitige äußere Verbunde intuitiv formulierbar, vollständiger äußerer Verbund schwierig 39

© Prof. T. Kudraß, HTWK Leipzig Verbund – Beispiel 1 <prospect> { for $h © Prof. T. Kudraß, HTWK Leipzig Verbund – Beispiel 1 { for $h in fn: doc(“hotels. xml“)//hotel, $z in $h/zimmertyp, $f in fn: doc(“fotos. xml“) //hotel[name = $h/name]//zimmerfoto, where $f/zimmertyp = $z/@typ order by $h/name, $z/@typ return { $z/@typ, $h/name, $z/beschreibung, $f/foto } } Ergebnis: l Liste von Hotelzimmern mit Angaben zu Zimmertyp, Hotel, Zimmerbeschreibung und zugehöriges Foto l Hotels fehlen, wenn keine Informationen zu Zimmern oder das zugehörige Foto fehlt 40 40

© Prof. T. Kudraß, HTWK Leipzig Verbund – Beispiel 2 <prospect> { for $h © Prof. T. Kudraß, HTWK Leipzig Verbund – Beispiel 2 { for $h in fn: doc(“hotels. xml“)//hotel order by $h/name return { $h/name, $h/beschreibung, for $z in $h/zimmertyp, $f in fn: doc(“fotos. xml“) //hotel[name = $h/name]/zimmerfoto where $f/zimmertyp = $z/@typ order by $z/@typ return { $z/@typ, $z/beschreibung, $f/foto } } } Ergebnis: l Leere Sequenz für Hotels ohne Zimmerinformationen 41 Hotelname und Beschreibung trotzdem im Resultat (entspricht Outer Join) 41 l

© Prof. T. Kudraß, HTWK Leipzig Verbund – Verfolgung von Referenzen Beispiel: for $s © Prof. T. Kudraß, HTWK Leipzig Verbund – Verfolgung von Referenzen Beispiel: for $s in fn: doc(“Klinik. xml“)//Station let $p : = fn: id($s/@Leitung) return {$s/Name} { $p/Name } Ergebnis: l Zuordnung der leitenden Person (Name) an jede Station im Krankenhaus 42 42

© Prof. T. Kudraß, HTWK Leipzig Gruppierung Beispiel: Berechnung des Durchschnittsalters pro Berufsgruppe (Arzt © Prof. T. Kudraß, HTWK Leipzig Gruppierung Beispiel: Berechnung des Durchschnittsalters pro Berufsgruppe (Arzt oder Pfleger) Variante 1: Gruppierung entlang der XML-Hierarchie { for $p in fn: doc(“…“)//Medizinisches. Personal/* let $x : = $p//Alter return element { fn: node-name($p) } { { fn: avg($x) } } Variante 2: Gruppierung nach Wertegleichheit { for $b in fn: distinct-values(fn: doc(“…“)//Beruf) let $x : = fn: doc(“…“)//Alter[. . /Beruf = $b] return element {$b} {{ fn: avg($x) } } 43 43

© Prof. T. Kudraß, HTWK Leipzig Gruppierung (Forts. ) Variante 3: Gruppierung über Elementbezeichner © Prof. T. Kudraß, HTWK Leipzig Gruppierung (Forts. ) Variante 3: Gruppierung über Elementbezeichner { for $b in fn: distinct-values(for $i in fn: doc(“…“)//Person/(Arzt|Pfleger) return fn: node-name($i)) let $x : = fn: doc(“…“)//Alter[. . /fn: node-name(. ) = $b] return element {$b} { { fn: avg($x) } } } 44 44

© Prof. T. Kudraß, HTWK Leipzig Aggregationsfunktionen l l l 45 fn: count() liefert © Prof. T. Kudraß, HTWK Leipzig Aggregationsfunktionen l l l 45 fn: count() liefert die Anzahl der Elemente der übergebenen Sequenz zurück fn: avg() liefert den durchschnittlichen Wert aller Elemente der übergebenen Sequenz sum($arg) div count($arg) fn: max() liefert den wertemäßig größten Wert optional bezüglich einer Sortierordnung zurück fn: min() liefert den wertemäßig kleinsten Wert optional bezüglich einer Sortierordnung zurück fn: sum() liefert den summarischen Wert aller in der Sequenz enthaltenen Elementwerte zurück; wird der zweite Parameter nicht angegeben, so wird der Wert 0. 0 E 0 bei einer leeren Sequenz zurückgeliefert; andernfalls der Wert des zweiten Parameters 45

© Prof. T. Kudraß, HTWK Leipzig Konditionale Ausdrücke l l l 46 Syntax if © Prof. T. Kudraß, HTWK Leipzig Konditionale Ausdrücke l l l 46 Syntax if (expr) then expr_1 else expr_2 Beispiel Hotel-Datenbank: Gewähre Nachlass von 10%, wenn ein Hotelzimmer länger als 5 Tage belegt wird let $tage : = ($r/abreise - $r/anreise), $zimmertyp : = fn: id(zimmertyp) return if ($tage > 5) then $tage*$zimmertyp/@preis*0. 9 else $tage*$zimmertyp/@preis Hinweis: fn: id funktioniert nicht überall 46

© Prof. T. Kudraß, HTWK Leipzig Quantifizierende Ausdrücke l l l 47 Syntax [some © Prof. T. Kudraß, HTWK Leipzig Quantifizierende Ausdrücke l l l 47 Syntax [some | every ] var in expr_1 satisfies expr_2 Beispiel 1 Namen der Hotels, die unter anderem auch Einzelzimmer anbieten for $hotel in fn: doc(“hotels. xml“)//hotel where some $z in $hotel/zimmertyp satisfies $z/@typ = “EZ“ return $hotel/name Beispiel 2 Suche Appartementhotels, d. h. Hotels, die ausschließlich Appartements anbieten for $hotel in fn: doc(“hotels. xml“)//hotel where every $z in $hotel/zimmertyp satisfies $z/@typ = “Appartement“ return $hotel/name 47

© Prof. T. Kudraß, HTWK Leipzig Funktionen in XQuery l l Funktionen auf numerischen © Prof. T. Kudraß, HTWK Leipzig Funktionen in XQuery l l Funktionen auf numerischen und Booleschen Werten Funktionen auf Zeichenketten – – – l Funktionen auf Zeitangaben – – – l 48 Vergleich Manipulation Auswertung regulärer Ausdrücke Vergleichs- und Substraktions-/Additionsoperatoren Funktionen zur Extraktion von Komponenten Zeitangaben in unterschiedlichen Zeitzonen Benutzerdefinierte Funktionen 48

© Prof. T. Kudraß, HTWK Leipzig XQuery-Implementierungen Aktuelle Liste: http: //www. w 3. org/XML/Query#implementations © Prof. T. Kudraß, HTWK Leipzig XQuery-Implementierungen Aktuelle Liste: http: //www. w 3. org/XML/Query#implementations 49 49

© Prof. T. Kudraß, HTWK Leipzig SQL/XML l l l 50 2003 verabschiedet (ISO/IEC © Prof. T. Kudraß, HTWK Leipzig SQL/XML l l l 50 2003 verabschiedet (ISO/IEC 9075 -14: 2003 ) - ( siehe: [6] ) ANSI und ISO Standard, Support um XML in Umgebung einer SQL-Datenbank zu nutzen Titel: Information technology - Database languages - SQL - Part 14: XMLRelated Specifications (SQL/XML) – ca. $200 (ca. 360 Seiten) entwickelt und implementiert von Oracle, MS, IBM, Sybase, . . . wird ab Oracle 9 i Release 2 unterstützt macht es möglich XML-Files in SQL-DB zu speichern, Anfragen mit XQuery und XPath zu stellen, und existierende SQL-Daten als XML zu extrahieren 50

© Prof. T. Kudraß, HTWK Leipzig XML-Update l l l l 51 XML-Update Sprache © Prof. T. Kudraß, HTWK Leipzig XML-Update l l l l 51 XML-Update Sprache vom Sep 2000 - ( siehe: [7. 1] ) basiert auf XPath beschreibt welche Änderungen in XML-File gemacht werden diese Änderungen werden als XML formuliert ist kein W 3 C- oder ISO-Standard, sondern XML: DB Initiative praktisch, nicht so gut spezifiziert, ex. DTD der Syntax Popularität in einigen Implementierungen gefunden - [7. 2] 51

© Prof. T. Kudraß, HTWK Leipzig Literatur 52 [1] “XML&Datenbanken” M. Klettke, H. Meyer, © Prof. T. Kudraß, HTWK Leipzig Literatur 52 [1] “XML&Datenbanken” M. Klettke, H. Meyer, dpunkt. verlag, 2002 [2] XML-QL: http: //www. w 3. org/TR/NOTE-xml-ql [3] XQL: http: //www. w 3. org/Tand. S/QL/QL 98/pp/xql. html [4] XPath: http: //www. w 3. org/TR/xpath [5] XQuery: http: //www. w 3. org/XML/Query http: //www. w 3. org/TR/xpath-datamodel/ [6] XML/SQL: http: //www. sqlx. org/ http: //www. oracle. com/technology/oramag/oracle/03 may/o 33 xml. html [7] XUpdate: http: //xmldb-org. sourceforge. net/xupdate/index. html http: //uche. ogbuji. net/tech/akara/nodes/2004 -0930/xupdate [8] “XML – Von Anfang an”, rororo, 2003 [9] “Essential XML”, D. Box, A. Skonnard, Addison-Wesley, 2001 [10] “XSL und XPath”, M. Bach, Addison-Wesley, 2000 [11] “XQuery – Einführung und fortgeschrittene Methoden“ W. Lehner, H. Schöning, dpunkt Verlag, 2003. [12] “XQuery – ein Überblick“ W. Lehner, H. Schöning, in Datenbank-Spektrum 11/2004. 52