Was ist DocBook?
Docbook ist ein
SGML-Format, das für Veröffentlichungen bestimmt wurde. Es gibt jedoch ein XML-Format, DocBook/XML. Wie Sie aus dem Vorwort wissen sollten, ist XML eine Teilmenge von SGML, Docbook/XSL ist jedoch nicht notwendigerweise eine Teilmenge von Docbook
(Sie können alles machen, was Sie mit Docbook/SGML auch können, nur machen Sie einige Dinge anders). Zur Verdeutlichung der
Beziehung von SGML und XML hier ein Diagramm
.
Warum der Name?
Der Name Docbook ist aus folgenden Gründen
sinnvoll:
- Es handelt sich um ein Format, das auch gut dafür verwendet werden kann, technische Dokumentationen zu erstellen
- Durch die Untersttzung von DTP-Programme wie Framemaker kann man Docbooks tatsächlich relativ einfach als Buch veröffentlichen
lassen
nicht sinnvoll:
- Man kann Docbook nicht nur verwenden, um ganze Bcher zu definieren,
sondern auch für kleine Artikel (Die Linux-howtos werden z.B. aus Docbook generiert).
- Auch sind die entstandenen Dateien vielseitig verwendbar nicht nur, um Bücher zu drucken, sondern auch, um zum Beispiel XHTMLs oder PDFs zu erstellen.
Was ist XML:FO
XML:Formatting Objects ist ein vom W3C abgesegnetes XML-Dateiformat, das für Print-Medien optimiert wurde. Anders als in den meisten anderen XML-Formaten, deren
Tags sagen, was ein Element ist, und nicht wie es dargestellt werden soll, befassen sich die Tags von XML:FO ausschlie�ich
damit, wie die Elemente auf Print-Medien darzustellen sind. XML:FO-Prozessoren wie der Apache FOP generieren daraus dann Druckvorstufen, der Apache FOP beherrscht z.B. auch PDF. Wir werden die XSLT-Transformationen von Docbook auf XML:FO benutzen, um ein PDF zu erstellen, und die von Docbook auf XHTML um eine XHTML-Seite zu erstellen.
Ein Testsystem
Um anständig mit Docbook/XML arbeiten zu können empfehle ich Ihnen folgende Dateien:
Ein Beispiel-Buch
Wählen Sie in Ihrem XML-Editor "neues Dokument" basierend auf der Docbook DTD (je nachdem wohin Sie sie entpackt haben).
In XML-Spy bevorzuge ich die Textansicht
.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE set SYSTEM ".\dtds\docbookx.dtd">
<set>
<book>
<chapter>
<title>Mein erstes Kapitel</title>
<para>Hier ist ein Absatz</para>
<sect1>
<title>Ein Abschnitt im Kapitel</title>
<para>Mindestens ein Absatz im Aschnitt macht ihn DTD-Gerecht.</para>
</sect1>
</chapter>
</book>
</set>
Quelle: Mark Galassi's DocBook/SGML-Tutorial
Bilder in Docbook
Eine Möglichkeit, Bilder einzubetten, besteht in der Kombination aus
inlinemediaobject, imageobject und imagedata. Wie der Name schon sagt,
wird das Bild dann inline, also ohne Umlauf oder Ausrichtung eingebaut.
<inlinemediaobject>
<imageobject>
<imagedata fileref="dateiname.jpg" format="JPG"/>
</imageobject>
</inlinemediaobject>
Zeilenumbruch (Breaks) erzwingen
Normalerweise wird man Zeilenumbrüche in Docbook durch Absätze
(<para>...</para>) herbeiführen. Diese werden in
HTML jedoch sinnhafterweise mit <p>...</p> übersetzt,
einen einfachen Zeilenumbruch, sprich etwas, was die Ausgabe eines
<br/> in der HTML-Ausgabe erzeugt, ist nur durch die Verwendung
von Literallayout möglich. Um Literallayout anwenden zu können, müssen
zunächst alle Absätze beendet werden. Das Literallayout ist dabei in etwa vergleichbar mit dem
HTML-Preformatted-Tag <pre>...</pre>: Ein Zeilenumbruch in der Quelldatei führt
zur Erzeugung eines Zeilenumbruchs in der Ausgabe.
<para>
Ein Absatz ohne Zeilenumbruch
</para>
<literallayout>
Ein Absatz mit Zeilen-
umbruch
</literallayout>
<para>
Ein weiterer Absatz ohne Zeilenumbruch
</para>
Links
Links werden in DocBook mit ulink realisiert.
<ulink url=âhttp://www.google.deâ> Linktext </ulink>
Kursiver Text
Text können Sie kursiv darstellen, wenn Sie das emphasis-Tag mit der kursiven "role" verwenden.
<emphasis role="italic">italic emphasized</emphasis>
Fußnoten
Verwenden Sie footnote im Text um an der entsprechenden Stelle eine Fußnote einzufügen.
Darin sollten Sie Text als Absatz (para) formatieren.
<footnote id="fnid1"><para>A footnote</para></footnote>
Metadaten über Artikel
Als per <set>-<book> als ganzes Buch auszuzeichnen können Sie auch
den leichtgewichtigeren article verwenden:
Artikel können (oder sollten) mit Metadaten ausgezeichnet werden,
vom Titel über Datum und Autor bis hin zu Stichwörtern, die in
einer subjectset-subject-subjectterm-Konstellation angegeben werden können.
<article>
<articleinfo>
<title>XYY</title>
<corpauthor>usegroup</corpauthor>
<date>2005-04-04</date>
<subjectset>
<subject>
<subjectterm>
Others
</subjectterm>
</subject>
</subjectset>
</articleinfo>
<para>
Ein Abschnitt
</para>
</article>
Export als XHTML
Wenn Sie diese Datei möhten z.B. als XHTML ins Netz stellen möchten,
müssen Sie zuerst einmal einfgen, dass das entsprechende XSL-Stylesheet
verwendet werden soll.
Mit dem Befehl
saxon -o index.html docbook.xml html/docbook.xsl
erstellen Sie dann aus der Docbook.xml mithilfe den Style Sheets in html/docbook.xsl die Index.html. Anstelle html/docbook.xsl
können Sie
natrlich auch IhrenPfadZuDenStyleSheets/html/docbook.xsl angeben,
nur sollten Sie bei diesem Pfadnamen gnädigerweise auf Abstände verzichtet haben.
Export als PDF
PDFs bekommen Sie aus einem Docbook, indem Sie zuerst eine Ausgabe in XML:FO erstellen:
saxon -o index.fo docbook.xml fo\docbook.xsl
Und an die PDF-Datei kommen Sie dann ganz einfach mit einem FO-Prozessor dran:
fop index.fo index.pdf
Interessanterweise bringt ebendiese Zeile bei meinen 1.50ern Style Sheets
die Meldung
[Error]: The id "toc...d47e3" already exists in this document
Was sich aber umgehen lässt indem man eine der beiden "toc...d47e3"s in einen
anderen Wert, z.B. "toc...d47e4" ändert.
Dann ist auch die PDF-Datei größer als 15 Bytes und lässt sich lesen.
Das scheint nebenbei ein Problem im FOP-Prozessor und nicht in der Transformation
zu sein. Lars Trieloff
(http://trieloff.net/docbook/distfiles/XML-Flatener/superfop.jar, danke für den Hinweis) bietet eine gepatchte FOP-Version.