Lehrer Nussbaumer - XML, XSL et cetera

XML

XSL

  1. XSLT
  2. XSLT-Elemente
  3. XSLT-Funktionen
  4. XPath
  5. XPath-Funktionen
  6. XSL-FO
  7. XSL Formatierungsobjekte
  8. XSL Eigenschaften
  9. Verschiedene Transformationen

Anwendungen 

Editoren

Parser u.a.

Schnittstellen


-----------------
letzte änderung:
09 December 2021
-----------------
Lehrer Nussbaumers Seite

... in Arbeit ...

XPath

  1. XPath-Ausdrücke kennen lernen
  2. Knoten
  3. Zeichenkettenwerte
  4. Datentypen und Operatoren
  5. Lokalisierungspfade und Achsen
  6. Prädikate

XPath ist die Abkürzung für "XML Path Language". Sie ermöglicht das gezielte Auffinden einzelner oder mehrerer XML-Daten. Sie spielt beispielsweise in Zusammenhang mit XSLT eine wichtige Rolle.

XPath ist keine XML-Sprache. Für XPath-Ausdrücke müssen Groß- und Kleinbuchstaben unterschieden werden - alle XPath-Schlüsselwörter sind klein geschrieben.

XPath 1.0 wurde vom W3C in der Empfehlung vom 16.11.1999 verabschiedet (www.w3.org/TR/1999/REC-xpath-19991116 nachgelesen werden.

Zur Zeit wird XPath 2.0 entwickelt.

Zum Anfang

XPath-Ausdrücke kennen lernen

Für die folgenden Beispiele verwenden wir die folgende XML-Datei "weblinks.xml" (und eine entsprechende DTD):

<?xml version="1.0" standalone="no"?>
 <!DOCTYPE weblinks SYSTEM "weblinks.dtd">
 <weblinks>
        <eintrag id="0">
                <kategorie>edv</kategorie>
                <url>http://www.w3.org</url>
                <notiz>W3-Konsortium</notiz>
                <notiz>Technische Referenz</notiz>
        </eintrag>
        <eintrag id="1">
                <kategorie>phy</kategorie>
                <url>http://www.cern.ch</url>
                <notiz>Europaeisches Kernforschungszentrum</notiz>
                <notiz>Aktuelles zur Hochenergiephysik</notiz>
                <notiz>Materialien zur Elementarteilchenphysik</notiz>
        </eintrag>
        <eintrag id="2">
                <kategorie>ast</kategorie>
                <url>http://www.nasa.gov</url>
                <notiz>Amerikanische Weltraumfahrtbehoerde</notiz>
                <notiz>Aktuelle Raumfahrtprojekte</notiz>
                <notiz>Historische Daten</notiz>
        </eintrag>
        <eintrag id="3">
                <kategorie>ast</kategorie>
                <url>http://www.heavens-above.com</url>
                <notiz>Der abendliche Sternhimmel ...</notiz>
                <notiz>Beobachtung von Satelliten</notiz>
                <notiz>Iridium Flares</notiz>
                <notiz>Mond- und Sonnenbahn</notiz>
        </eintrag>
        <eintrag id="4">
                <kategorie>edv</kategorie>
                <url>http://www.suse.de</url>
                <notiz>phy</notiz>
                <notiz>SuSE, Linux</notiz>
                <notiz>Treiber-Datenbank</notiz>
        </eintrag>
        <eintrag id="5">
                <kategorie>edv</kategorie>
                <url>http://www.microsoft.com</url>
                <notiz>Microsoft, Windows</notiz>
                <notiz>phy</notiz>
                <notiz>Sicherheits-Updates</notiz>
                <notiz>OS-Patches</notiz>
        </eintrag>
 </weblinks>

Für eine XML-Datei können XPath-Ausdrücke mit Hilfe der frei verfügbaren Software "XPath-Tester" ausprobiert werden. Diese JAVA-Applikation wird als .jar-Datei gespeichert. Sie wird beispielsweise mit

nus@ice:~/xpathtester> java -jar xpathtester_1_4_saxon.jar
gestartet.

Nach der Auswahl der XML-Datei wird der Inhalt als JTree-Objekt angezeigt, dessen Elemente per Mausklick angezeigt werden können:
XPath-Tester

Interessant ist jedenfalls, dass XPath-Ausdrücke in "Echtzeit" eingegeben und ausgewertet werden können (dazu muss die Auswahlbox zu "Real Time Query" angehakt werden):
XPath-Tester Real Time Query
Im vorliegenden Fall haben wir anhand des so genannten Lokalisierungspfades weblinks/eintrag/notiz alle <notiz>-Elemente ausgewählt, und zwar so: Zuerst sucht der XPath-Ausdruck das Wurzelelement <weblinks> und davon ausgehend alle <eintrag>-Elemente. Von diesen werden schließlich alle <notiz>-Kindelemente ausgewählt. XPathTester stellt diese Elemente gelb markiert dar.

Zum Anfang

Knoten

Die Elemente eines XML-Baumes werden an Hand der Knoten gefunden. Knoten können selbst Verzweigungspunkte zu mehreren Knoten darstellen oder auch nur ein einzelnes Element enthalten. Wie man leicht erkennt, werden oft mehrere Knoten zusammen ausgewählt - man spricht in diesem Fall von Knotenmengen (node-sets). Einzelne Elemente aus solchen Knotenmengen werden an Hand ihres Index gefunden; dieser Index beginnt jedenfalls bei 1:
XPath - Knotenmengen und Indizes

Zum Anfang

Zeichenkettenwerte

Von jedem Knoten eines XML-Dokumentes kann der Zeichenkettenwert mit Hilfe der XPath-Funktion string() ermittelt werden:
XPath - Zeichenkettenwerte

Zum Anfang

Datentypen und Operatoren

Neben den schon verwendeten Datentypen Knotenmenge (node-set) und Zeichenketten (string) werden Boole'sche Werte und Zahlen verwendet. Sie bilden mit den üblichen Arithmetischen, logischen und Vergleichsoperatoren so genannte XPath-Ausdrücke.

Zum Anfang

Lokalisierungspfade und Achsen

XML-Elemente werden an Hand des Knotenmodells eindeutig lokalisiert. Lokalisierungspfade wählen daher bestimmte Knoten (Knotenmengen) in XML-Dokumenten aus. Alle Knoten werden dabei durch so genannte Achsen bestimmt, die vom jeweils aktuellen Knoten aus berechnet werden; dieser Bezugspunkt wird Kontextknoten genannt. Wir untercheiden 13 Achsen:

  • self - Achse: Das ist der Knoten selbst
  • child - Achse: Das sind alle Kindknoten des Kontextknotens.
  • descendant - Achse: Alle Nachkommen des Kontextknotens; das sind alle Kindknoten und alle Kindknoten dieser Kindknoten usw.
  • parent - Achse: Das ist genau der Elternknoten des Kontextknotens (der Wurzelknoten hat keinen Elternknoten).
  • ancestor - Achse: Alle Vorfahren des Kontextknotens; das sind sein Elternknoten, dessen Elternknoten usw. (Der Wurzelknoten gehört daher immer zu dieser Achse).
  • following - Achse: Enthält alle nachfolgenden Knoten des Kontextknotens (ohne seine Nachkommen).
  • preceding - Achse: Enthält alle Knoten vor dem Kontextknoten (ohne die Vorfahren).
  • following-sibling - Achse: Alle Geschwisterknoten, die auf den Kontextknoten folgen.
  • preceding-sibling - Achse: Alle Geschwisterknoten, die vor dem Kontextknoten liegen.
  • attribute - Achse: Enthählt alle Attributknoten des Kontextknotens.
  • namespace - Achse: Alle Namensraumknoten des Kontextknotens (unter der Voraussetzung, dass der aktuelle Knoten ein so genannter Elementknoten ist).
  • descendant-or-self - Achse
  • ancestor-or-self - Achse

Im folgenden Beispiel wählen wir alle Vorfahren des durch einen blauen Rahmen gekennzeichneten Kontextknotens aus:
XPath - Vorfahren

Interessant ist, dass die Knoten immer "vom Kontextknoten weg" nummeriert werden. Wie überprüfen dies anhand des folgenden Ausdruckes:
XPath - Knotenmenge, Nummerierung

Aus dieser Eigenschaft heraus unterscheiden wir 8 vorwärtsgerichtete Achsen (child, descendant, attribute, self, descendant-or-self, following-sibling, following, namespace) und 5 rückwärtsgerichtete Achsen (parent, ancestor, preceding-sibling, preceding, ancestor-or-self).

Zum Anfang

Prädikate

Knotenmengen werden an Hand so genannter Prädikate (predicates) genauer spezifiziert. Diese Prädikate stehen in eckigen Klammern und können häufig auch abgekürzt werden. In den vorangegangenen Beispielen wurde etwa das Prädikat [position()=2] zu [2] vereinfacht verwendet...
XPath - Praedikate verwenden

Zum Anfang

Prädikate


© Alfred Nussbaumer, Weblog