DocBook - Eine Einführung

Daniel Molkentin - Proseminar XML-basierte Technologien - TU Chemnitz


Inhalt


Geschichtliches

Die Motivation für Docbook

DocBook wurde um 1991 von den Firmen O'Reilly & Associates und HaL Computer Systems entwickelt. Viele Ideen wurden dabei von anderen SGML-basierten Datenaustausch-Projekten übernommen.

DocBook 1.1 wurde von der durch O'Reilly & Associates gegründeten Davenport Gruppe spezifiziert, die auch den Fortbestand plante. Version 1.2 stand außerdem unter starken Einfluß von Novell und Digial. Es basierte auf dem damals verbreiteten SGML Standard.

1994 erhielt mit DocBook Version 1.2.2 die Davenport Gruppe offiziell eine Satzung, die sie vollständig verantwortlich für die Weiterentwikcklung von DookBook machte. Der Gruppe gehörten nun die Unternehmen Novell, O'Reilly, Fujitsu, Hewlett-Packard, DEC, SCO, HaL, Hitachi, SunSoft sowie Unisys an.

Neuorientierung

Von nun an bekam die Entwicklung eine völlig neue Richtung. Sollte DocBook anfangs nur als Austausprache für troff-generierte Dokumente dienen, begann nun unter dem Haupteinfluß von Sun und Novell die Erweiterung hin zur Autorensprache, mit der direkt druckfertige Ausgaben generiert werden konnten. Es kamen von nun an noch Point Releases mit Änderung der Versionszahl nach dem Komma, wie Version 2.2 hinzu, die nur rückwärtskompatible Änderungen enthalten dürften. 1997 wurde mit Version 3.0 erstmals wieder eine Major-version hinzu, die auch nicht- rückwärtskompatible Änderungen enthalten dürfte, falls sie vorher angekündigt wurden.

Da um diese Zeit auch XML als Standard auftauchte, begannen die Mitglieder der Davenport Gruppe sich diesem Standard zuzuwenden, wodurch sich die Entwicklung von DocBook dramatisch verlangsamte. Es kam auch die Idee auf, DocBook in XML zu spezifizieren, dieser Schritt wurde aber von der Davenport Gruppe nie getan. Also beschloßen die Sponsoren, die Davenport Gruppe zu schließen, nicht aber ohne eine neue Heimat für DocBook zu finden.

OASIS und Redenfinition in XML

Diese fand sich bei der OASIS, welche 1998 ein "Technical Committee DocBook" einrichtete. OASIS griff auch die Idee wieder auf, DocBook in XML neu zu spezifizieren und stellt seit Version 4.0 die DocBook Spezifikation sowohl für SGML als auch für XML zur Verfügung. Als Vorteil von XML gegenüber SGML wird im Allgemeinen seine strengere Spezifikation hervorgehoben, sowie eine Vielzahl von Weiterverarbeitungsmöglichkeiten, deren Syntax ebenfalls in XML spezifiziert und somit für den Bearbeiter uniform und einfacher zu erlernen ist.

Als Beispiel seien die Konvertierungssprachen DSSL und XSL erwähnt. DSSSL (Document Style Semantics and Specification Language), ist eine funktionale, Lisp-ähnliche Sprache, die einen vollkommen anderen Syntax als DocBook aufweist. Obwohl sie auch bei XML-basiertem DocBook eingesetzt werden kann, empfiehlt die OASIS für deren Konvertierung in andere Formate die Extensible Stylesheet Language (XSL), welche in XML spezifiziert ist. Für beide Tranformationsformen existiert eine große Anzahl von freine Werkzeugen, was sie insbesondere für freie Projekte wie den Linux Kernel, FreeBSD, GTK, GNOME und KDE sehr beliebt gemacht hat. Leider sind diese in der Konfiguration recht umständlich, so dass alle Projekte und Distributoren vorgefertigte Konfigurationen mitliefern. Als Ausgabeformate sind HTML, PDF, TeX, HTML, man pages und TeX üblich. Für Formate außer HTML und anderen XML-basierten Formaten scheint DSSSL jedoch bis heute beliebter zu sein.

Notation und Sematik von DocBook

Die Notation von DocBook ist durch ihre Nähe zu (X)HTML (beides sind XML- bzw. SGML-basierte Auszeichungssprachen) dieser sehr ähnlich. Jedoch ist der Sprachumfang von SGML (d.h. die Anzahl der Tags und Attribute) deutlich höher als bei HTML, was für eine höhere Lernkurve sorgt.

