21
© Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0) ist eine Liste von Knoten. Folgende Schritte sind bei einer Anfrage auszuführen: 1.) Festlegung des Kontextknotens „selfzum Start der Navigation. 2.) Ausgehend vom „self“ eine Achse festlegen, wodurch eine Menge K von Knoten selektiert wird. 3.) Festlegung eines Knotentests auf K, wodurch ein Knotentyp selektiert wird. 4.) Optional kann K weiter eingeschränkt werden, indem weitere Prädikate festgelegt werden (exact match).

7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 30

7.2.2 Spezifikation einer Treffermenge

Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0) isteine Liste von Knoten.

Folgende Schritte sind bei einer Anfrage auszuführen:

1.) Festlegung des Kontextknotens „self“ zum Start der Navigation.

2.) Ausgehend vom „self“ eine Achse festlegen, wodurch eine Menge K vonKnoten selektiert wird.

3.) Festlegung eines Knotentests auf K, wodurch ein Knotentyp selektiert wird.

4.) Optional kann K weiter eingeschränkt werden, indem weitere Prädikate festgelegt werden (exact match).

Page 2: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 31

7.2.3 Navigation

Alle Achsen sind immer relativ zum aktuellen Kontextknoten.

ancestor:: parent::

Page 3: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 32

7.2.3 Navigation

Alle Achsen sind immer relativ zum aktuellen Kontextknoten.

descendant:: child::

Page 4: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 33

7.2.3 Navigation

Alle Achsen sind immer relativ zum aktuellen Kontextknoten.

preceding-sibling:: following-sibling::

Page 5: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 34

Kontext-Knoten

descendant axis

self axis

child axis

Zusätzlich kann der Kontext-Knoten in der Ergebnisknotenmenge miteingeschlossen werden, indem die Achse „descendant-or-self“ oder „ancestor-or-self“ gewählt wird.

parent axis

ancestor axis

Page 6: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 35

Übersicht NavigationKurzform Langform Bedeutung

Name child:: Alle direkten Kinder

// descendant:: Alle Nachfolger

@ attribute:: Attribute mit bestimmtemNamen

self:: Der Kontextknoten selbst

descendant-or-self:: Der aktuelle Knoten oderalle Nachfolger

following-sibling:: Alle nachfolgendenElemente gleicher Ebenemit gleichem Elternknoten

following:: Alle Elemente imDokument, die nach demaktuellen Knoten auftreten

Page 7: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 36

Übersicht NavigationKurzform Langform Bedeutung

.. parent:: Der Elternknoten des aktuellenKnotens

ancestor:: Alle Vorgänger des aktuellenKnotens

preciding-sibling:: Alle vorhergehenden Elementegleicher Ebene mit gleichemElternknoten

preceding:: Alle Elemente im Dokument, die vordem aktuellen Knoten auftreten

ancestor-or-self:: Der aktuelle Knoten und alleVorgänger

Page 8: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 37

parent

preceding-sibling

following-sibling

Navigation in XML-Darstellung

Kontextknoten

<MOZART xmlns:xsi="http://www.w3.org/2001/XMLSchema-

instance" xsi:noNamespaceSchemaLocation="Mozart.xsd">

<WERK>

<KV> KV 1 </KV>

<JAHR> 1761 </JAHR>

<ORT>Salzburg</ORT>

<BESCHREIBUNG>Menuett für K. </BESCHREIBUNG> <TONART> G-Dur </TONART>

</WERK>

<MOZART/>

Page 9: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 38

descendantschild

child

Navigation in XML-Darstellung

Kontextknoten

<MOZART xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Mozart.xsd">

<WERK> <KV> KV 1 </KV> <JAHR> 1761 </JAHR> <ORT>Salzburg

<Adresse> Madresse </Adresse></ORT>

<BESCHREIBUNG>Menuett</BESCHREIBUNG> <TONART> G-Dur </TONART> </WERK>

<MOZART/>

Page 10: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 39

c

Beispiel für XML-Syntaxbaum:

<?xml version="1.0" encoding="iso-8859-1"?>

<!-- XML-Datei mit EINEM Werk von Mozart: --><?xml-stylesheet href="mystyle.css" type="text/css"?>

<MOZART xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="Mozart.xsd"><WERK urteil = "gut">

<?xml-professor lernziel="Baumstruktur mit Knotentypen"?><KV> KV 1 </KV><JAHR> 1761<!-- oder 1762? --> </JAHR><ORT> Salzburg </ORT><BESCHREIBUNG> Menuett für Klavier </BESCHREIBUNG><TONART> G-Dur </TONART>

</WERK></MOZART>

7.2.4 Knotentests

/

Mns

Wpi

KJ

OB

T

G-Dur

a

a

cpi

O

Page 11: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 40

XPath verarbeitet Anfragen stets für ein einzelnes XML-Dokument. Dieses muss derverwendeten XPath-Engine (Programmiersprache, Kommandozeilenprogramm, XML-Datenbank) explizit übergeben werden.

Es gibt folgende Knotentypen und Knotentests:

Wurzelknoten entspricht “/”. Er hat keinen Knotentest.Mögliche Kinder: genau 1 Elementknoten (Dokumentknoten)

Kommentarknoten: comment()

<!-- Das ist ein Kommentar. -->

Page 12: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 41

Elementknoten: element(Name, Typ) oder Name

<elementName> … </elementName>

Beliebiges Element: *

<elementName> … </elementName>

Textknoten: text()

<titel> Prof. </titel>

Beliebiger Knoten: node()

<elementName1> ... </elementName1>

