Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath Anfragesprache.

Ähnliche Präsentationen


Präsentation zum Thema: "XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath Anfragesprache."—  Präsentation transkript:

1 XML-Anfragesprachen (Schwerpunkt XQuery)

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

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

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

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

6 © Prof. T. Kudraß, HTWK Leipzig XML-Anforderungen (1) Einbettung – Anfragen in XML einbetten oder als XML formulieren – XML-Fragmente in Anfrage fester Teil in Ergebnis Server-Verarbeitung – Geeignet für Server-side Processing erfordert Abgeschlossenheit, Kontextfreiheit Ordnungserhaltung (Order Preserving) – 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

7 © Prof. T. Kudraß, HTWK Leipzig XML-Anforderungen (2) Hyperlinks – Ausnutzen und Verfolgen von Links in ( ID/IDREF ) und zwischen ( XLink, XPointer ) Dokumenten Flexible Typen – 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

8 © Prof. T. Kudraß, HTWK Leipzig Grundoperationen 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 – über APIs wie DOM, SAX – Auch Änderungsoperationen über XML-Anfragesprache

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

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

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

12 © Prof. T. Kudraß, HTWK Leipzig XPath 1.0 - Pfadausdrücke 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] – axis: Beziehung Kontextknoten u. zu selektierende Knoten – node-test: Knotentyp und Namen des zu sel. Knoten – predicate: Einschränkung best. Elemente durch Prädikate

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

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

15 © 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] /child::Patient/self::*/child::Name/parent::*/attribute::PatientNr äquivalent zu: /Patient/./Name/../@PatientNr

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

17 © Prof. T. Kudraß, HTWK Leipzig Sprachüberblick W3C Working Draft vom Okt 2004 - (siehe: http://www.w3.org/TR/xquery) geht aus Quilt hervor (inoffizieller Vorschlag des W3C), basierend auf XPath, beeinflusst durch SQL, XML-QL Ausdrücke beliebig ineinander schachtelbar – Elementkonstruktoren – Pfadausdrücke zur Selektion (wie XPath) – FLWOR-Ausdrücke (ähnlich SQL - SFW) – datenspezifische Operatoren, Standard - und selbstdefinierte Funktionen – bedingte Anweisungen, Test von Datentypen, Typumwandlung – Verwendung von Quantoren: EVERY und SOME

18 © Prof. T. Kudraß, HTWK Leipzig Datenmodell Dokument als Baumstruktur (XPath 1.0) XQuery nutzt künftigen XPath 2.0-Standard Modell basiert auf XPath 1.0 + Erweiterungen – einzelne XML-Dokumente – wohlgeformte Fragmente eines Dokuments – Sequenzen von Dokumenten und Fragmenten als Wert eines XQuery-Ausdrucks Objekt dieses Datenmodells ist geordnete Menge von Knoten = Sequenz (Aneinanderreihung von atomaren Werten oder Knoten – ohne Schachtelung) – Flach, d.h. Sequenz nur auf der obersten Ebene – 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

19 © Prof. T. Kudraß, HTWK Leipzig Datenmodell (2) Funktionen zur Analyse und Modifikation – 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) Datentypen – allgemeinste Form eines Eintrags vom Typ item() – Einfache oder komplexe Datentypen – Sprachkonstrukte aus XML Schema (vgl. Typhierachie) Atomisierung – XML-Dokument synonym mit zugehöriger Instanz des XQuery- Datenmodells

20 © Prof. T. Kudraß, HTWK Leipzig Unterschiede zu XPath 1.0 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. Bereichs Voranstellen von Variablen oder Funktionsaufrufen vor Pfadausdrücken

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

22 © Prof. T. Kudraß, HTWK Leipzig Grundlagen Konstanten oder Literale – 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.5e3, 200e6{-- xs:double --} Variablen: – Beispiele: $name := Wolfgang Lehner LET $hotel := //hotel[typ=Pension] RETURN $hotel Kommentare – An beliebiger Stelle, ohne Bedeutung – Syntax: geschachtelt durch ein Klammerpaar (: und :) – Beispiel: (: XQuery (: Kommentar :) !! :) – Orthogonal zu einem Kommentar im XML-Dokument

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

