original in en Egon Willighagen
en to nl Rano Kuhl
Werd lid van het Nederlandse LF team in 1999 en werd tweede redacteur eerder dit jaar. Is informatische chemie student op de Universiteit van Nijmegen. Speelt basketbal en houdt van rondreizen.
Het eerste gedeelte van dit artikel zal gaan over het formaat van DocBook documenten. Nadat DocBook is geïntroduceerd, zal ik proberen uit te leggen welke programma's nodig zijn voor het omzetten van deze DocBook bestanden naar PDF-formaat (te lezen met Adobe's Acrobat.)
DocBook [1] is een SGML applicatie ontwikkeld voor de opmaak van documenten, net zoals HTML de opmaak voor web documenten verzorgt. In tegenstelling tot HTML, biedt DocBook geen directe informatie over de layout van het document. Dat is de reden waarom DocBook documenten eerst moeten worden omgezet naar een ander formaat voordat ze kunnen worden gelezen. Omzetting naar andere formaten wordt gedaan door tools die het DocBook document van een zekere stylesheet voorzien.
Later in dit artikel zal worden uitgelegd welke stylesheet je moet gebruiken voor deze omzetting en welke tool de stylesheet toepast op het DocBook document. Eerst gaan we zien hoe documenten zijn samengesteld.
DocBook is in staat de opmaak te verzorgen van twee soorten documenten: boeken en artikels. Aangezien ze in principe hetzelfde zijn, zal ik de opmaak van een artikel als voorbeeld nemen. Voordat ik een voorbeeld geef van een eenvoudig document, eerst wat basis principes over DocBook
DocBook is in principe een SGML toepassing, net als HTML. Maar er is ook een XML versie van DocBook. De XML versie is wat strikter, maar makkelijker te lezen en daardoor makkelijker te leren. Omdat XML op zich ook een SGML toepassing is, kunnen alle SGML tools nog steeds worden gebruikt. De belangrijke verschillen tussen SGML en de XML variant zijn het volgende (dit geldt voor elke XML toepassing):
Nu we deze belangrijke punten hebben besproken, kunnen we beginnen met het schrijven van artikels in DocBook.
<?xml version="1.0"?> <article> <title>Het schrijven van DocBook artikels</title> <artheader> <abstract> Dit artikel beschrijft hoe je DocBook kunt gebruiken voor het maken van PDF documenten. </abstract> <author> <firstname>Egon</firstname> <surname>Willighagen</surname> </author> <date></date> </artheader> </article>
Niet zo moeilijk zou ik zeggen. We hebben een artikel gemaakt met een titel, een korte uitleg, een datum wanneer het was geschreven en de naam van de auteur.
De volgende stap is het toevoegen van secties aan het artikel door het gebruik maken van sectie elementen:
<?xml version="1.0"?> <article> <title>Het schrijven van DocBook artikels</title> <artheader> ... de kop van het artikel ... </artheader> <section> <title>Introductie</title> </section> ... andere secties ... </article>
We hebben nu een Introductie sectie aan het artikel toegevoed. Extra sectie-elementen kunnen worden gebruikt voor bijvoorbeeld Resultaten, Conclusie of welke andere sectie dan ook.
Alle tekst staat tussen para elementen, vergelijkbaar met HTML's p elementen:
<section> <title>Introductie</title> <para> DocBook is een SGML applicatie ontwikkeld voor de opmaak van documenten, precies zoals HTML de opmaak voor web documenten verzorgt. </para> </section>
Maar naast tekst zijn er ook veel andere elementen beschikbaar. In de rest van deze sectie is te zien hoe informatie zoals voorbeelden, lijsten, plaatjes en anderen kunnen worden ingevoegd in het artikel.
Voorbeelden toevoegenVoorbeelden kunnen worden toegevoed met het gebruik van het example element, zoals in het volgende voorbeeld waar een voorbeeld-programma wordt weergegeven:
<example> <title> Perl programma dat een XML document in een HTML document vertaalt. </title> <programlisting> #!/usr/bin/perl -w use diagnostics; use strict; use XML::XSLT; my $XSLTparser = XML::XSLT->new(); $XSLTparser->open_project ("file.xml", "stylesheet.xsl", "FILE", "FILE"); $XSLTparser->process_project; $XSLTparser->print_result(); </programlisting> </example>Maar voorbeelden kunnen ook tekst, plaatjes en andere informatie bevatten. Lijsten toevoegen
Net als in HTML kan DocBook ook lijsten bevatten. Lijsten worden gedefineerd door het itemizedlist element dat een of meer listitem elementen kan bevatten:
<itemizedlist> <listitem> <para>een item</para> </listitem> <listitem> <para>nog een item</para> </listitem> <listitem> <para>en nog een item</para> </listitem> </itemizedlist>Merk op dat hier ook de tekst tussen het para element staat. Tekst moet altijd binnenin dit element komen te staan!
Lijsten kunnen ook worden gesorteerd. In dat geval kun je het orderedlist element gebruiken in plaats van het itemizedlist element. Door het invoegen van een numeration parameter (<orderedlist numeration="Arabic">) kun je het type nummer instellen
Figuren invoegenAfbeeldingen kunnen in het artikel worden gezet:
<mediaobject> <imageobject> <imagedata fileref="een_afbeelding.gif" format="gif"/> </imageobject> <textobject> <para> Als je niet gebruik maakte van <productname>Lynx</productname> zou je nu een afbeelding zien. </para> </textobject> </mediaobject>Je kunt zien dat naast het plaatje ook een tekst is gegeven. Ik had ook nog een filmpje kunnen invoegen. De stylesheet bewerker die zorgt dat DocBook documenten worden omgezet in PDF kan dan het beste type medium kiezen, wat voor de uitvoer waarschijnlijk het beste van toepassing is. De stylesheet bewerker maakt dus zelf een keuze uit wat er voorhanden is.
Merk op dat het woord "Lynx" een speciale markering heeft. Dit is een specifieke eigenschap voor de DocBook taal waarbij layout gescheiden is van informatie. Het artikel zegt gewoon dat Lynx een programma is waarvan Lynx de naam is. De stylesheet beschrijft later dat het productnaam in een speciaal lettertype moet worden getoond, bijvoorbeeld, italic. In de volgende sectie zien we hoe we andere woorden een opmaak kunnen geven.
Woord opmaakZoals in het voorbeeld figuurtje hierboven was te zien, kunnen de woorden zelf een opmaak hebben. In de tabel hieronder zijn een paar opmaak elementen voor woorden gegeven:
Element | Beschrijving |
---|---|
abbrev | Een afkorting, vooral wanneer gevolgd door een punt. Voorbeeld: <para><abbrev>bijv.</abbrev> bedoeld als voorbeeld.</para> |
acronym | Een acronym Voorbeeld: <para><acronym>DSM</acronym> (chemisch bedrijf) betekent "De StaatsMijnen"</para> |
Iemands emailadres Voorbeeld: <para>Mijn email is <email>[email protected]</email></para> |
|
keyword | Een sleutelwoord van het artikel Voorbeeld: <para>Naar mijn bescheiden mening is <keyword>scheikunde</keyword> erg belangrijk.</para> |
Nu dat we een kleine inleiding over DocBook elementen hebben gezien, is het tijd om verder te gaan en om te beginnen met het maken van een PDF document.
Als we eenmaal een DocBook bestand hebben kunnen we deze omzetten naar verschillende formaten. Het omzetten naar PDF is al vermeld, maar we zouden het document ook om kunnen zetten naar een website, een PostScript document, een Tex source bestand of een RTF (Rich Text Format) document dat WordPerfect, Word, StarWriter en andere tekstverwerkers kunnen lezen. Maar in dit artikel hebben we het alleen maar over het omzetten naar een PDF document.
DocBook documenten kunnen worden geschreven in elke editor zoals VI en
Nedit. Nog beter is Emacs: Norman Walsh schreef een Emacs major mode voor
DocBook [3] wat enige nuttige functies toevoegt, zoals
het aanvullen van elementnamen of het invoegen van een compleet voorbeeld
element.
Naast het maken van je eigen test-artikel, kun je ook
mijn versie
downloaden wat alle voorbeelden bevat die in dit artikel
worden gegeven.
Zoals werd verteld aan het begin van dit artikel, hebben we een stylesheet en een tool nodig dat dit stylesheet gebruikt voor het omzetten van het DocBook artikel in PDF formaat. De stylesheet converteert het DocBook niet direct naar PDF formaat, er zit nog een TeX stap tussen. De stylesheet die wij gebruiken zijn de DocBook Stylesheets van Norman Walsh [4] die zijn geschreven in DSSSL.
Om deze DSSSL stylesheets te kunnen gebruiken heb je een DSSSL processor nodig. De processor die ik gebruik heet Jade [5] en is ontworpen door James Clark (hij stopte met het onderhoud ervan). Het is vervangen door OpenJade [6], maar die tool heb ik nog niet gebruikt.
Op mijn Debian systeem zijn de Modular Stylesheets van Walsh voor het omzetten in PDF, geïnstalleerd in /usr/lib/sgml/stylesheets/dsssl/docbook/nwalsh/print/ wat wordt weergegeven met de "-d" parameter voor Jade. De "-t" optie vertelt Jade om de TeX uitvoerfilter te gebruiken:
egonw@localhost> ls -al total 3 -rw-r--r-- 1 egonw egonw 2887 Apr 8 22:06 docbook_article.xml egonw@localhost> jade -t tex -d /usr/lib/sgml/stylesheets/dsssl/docbook/nwalsh/print/docbook.dsl docbook_article.xml egonw@localhost> ls -al total 21 -rw-r--r-- 1 egonw egonw 2887 Apr 8 22:06 docbook_article.xml -rw-r--r-- 1 egonw egonw 17701 Apr 8 22:29 docbook_article.texZoals je ziet maakt Jade een TeX-bestand aan. Dit TeX-bestand kan worden omgezet in een PDF bestand met behulp van de pdfjadetex tool dat bij het JadeTeX-pakket zit. [7]:
egonw@localhost> pdfjadetex docbook_article.texDit maakt een een aardige docbook_article.pdf aan. Merk op dat er veel grafische layout wordt toegevoegd, bijvoorbeeld de titel van het artikel verschijnt bovenaan op elke pagina en programmacode staat in een ander lettertype. Toen ik met DocBook begon ging de meeste tijd zitten in het begrijpen welke combinaties van elementen ik zou kunnen hebben. Dit artikel laat maar ��n mogelijke combinatie zien.
De DocBook XML taal is erg uitgebreid. En hetzelfde geldt voor de tools waarmee je DocBook documenten omzet in andere formaten. Dit artikel geeft alleen maar een korte inleiding. Vragen kunnen worden gesteld op de talkback pagina van dit artikel. Meer informatie kan worden gevonden in de referenties [8] en [9]. Merk op dat deze laatste referentie compleet is geschreven in DocBook!
Geavanceerde onderwerpen die niet behandeld zijn in dit artikel, maar wel mogelijk met Docbook: