CSS und XSL

(Auszug aus "DITA - Der neue Standard für Technische Dokumentation" von Johannes Hentrich)

Mit der Einführung von XML veränderten sich auch die Möglichkeiten für die Weiterverarbeitung von XML-Dokumenten. Es wurden Technologien entwickelt, die im Gegensatz zu den entsprechenden Technologien bei SGML einfacher anzuwenden sind. Dazu gehören:

  • CSS (Casading Stylesheets)
  • XSLT (XSL Transformations)
  • XSL-FO (XSL Formatting Objects)
  • XPath (XML Path Language)

Die drei Sprachen XSLT, XSL-FO und XPath werden zusammengefasst auch als XSL (eXtensible Stylesheet Language) bezeichnet. XSL geht auf DSSSL zurück und weist eine XML-Syntax auf, was das Erlernen dieser Sprachen erleichtert, wenn man schon mit XML vertraut ist.

CSS und XSL werden vom DITA Open Toolkit angewendet, um die DITA XML-Dateien transformieren, formatieren und durchsuchen zu können. In den folgenden Abschnitten werden die einzelnen Sprachen kurz vorgestellt.

CSS

Soll ein DITA XML-Dokument durch einen Browser, wie zum Beispiel den Internet Explorer oder den Mozilla Firefox formatiert werden, kann unter Umständen bereits der Einsatz von Cascading Stylesheets (CSS) zur Formatierung der XML-Dokumente ausreichen. CSS werden im Zusammenhang mit HTML beziehungsweise XHTML verwendet, um die X/HTML-Elemente zu formatieren und damit Webseiten ihre Gestaltung zu geben.

CSS ist eine deklarative Sprache, das bedeutet, es können nur Attribute gesetzt werden, die vom Browser interpretiert werden. Es können keine Berechnungen durchgeführt werden, wie dies mit einer „richtigen“ Programmiersprache, das heißt einer imperativen Sprache, möglich ist.

CSS arbeiten mit so genannten Selektoren. Mit einem Selektor wird eine Attributliste verknüpft, die der Browser verwendet, um das durch den Selektor identifizierte Element oder die Klasse entsprechend zu formatieren.

Das folgende Beispiel zeigt die Definition eines CSS für das <h1>-Element in HTML, das heißt, des Elements, welches eine Überschrift erster Ordnung kennzeichnet.

h1 {
font-family: arial, sans-serif;
font-size: 24pt;
font-weight: bold;
}

Der Selektor, in diesem Beispiel ist er h1, entspricht dem Elementnamen. Die Attributliste folgt in geschweiften Klammern, wobei den Attributen font-family, font-size und font-weight entsprechende Werte zugeordnet sind.

Ebenso wie bei einem CSS für HTML können auch bei XML den Elementen Selektoren zugeordnet werden. Für das <stepresult>-Element, welches im Topictyp „Aufgabe“ das Ergebnis eines Handlungsschritts auszeichnet, könnte ein CSS beispielsweise wie folgt definiert werden:

stepresult {
font-family: arial, sans-serif;
font-size: 12pt;
font-weight: bold;
}

Somit würde das <stepresult>-Element in einem Browser mit der Schriftart Arial in der Größe von 12 Punkt und fett formatiert werden.

Über Klassen können Formatzuweisungen unabhängig vom Elementnamen erzeugt werden. Klassendefinitionen beginnen immer mit einem Punkt gefolgt vom Klassennamen. Danach folgt wieder die Attributliste.

.wichtiger-hinweis {
font-family: arial, sans-serif;
font-size: 12pt;
font-weight: bold;
color: red;
}

Über die Notation <h1 class="wichtiger-hinweis"> kann die Klasse beispielsweise dem <h1>-Element zugeordnet werden.

Während Klassen beliebigen Elementen zugeordnet werden können, werden IDs dazu verwendet, dokumentweit einzigartige Elemente zu bezeichnen. Somit besteht die Möglichkeit, Anweisungen für jedes einzelne Element eines HTML/XML-Dokuments vornehmen zu können. IDs werden wie Klassen, jedoch statt des Punkts mit einem Doppelkreuz (#) definiert.

#fusszeile {
font-family: arial, sans-serif;
font-size: 8pt;
}

Über die Notation <div id="fusszeile"> könnte ein Bereich des HTML-Dokuments als Fußzeile definiert werden.

