Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Vortrag zum Seminar XML und Datenbanken XML Path Language 1.0 - XPath Matthias Brosemann Friedrich-Schiller-Universität Jena.

Ähnliche Präsentationen


Präsentation zum Thema: "Vortrag zum Seminar XML und Datenbanken XML Path Language 1.0 - XPath Matthias Brosemann Friedrich-Schiller-Universität Jena."—  Präsentation transkript:

1 Vortrag zum Seminar XML und Datenbanken XML Path Language XPath Matthias Brosemann Friedrich-Schiller-Universität Jena

2 Inhalt 1.Einleitung 2.Datenmodell 3.XPath-Ausdrücke - Datentypen - Kontextbezogene Auswertung - Lokalisierungspfade - Ausdrücke 4.Grundfunktionsbibliothek 5.Zusammenfassung & Ausblick

3 Einleitung Ziel: mit XML arbeiten, d. h. zunächst XML-Daten aus einem Dokument adressieren 1. Möglichkeit: navigierende/prozedurale Ansätze wie DOM oder SAX 2. Möglichkeit: deskriptive Anfragesprachen dazu ein Auszug der Kriterien für Anfragesprachen aus der DBS1-Vorlesung: Mengenorientiertheit Deskriptivität Abgeschlossenheit Adäquatheit Eingeschränktheit Sicherheit jede Operation arbeitet auf Mengen von Daten Benutzter formuliert WAS er haben will und nicht das WIE Anfrageergebnisse können als neue Eingabe verwendet werden alle Konstrukte des Datenmodells werden unterstützt Anfragesprache darf keine komplette Programmiersprache sein keine syntaktisch korrekte Anfrage erzeugt Endlosschleife oder unendliches Ergebnis

4 Einleitung Ziel: mit XML arbeiten, d. h. zunächst XML-Daten aus einem Dokument adressieren 1. Möglichkeit: navigierende/prozedurale Ansätze wie DOM oder SAX 2. Möglichkeit: deskriptive Anfragesprachen dazu ein Auszug der Kriterien für Anfragesprachen aus der DBS1-Vorlesung: Mengenorientiertheit Deskriptivität Abgeschlossenheit Adäquatheit Eingeschränktheit Sicherheit DOM: nein(Operationen nur auf einem Knoten) nein(prozeduraler/navigierender Ansatz) ja(Ergebnisse können als Parameter verwendet werden) ja(verschiedene Knotentypen für verschiedene Konstrukte) nein(sind in komplette Programmiersprachen eingebettet) nein(Programme können Endlosschleifen enthalten)

5 Einleitung Die primäre Aufgabe von XPath besteht in der Adressierung von Teilen eines XML- Dokuments. XPath benutzt eine kompakte Nicht-XML-Syntax, um die Verwendung von XPath- Ausdrücken innerhalb von URIs und XML-Attributen zu erleichtern. Mengenorientiertheit Deskriptivität Abgeschlossenheit Adäquatheit Eingeschränktheit Sicherheit XPath: primäres Ziel ? sekundäres Ziel ?

6 Einleitung XPath ist das Ergebnis der Zusammenarbeit der XPointer- und XSL-Arbeitsgruppen. XPointer: Adressierung von Teilen eines XML-Dokumentes in einer URI, z. B.: = "Mehl"]] XSLT: XPath-Ausdrücke werden z. B. zum Matching benutzt Eine weitere Anwendung findet XPath in den XML Schemas, um dort die identity constraints definieren zu können.

7 Datenmodell 200g Mehl Zuerst nehmen Sie das Mehl und mischen es mit... / Wurzelknoten rezept Elementknoten xml-stylesheet Processing-Instruction-Knoten anleitung Kommentarknoten weitere Zutaten zutat Attributknoten id 200g Mehl Textknoten Zuerst nehmen... zutat und mischen es... Mehl xml Namensraumknoten xml xlink xlink:href xlink:type