24 © Prof. T. Kudraß, HTWK Leipzig Ausdrücke in XQuery (1) Arithmetische Ausdrücke – Mit arithmetischen Operationen – Auswertereihefolge durch Klammerung beeinflussen – Beispiel: ($preis-10) DIV 100 Vergleichsausdrücke (4 Vergleichsoperatoren) – allgemein mit Sequenzen: =, !=,, >= – einfache Wertvergleiche zwischen elementaren Werten: EQ, NE, LT, LE, GT, GE – Vergleich der Knotenidentität: == (identisch), !== (nicht identisch) Beispiel: $hotel[name = Neptun] == $hotel[@id = 4311] – Vergleich der Abfolge von Knoten bezüglich der Dokumentordnung mit > und in Bezug auf die Vorgänger- und Nachfolgerbeziehung mit FOLLOWS und PRECEDES logische Ausdrücke: – AND, OR, NOT – Beispiel: NOT($hotel/name EQ $restaurant/name) Pfadausdrücke – Basieren auf XPath 2.0 (Erweiterungen gegenüber 1.0)

25 © Prof. T. Kudraß, HTWK Leipzig FLWOR-Ausdrücke FLWOR-Ausdruck – 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::= (ForClause | LetClause)+ WhereClause? OrderByClause? RETURN ExprSingle ForClause::= FOR $VarName TypeDeclaration? PositionalVar? IN ExprSingle (, $VarName TypeDeclaration? PositionalVar? IN ExprSingle)* LetClause::= LET $VarName TypeDeclaration? := ExprSingle (, $VarName TypeDeclaration? := ExprSingle)* TypeDeclaration::= AS SequenceType PositionalVar::= AT $VarName WhereClause::= WHERE Expr OrderByClause::= (ORDER BY | STABLE ORDER BY) OrderSpecList OrderSpecList::= OrderSpec (, OrderSpec)* OrderSpec::= ExprSingle OrderModifier OrderModifier::= (ASCENDING | DESCENDING)? ((EMPTY GREATEST) | EMPTY LEAST))? (COLLATION StringLiteral)?

27 © Prof. T. Kudraß, HTWK Leipzig Variablen 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 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: 1. Werte den XPath-Ausdruck //zimmertyp aus 2. Weise die resultierende Knotenmenge an die Variable $z zu (Variablenbindung) 3. Gebe die gesamte Sequenz von Knoten zurück

29 © Prof. T. Kudraß, HTWK Leipzig FOR-Klausel 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 – $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 <zimmertyp typ =DZ preis =90 währung =EUR

31 © Prof. T. Kudraß, HTWK Leipzig Beispiel (Forts.) XQuery-Anfrage FOR $hotel IN //hotel RETURN $hotel/foto Ergebnis:

32 © Prof. T. Kudraß, HTWK Leipzig Vergleich LET- und FOR-Klauseln FOR $x IN (, ) LET $y := (, ) RETURN ( { $x } { $y } ) liefert als Ergebnis