Während CSS für HTML die geeignete Formatierungsmethode für den Browser darstellen, eignen sich CSS nur zu einem gewissen Grad für XML-Dokumente. CSS formatieren die Elemente in der Reihenfolge, in der sie im Dokument erscheinen. Das ist jedoch bei XML-Dokumenten oftmals nicht erwünscht, da in einem XML-Dokument häufig wesentlich mehr Elemente enthalten sind, als die Anzahl derer, die letzten Endes für die Ausgabe formatiert werden sollen. CSS sind nicht in der Lage, XML-Dokumente in andere XML-Dokumente zu transformieren, die beispielsweise nur noch die Elemente enthalten, die für die Formatierung notwendig sind. Daher ist eine weitere Formatierungssprache notwendig, die diese Art von Transformationen durchführen kann. Diese Transformationssprache ist XSLT (eXtensible Stylesheet Language Transformation).

XSLT

XSLT (eXtensible Stylesheet Language Transformation) ist eine Programmiersprache zur Transformation von XML-Dokumenten in andere XML-Dokumente oder XML-Fragmente. Die Transformationen werden durch einen XSLT-Prozessor durchgeführt. Die beiden bekanntesten XSLT-Prozessoren sind die Open Source-Programme Saxon und Xalan. Installiert man das DITA Open Toolkit als vollständiges Paket (full easy install package distribution), so ist dort der XSLT-Prozessor Xalan bereits enthalten.

Transformation von XML-Dateien mit XSLT

Abbildung: Transformation von XML-Dateien mit XSLT.

XSLT bietet Funktionalitäten wie Schleifen, bedingte erarbeitung oder Sortierungsmöglichkeiten an. Die Anweisungen werden in ein XSLT-Stylesheet geschrieben, welches selbst ein gültiges XML-Dokument ist. Das folgende Beispiel zeigt ein XSLT-Stylesheet, welches zwei der wichtigsten Elemente für eine XSLT-Transformation enthält:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="ueberblick">
        <html>
            <title>Ein aus XML generiertes HTMLDokument</title>
            <body>
               <p>
                 <xsl:apply-templates/>
               </p>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Da es sich bei einem XSLT-Stylesheet um ein XML-Dokument handelt, beginnt dieses zunächst mit einer typischen XML-Deklaration, das heißt mit <?xml version=“1.0“ encoding=“UTF-8“?>.

Danach folgt das Wurzel-Element des XSLT-Stylesheets, welches immer entweder ein <xsl:stylesheet>-Element oder ein <xsl:transform>-Element sein muss. An dem Wurzel-Element erkennt ein XSLT-Prozessor, der die XSLT-Stylesheets verarbeiten kann, dass es sich um ein XSLT-Stylesheet handelt. Neben dem obligatorischen version-Attribut muss im Wurzel-Element das Namespace-Attribut xmlns:xsl vorhanden sein, welchem stets der Wert "http://www.w3.org/1999/XSL/Transform" zugewiesen ist.

Das <xsl:template>-Element besitzt die Funktion einer Schablone und wird im Weiteren als XSLT-Template bezeichnet. Das entscheidende Attribut in diesem Element ist das match-Attribut. Der Wert des match-Attributs ist eine XPath-Anweisung zur Adressierung eines bestimmten Teils eines XML-Dokuments. Im einfachsten Fall steht hier einfach ein Elementname. In diesem Beispiel enthält das match-Attribut als Wert das <ueberblick>-Element.

Wenn der XSLT-Prozessor das Quelldokument auf Übereinstimmungen mit den XSLT-Templates im XSLT-Stylesheet überprüft und auf das im match-Attribut angegebene Element trifft, kopiert er den Inhalt des <xsl:template>-Elements in das Zieldokument. In dem Beispiel wird damit die Grundstruktur eines HTML-Dokuments erzeugt.

Das <xsl:apply-templates/>-Element sorgt dafür, dass der XSLT-Prozessor den Inhalt aller Elemente, die sich innerhalb des Elements befinden, auf welches das match-Attribut zutrifft, in das Zieldokument kopiert. Das Ergebnis in diesem Beispiel wäre ein gültiges HTML-Dokument, wenn sich im <ueberblick>-Element nur Text befinden würde.