DocBook lässt sich in zwei Dokumentenklassen unterteilen: Buch und Artikel. Hier zunächst ein einfacher Artikel:

  
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
<article>
  <articleinfo>
    <title>Titel des Dokuments</title>
        
    <author>
      <firstname>Vorname</firstname>
      <surname>Nachname</surname>
      <affiliation>
        <address><email>E-Mail Addresse</email></address>
      </affiliation>
    </author>
    
    <copyright>
      <year>1998</year>
      <holder role="mailto:E-Mail Addresse">Voller Name</holder>
    </copyright>
  
    <pubdate role="rcs">$Date: Vom RCS vergebenes Datum</pubdate>
   
    <releaseinfo>$Id: vom RCS vergebene eindeutige ID $</releaseinfo>
    
    <abstract>
      <para>Kurzer Aufmacher oder eine Zusammenfassung.</para>
    </abstract>
  </articleinfo>

  <sect1><title>Kapitel 1</title>
    <para>
      Der erste Absatz im ersten Kapitel.
    </para>
  </sect1>

  <sect2><title>Section 2</title>
    <para>
      Der erste Absatz im zweiten Kapitel.
    </para>
  </sect2>  
</article>
  

Artikel in DocBook 4.1 (SGML Variante)

Ein Artikel wird primär durch die Root-Tags <article> und </article> ausgewiesen. Danach folgen einige Meta-Informationen über das Dokument, die den Inhalt und die Urheber näher beschreiben. Danach folgt ein Abstract Artikel, der je nach Artikelform einen Aufmacher oder eine Zusammenfassung enthält. Dann folgen die einzelnen Kapitel mit Titel und Paragrafen.

Dem gegenüber steht das Buch, daß heute vor allem für Handbücher eingesetzt wird:

<!DOCTYPE book PUBLIC '-//OASIS//DTD DocBook V4.1//EN'>
<book>
  <bookinfo>
    <title>Your title here</title>
      
    <author>
      <firstname>Your first name</firstname>
      <surname>Your surname</surname>
      <affiliation>
        <address><email>Your e-mail address</email></address>
      </affiliation>
    </author>
   
    <copyright>
      <year>1998</year>
      <holder role='mailto:your e-mail address'>Your name</holder>
    </copyright>
    
    <pubdate role='rcs'>$Date: 2003/01/08 10:27:39 $</pubdate>
  
    <releaseinfo>$Id: DocBookSys-Chapter7-SGML-Creating.xml,v 1.1.1.1 2003/01/08 10:27:39 ug55axm Exp $</releaseinfo>
  
    <abstract>
      <para>Include an abstract of the book&apos;s contents here.</para>
    </abstract>
  </bookinfo>
  
  <part><title>Part1</title>
    <chapter><title>Part 1, Chapter 1</title>
      <sect1><title>Part1, Chapter 1, Section1</title>
        <para>
	  Hello there!
	<para>
      </sect1> 
    </chapter>

    <chapter><title>Part 1, Chapter 2</title>
      <sect1><title>Part1, Chapter 2, Section 1</title>
        <para>
	  Hi there!
	<para>
      </sect1> 
    </chapter>
  </part>

  <part><title>Part2</title>
    <chapter><title>Part 2, Chapter 1</title>
      <sect1><title>Part 2, Chapter 1, Section1</title>
        <para>
	  GoodDay there!
	<para>
      </sect1> 

      <sect1><title>Part2, Chapter1, Section2</title>
        <para>
	  GoodNight there! 
	<para>
      </sect1> 
    </chapter>
  </part>
</book>
  

Buch in DocBook 4.1 (SGML Variante)

Hauptunterschied sind die Root-Tags sowie der Austausch von <articleinfo> durch <bookinfo>. Auch die neue Gliderungsebene <part> kommt hinzu. Alle untergeordneten weiteren Sprachelemente können in beiden Varianten verwendet werden.

Strukturelemente (Tags)

Neben den reinen Strukturinformationen zur Gliederung eines Dokuments, die wir oben kennengelernt haben, gibt es natürlich noch weitere Elemente. Einige wichtige werden hier explarisch behandelt. Jedoch ist der Sprachumfang von SGML derartig mächtig, daß eine komplette Beschreibung den Rahmen dieses Dokumentes sprengen würde. In den Quellenangaben finden sich Verweise auf DocBook Beschreibungen.

Listen

Listen in DocBook sind sehr ähnlich zu ihren Gegenstücken in HTML. Doch DocBook kennt viel mehr Typen (insg. 20). Die wichitgsten sind:

 <simplelist type="inline">
 <member>Äpfel</member>
 <member>Orangen</member>
 <member>Bananen</member>
 <member>Pfirsiche</member>
 <member>Kirschen</member>
 </simplelist>>
  

Tabellen

Auch Tabellen entsprechen vom Aufbau ihren HTML Pendanten, doch auch hier ist die Auszeichnung etwas umfangreicher. <table> zeichnet eine Tabelle aus, in diesem Tag geschachtelt befinden sich row Tags, die entry Tags enhalten (vgl. tr und td bei HTML). Eine Tabelle benötigt einen Titel. Außerdem wird die eigentliche Tabelle mit tgroup-Tags umschlossen, die immer mindestens die Angabe der Spalten (cols) enthalten müssen. die Tags thead, tfoot und tbody umschließen zusätzlich eine Anzahl von row tags und sorgen so für zusätzliche Formatierung.

  <title>Anzahl Besucher</title>
   <tgroup cols="3">
     <thead>
       
       <row>
         <entry>Monat</entry><entry>Woche</entry><entry>Visitors</entry>
       </row>

     </thead>
     <tfoot>
       <row>
         <entry>Gesamt</entry><entry></entry><entry>1833</entry>
       </row>
     </tfoot>
     <tbody>
         <row>
         <entry>März</entry><entry>1</entry><entry>634</entry>
       </row>
       <row>
         <entry>März</entry><entry>2</entry><entry>657</entry>
       </row>
       <row>
         <entry>März</entry><entry>3</entry><entry>542</entry>
       </row>
     </tbody>
     </tgroup>
 </table> 