8 Datenmodell XPath operiert auf der logischen Darstellung des XML-Dokumentes, dem Baum. Dieser besitzt Knoten verschiedener Typen: Wurzelknotenrepräsentiert das Dokument; ist einzigartig und Wurzel des Baumes Elementknoten repäsentiert ein Element; ist Kindknoten eines Elementknotens oder des Wurzelknotens; hat diesen als Elternknoten Attributknoten repräsentiert ein Attribut; ist kein Kindknoten, hat aber den zuge- hörigen Elementknoten als Elternknoten; Attribute mit xmlns als Präfix sind keine Attributknoten Namensraumknoten repräsentiert eine Namensraumdefinition für ein Element (auch vom Elternknoten vererbte); ist kein Kindknoten, hat aber den zugehörigen Elementknoten als Elternknoten Kommentarknoten repräsentiert ein Kommentar, der nicht innerhalb der DTD steht PI-Knoten repäsentiert eine PI, die nicht innerhalb der DTD steht Textknoten repräsentiert einen Textabschnitt ; ist Kindknoten eines Element- knotens und hat diesen als Elternknoten; er Textabschnitt ist so groß wie möglich, es gibt als keine zwei benachbarten Textknoten; ein Textknoten enthält min. ein Zeichen; Textknoten, die nur als Leer- raumzeichen bestehen, können weggelassen werden

9 Datenmodell Die Dokumentordnung ist eine Ordnung der Knoten des Baumes bezüglich ihres Auftretens im XML-Dokument. Besonderheiten: -Der Wurzelknoten ist der erste Knoten in der Dokumentordnung. -Die Kinder eines Knotens sind wie folgt sortiert: Namensraumknoten, Attributknoten, restliche Knoten. -Die relative Ordnung der Namensraum- und Attributknoten ist implementationsabhängig. Die Dokumentordnung kann undefiniert sein. So können z. B. mit XSLT die Bäume zweier XML-Dokumente vereinigt werden. Die oben genannte Definition lässt sich dann nicht auf den resultierenden Baum anwenden.

10 XPath-Ausdrücke - Datentypen XPath definiert vier Datentypen: -boolean true oder false -numberGleitkommazahl, z. B. –5 oder string Zeichenkette aus UCS-Zeichen*, z. B. Ich bin Text. -node-setungeordnete Menge von Knoten (also keine Duplikate) *UCS = Universal Multiple-Octet Coded Character Set Der Rückgabewert eines XPath-Ausdrucks ergibt ein Objekt, das zu einem dieser vier Typen gehört. Auf XPath aufbauende Sprachen können weitere Datentypen definieren. So führt XSLT beispielsweise den Teilbaum als neuen Datentyp ein.

11 XPath-Ausdrücke – Kontextbezogene Auswertung Die Auswertung eines XPath-Ausdruckes erfolgt immer bezüglich eines Kontextes (K, (KP, KG), v, f, n) mit: K -ein Knoten, der Kontextknoten KP -eine natürliche Zahl, die Kontextposition KG -eine natürliche Zahl, die Kontextgröße v -eine Abbildung von Variablennamen auf Variablenwerte, die Variablenbelegungen f -eine Abbildung von Funktionsnamen auf Funktionen, die Funktionsbibliothek n -eine Abbildung von Namensraumpräfixen auf Namensraum-URIs, die Menge der gültigen Namensräume (Namensraumdeklarationen) Es gilt stets: 0 KP KG

