XPATH

Inhalt


Überblick

XPATH verarbeitet die Baumstruktur eines XML-Dokuments und erzeugt dabei Ausschnitte aus XML-Dokumenten. Man gibt die Reihenfolge der Verarbeitungsschritte an, in der der Dokumentenbaum eines XML-Dokuments verarbeitet werden soll. Es handelt sich nicht um eine vollständige Abfragesprache, da XPATH auf Selektionen und Extraktionen beschränkt ist. Änderungen des XML-Dokuments sind nicht vorgesehen. Die aktuelle Version XPATH 2.0 wurde im Januar 2007 vom W3C-Konsortium verabschiedet und befindet sich hier.

Ab Version 1.1 ist XPATH Bestandteil von XQuery 1.1. Ab Version 2.0 wird XPATH durch XQuery erweitert. XPATH 2.0 und XQuery können das gleiche Datenmodell verwenden. Bei XPATH werden keine Dokumente erzeugt, die Ergebnisse aus XPATH müssen mit XSLT oder XQuery weiter verarbeitet werden. Der große Unterschied zwischen XPATH und XQuery liegt darin, dass bei XQuery nicht nur eine Sequenz ausgewählt und zurückgegeben werden kann, sondern daß dabei ebenso die Ergebnisse und Strukturen für ein Ergebnis-XML-Dokument während der Abfrage erzeugt werden können.([4], S.292)


Instanzen eines Datenmodells

Für Instanzen des Datenmodells können verschiedene Arten des Datentransfers genutzt werden:

  • ein lokales XML-Dokument
  • ein über das Internet oder Intranet erreichbares XML-Dokument
  • Daten aus einer oder mehreren Datenbanken

Datenmodell für XPath (und XQuery)

In der Baumstruktur aus Knoten und Kanten eines XML-Dokuments wird die Sequenz als Gerüst genutzt, und kann als Menge dieser Sequenzen bestehend aus Knoten, die die Einträge repräsentieren, angesprochen werden. Sequenz bedeutet hierbei, dass es sich um eine Reihe von Items (Informationseinheiten) handelt. Das Gerüst kann als Struktur von Sequenzen beschrieben werden.[6]


7 Knotentypen

  1. der Dokumentknoten / Wurzelknoten (Knotentyp "root")
  2. Elementknoten (Knotentyp "element")
  3. Attributknoten (Knotentyp "attribute")
  4. Namensraum-Knoten
  5. Verarbeitungsanweisungs-Knoten (Knotentyp "processing-instruction")
  6. Kommentarknoten (Knotentyp "comment")
  7. Textknoten (Knotentyp "text")

Der Wurzelknoten (root) auch Dokumentknoten genannt darf nicht mit dem Dokument- oder Wurzelelement verwechselt werden, da das ein Kind des Dokumentknotens ist. Der Wurzelknoten umfasst das gesamte Dokument.[3,S.363][5] Der Elementknoten steht für ein mit einem Namen benanntes Element, das weitere Knoten enthalten darf. Der Attributknoten ist dem Attribut eines Elementes zugeordnet. Jeder dieser Knoten trägt einen qualifizierten Namen und einen Wert. Der Namensraumknoten entspricht der Bindung eines Namensraum-URIs an ein Namensraumpräfix oder den Vorgabe-Namensraum. Der Verarbeitungsanweisungs-Knoten ist ein Knoten für je eine Verarbeitungsanweisung. Der Kommentarknoten enthält einen Knoten je Kommentar.(Knotentyp "comment") Der Textknoten repräsentiert nur Zeichendaten die in XML zugelassen sind. Andere Knoten werden hier nicht unterstützt.[3,S.363]


Struktur von Sequenzen

Das können kein, ein, viele Item(s) sein oder auch ein ganzes XML-Dokument, welches eine Menge von Knoten darstellt. Die Einträge sind entweder Komma-getrennte atomare Elemente bzw. Werte in Klammern wie (1,2,3) bzw. ("ein String","noch ein String") oder Knoten wie <Kinofilm><title>Harry Potter</title></Kinofilm>. Sequenzen können aus herogenen Elementen bestehen und sind nicht gleichartig strukturiert. Die Reihenfolge der Elemente ist fest vorgegeben. Es wird von einer geordneten Liste gesprochen. Es gibt keine Mengeneigenschaften und eine Verschachtelung innerhalb der Sequenz ist nicht möglich. Es dürfen aber Duplikate enthalten sein. Weiter ist es möglich Werte hinzuzufügen, zu löschen oder umzusortieren sowie diese neu zu ordnen.

Einige Datentypen atomarer Werte sind integer, string, boolean. Es gibt aber auch Konstruktoren für Sequenzen, die einem Eintrag einen bestimmten Datentyp zuweisen können. Ein Beispiel: #xs:string(234)→("234") oder #xs:boolean(1)→(true).
Auch Verschachtelung ist damit machbar. Ein weiteres Beispiel macht das deutlich: xs:integer(xs:boolean(234))→(1).
Knoteneinträge können ebenfalls in atomare Werte umgewandelt werden. xs:integer(<anzahl>456</anzahl>)→(456)
Sequenzen können genauso mit Operatoren und Funktionen arbeiten. Dadurch entsteht die Anforderung mit verschiedenen Objekten arbeiten zu können.[6]


Objektarten[6]

  1. XML Ausschnitte
  2. mehrere XML-Dokumente
  3. numerische Werte
  4. verschiedene Objekte
  5. wenig bis keine Typinformationen (DTD, Schema nicht notwendig)

Datenmodell für XQuery

Für XQuery gilt insbesondere, dass jede gültige Instanz dort eine Sequenz oder Knotenmenge ist.
In diesem Datenmodell für XPath und XQuery und in den XQuery Requirements des W3C wird definiert, welche Informationen zur Verarbeitung geeignet sind und welche Syntax verwendet wird. Auch XSLT 2.0 nutzt XPATH 2.0 zur Adressierung.[1][2]([3] S.361-364)


Ein gutes XPATH-Tutorial findet man bei ZVON: http://www.zvon.org/xxl/XPathTutorial/General_ger/examples.html

Beispiel:

 child::kapitel /descendant::absatz
 wählt alle absatz-Element der kapitel-Elemente aus

Quellen:

David Neugebauer – Universität zu Köln – Historisch-Kulturwissenschaftliche Informationsverarbeitung Datenbanktechnologie – Daniel Ebner – SS 2012/07.05.2012


Weiterführende Links:

siehe auch:

Kategorie: XML, X