Aufbau und Reihenfolge

(Auszug aus "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" von Thomas Schraitle)

Die DocBook-Stylesheets sind so aufgebaut, dass sie immer die selben Templates anpassen müssen, um etwas zu verändern. Dies gilt sowohl für Onlineformate (HTML, HTMLHelp, …) als auch für XSL-FO. Die Stylesheets besitzen Templates, die in einer bestimmten Reihenfolge aufgerufen werden, um linke (verso) und rechte (recto) Seiten einer Titelseite zu erstellen. Dies ist nur für XSL-FO relevant, für Onlineformate gibt es diese Unterscheidung nicht und die Templates für die linke Seite sind leer.

Im folgenden Beispiel werden diese Templates für das Element article näher beleuchtet. Der grundsätzliche Aufbau ist bei jedem der DocBook-Strukturelemente gleich (vgl. Strukturelemente). Sie müssen lediglich article durch den Namen eines anderen Elements ersetzen.

Beispiel: Aufbau und Reihenfolge einer Titelseite eines Artikels

{html,fo}/component.xsl:
  <xsl:template match="article">
     <xsl:call-template name="article.titlepage"/>
     <!-- Inhaltsverzeichnis -->
  </xsl:template>

{html,fo}/titlepage.templates.xsl:
  <xsl:template name="article.titlepage.recto">
    <!-- title -->
    <!-- subtitle -->
    <!-- Titlepage Elemente -->
  </xsl:template>
  <xsl:template name="article.titlepage.verso"></xsl:template>
  <xsl:template name="article.titlepage.separator"></xsl:template>
  <xsl:template name="article.titlepage.before.recto"></xsl:template>
  <xsl:template name="article.titlepage.before.verso"></xsl:template>
  <xsl:template name="article.titlepage">
      <!-- recto.content -->
      <xsl:call-template name="article.titlepage.before.recto"/>
      <xsl:call-template name="article.titlepage.recto"/>
      <!-- verso.content -->
      <xsl:call-template name="article.titlepage.before.verso"/>
      <xsl:call-template name="article.titlepage.verso"/>
      <xsl:call-template name="article.titlepage.separator"/>
  </xsl:template>

{html,fo}/titlepage.xsl:
  <xsl:template match="..." mode="titlepage.mode">
    ...
  </xsl:template>

Zeile 2: Erkennt ein article-Element. Nachdem die Titelseite über article.titlepage erstellt wurde, wird ein Inhaltsverzeichnis eingefügt (falls gewünscht). Bei (X)HTML werden zusätzlich Fußnoten verarbeitet (im Quelltext ausgeblendet). XSL-FO behandelt Fußnoten auf eine andere Art.
Zeile 8: Fügt Objekte auf einer rechte Seite ein, in diesem Fall title bzw. subtitle. Ein Titel kann an verschiedenen Stellen enthalten sein (für einen Artikel in articleinfo, artheader usw.). Ein Artikel kann auf der Titelseite weitere Elemente enthalten, wie author, copyright usw. Sind diese vorhanden, werden sie ebenso eingefügt. Die Reihenfolge ist im Beispiel Auszug Spezifikationsdatei für einen Artikel, Ausgabe (X)HTML zu sehen. Alle Elemente in diesem Template werden im Modus article.titlepage.recto.auto.mode verarbeitet.
Zeile 13: Fügt Objekte in eine linke Seite ein. Für (X)HTML und XSL-FO ist dieses standardmäßig leer.
Zeile 14: Fügt Objekte am Ende von article.titlepage ein, um eine Titelseite vom Rest des Dokuments abzugrenzen. Für (X)HTML wird standardmäßig <hr/> ausgegeben, für XSL-FO ist dieses Template leer.
Zeile 15: Fügt Objekte in eine rechte Seite ein, das vor article.titlepage.recto erscheinen soll. Für (X)HTML und XSL-FO ist dieses standardmäßig leer.
Zeile 16: Fügt Objekte in eine linken Seite ein, das vor article.titlepage.verso erscheinen soll. Für (X)HTML und XSL-FO ist dieses standardmäßig leer.
Zeile 17: Erzeugt die eigentliche Titelseite, indem es die vorher definierten Templates in der angegebenen Reihenfolge aufruft.
Zeile 28: Verarbeitet DocBook-Elemente im Modus titlepage.mode.