33 © Prof. T. Kudraß, HTWK Leipzig Geschachtelte FOR-Klauseln { FOR $h IN //hotel FOR $z IN $h/zimmertyp WHERE $z/@preis <= 100 RETURN { $h/@name } { $z/@preis } } Ergebnis: … …

34 © Prof. T. Kudraß, HTWK Leipzig Geschachtelte FOR-Klauseln (2) { FOR $h IN //hotel RETURN { FOR $z IN $h/zimmertyp WHERE $z/@preis <= 100 RETURN { $z/@preis } } } Ergebnis: …

35 © Prof. T. Kudraß, HTWK Leipzig WHERE-Klausel 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/Name, $p/@Station} WHERE-Klausel zur Angabe eines Selektionsprädikats mit weitergehenden Filtermöglichkeiten in Bezug auf Gruppen (ähnlich zu HAVING) Beispiel: Suche Pflegepersonal das nicht nach 1974 geboren ist Betrachte nur jeden 5. Pfleger Suche Pfleger, die 3 oder mehr Zertifikate (zum Nachweis bestimmter Fähigkeiten besitzen)

36 © Prof. T. Kudraß, HTWK Leipzig ORDER BY-Klausel Explizite Angabe einer Sortierung für die Elemente einer Sequenz Spezifische Sortierordnungen – Global im Prolog einer XQuery – Lokal zusätzlich in der ORDER BY-Klausel 2 wichtige Eigenschaften 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: $hotel/zimmer[preis<100] ORDER BY preis ASCENDING Zusätzlich zum Beispiel für WHERE-Klausel: ORDER BY $p//Wohnort EMPTY LEAST, fn:get-year-from-date($p/Geburtsdatum) DESCENDING

37 © Prof. T. Kudraß, HTWK Leipzig Elementkonstruktoren (RETURN) Literales XML wird in das Ergebnis übernommen, ohne modifiziert zu werden TV XML mit geschachtelten Ausdrücken erlaubt es, Element- und Attributinhalte durch XQuery-Ausdrücke berechnen zu lassen $zaus UNION $haus 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 © Prof. T. Kudraß, HTWK Leipzig Verbundoperationen Verknüpfung von Datenbeständen aus unterschiedlichen Dokumenten/Dokumentteilen – durch Wertegleichheit (relationale Seele) – durch Verfolgung von Referenzen (objektorientierte Seele) Verbundprädikat – in WHERE-Klausel eines FLWOR-Ausdrucks – in Pfadausdruck eines Verbundpartners Verfolgung von Referenzen (ID/IDREF) – 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 { 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 RETURN <hotelzimmer { $h/name, $z/typ, $z/beschreibung, $f/foto } ORDER BY (name,typ) } Ergebnis: Liste von Hotelzimmern mit Angaben zu Hotel, Zimmertyp, Zimmerbeschreibung und zugehöriges Foto Hotels fehlen, wenn keine Informationen zu Zimmern oder das zugehörige Foto fehlt

40 © Prof. T. Kudraß, HTWK Leipzig Verbund – Beispiel 2 { FOR $h IN fn:doc(hotels.xml)//hotel 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 RETURN $z/typ, $z/beschreibung, $f/foto ORDER BY typ } ORDER BY name } Ergebnis: Leere Sequenz für Hotels ohne Zimmerinformationen Hotelname und Beschreibung trotzdem im Resultat (entspricht Outer Join)

41 © Prof. T. Kudraß, HTWK Leipzig Verbund – Verfolgung von Referenzen FOR $s IN fn:doc(Klinik.xml)//Station, LET $p := fn:id($s/@Leitung) RETURN {$s/Name} { $p/Name } Ergebnis: Zuordnung der leitenden Person (Name, Vorname) an jede Station im Krankenhaus Beispiel:

42 © 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(…)//MedizinischesPersonal/* 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/text()) LET $x := fn:doc(…)//Alter[../Beruf/text() = $b] RETURN ELEMENT {$b} { { fn:avg($x) } ) }

43 © 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 © Prof. T. Kudraß, HTWK Leipzig Aggregationsfunktionen 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.0E0 bei einer leeren Sequenz zurückgeliefert; andernfalls der Wert des zweiten Parameters

45 © Prof. T. Kudraß, HTWK Leipzig Konditionale Ausdrücke 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), $zimmer := fn:id(zimmertyp) RETURN IF ($tage > 5) THEN $tage*$zimmer/preis*0.9 ELSE $tage*$zimmer/preis

46 © Prof. T. Kudraß, HTWK Leipzig Quantifizierende Ausdrücke 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/zimmer/typ SATISFIES $z = 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/zimmer/typ SATISFIES $z = Appartement RETURN $hotel/name

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

48 © Prof. T. Kudraß, HTWK Leipzig Benutzerdefinierte Funktionen (Beispiel) declare function factorial($n as xs:integer) as xs:integer { return( if ($n eq 0) then 1 else $n * factorial($n - 1) ) } Factorial of 5 { factorial( 5 ) } declare function factorial($n as xs:integer) as xs:integer { return( if ($n eq 0) then 1 else $n * factorial($n - 1) ) } Factorial of 5 { factorial( 5 ) } Factorial of 5 120

49 © Prof. T. Kudraß, HTWK Leipzig Verarbeitungs- konzept von XQuery

50 © Prof. T. Kudraß, HTWK Leipzig Statische Analyse und Typprüfung Statische Analyse (erste Phase der Auswertung) – Parsing und Analyse des XQuery-Hauptmoduls – Aktualisierung des statischen Kontextes – Überführung der Anfrage in einen Operatorbaum – Fehlerprüfung: Existenz von Typnamen, Namens- raumpräffixen, Funktionsnamen und Variablennamen Statische Typprüfung Prepare / Execute – Übersetzung der Anfrage in einen ausführbaren Anfragegraphen – Ausführung der Anfrage

51 © Prof. T. Kudraß, HTWK Leipzig Statischer Kontext Bekannte Namensräume – vordefiniert – Im XQuery Prolog enthalten Vorbelegung für Element- und Funktionsnamensräume Schemadefinitionen – Typen aus XML Schema und XQuery Variablendefinitionen Funktionen Vorbelegung für Sortierordnung Validierungsmodus

52 © Prof. T. Kudraß, HTWK Leipzig Dynamische Ausführung Dynamischer Kontext – Aufbau während der Anfrageausführung – Verwaltung aller aktuellen Variablenbindungen (Variablenname-Wert-Paare) – Fokus (focus) Aktuell betrachteter Eintrag (context item) (.-Operator) Eintragsposition (context position) ( fn:position() ) Anzahl der Einträge der aktuellen Sequemz (context size) fn:last() – Datum und Uhrzeit – Zeitzone

53 © Prof. T. Kudraß, HTWK Leipzig Aufbau des Ergebnisdokuments Serialisierung – XQuery-Anfrage resultiert in einer Sequenz und somit in einer Instanz des XML-Datenmodells – Serialisierung = Überführung der Instanz eines XML- Datenmodells in eine Zeichenkette (XML-Dokument) – Transformation / Normalisierung – Parameter zur Beeinflussung der Serialisierung Encoding des Ergebnisses Media Type des Ergebnisses – Anmerkung Ergebnis einer XQuery muss nicht als XML serialisiert werden, d.h. weitere Methoden neben xml

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

55 © Prof. T. Kudraß, HTWK Leipzig SQL/XML 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: XML-Related Specifications (SQL/XML) – ca. $200 (ca. 360 Seiten) entwickelt und implementiert von Oracle, MS, IBM, Sybase,... wird ab Oracle9i Release2 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

56 © Prof. T. Kudraß, HTWK Leipzig XML-Update 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 W3C- oder ISO-Standard, sondern XML:DB Initiative praktisch, nicht so gut spezifiziert, ex. DTD der Syntax Popularität in einigen Implementierungen gefunden - [7.2]

57 © Prof. T. Kudraß, HTWK Leipzig Literatur [1] XML&Datenbanken M.Klettke, H.Meyer, dpunkt.verlag, 2002 [2] XML-QL: http://www.w3.org/TR/NOTE-xml-ql [3] XQL: http://www.w3.org/TandS/QL/QL98/pp/xql.html [4] XPath: http://www.w3.org/TR/xpath [5] XQuery: http://www.w3.org/XML/Query http://www.w3.org/TR/xpath-datamodel/ [6] XML/SQL: http://www.sqlx.org/ http://www.oracle.com/technology/oramag/oracle/03- may/o33xml.html [7] XUpdate: http://xmldb-org.sourceforge.net/xupdate/index.html http://uche.ogbuji.net/tech/akara/nodes/2004-09- 30/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.


Herunterladen ppt "XML-Anfragesprachen (Schwerpunkt XQuery). © Prof. T. Kudraß, HTWK Leipzig Übersicht Anforderungen an XML-Anfragesprachen Stand der Entwicklung XPath Anfragesprache."

Ähnliche Präsentationen


Google-Anzeigen