<elementName2> text </elementName2>

Page 13: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 42

Attributknoten: attribute(Name, Typ) oder @Name

<prof status = "Ordinarius" kürzel = "DBIS">

Anweisungsknoten: processing-instruction()

<?xml-stylesheet href="mystyle.css" type="text/css"?>

<?xml-professor lernziel="Querysprache XPath"?>

Ein Anweisungsknoten kann von einer Applikation interpretiert werden, um eine Funktion auszuführen.

Vorsicht:

Die XML-Deklaration <?xml version="1.0"?> ist kein Anweisungsknoten.

Page 14: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 43

Beispiel für (verkürzten) XML-Syntaxbaum:

<?xml version="1.0" encoding="iso-8859-1"?><!-- XML-Datei mit EINEM Werk von Mozart: --><?xml-stylesheet href="mystyle.css" type="text/css"?>

<MOZART xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="Mozart.xsd"><WERK urteil = "gut">

<?xml-professor lernziel="Baumstruktur mit Knotentypen"?><KV> KV 1 </KV><JAHR> 1761<!-- oder 1762? --> </JAHR><ORT> Salzburg </ORT><BESCHREIBUNG> Menuett für Klavier </BESCHREIBUNG><TONART> G-Dur </TONART>

</WERK></MOZART>

/

Mns

Wpi

KJ

OB

T

c

G-Dur

a

a

cpi

O

Page 15: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 44

Beispiele für Navigation und Knotentests:/ /* ebenso /MOZART/MOZART/* ebenso /MOZART/WERK/MOZART/WERK/@*/MOZART/WERK/processing-instruction()/MOZART/WERK/*/MOZART/WERK/JAHR/MOZART/WERK/JAHR/text()/MOZART/WERK/JAHR/comment() //JAHR/comment()

/

M

a

W

K J O B T

c

1741

ns

pi

c

Page 16: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 45

7.2.5 Prädikate

Prädikate stehen zwischen eckigen Klammern. Die bislang durch Achseund Knotentest bestimmte Knotenmenge K wird durch Prädikate weitereingeschränkt (exact match). Es werden Knoten zurückgeliefert, die dieBoolesche Bedingung des Prädikats erfüllen.

Beispiele: Position [1 … position( ) = n … last( )]

Statt [position()=n] kann verkürzt [n] geschrieben werden.

/MOZART/WERK [5]

/MOZART/WERK [last( ) - 1]

Arithmetische Vergleiche

/MOZART/WERK [position( ) < 3]

/MOZART/WERK [JAHR > 1762]

Page 17: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 46

XPath 1.0 hat auch vordefinierte Aggregatsfunktionen: number count (node-set) number sum (node-set)

Nur in XPath 2.0: number avg (node-set) number max (node-set) number min (node-set)

Beispiele:

count (/MOZART/WERK [JAHR > 1762])

sum (/MOZART/WERK/JAHR)

Page 18: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 47

Stringfunktionen:

boolean contains(string, string) string concat(string, string, ...) boolean starts-with(string, string)

Weitere Stringfunktionen im Beispiel: substring-before("1999/04/01", "/") "1999" substring-after("1999/04/01", "/") "04/01" substring("12345", 2, 3) "234"

Beispiele:/MOZART/WERK [contains (TONART, 'Dur')]/MOZART/WERK [contains (BESCHREIBUNG, 'Andante')]

Page 19: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 48

Mengenoperatoren:

Für die Vereinigung zweier Knotenmengen K1 ∪ K2: „|“ oder union

Beispiel:

/MOZART/WERK [JAHR < 1775] | /MOZART/WERK [TONART = 'As-Dur']

Weitere Operatoren: intersect, except

Boolesche Operatoren: „and“ und „or“

Beispiele:

/MOZART/WERK [ORT = 'München' or ORT = 'Mannheim']

/MOZART/WERK [ORT = 'München' and ORT = 'Mannheim']

/MOZART/WERK [(ORT = 'München' or ORT = 'Mannheim') and

TONART != 'C-Dur']

Page 20: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 49

Elementare Arithmethik: + - * div mod

(Unsinniges) Beispiel:

/MOZART/WERK [((JAHR - min(/MOZART/WERK/JAHR))

mod 12) > 10]

/MOZART/WERK [position() mod 2 = 0]

Vergleichsoperatoren: = != > >= < <=

Beispiele:

/MOZART/WERK [TONART != 'C-Dur']

/MOZART/WERK [JAHR = 1761]

/MOZART/WERK [JAHR >= 1767 and JAHR <= 1777]

Page 21: 7.2.2 Spezifikation einer Treffermenge€¦ · © Prof. Kießling 2016 7 - 30 7.2.2 Spezifikation einer Treffermenge Das Ergebnis der Auswertung eines XPath Ausdrucks (Version 1.0)

© Prof. Kießling 2016 7 - 50

Die Ergebnisse sind Elemente der Knotenmenge, die im letzten Lokali-sierungsschritt adressiert werden.

Beispiele:

/MOZART/WERK [JAHR = 1761]

Menge von Mozarts Werken des Jahres 1761

/MOZART/WERK [JAHR = 1761] /KV

Menge von IDs (genannt Köchel-Verzeichnisnummern) von MozartsWerken aus dem Jahr 1761

/MOZART/WERK [position() < 180] /KV [contains (. ,'11')]

Menge der IDs von Mozarts Werken, die vor der Position 180 derWerke liegen, und deren Köchel-Verzeichnisnummer den String '11'enthält.

7.2.6 Ergebnisprojektion