Wie oben bereits erwähnt, werden die zu verarbeitenden Elemente zuerst in einem speziellen Modus verarbeitet, für Artikel ist dies article.titlepage.recto.auto.mode. Dadurch ist eine bessere Abstufung und Anpassung möglich. Dieser Modus kaskadiert in verschiedene andere Modi, die der Reihe nach aufgerufen werden:

article.titlepage.recto.auto.mode
article.titlepage.recto.mode
titlepage.mode
[kein Modus]

Durch diese Kaskade müssen nicht alle Elemente für jeden dieser Modi definiert werden. Dadurch gibt es ein Standard-Template, das aktiviert wird, wenn ein Element in einem Modus undefiniert ist. Somit fällt er auf den nächsten Modus zurück, bis er den allgemeinen titlepage.mode-Modus erreicht. Je weiter unten ein Modus steht, desto allgemeiner greift er.

Das bedeutet, Sie müssen Ihre Anpassungen in das jeweilige Template mit dem entsprechenden Modus einbringen. Wenn Sie ein title-Element im Modus titlepage.mode anpassen, wird die Anpassung nicht nur für einen Artikel wirksam, sondern auch für andere Elemente, wie Kapitel, Anhang usw. Umgekehrt heißt dies, wenn Sie ein title-Element nur für einen Artikel anpassen möchten, müssen Sie ein Template schreiben, das im Modus article.titlepage.recto.mode aufgerufen wird.

Am Beispiel des Elements title werden die einzelnen Modi genauer beschrieben:

Beispiel: Kaskade der Modi für ein title-Element in (X)HTML

{html,xhtml}/titlepage.templates.xsl:
<xsl:template match="title" mode="article.titlepage.recto.auto.mode">
  <div xsl:use-attribute-sets="article.titlepage.recto.style">
    <xsl:apply-templates select="." mode="article.titlepage.recto.mode"/>
  </div>
</xsl:template>

{html,xhtml}/titlepage.templates.xsl:
<xsl:template match="*" mode="article.titlepage.recto.mode">
  <!-- Wird ein Element in diesem Modus nicht gefunden -->
  <!-- versuche den allgemeinen Modus titlepage.mode -->
  <xsl:apply-templates select="." mode="titlepage.mode"/>    
</xsl:template>

{html,xhtml}/titlepage.xsl:
<xsl:template match="title" mode="titlepage.mode">
  <h1>
    <xsl:apply-templates mode="titlepage.mode"/>
  </h1>
</xsl:template>

Zeile 2: Wird vom Template article.titlepage.recto aufgerufen. Für (X)HTML wird ein div-Element mit entsprechenden Attributen ausgegeben und die Verarbeitung im Modus article.titlepage.recto.mode fortgesetzt. Für gewöhnlich passen Sie diesen Modus nicht an.
Zeile 9: Da es kein Template für ein title im Modus article.titlepage.recto.mode gibt, wird das Standard-Template aufgerufen. Dieser Modus ist ein geeigneter Kandidat um Ihre Anpassungen einzutragen.
Zeile 16: Standard-Template für alle title-Elemente. Es gibt ein h1-Element mit zusätzlichen Attributen aus (im Code ausgeblendet). Sind noch weitere Elemente in einem title vorhanden, werden Sie ebenfalls im Modus titlepage.mode verarbeitet.

Die folgenden Seiten zeigen Ihnen einige Beispiele, wie Sie bestimmte häufig auftretende Probleme mit Hilfe der obigen Templates lösen.

  

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema DocBook bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2009 Millin Verlag
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "DocBook-XML: Medienneutrales und plattformunabhängiges Publizieren" 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.

Millin Verlag, Siebengebirgsring 36, 53797 Lohmar, info(at)millin.de