In DITA kommt den Werten des match-Attributs im <xsl:template>-Element eine besondere Bedeutung zu. Als Wert des match-Attributs wird der Inhalt des class-Attributs übergeben, das jedem DITA-Element zugeordnet ist. In DITA enthält das class-Attribut keinen Elementnamen, sondern eine Zuordnung eines Elementnamens zu seiner übergeordneten Informationsstruktur.

Beispielweise wird dem <ol>-Element für die Auszeichnung von geordneten Listen in DITA das class-Attribut topic/ol vergeben. Daran lässt sich erkennen, dass das <ol>-Element in der Informationsstruktur topic, das heißt, im generischen Topic definiert ist. Das <ol>-Element wird in DITA im Topictyp „Aufgabe“ zu einem <steps>-Element spezialisiert. Das <steps>-Element enthält in seinem class-Attribut wieder die Zuordnung der übergeordneten Informationsstrukturen, sodass das class-Attribut wie folgt für das <steps>-Element definiert ist: topic/ol task/steps. Mit dem class-Attribut des <steps>-Elements wird damit auch festgelegt, dass das <steps>-Element äquivalent zum <ol>-Element ist.

Bei einer weiteren Spezialisierung, zum Beispiel des <steps>-Elements zu einem <mysteps>-Element für einen Topictyp „mytask“, würde das class-Attribut entsprechend erweitert werden zu: topic/ol task/steps mytask/mysteps. In diesem class-Attribut wird festgelegt, dass das <mysteps>-Element äquivalent zum <steps>-Element ist, das wiederum zum <ol>-Element äquivalent ist.

Über diese Nomenklatur des class-Attributs ist es dem XSLT-Prozessor möglich, auch unbekannte Elemente zu verarbeiten. Findet der XSLT-Prozessor keine weiteren Verarbeitungsanweisungen für das <mysteps>-Element, so werden die Verarbeitungsanweisungen des übergeordneten äquivalenten Elements verwendet. Erst durch das class-Attribut ist es dem DITA Open Toolkit möglich, spezialisierte Elemente bearbeiten zu können.

Somit findet man in DITA XSLT-Stylesheets keine <xsl:template>-Elemente wie das folgende:

<xsl:template match="p">

sondern <xsl:template>-Elemente, deren match-Attribute die Werte der class-Attribute als Suchkriterium verwenden:

<xsl:template match="*[contains(@class,' topic/p ')]">

Weitere Informationen zum class-Attribut erhalten Sie in „Spezialisierung“.

Ein weiteres wichtiges Element für XSLT-Transformationen ist das <xsl:for-each>-Element zur Erzeugung einer Schleife. Mit dem select-Attribut wird spezifiziert, für welchen zutreffenden Ausdruck die Schleife durchlaufen werden soll.

Im folgenden Beispiel wird nach dem <h1>-Element gesucht. Wird ein solches Element gefunden, wird daraus ein Link generiert. Mit dem <xsl:attribut>-Element wird ein href-Attribut in dem Elternelement erzeugt, hier das <a>-Element. Mit dem <xsl:value-of-select>-Element wird dafür gesorgt, dass die Werte des Kontextknotens kopiert werden, also die Werte, die zu dem <h1>-Element gehören, welches in der Schleife abgefragt wird.

<xsl:for-each select="h1">
    <a>
       <xsl:attribute name="href">
          <xsl:value-of select="."/>
       </xsl:attribute>
       <xsl:value-of select="."/>
    </a>
</xsl:for-each>

Das <xsl:for-each>-Element wird vor allem verwendet, wenn Inhaltsverzeichnisse oder sonstige Formen von Registern erzeugt werden sollen.

Mit dem <xsl:if>-Element und dem <xsl:choose>-Element stehen zwei Elemente zur Verfügung, mit denen Bedingungen formuliert werden können.

Das <xsl:if>-Element verwendet das obligatorische test-Attribut, dessen Wert eine Musterprüfung verlangt. Im Gegensatz zu vielen anderen Programmiersprachen gibt es keinen else-Befehl in XSLT.

Wird das Muster aus dem test-Attribut im Quelldokument gefunden, so wird der Inhalt des <xsl:if>-Elements ausgeführt. Im folgenden Beispiel wird nach dem <copyright>-Element gesucht, welches dann entsprechend ersetzt wird.

<xsl:if test="copyright">Copyright, Johannes Hentrich, 2008</xsl:if>

