vortrag zum seminar xml und datenbanken xml path language 1.0 - xpath matthias brosemann...

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

Upload: fedde-ach

Post on 05-Apr-2015

111 views

Category:

Documents


2 download

TRANSCRIPT

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

Vortrag zum Seminar

XML und Datenbanken

XML Path Language 1.0 - XPath

Matthias Brosemann

Friedrich-Schiller-Universität Jena

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

Inhalt

1. Einleitung

2. Datenmodell

3. XPath-Ausdrücke

- Datentypen

- Kontextbezogene Auswertung

- Lokalisierungspfade

- Ausdrücke

4. Grundfunktionsbibliothek

5. Zusammenfassung & Ausblick

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

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

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

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)

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

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

?

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

Einleitung

XPath ist das Ergebnis der Zusammenarbeit der XPointer- und XSL-Arbeitsgruppen.

XPointer: Adressierung von Teilen eines XML-Dokumentes in einer URI, z. B.:

http://www.example.com/rezepte.xml/rezepte[zutat[@id = "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.

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

Datenmodell

<?xml version="1.0"?><!DOCTYPE rezept SYSTEM "rezept.dtd"><?xml-stylesheet href="style.xsl" type="text/xml"?><rezept>

<zutat id="mehl">200g Mehl</zutat><!-- weitere Zutaten --><anleitung>

Zuerst nehmen Sie das<zutat xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="mehl">Mehl</zutat>und mischen es mit ...

</anleitung></rezept>

/ Wurzelknoten

rezept

Elementknotenxml-stylesheet

Processing-Instruction-Knoten

anleitung

Kommentarknoten

weitere Zutatenzutat

Attributknoten

id

200g Mehl

Textknoten

Zuerst nehmen...zutat

und mischen es...

Mehl

xml

Namensraumknoten

xmlxml

xml

xlink

xlink:href

xlink:type

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

Datenmodell

XPath operiert auf der logischen Darstellung des XML-Dokumentes, dem Baum.

Dieser besitzt Knoten verschiedener Typen:

Wurzelknoten reprä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

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

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.

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

XPath-Ausdrücke - Datentypen

XPath definiert vier Datentypen:

- boolean true oder false

- number Gleitkommazahl, z. B. –5 oder 4.39883

- string Zeichenkette aus UCS-Zeichen*, z. B. “Ich bin Text.“

- node-set ungeordnete 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.

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

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

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

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.

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

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.

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

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.

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

XPath-Ausdrücke – Lokalisierungspfade

Achsen:

child

parent

following-sibling

preceding-sibling

descendent-or-self

ancestor-or-self

preceding preceding

self

self

following

following

ancestor ancestor

descendent

descendent

attribute

namespace

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

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::*

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

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')

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

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.

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

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.: para[@type='warning'][5]

- // 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

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

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])

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

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)

count(.|../@*) = count(../@*) (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.

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

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(...)

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

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: <img alt="" /> (XML-Dokument)

/img[@alt] ergibt „wahr“

/img[string(@alt)] 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“:

<div xml:lang="en"><para/></div>

<para xml:lang="en-us"/>

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

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.

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

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.

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

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

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

Vortrag zum Seminar

XML und Datenbanken

XML Path Language 2.0 – XPath

XQuery: An XML Query Language

Matthias Brosemann

Friedrich-Schiller-Universität Jena

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

Inhalt

1. Erweiterungen in XPath 2.0

- Mengenoperatoren

- Vergleiche

- Typensystem

- Quantifizierung und Konditionierung

- Knotentests

2. Der FLWOR-Ausdruck

3. Konstruktoren

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

Erweiterungen in XPath 2.0 - 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.

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

Erweiterungen in XPath 2.0 - 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

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

Erweiterungen in XPath 2.0 - 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.

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

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 $employee/@entlassen

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 ($employee/@entlassen)

then $employee/name

else "keiner entlassen"

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

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

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

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)

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

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 <out>{$j}</out>

(2, 7, 9, 8), (3, 6, 9, 8), (3, 7, 10, 8), (3, 7, 10, 9)

Ausgabe:

<out>7</out><out>6</out><out>7</out><out>7</out>

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

Der FLWOR-Ausdruck – for, let, where, order by, return

Beispiel:

for $s in (<one/>, <two/>, <three/>)

return <out>{$s}</out>

Ausgabe:

<out><one/><out>

<out><two/><out>

<out><three/><out>

Beispiel:

let $s := (<one/>, <two/>, <three/>)

return <out>{$s}</out>

Ausgabe:

<out><one/><two/><three/><out>

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

Der FLWOR-Ausdruck – for, let, where, order by, return

<bib><book>

<title>TCP/IP Illustrated</title><author>Stevens</author><publisher>Addison-Wesley</publisher>

</book><book>

<title>Advanced Unix Programming</title><author>Stevens</author><publisher>Addison-Wesley</publisher>

</book><book>

<title>Data on the Web</title><author>Abiteboul</author> <author>Buneman</author> <author>Suciu</author>

</book></bib>

for $a in fn:distinct-values(//author)return ($a, for $b in //book[author = $a] return $b/title)

<author>Stevens</author><title>TCP/IP Illustrated</title><title>Advanced Unix Programming</title><author>Abiteboul</author><title>Data on the Web</title><author>Buneman</author><title>Data on the Web</title><author>Suciu</author><title>Data on the Web</title>

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

Konstruktoren

Beispiel:

for $s in (<one/>, <two/>, <three/>)

return <out myattr="nix">{$s}</out>

Beispiel:

element book {

attribute isbn {"isbn-0060229357" },

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 }

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

Komplexbeispiel

<bib><book>

<title>TCP/IP Illustrated</title><author>Stevens</author><publisher>Addison-Wesley</publisher>

</book><book>

<title>Advanced Unix Programming</title><author>Stevens</author><publisher>Addison-Wesley</publisher>

</book><book>

<title>Data on the Web</title><author>Abiteboul</author><author>Buneman</author><author>Suciu</author>

</book></bib>

<authlist>{ for $a in fn:distinct-values(//author) order by $a return

<author><name> { $a/text() } </name><books>

{ for $b in //book[author = $a] order by $b/title return $b/title }

</books></author>

}</authlist>

<authlist><author>

<name>Abiteboul</name><books><title>Data on the Web</title>

</books></author><author>

<name>Buneman</name><books><title>Data on the Web</title>

</books></author><author>

<name>Stevens</name><books><title>TCP/IP Illustrated</title><title>Advanced Unix ...</title>

</books></author><author>

<name>Suciu</name><books><title>Data on the Web</title>

</books></author>

</authlist>