DocBook – oder wie ich zum Schreiben kam

DocBook ist ein auf XML basierendes Dokumentenformat. Es erleichtert die Publikation von Büchern, Artikeln oder Dokumentationen in verschiedenen Ausgabeformaten wie z.B. XHTML, Windowshilfe und XSL-FO. Letzteres dient als Vorstufe zum PDF.

Ich habe DocBook schätzen gelernt, als es darum ging, umfangreiche Dokumente zu schreiben. Bei Word & Co. habe ich mich in regelmäßigen Abständen darüber geärgert, dass ich ein gutes Drittel meiner Zeit darauf verwendete, das Layout einigermaßen hinzubiegen. Ich beschäftigte mich also mehr mit der Positionierung der Bilder und deren Beschriftungen, als mit dem eigentlichen Inhalt des Dokuments. Ich hatte auch keine Lust, stetig das Inhalts-, Bilder- oder Tabellenverzeichnis manuell zu aktualisieren, damit es – schlicht& ndash; aktuell ist. Zu guter Letzt gab es immer wieder Probleme mit dem PDF-Export, weil gelegentlich dabei das Layout auseinander gefallen ist. Daran änderte leider auch der Versuch nichts, Bilder, Tabellen und deren Beschriftungen erst zum Schluss einzufügen.

Leider führt die Verwendung von XML dazu, dass diese Art der Dokumentenerstellung kaum akzeptiert wird. Die Begründung lautet oft, dass das Schreiben mit DocBook komplizierter und damit auch langwieriger sei als mit Word & Co. Zum anderen scheinen die Schmerzen bei der Dokumentenerstellung zu gering, um sich generell mit alternativen Möglichkeiten zu beschäftigen.

Aber wie arbeitet man nun mit DocBook? Wie ist das XML aufgebaut und was soll oder muss man beachten?

Der Aufbau eines DocBook-Dokuments ist schnell erklärt.

1
2
3
4
5
6
7
8
9
10
11
12
13
<book xmlns="http://docbook.org/ns/docbook" version="5.0">
  <title>Titel des Buches</title>
  <subtitle>Untertitel</subtitle>
 
  <chapter>
    <title>Dies ist ein Titel zum Kapitel</title>
 
    <section>
      <title>Dies ist der Titel für den Abschnitt</title>
      <para>Dies ist ein Absatz, in dem der ganz <emphasis>wichtige</emphasis> Text steht.</para>
    </section>
  </chapter>
</book>

Natürlich gibt es die Möglichkeit, Bilder, Tabellen oder Verweise in DocBook zu erstellen:

1
2
3
4
5
6
7
8
<figure xml:id="bild_id">
  <title>Bildtitel</title>
  <mediaobject>
    <imageobject>
      <imagedata fileref="pfad/zum/bild" />
    </imageobject>
  </mediaobject>
</figure>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<table xml:id="tabellen_id">
  <title>Tabellentitel</title>
  <tgroup cols="2">
    <thead>
      <row>
	<entry>Titel der ersten Spalte</entry>
	<entry>Titel der zweiten Spalte</entry>
      </row>
    </thead>
 
    <tbody>
      <row>
	<entry>
	    <code>Eintrag mit einem monospace Font für z.B. Funktionsnamen </code>
	</entry>
 
	<entry>
	    Zweite spalte
	</entry>
      </row>
    </tbody>
  </tgroup>
</table>
1
2
<!-- Verweis auf die obige Tabelle -->
  <xref linkend="tabellen_id" />

Auf den ersten Blick scheint der Nutzen nicht direkt ersichtlich, und der Overhead mag gerade beim Einbetten von Bildern und Tabellen recht hoch anmunten. Hingegen haben wir den großen Vorteil, dass wir uns das Ausgabeformat beliebig aussuchen, es austauschen und verändern können.

Wie aber komme ich zu einem lesbaren Ausgabeformat wie z.B. PDF? Da es sich bei DocBook um XML handelt, muss dieses transformiert, und so in die gewünschten Ausgabeformate umgewandelt werden. Wie man diese Transformation bewältigt, werde ich in meinem nächsten Eintrag erläutern.

Die Vorteile von DocBook nochmal zusammengefasst:

  • Inhalt und Layout sind voneinander getrennt.
  • Es gibt (theoretisch) beliebig viele verschiedene Ausgabeformate.
  • Aus einem einzigen DocBook-Dokument lassen sich mehrere Ausgaben erzeugen.
  • XML ist standardisiert und kann gegen ein Schema validiert werden.
  • DocBook bietet alle Möglichkeiten der Erweiterbarkeit und Anpassbarkeit des Layouts.
  • DocBook kann auf vielen Plattformen betrieben werden.

Die Nachteile zusammengefasst:

  • Es gibt leider nur wenige kooperierende Tools
  • Die Akzeptanz bei Nichtprogrammieren ist eher gering.

Referenzen:
DocBook
XSL:FO

Kommentare nicht möglich.