Zum <xsl:choose>-Element gehören die beiden Kindelemente <xsl:when> und <xsl:otherwise>. Mit diesen drei Elementen kann man ein switch-case-Konstrukt bauen, wie es aus anderen Programmiersprachen her bekannt ist. Damit ist es möglich, mehrere Alternativen anzugeben (mit dem <xsl:when>-Element) und ebenso einen Wert, wenn keine der möglichen Alternativen zutrifft (mit dem <xsl:otherwise>-Element). Das <xsl:choose>-Element kann beliebig viele <xsl:when>-Elemente enthalten und genau ein <xsl:otherwise>-Element. Ebenso wie beim <xsl:if>-Element wird beim <xsl:when>-Element das test-Attribut dazu verwendet, das Muster für die Bedingung zu benennen.

Das folgende Beispiel zeigt, wie das <xsl:for-each>-Element zusammen mit dem <xsl:choose>-Element verwendet werden kann.

<xsl:for-each select="language">
    <xsl:choose>
        <xsl:when test=".='german'">
            <p>First language: german</p>
        </xsl:when>
        <xsl:when test=".='french'">
            <p>Second language: french</p>
        </xsl:when>
        <xsl:otherwise>
            <p>Default language: english</p>
        </xsl:otherwise>
    </xsl:choose>
</xsl:for-each>

Als letztes wichtiges Element für XSLT-Transformationen sei hier das <xsl:sort>-Element aufgeführt, welches Sortierungen ermöglicht. Mit dem order-Attribut kann die Sortierreihenfolge festgelegt werden. Mit dem data-type-Attibut kann zudem bestimmt werden, ob Zahlen oder Texte sortiert werden sollen. Standardmäßig werden bei XSLT-Transformationen Zeichenketten in aufsteigender alphabetischer Reihenfolge sortiert.

In dem folgenden Beispiel werden die Buchtitel in absteigender alphabetischer Reihenfolge sortiert:

<xsl:for-each select="buchtitel">
    <xsl:sort order="descending" data-type="text"/>
    <xsl:value-of select="."/><br/>
</xsl:for-each>

XSL-FO

XSL-FO (XSL Formatting Objects) ist eine Seitenbeschreibungssprache, mit der XML-Dokumente über eine XSLT-Transformationen in eine XSL-FO-Datei umgewandelt werden können, die Formatierungsanweisungen, die so genannten Formatting Objects (FO) enthält. Bei einer XSLT-Transformation werden die für die Formatierung erforderlichen Elemente transformiert und in einen so genannten FO-Baum übergeführt, der eine Kombination aus FO-Elementen und Attributen enthält. Durch einen XSL-FO-Formatierer werden die FO-Elemente und die Attribute des FO-Baums in ein endgültiges Dateiformat, wie zum Beispiel PDF, umgewandelt.

Transformation einer XML-Datei in FO-Baumstruktur mit Formatting Objects

Abbildung: Transformation einer XML-Datei in eine FO-Baumstruktur mit Formatting Objects

Mit dem DITA Open Toolkit wird im vollständigen Paket (full easy install package distribution) als XSL-FO-Formatierer der Apache FOP, Version 0.20, mitgeliefert. Das DITA Open Toolkit bietet zusammen mit dem Apache FOP jedoch nur unzureichende Unterstützung, um PDF-Dateien erzeugen zu können. Um PDF-Dateien mit dem DITA Open Toolkit generieren zu können, wird inzwischen das FO-Plugin von Idiom Technologies verwendet, welches auf RenderX von RenderX Inc. als XSL-FO-Formatierer zurückgreift. Als Personal Edition ist RenderX kostenfrei auf der Website von RenderX Inc. erhältlich. Weitere Informationen zum FO-Plugin erhalten Sie in DITA Open Toolkit.

Mit XSL-FO kann der Satz und der Umbruch in einem Dokument automatisiert werden. Dazu wird mit XSL-FO die Seite in verschiedene Bereiche aufgeteilt. Das Grundgerüst einer XSL-FO-Datei sieht dabei immer wie folgt aus:

<?xml version="1.0" encoding="UTF-8" ?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="A4">
            <fo:region-body/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="A4">
        <fo:flow flow-name="xsl-region-body">
            <fo:block>Text, text</fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