12 XPath-Ausdrücke – Kontextbezogene Auswertung Der Variablenwert ist ein Objekt von einem für Ausdrücke möglichen Typen. Variablen werden mit $Variablenname angesprochen. XPath selbst besitzt keine Konstrukte zum Definieren von Variablen. Dazu ist eine Sprachenerweiterung wie XSLT oder XQuery nötig. Die Variablenbelegungen, die Funktionsbibliothek und die Namensraum- deklarationen, die benutzt werden, um einen Teilausdruck zu berechnen, sind immer dieselben, die auch für den umgebenden Ausdruck benutzt werden. Jede Funktion besitzt null oder mehr Argumente und liefert einen einzelnen Wert. XPath definiert eine Bibliothek von Grundfunktionen, die von allen Implementationen unterstützt werden muss. Bei einer Grundfunktion gehören die Argumente und das Ergebnis einem der vier Grundtypen an.

13 XPath-Ausdrücke – Lokalisierungspfade Lokalisierungspfade adressieren Teile eines XML-Dokumentes. Es gibt relative und absolute Lokalisierungspfade. Ein relativer Lokalisierungspfad setzt sich aus einem oder mehreren Lokalisierungs- schritten zusammen, die mit einem Schrägstrich ( / ) voneinander getrennt werden. Ein absoluter Lokalisierungspfad besteht aus einem führenden Schrägstrich, gefolgt von einem optionalem relativen Lokalisierungspfad. Die Eingabe des ersten Schrittes dieses relativen Pfades ist die Menge, die nur den Wurzelknoten enthält. Beispiel: /child::*/child::* (wählt alle Enkelknoten des Wurzelknotens aus) Ein Lokalisierungsschritt wählt eine Menge von Knoten bzgl. des Kontextes aus. Die Eingabe eines Lokalisierungsschrittes ist die aus dem vorhergehenden Schritt resultierende Knotenmenge. Alle Knoten dieser Menge werden nacheinander als Kontextknoten betrachtet und die resultierenden Knotenmengen werden vereinigt.

14 XPath-Ausdrücke – Lokalisierungspfade Ein Lokalisierungsschritt besteht aus der Achse, dem Knotentest und beliebig vielen Prädikaten: axis::node_test[predicate_1][predicate_2]...[predicate_n] Die Achse ist eine der 13 vordefinierten Achsen und wählt eine Knotenmenge aus. Der Knotentest kann diese Menge anhand der Knotentypen oder der Namen der Knoten einschränken. Prädikate sind XPath-Ausdrücke, die für jeden verbleibenden Knoten ausgewertet werden. Ist das Ergebnis eine Zahl, so wird diese mit der Kontextposition des Knotens verglichen. Ansonsten wird das Ergebnis direkt in einen booleschen Wert konvertiert. Alle Knoten, für die die Auswertung eines Prädikats falsch ergibt, werden aus der Menge herausgefiltert, bevor das nächste Prädikat ausgewertet wird.

15 XPath-Ausdrücke – Lokalisierungspfade Achsen: child parent following-sibling preceding-sibling descendent-or-self ancestor-or-self preceding self following ancestor descendent attribute namespace

16 XPath-Ausdrücke – Lokalisierungspfade Achsen besitzen sogenannte Hauptknotentypen. Der Hauptknotentyp der Attribut- Achse ist der Attributtyp, der der Namensraumachse der Namensraumtyp. Alle anderen Achsen besitzt den Elementtyp als Hauptknotentyp. - (qualifizierter) Name:Der erweiterte (Präfix wird expandiert) Name des Knotens muss gleich dem angegebenen Namen sein und der Typ des Knotens muss der Hauptknotentyp sein. z. B.: child::title Knotentests (auf Knotenname): - Namensraum-Präfix:Die expandierten Präfixe müssen übereinstimmen und der Typ des Knotens muss der Hauptknotentyp sein. z. B.: child::xhtml:* - beliebiger Name:Der Typ des Knotens muss der Hauptknotentyp sein. z. B.: child::*

