XPath: Grundlagen


... [ Seminar XML ] ... [ XLink, XPath & XPointer ] ... [ XPath: Umsetzung ] ...

Übersicht: XPath Grundlagen


Zielsetzung

Ziel von XPath [5] ist es, eine Methode zu bieten, nach der einzelne Elemente (oder Gruppen von Elementen) in Dokumenten vom Typ text/xml und application/xml [9] direkt adressiert werden können, ähnlich, wie es in HTML [12] mittels <a name=...> auch möglich ist.
XPath ist nicht direkt anwendbar, sondern dient als Grundlage für weitere Anwendungen. Zwei Anwendungen, die auf XPath aufbauen, sind XPointer [6] und XSLT [8].

Nach oben

Konzept

Aus Sicht von XPath ist jedes XML-Dokument baumartig aufgebaut. Jeder Knoten in diesem Baum entspricht einem Objekt im XML-Dokument und jedes XML-Objekt entspricht einem Knoten im Baum (Ausnahmen siehe Beschreibung des Wurzelknotens).
Die Knoten sind nach ihrer Reihenfolge im Dokument von eins beginnend numeriert.
Jeder Knoten hat einen Typ und einen "string-value", d. h. eine Textrepräsentation, manche Knoten haben auch einen "expanded-name".
Folgende Knotentypen sind möglich:
Wurzelknoten (root)
Der Wurzelknoten ist der einzige Knoten, der kein Pendant im Dokument hat. Er kommt nur einmal vor; alle anderen Knoten sind Nachkommen des Wurzelknotens.
Direkte Nachkommen (Söhne) des Wurzelknotens sind alle Objekte, die auf Dokumentebene vorkommen, also vor allem das Document-Element.
Die einzigen beiden Objekte, die nicht im Baum vorkommen, sind die XML-Version (<?xml version=... ?>) und Dokumenttypdeklaration (<!DOCTYPE ... >).
String-Value des Wurzelknotens ist der zusammengefaßte Wert aller Textknoten, das heißt, der Text nach dem Entfernen aller Tags.
Der Wurzelknoten hat keinen Expanded-Name.

Processing instructions (proc)
Processing instructions sind Objekte der Form <?bezeichner ... ?> (außer XML-Version, s. o.).
String-Value ist alles nach dem Bezeichner.
Expanded-Name ist der Bezeichner.

Kommentare (comm)
Objekte der Form <!-- ... -->.
String-Value ist der gesamte Inhalt.
Ein Kommentarknoten hat keinen Expanded-Name

Elemente (elem)
Alle "normalen" Elemente.
String-Value ist der zusammengefaßte Wert aller untergeordneten Textknoten.
Der Expanded-Name ist der Name des Elements in der Form namespace:tag.

Namespace-Attribute (name)
Attribute der Form xmlns...
Namespace-Attribute müssen für jeden Elementknoten vorhanden sein, für den der Namespace Gültigkeit hat.
String-Value ist der Namespace-URI.
Der Expanded-Name ist der Namespace-Identifier

Attribute (attr)
Alle "normalen" Attribute.
String-Value ist der Attributwert.
Der Expanded-Name ist der Name des Attributs in der Form namespace:attribut, z. B.: "xlink:type".

Texte
Alle Texte außerhalb spitzer Klammern werden zu größtmöglichen Einheiten zusammengefaßt.
String-Value ist der Text selbst.
Ein Textknoten hat keinen Expanded-Name

Nach oben

Ein Beispiel

Der Baum hat das Format: index (typ) name "string-value"

XML-Dokument Baum


<?xml version="1.0"?>

<?test test1=test2?>

<!DOCTYPE test SYSTEM "test.dtd">

<my:main xmlns:my="http://www.fh-wedel.de/">



    <my:elem1 my:attr0="testval" />





    <!-- Kommentar -->

    <my:elem2 my:attr1="12">

    Dies ist

    </elem2>



    <my:elem3 my:attr2="4711">

    ein Test

    </elem3>

</main>
1 (root) "Dies ist ein Test"
|
|
|
2- (proc) test "test1=test2"
|
|
|
3- (elem) http://www.fh-wedel.de/:main "Dies ist ein Test"
   |
   4- (name) my "http://www.fh-wedel.de/"
   |
   5- (elem) http://www.fh-wedel.de/:elem1 ""
   |  |
   |  6- (name) my "http://www.fh-wedel.de/"
   |  |
   |  7- (attr) http://www.fh-wedel.de/:attr0 "testval"
   |
   8- (comm) "Kommentar"
   |
   9- (elem) http://www.fh-wedel.de/:elem2 "Dies ist"
   |  |
   |  10 (name) my "http://www.fh-wedel.de/"
   |  |
   |  11 (attr) http://www.fh-wedel.de/:attr1 "12"
   |  |
   |  12 (text) "Dies ist"
   |
   13 (elem) http://www.fh-wedel.de/:elem3 "ein Test"
      |
      14 (name) my "http://www.fh-wedel.de/"
      |
      15 (attr) http://www.fh-wedel.de/:attr2 "4711"
      |
      16 (text) "ein Test"

Nach oben

... [ Seminar XML ] ... [ XLink, XPath & XPointer ] ... [ XPath: Umsetzung ] ...