Eine XSL-FO-Datei startet nach der XML-Deklaration immer mit dem <fo:root>-Wurzel-Element. Danach folgen die beiden Kindelemente <fo:layout-master-set> und <fo:page-sequence>.

Das <fo:layout-master-set>-Element enthält seitenspezifische Informationen, wie zum Beispiel die Größe der Seite und der Ränder sowie die Abmessungen für die Kopf- und Fußzeile. Dazu werden im <fo:simple-page-master>-Element die notwendigen Angaben gemacht. Wenn wie in diesem Beispiel über Attribute keine Werte definiert sind, werden die Vorgabewerte des XSL-FO-Formatierers verwendet. Das master-name-Attribut gibt der Seitengestaltung einen Namen, hier A4, sodass diese in der Seitenfolge, definiert durch das <fo:page-sequence>-Element, aufgerufen werden kann.

Das <fo:region-body>-Element legt das Aussehen der Region fest, in der sich die laufenden Inhalte befinden sollen.

Mit dem <fo:page-sequence>-Element wird die Reihenfolge der im <fo:layout-master-set>-Element definierten Seitenvorlagen festgelegt. Hier kann dann der eigentliche Inhalt der Seite eingebettet werden. Der Bezug zur Seitenvorlage aus dem <fo:layout-master-set>-Element wird durch das master-reference-Attribut hergestellt, das den Namen der Vorlage enthält, in diesem Beispiel A4.

Das <fo:flow>-Element gibt an, wo der laufende Inhalt eingefügt werden soll. Der eigentliche Inhalt muss in einem Blockelement, das heißt, in einem <fo:block>-Element enthalten sein. Überschreitet der Block die Dimensionen, die im <fo:body-region>-Element festgelegt sind, so führt der XSL-FO-Formatierer automatisch einen Umbruch durch.

Das oben aufgeführte Beispiel mit dem einfachen Grundgerüst für eine XSL-FO-Datei zeigt die Elemente nur mit ihren Pflichtattributen. In der Praxis werden jedoch für die einzelnen Elemente zahlreiche Attribute definiert, um zum Beispiel die Seitengröße festzulegen oder die Position, wo der laufende Text positioniert werden soll. So können Sie für das <fo:simple-page-master>-Element zum Beispiel folgende Attribute definieren, um die Größe einer DIN-A4 Seite festzulegen:

<fo:simple-page-master master-name="A4"
    page-height="297mm"
    page-width="210mm"
    margin-left="20mm"
    margin-right="15mm"
    margin-top="20mm"
    margin-bottom="20mm">

Bei der Produktion von PDF-Dateien aus DITA XML-Dateien über das FO-Plugin werden diese Attribute über so genannte Attribut-Sets zusammengefasst. Die Attribut-Sets können im FO-Plugin separat vom XSL-FO-Stylesheet konfiguriert werden. Diese Methode ist zwar elegant, da der direkte Eingriff in das XSL-FO-Stylesheet verhindert wird, jedoch ist die Dokumentation des FO-Plugins so spärlich, dass das Auffinden des passenden Attribut-Sets oft recht mühsam sein kann.

XPath

Als dritter und letzter Bestandteil zu XSL gehört XPath (XML Path Language) als Abfragesprache, um bestimmte Teile eines XML-Dokuments adressieren zu können. In der Praxis mit DITA steht XPath häufig im Hintergrund, da die zu adressierenden Teile eines XML-Dokuments über die class-Attribute der Elemente ausreichend genau angesprochen werden können. Wollen Sie jedoch konkrete Elemente in einem XML-Dokument über ein XSLT-Stylesheet ansteuern, so ist XPath zur Adressierung der Daten notwendig.

Bei XPath wird das XML-Dokument als eine Baumstruktur betrachtet, die aus miteinander verbundenen Knoten besteht. Die unterschiedlichen Bestandteile eines XML-Dokuments, wie Elemente, Attribute, Kommentare oder Verarbeitungsanweisungen (processing instructions) werden dabei als ein Knotentyp repräsentiert.