17 XPath-Ausdrücke – Lokalisierungspfade - beliebiger Knotentyp:Der Test ist für jeden Knoten erfüllt. z. B.: child::node() Knotentests (auf Knotentyp): - Textknoten:Der Knoten muss vom Typ Text sein. z. B.: child::text() - Kommentarknoten:Der Knoten muss vom Typ Kommentar sein. z. B.: child::comment() - PI-Knoten:Der Knoten muss vom Typ Processing-Instruction sein. Wurde ein Literal angegeben, so muss das Ziel der PI gleich dem Literal sein. z. B.: child::processing-instruction() oder child::processing-instruction('xml-stylesheet')

18 XPath-Ausdrücke – Lokalisierungspfade /descendant::answer[position()=42] wählt das 42. answer -Element im Dokument aus. Beispiele: /child::doc/child::chapter[position()=5]/child::section[position()=last()] wählt das letzte section -Element des fünften chapter -Elements des doc - Dokumentelements aus. child::*[self::chapter or self::appendix] wählt die chapter - und appendix - Kindelemente des Kontextknotens aus. child::para[attribute::type='warning'][position()=5] wählt das fünfte para -Kindelement des Kontextknotens aus, das ein Attribut type mit dem Wert warning besitzt. child::para[position()=5][attribute::type="warning"] wählt das fünfte para -Kindelement des Kontextknotens aus, wenn dieses Kind ein type -Attribut mit dem Wert warning besitzt.

19 XPath-Ausdrücke – Lokalisierungspfade Abkürzungen: - child:: kann weggelassen werden. Damit ist die Standardachse die Kindachse. z. B.: /doc/chapter[5]/section[last()] ist die Abkürzung für attribute:: z. B.: - // ist die Abkürzung für /descendant-or-self::node()/ z. B.: /descendant::answer[position()=42]//question -. ist die Abkürzung für self::node() (vollständiger Lokalisierungsschritt) -.. ist die Abkürzung für parent::node() (vollständiger Lokalisierungsschritt) z. B.:../title

20 XPath-Ausdrücke XPath-Ausdrücke können aus booleschen Operationen, Vergleichen, arithmetischen Operationen und einen Mengenoperator, sowie Lokalisierungspfaden bestehen. Statt eines Lokalisierungspfades oder als Eingabe für einen Lokalisierungspfad kann ein Filter-Ausdruck verwendet werden. Dieser filtert das Ergebnis eines XPath-Ausdrucks, eines Funktionsaufrufes, einer Variablenreferenz oder einen konstanten Ausdruck mit Prädikaten. Beispiel: preceding::node() | self::node() Beispiele: (preceding-sibling::* | following-sibling::*)[1] $divs[1]/following-sibling::* count(child::*[self::chapter or self::appendix])

21 Grundfunktionsbibliothek Funktionen für Knotenmengen: - last(), position() - count(node-set) Beispiele: $a[count(.|$b) = count($b)] (Durchschnitt von $a und $b) $a[count(.|$b) != count($b)] (Differenz von $a und $b) = (ist Kontextknoten ein Attributknoten?) - local-name(node-set), namespace-uri(node-set), name(node-set) geben lokalen Namen bzw. Namensraum-URI bzw. qualifizierten Namen des ersten Knotens aus der Knotenmenge aus. - id(object) Ist die Eingabe eine Liste von ID-Werten, so werden alle Elemente mit einem ID-Wert aus dieser Liste zurückgegeben. Ist die Eingabe eine Knotenmenge, so wird zu jedem Knoten aus der Menge der Zeichenkettenwert berechnet, id() mit diesem Wert aufgerufen und die Ergebnisse vereinigt.

22 Grundfunktionsbibliothek Funktionen für Zeichenketten: - string(object) Ist die Eingabe eine Knotenmenge, so werden die Zeichenkettenwerte (ZKW) aller Knoten aus dieser Menge miteinander verkettet zurückgegeben. Für den Wurzelknoten und die Elementknoten ist der ZKW die Verkettung der ZKW aller Textknoten- Nachkommen in Dokumentordnung. Der ZKW eines Textknotens ist der mit ihm assoziierte Text. Der ZKW eines Attributknotens ist der (normalisierte) Wert des Attributes, der des Namensraumknotens der Namensraum-URI. Für den PI-Knoten ist der ZKW die Anweisung ohne das Ziel, für den Kommentarknoten der gesamte Kommentartext. - concat(...), substring-before(...), substring-after(...), substring(...), string-length(...), normalize-space(...), translate(...) - starts-with(...), contains(...)

