XML-Know How

Absolute Pfadangaben/relative Pfadangaben

Während wir es in obigen Beispielen ausschließlich mit absoluten XPath-Pfaden zu tun hatten (also den Einstiegspunkt in das Dokument immer ausgehend vom Wurzelknoten gewählt haben), werden in Sprachen wie XSLT häufig relative Pfade benötigt, um ausgehend von einem beliebigen Kontextknoten in alle Richtungen navigieren zu können. Relative Pfade unterscheiden sich von absoluten Pfaden darin, dass sie nicht mit einem Slash »/« – also nicht ausgehend vom Wurzelknoten – beginnen.

In unserem Beispiel sei das Element <ueberschrift1> des ersten Rezepts der aktuelle Kontextknoten, also die Position, an der die XML-Verarbeitung mit XSLT gerade angekommen ist. Wenn nun hinter der Überschrift die Kalorienangabe eingesetzt werden soll, ist zunächst Sprung zum Elternelement – also quasi rückwärts – erforderlich, denn das Attribut @kalorien ist nicht Bestandteil der Überschrift, sondern des Elternelements <rezept> . Dieser Sprung »nach oben« erfordert einen relativen Pfad, in diesem Fall den XPath-Ausdruck »..«. Durch diesen wird eine Ebene höher auf den Elementknoten »rezept« gesprungen:

Beispiel:

../@kalorien

Auch beim Einsatz von relativen Pfaden sind die einzelnen Navigationsschritte kombinierbar.

Merke:

Neben den Eltern- und Kindachsen stehen in XPath weitere 11 Achsen zur Navigation in XML-Dokumenten zur Verfügung. Die Syntax für die Angabe einer Achse lautet

Achsenname::Knotentest

Häufig verwendete Achsen, wie die implizite Kindachse oder die Elternachse, können in XPath mit einer abgekürzten Schreibweise verwendet werden – wir haben dies in den bisherigen Beispielen stillschweigend getan. In ausführlicher Schreibweise würde das Beispiel

/kochbuch/kapitel/rezept[1]

also lauten:

/child::kochbuch/child::kapitel/child::rezept[1]

Analog lautet das oben genannte Beispiel zur Navigation zum Elternelement:

parent::rezept/attribute::kalorien

Nicht für alle Achsen gibt es eine Kurzschreibweise.

Die dreizehn Achsen in XPath lauten:

Info:

ancestor::

(Vorfahren, d. h. übergeordnete Knoten)

ancestor-or-self::

(Vorfahren sowie der aktuelle Kontextknoten)

attribute::

(Attributknoten)

child::

(Kinder, d. h. direkt untergeordnete Knoten)

descendant::

(Nachfahren, d. h. alle untergeordneten Knoten)

descendant-or-self::

(alle Nachfahren sowie der aktuelle Knoten)

following::

(alle weiter hinten im Dokument stehenden Knoten, ohne die untergeordneten Knoten)

following-sibling::

(alle weiter hinten stehenden Geschwister-Elemente)

namespace::

(Namensraum-Knoten)

parent::

(Elternknoten, d. h. direkt übergeordnete Knoten)

preceding::

(alle weiter vorne im Dokument stehenden Knoten, ohne die übergeordneten Knoten)

preceding-sibling::

(alle weiter vorne stehenden Geschwister-Elemente)

self::

(der Kontextknoten selbst)

Merke:

XPath dient zum präzisen Navigieren durch XML-Dokumente, d. h. zum Auffinden von beliebigen Knoten.

Als Knoten wird jede annavigierbare Einheit innerhalb eines XML-Dokuments bezeichnet, neben dem gesamten Dokument also Elemente, Attribute, Kommentare, Processing Instructions und der Text selbst.

Jede XML-Datei kann in einer Baumstruktur dargestellt werden. Es gilt, alle Teile dieses Baumes maschinell verarbeitbar zu machen – dafür müssen sie durch XPath-Ausdrücke adressierbar sein.

Wir haben nun mit XML, der DTD bzw. dem XML Schema, HTML, CSS, dem EPUB-Standard, XSLT und XPath alle relevanten Standards kennengelernt, die beim crossmedialen Publizieren zum Einsatz kommen. Im technologischen Verständnis sind wir damit ein entscheidendes Stück weitergekommen – nun gilt es, die geeigneten Verfahren auszuwählen, die Technologien anwenderfreundlich ineinander zu verzahnen und Abläufe zu entwickeln, die es den Mitarbeiterinnen und Mitarbeitern des Verlages erlauben, effizient und qualitativ hochwertig Publikationen zu erstellen.