Folgenden Knotentypen werden bei XPath unterschieden:

  • Wurzelknoten: Der Wurzelknoten ist der Ausgangspunkt des XML-Dokumentenbaums und daher nur einmal vertreten.
  • Elementknoten: Jedes Element eines XML-Dokuments wird durch einen Elementknoten repräsentiert. Ein Elementknoten kann weitere Elementknoten, aber auch Kommentare, Verarbeitungsanweisungen und Textknoten besitzen. Zudem kann jeder Elementknoten eine beigefügte Menge von Attributknoten aufweisen.
  • Attributknoten: Dieser Knotentyp entspricht den Attributen eines XML-Elements. Attributknoten können keine weiteren Kindknoten enthalten.
  • Textknoten: Alle Zeichenketten im XML-Dokument, die nicht zu den Auszeichnungen des XML-Dokuments gehören, werden in Textknoten erfasst.
  • Namensraumknoten: Zu jedem Element können verschiedene Namensraumknoten assoziiert werden. Namensraumknoten entstehen durch die Namensraumdeklarationen der Attribute xmlns oder xmlns:praefix.
  • Verarbeitungsanweisungsknoten: Ein Verarbeitungsanweisungsknoten hat seine Entsprechung in den Verarbeitungsanweisungen innerhalb ein-es XML-Dokuments. Jedoch gehört die XML-Deklaration <?xml version=“1.0“?> nicht zu den Verarbeitungsanweisungen.
  • Kommentarknoten: Kommentarknoten haben ihre Entsprechung in den Kommentaren eines XML-Dokuments.

Die einzelnen Knoten können untereinander in unterschiedlichen Beziehungen miteinander stehen. So können beispielsweise Knoten von anderen Knoten abhängen oder Knoten liegen auf einer gemeinsamen Ebene. XPath kennt dreizehn verschiedene Arten, wie Knoten miteinander in Beziehung stehen können:

  • Kindknoten (child): Bezeichnet die unmittelbar untergeordneten Knoten. In einer Struktur wie <p><i>...</i></p> ist das <i>-Element aus der Sicht des <p>-Elements ein Kindknoten.
  • Elternknoten (parent): Bezeichnet die unmittelbar übergeordneten Knoten. In einer Struktur wie <p><i>...</i></p> ist das <p>-Element aus der Sicht des <i>-Elements ein Elternknoten.
  • Nachkommen (descendent): Bezeichnet untergeordneten Knoten und Knoten die weiter als unmittelbar ungeordnet sind. In einer Struktur wie <p><i><u>...</u>...</i></p> ist sowohl das <i>-Element als auch das <u>-Element aus der Sicht des <p>-Elements ein Nachkomme.
  • Vorfahr (anchestor): Bezeichnet übergeordnete Knoten und Knoten, die weiter als unmittelbar übergeordnet sind. In einer Struktur wie <p><i><u>...</u>...</i></p> ist sowohl das <i>-Element als auch das <p>-Element aus der Sicht des <u>-Elements ein Vorfahr.
  • Nachfolgende Knoten (following): Bezeichnet Knoten, die nach dem aktuellen Knoten im restlichen XML-Dokument folgen, unabhängig von der Hierarchie der Knoten. Ausgeschlossen sind dabei die Nachkommenknoten des aktuellen Knotens. In einer Struktur wie <p><i><u>...</u></i><i><u>...</u></i></p> haben aus Sicht des ersten <u>-Elements das zweite <i>-Element, das zweite <u>-Element und dessen Inhalt den Status von nachfolgenden Knoten.
  • Vorherige Knoten (preceding): Bezeichnet Knoten, die vor dem aktuellen Knoten im restlichen XML-Dokument folgen, unabhängig von der Hie-rarchie der Knoten. Ausgeschlossen sind dabei die Vorfahrknoten des aktuellen Knotens. In einer Struktur wie <p><i><u>...</u><u>...</u></i>...<i></i></p> haben aus Sicht des zweiten <u>-Elements das erste <u>-Element und dessen Kindknoten den Status von vorherigen Knoten.
  • Nachfolgende Geschwisterknoten (following-sibling): Bezeichnet Knoten, die nach dem aktuellen Knoten im restlichen XML-Dokument auf der gleichen Hierarchieebene folgen. In einer Struktur wie <p><i><u>...</u><u>...</u></i></p><u>...</u> hat aus Sicht des ersten <u>-Elements das zweite <u>-Element den Status von nachfolgenden Geschwisterknoten. Das dritte <u>-Element besitzt diesen Status dagegen nicht.
  • Vorherige Geschwisterknoten (preceding-sibling): Bezeichnet Knoten, die nach dem aktuellen Knoten im restlichen XML-Dokument auf der gleichen Hierarchieebene folgen. In einer Struktur wie <u>...</u><p><i><u>...</u><u>...</u></i></p> hat aus Sicht des dritten <u>-Elements das zweite <u>-Element den Status von vorherigen Geschwisterknoten. Das erste <u>-Element besitzt diesen Status dagegen nicht.
  • Attribut (attribute): Bezeichnet den Attributknoten eines Elements. Attribute erhalten in der Hierarchie eines XML-Dokuments eine Sonderstellung, da sie nicht in das Schema Kindknoten, Elternknoten usw. eingereiht werden. In einer Struktur <p class=“bodytext“> ist class aus Sicht vom <p>-Element ein Attributknoten.
  • Namensraum (namesapce): Bezeichnet den Namensraumknoten zum aktuellen Element. In einer Struktur wie <m:math>...</m:math> ist aus Sicht des <m>-Elements math der zugehörige Namensraum.
  • Der aktuelle Knoten selbst (self): Bezeichnet den aktuellen Knoten. Wenn in einer Struktur wie <p><i><u>...</u><u>...</u></i></p> vom XSLT-Prozessor gerade das <i>-Element verarbeitet wird, dann hat dieses in dem Moment den Status des aktuellen Knotens.
  • Nachkommen oder der aktuelle Knoten selbst (descendent-or-self): Bezeichnet den aktuellen Knoten oder Nachkommen des aktuellen Knotens. Wenn in einer Struktur wie <p><i><u>...</u><u>...</u></i></p> vom XSLT-Prozessor gerade das <i>-Element verarbeitet wird, dann haben dieses und das nachfolgende <u>-Element in dem Moment den Status des Nachkommen oder des aktuellen Knotens selbst.
  • Vorfahre oder der aktuelle Knoten selbst (anchestor-or-self): Bezeichnet den aktuellen Knoten oder Vorfahren des aktuellen Knotens. Wenn in einer Struktur wie <p><i><u>...</u><u>...</u></i></p> vom XSLT-Prozessor gerade das <i>-Element verarbeitet wird, dann haben dieses und das vorhergehende <p>-Element in dem Moment den Status des Vorfahren oder des aktuellen Knotens selbst.