23 Grundfunktionsbibliothek Boolesche Funktionen: - boolean(object) Ist die Eingabe eine Knotenmenge, so ist das Ergebnis wahr, wenn die Menge nicht leer ist. Ist die Eingabe ein String, so ist das Ergebnis wahr, wenn der String min. ein Zeichen enthält. Beispiele: (XML-Dokument) ergibt wahr ergibt falsch - not(boolean), true(), false() - lang(string) ergibt wahr, wenn mittels xml:lang im Kontextknoten oder im nächsten Vorfahr, der dieses Attribut spezifiziert, die angegebene Sprache oder eine Untersprache davon gesetzt wurde. Die Beispiele ergeben für den Test boolean(//para[lang('en')]) wahr:

24 Grundfunktionsbibliothek Zahlenfunktionen: - number(object) Konvertierung in eine Gleitkommazahl. Knotenmengen werden zunächst in einen String konvertiert, der anschließend geparst wird. - floor(number), ceiling(number), round(number) - sum(node-set) wendet auf jeden Knoten der Menge die Funktion number() an und addiert die Ergebnisse.

25 Zusammenfassung & Ausblick Mengenorientiertheit Deskriptivität Abgeschlossenheit Adäquatheit Eingeschränktheit Sicherheit XPath: ja(primäres Ziel) ja(rel. Lok.-pfade schaffen Unabhängigkeit von Hierarchietiefe) jein(nur Knotenmengen können als neue Eingabe verwendet werden) jein(DTD und Versionsinformation wird weggelassen) ja ja(Knotenmengen werden sukzessiv eingeschränkt) XPath erfüllt im Prinzip die genannten Kriterien für eine Anfragesprache. Die Abgeschlossenheit gilt insofern, dass weiter abfragbare Resultate auch als Eingabe für einen neuen XPath-Ausdruck gültig sind (Lokalisierungsschritte). Auch die Adäquatheit kann für gültig erklärt werden, da die Versionsinformation nichts mit den abstrakten Daten in einem XML-Dokument zu tun hat, genauso wenig wie die DTD, die lediglich als DDL dient.

26 Zusammenfassung & Ausblick Probleme mit XPath 1.0 / Neuerungen in XPath 2.0: -umständliche Mengenoperationen (ausgenommen Vereinigung) neue Mengenoperatoren für Durchschnitt und Differenz -Joins wenn überhaupt nur schwer möglich einfacher for -Ausdruck, Für-alle- und Existenzoperatoren, if -Ausdruck -wenig differenziertes Typsystem, Datentyptests nicht möglich Unterstützung des XML Schema Typensystems -wenig Knotentypentests möglich Erweiterung um Tests auf Elementknotentyp, Attributknotentyp, Namensraumtyp und Dokumentelementtyp weitere Neuerungen und Änderungen in XPath 2.0: -weitere Vergleichsmöglichkeiten -Anpassung des Datenmodells an das von XQuery und XSLT

27 Vortrag zum Seminar XML und Datenbanken XML Path Language 2.0 – XPath XQuery: An XML Query Language Matthias Brosemann Friedrich-Schiller-Universität Jena

28 Inhalt 1.Erweiterungen in XPath Mengenoperatoren - Vergleiche - Typensystem - Quantifizierung und Konditionierung - Knotentests 2.Der FLWOR-Ausdruck 3.Konstruktoren

29 Erweiterungen in XPath Mengenoperatoren In XPath 2.0 ersetzt die Sequenz die Knotenmenge. Eine Sequenz ist eine (geordnete) Folge von Knoten oder Werten anderer Datentypen. Beispiele: (A, B) union (B, C) ergibt (A, B, C) (A, B) intersect (B, C) ergibt (B) (A, B)except (B, C) ergibt (A) (wobei A, B und C Knoten sind) Zusätzlich zum Vereinigungsoperator wird es in XPath 2.0 den Durchschnitts- und den Differenzoperator geben. Bei allen Mengenoperatoren muss die Sequenz nur Knoten besitzen. Das Ergebnis wird in Dokumentordnung sortiert. Die Vereinigung operiert nun auf Sequenzen und eliminiert dabei Duplikate.

30 Erweiterungen in XPath Vergleiche Die generelle Vergleichsoperatoren =, !=,, >= bleiben Existenz-qualifiziert. Beispiele: (A, B) = (B, C) ergibt true (A, B) != (B, C) ergibt true (wobei A, B und C Knoten sind) Zusätzlich werden eq, ne, lt, le, gt, ge eingeführt, die atomare Werte vergleichen. Beispiel: $book//author eq "Abiteboul" ergibt true genau dann, wenn $book genau einen Knoten enhält und dieser ein Nachkommen namens author besitzt, dass den Zeichenkettenwert Abiteboul enthält. Weiterhin sollen is, > benutzt werden, um Knoten zu vergleichen. Beispiele (wobei A und B Knoten sind) : A is A ergibt true A << B ergibt true, wenn A in Dokumentordnung vor B steht

31 Erweiterungen in XPath Typensystem XPath 2.0 unterstützt das volle Typensystem der XML-Schemata. Beispiele: 5 instance of xs:integer ergibt true. instance of xs:string ergibt true, wenn der Kontextknoten ein String ist.. cast as example:datum konvertiert den Wert des Kontextknoten in den (eigenen) Datentyp example:datum. castable as xs:date ergibt true, wenn sich der Kontextknoten in den Typ date konvertieren lässt Die linke Seite dieser Operanden muss einen einzelnen Wert oder eine Sequenz mit höchstens einem Wert ergeben. instance of überprüft den Datentyp des Ausdrucks auf der linken Seite. cast as konvertiert den linken Ausdruck in den angegebenen Datentyp. castable as überprüft, ob sich der Ausdruck auf der linken Seite in den angegebenen Datentyp konvertieren lässt.

32 Erweiterungen in XPath 2.0 – Quantifizierung In XPath 2.0 kann die Quantifizierung explizit angegeben werden. Beispiele: some $x in (1, 2, 3), $y in (2, 3, 4) satisfies $x + $y = 4 ergibt true, da z. B. 1+3=4 ist. every $x in (1, 2, 3), $y in (2, 3, 4) satisfies $x + $y = 4 ergibt false, da z. B. 1+2=3 ist. every $employee in //angestellter satisfies ergibt true, wenn das Dokument ein Element namens angestellter besitzt, dass ein entlassen -Attribut besitzt (egal welcher Inhalt). Desweiteren gibt es das if -Konstrukt. Beispiel: if then $employee/name else "keiner entlassen"

33 Erweiterungen in XPath 2.0 – Knotentests Mit XPath 2.0 werden weitere Knotentests eingeführt. Beispiele: /descendent::*:angestellter gibt alle Elementknoten, die den (lokalen) Namen angestellter besitzen zurück. element(angestellter)element(angestellter,*) Beide Tests bestehen nur angestellter -Elemente. Um den ersten zu erfüllen, muss der Typ des Elements der entsprechenden Typdefinition aus dem XML-Schema passen. element(firma/abteilung/angestellter) passt zu allen Elementen, deren Typ und Name der Typdefinition im XML-Schema von angestellter innerhalb von abteilung innerhalb von firma entsprechen attribute(...) XQuery definiert ein switch -Konstrukt, dass Knotentypenbasiert entscheidet, z. B.: typeswitch($customer/billing-address) case $a as element(*, USAddress) return $a/state case $a as element(*, CanadaAddress) return $a/province

34 Der FLWOR-Ausdruck – for, let, where, order by, return for -Klauseln binden je eine oder mehr Variablen an eine Sequenz, z. B.: for $i in (1, 2, 3), $j in (6, 7) for $k in (9, 8) Die Ausführung der for -Klauseln erzeugt einen Tupelstrom (kartesisches Produkt), z. B.: (1, 6, 9), (1, 6, 8), (1, 7, 9), (1, 7, 8), (2, 6, 9), (2, 6, 8), (2, 7, 9), (2, 7, 8), (3, 6, 9), (3, 6, 8), (3, 7, 9), (3, 7, 8) let bindet zusätzliche Variablen an den Tupelstrom (ohne Produktbildung), z. B.: for $i in (1, 2, 3), $j in (6, 7) let $m := $i+$j for $k in (9, 8) (1, 6, 7, 9), (1, 6, 7, 8), (1, 7, 8, 9), (1, 7, 8, 8), (2, 6, 8, 9), (2, 6, 8, 8), (2, 7, 9, 9), (2, 7, 9, 8), (3, 6, 9, 9), (3, 6, 9, 8), (3, 7, 10, 9), (3, 7, 10, 8)

35 Der FLWOR-Ausdruck – for, let, where, order by, return Die where -Klausel filtert den Tupelstrom, z. B.: for $i in (1, 2, 3), $j in (6, 7) let $m := 78 for $k in (9, 8) where $m > $k (2, 7, 9, 8), (3, 6, 9, 8), (3, 7, 10, 9), (3, 7, 10, 8) order by sortiert den Tupelstrom und return gibt das Ergebnis eines Ausdruckes aus, z. B.: for $i in (1, 2, 3), $j in (6, 7) let $m := 78 for $k in (9, 8) where $m > $k stable order by $k return {$j} (2, 7, 9, 8), (3, 6, 9, 8), (3, 7, 10, 8), (3, 7, 10, 9) Ausgabe:

36 Der FLWOR-Ausdruck – for, let, where, order by, return Beispiel: for $s in (,, ) return {$s} Ausgabe: Beispiel: let $s := (,, ) return {$s} Ausgabe:

37 Der FLWOR-Ausdruck – for, let, where, order by, return TCP/IP Illustrated Stevens Addison-Wesley Advanced Unix Programming Stevens Addison-Wesley Data on the Web Abiteboul Buneman Suciu for $a in fn:distinct-values(//author) return ($a, for $b in //book[author = $a] return $b/title) Stevens TCP/IP Illustrated Advanced Unix Programming Abiteboul Data on the Web Buneman Data on the Web Suciu Data on the Web

38 Konstruktoren Beispiel: for $s in (,, ) return {$s} Beispiel: element book { attribute isbn {"isbn " }, element title { "Harold and the Purple Crayon"}, element author { element first { "Crockett" }, element last {"Johnson" } } Beispiel: for $s in (element one {}, element two {}, element three {}) return element out { attribute myattr {"nix"}, $s }

39 Komplexbeispiel TCP/IP Illustrated Stevens Addison-Wesley Advanced Unix Programming Stevens Addison-Wesley Data on the Web Abiteboul Buneman Suciu { for $a in fn:distinct-values(//author) order by $a return { $a/text() } { for $b in //book[author = $a] order by $b/title return $b/title } } Abiteboul Data on the Web Buneman Data on the Web Stevens TCP/IP Illustrated Advanced Unix... Suciu Data on the Web


Herunterladen ppt "Vortrag zum Seminar XML und Datenbanken XML Path Language 1.0 - XPath Matthias Brosemann Friedrich-Schiller-Universität Jena."

Ähnliche Präsentationen


Google-Anzeigen