Dieses Beispiel würde so aussehen:

Tabelle 4.1. Anzahl Besucher

MonatWeekBesucher
Gesamt 1833
März1634
März2657
März3542

Verweise

SGML unterscheided 5 Arten von Verweisen:

 <title id="sec.title.link">Docbook Verweisarten</title>
 <para id="par.link">
 Dies ist ein Absatz auf den mit einem Link Tag verwiesen werden wird.
 Wenn Sie Neuigkeiten über die Welt erfahren wollen, lesen Sie doch einfach
 die  <ulink url="http://www.tagesschau.de">Nachrichten</ulink>.

 <anchor id="einstein.anchor"/>Einstein war da.</para>
 <para>
 Der obige Absatz ist <link linkend="par.link">hier</link> referenziert.
 <xref linkend="sec.link"/> (<xref linkend="sec.link"
 endterm="sec.title.link"/>) ist eine Referenz auf eine Sektion.  
 Meine E-Mail Addresse ist <email>damo@informatik.tu-chemnitz.de</email>
 </para>
 </sect1>

Weitere erwähnenswerte Auszeichnungstypen in DocBook

Die Rolle der Entities

Eine sehr große Rolle in DocBook spielen die sogenannten Entities. Dies sind Platzhalter, die an anderer Stelle im Dokument oder ausserhalb (per include) mit Hilfe des <!ENTITY> Statements definiert werden. Die Definitionen finden in der Doctype Definition oder in einer angepassten Dokumententypdefinition (DTD) statt. Verwendet man eine eigene DTD ist zu beachten, daß diese nicht mehr DocBook im eigentlichen Sinne ist und somit die Bezeichnung "DocBook XML V4.2-Based Variant" tragen sollte.

Entities sind Platzhalter, die mit beliebigem Text gefüllt seien können. Dabei kann eine Entity auch selber wieder Entities enthalten. Ein DocBook Prozessor löst die Eintities vor der Dokumentenverarbeitung auf. Somit sind Entities grob mit Präprozessormakros in C vergleichbar.

  <!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
  <!ENTITY kappname "&klipper;"> <!-- Entity, die auf in der DTD definierte Entity verweist -->
  <!ENTITY package "kdebase"> <!-- Entity, die zu String "kdebase" expandiert -->
  ]>
  

XML DocBook-basierte DTD mit Entity Deklarationen

Dokumente aus DocBook Vorlagen generieren

Validierung und Konvertierung

Zur Validierung von SGML-basierten Dokumenten wird onsgmls eingesetzt.
  onsgmls -s booktemplate.sgml
  
Mit OpenJade kann dann die Konvertierung vorgenommen werden. Dem Tool muss eine DSSSL Datei und die DocBook Datei übergeben werden. Für XML gibt es eine Reihe validierender Parser. Das KDE Projekt verwendet z.B. ein libxml-basiertes Tool zur Prüfung der syntaktischen Korrektheit der DocBook Quellen.

Docbook mit XSLT

Neben DSSSL kommt heutzutage sehr häufig auch XSLT bei der Transformation zum Einsatz. Vorgefertigte XSL Dateien liegen DocBook Distributionen bei. Die aktuelle Version befindet sich auf SourceForge. Eine Konvertierung von DocBook z.B. nach X-HTML findet mittels des XSLT Prozessors "xsltproc" statt.
  $ xsltproc docbook.xsl document.docbook > document.html
  
"document.html" enthält nun gültiges XHTML. Das Docbook kann auch die Information über das bei der Transformation zu verwendende Stylesheet gleich mitliefern. Dazu wird das stylesheet am Anfang der DocBook Datei angegeben werden,
    <?xml-stylesheet href="docbook.xsl" type="text/xsl"?>
  
Dann genügt folgende Kommandozeile zum Konvertieren:
  $ xsltproc document.docbook > document.html
  
Für ein XML Dokument braucht die XML Version einen gültigen XML Kopf:
  <?xml version="1.0" ?>
  <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2">
  
und muss als XML validieren.

Momentaner Stand und Ausblick

Docbook hat seine Anwendung primär bei Online Handbüchern oder Spezialanwendungen gefunden. Bei der API Dokumentation werden oft Tools wie Doxygen, für richtige Bücher zumeist TeX eingesetzt. Artikel werden zunehmend zur Aufgabe von Textverarbeitungsprogrammen oder es kommt auch hier TeX zum Einsatz. Neue Entwicklungen sind zur Zeit nicht absehbar.

Quellen