Der Pfad zu einem oder mehreren Knoten können in XPath entweder mit einem Schrägstrich (/) oder einem Doppelpunkt (:) angegeben werden. Wenn Sie einen Schrägstrich verwenden, ist der tatsächliche Namen des Knotens in der Pfadangabe zu verwenden, zum Beispiel p/i/u. Verwenden Sie den Doppelpunkt, ist die Beziehung der Knoten im Pfad enthalten, zum Beispiel p/i/child::u.

Die Wurzel eines XML-Dokuments wird mit einem Schrägstrich adressiert, wie zum Beispiel in

 <xsl:template match="/"> 

Knoten eines XML-Dokuments können in einem XSLT-Stylesheet wie folgt adressiert werden:

 <xsl:template match="/p/i/u"> 

oder

 <xsl:template match="/p/i/child::u"> 

Des Weiteren ermöglicht XPath die Adressierung mit Positionsangaben und Bedingungen, um bestimmte einzelne Elemente adressieren zu können. Dabei können XPath-Funktionen wie boolean(), contains(), position() oder starts-with() verwendet werden.

In den XSLT-Stylesheets des DITA Open Toolkits erfolgt die Adressierung der Elemente über das class-Attribut, welches kein spezifisches Element adressiert, sondern eine Klasse von Elementen. Dazu wird die contains()-Funktion in den XSLT-Stylesheets des DITA Open Toolkits verwendet, zum Beispiel bei

<xsl:template match="*[contains(@class,' topic/p task/steps ')]">

In der Praxis ist diese Adressierungsmethode durchaus ausreichend. Eine detailliertere Adressierung von Elementen über XPath wird erst dann erforderlich, wenn beispielsweise bestimmte Elemente für ein Ausgabemedium sortiert werden sollen. Dies erfordert dann oft einen tiefen Eingriff in die XSLT-Stylesheets des DITA Open Toolkits.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema DITA bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2008 XLcontent Verlag
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "DITA - Der neue Standard für Technische Dokumentation" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

XLcontent Verlag, Pflegerstraße 40, 81247 München