DocBook XML documenten bewerken

ArticleCategory: [Artikel Kategorie]

Applications

AuthorImage:[Bild des Autors]

[Egon Willighagen]

TranslationInfo:[Author and translation history]

original in en Egon Willighagen

en to nl Floris Lambrechts

AboutTheAuthor:[Über den Autor]

Haalde zijn masters degree in de chemie aan de Universiteit van Nijmegen en doet daar nu ook zijn PhD onderzoek naar moleculaire representatie. Speelt basketbal en programmeert Java toepassingen.

Abstract:[Zusammenfassung]

Dit artikel beschrijft het gebruik van Kate en z'n XML plugin voor het schrijven van DocBook XML documenten.

ArticleIllustration:[Titelbild des Artikels]

[Illustratie]

ArticleBody:[Der eigentliche Artikel]

Introductie

XML bewerken met OpenSource was lange tijd geen sinecure. Je hebt een editor nodig die geldige XML produceert, en zo mogelijk het resultaat ook meteen weergeeft. Er zijn editors die dit alles kunnen, maar ze zijn meestal niet 'open'. De editors uit de open hoek geven geen grafisch resultaat weer, maar ze helpen wel om geldige XML te schrijven en ze adviseren je over de elementen die je mag gebruiken op een bepaalde plaats in het document.

Er is uiteraard Emacs met z'n DocBook minor mode, die best goed werkt (zie het vorige DocBook artikel). Deze speciale mode maakt het mogelijk om elementen te kiezen uit een lijst die afhankelijk is van de elementen die al aanwezig zijn. En ook tab-completion, gebaseerd op dezelfde info, is mogelijk.

Dit artikel echter, gaat over Kate als een editor voor DocBook / XML.

Kate

Kate is één van de editors van de KDE desktopomgeving. Het is vrij licht, heeft ondersteuning voor meerdere open documenten en heeft syntax kleuring (highlighting), ook voor XML. Nog interssanter is de XML plugin die Daniel Naber vorig jaar schreef. Die kan je helpen om geldige XML te schrijven. In KDE 3.0 zit deze Kate-plugin in het kde-addon pakket. Als je dat nog moet installeren, kan je dat doen door een binaire versie te installeren, ofwel door het te compileren uit de broncode:
./configure --prefix=/pad/waar/je/kde3/staat
make
sudo make install

Wanneer de plugin geïnstalleerd is, moet je Kate hiervan op de hoogte stellen. Ga naar "Kate instellen" in het "Instellingen" menu. In de "Plugins" beheerder zet je de XML in de lijst met geladen plugins :

[Kate's plugin manager]
Noot van de vertaler: Kate kent ook Nederlands!

Het maken van de Meta DTD

Meta DTDs worden gemaakt met dtdparser van Norman Walsh, waarvan de pakketten op SourceForge.net staan.

Ik gebruikte een licht aangepaste versie 2.0beta6. Bijvoorbeeld het eerste lijntje van het dtdparse programma moest ik aanpassen om naar de juiste plaats van mijn Perl installatie te verwijzen. Het programma draaien geeft iets als:

> ./dtdparse /pad/naar/docbookx.dtd
Public ID: unknown
System ID: /usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd
SGML declaration: unknown, using defaults for xml and namecase
Loading dbnotnx.mod
Loading dbcentx.mod
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsa.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsb.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsc.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsn.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamso.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOamsr.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISObox.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOcyr1.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOcyr2.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOdia.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk1.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk2.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk3.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOgrk4.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOlat1.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOlat2.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOnum.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOpub.ent
Loading /usr/share/sgml/entities/xml-iso-entities-8879.1986/ISOtech.ent
Loading dbpoolx.mod
Loading calstblx.dtd
Loading dbhierx.mod
Loading dbgenent.mod
Parse complete.
Writing docbookx.dtd.xml...
Done.

Merk op dat er veel 'entities' geladen worden. Mede hierdoor is de resulterende Meta DTD 1.63 Mibibytes groot. Maar met een XSLT processor zoals xsltproc kan dit verkleind worden tot 0.96 MiB met de simplify_dtd.xsl stylesheet van het kde-addon pakket:

> xsltproc simplify_dtd.xsl docbookx.dtd.xml > docbook-xml-4.1.2.dtd.xml

Het aangemaakte docbook-xml-4.1.2.dtd.xml kun je dan kopiëren naar /pad/naar/kde3/share/apps/katexmltools/, waar /pad/naar uiteraard het pad is naar de map waar je KDE3 geïnstalleerd staat. In je homedir is ook een mogelijkheid, want de XML plugin zal je naar een bestandsnaam vragen wanneer je een nieuwe Meta DTD toewijst (zie verder).

Het schrijven

Bij het starten van een nieuwe DocBook XML document moet je een Meta DTD toewijzen. Dit doe je door "Assign Meta DTD" te kiezen in het "XML Plugin" menu. Een venster verschijnt waarin je de DTD van je keuze kunt selecteren. In dit geval is dat de DocBook XML 4.1.2 Meta DTD die we net gemaakt hebben. Er verschijnt nu een nieuw dialoog venster dat je informeert over de voortgang:

[Meta DTD parsing dialoogvenster]

In het nieuwe, lege document typen we "<book>". Om de tag te sluiten typen we F11. Als de syntax kleuring nog niet aanstaat, kun je dat aanzetten door "Syntaxaccentuatiemodus" te kiezen in het "Document" menu. XML syntax highlighting staat in het "Markup" submenu.

Omdat we vergeten zijn wat de atrributen zijn van het book element, plaatsen we de cursor op het eind van het woord 'book' in de openingstag en doen we Ctrl+Enter. Een pop-up toont je nu een lijst van alle mogelijke attributen voor dit element:

[Een attribuut toevoegen]

Als je de cursor tussen de aanhalingstekens (="") van een attribuut zet, kan Ctrl+Enter je zelfs vertellen wat hier de mogelijke waarden zijn - voor zover de DTD daar informatie over geeft. Bij het id attribuut is dat niet het geval.

We typen een id en nu hebben we de volgende code:

<book id="EenID">
</book>

Als we nu tussen beide 'book' tags gaan staan, dan geeft Ctrl+Enter een nieuwe pop-up lijst. Deze keer krijgen we alle mogelijke dochter-elementen van het 'book' te zien. We selecteren bijvoorbeeld het 'title' element:

[Een dochter-element invoegen]

Een nadeel van de plugin is dat hij wel de dochter-elementen kent, maar niks weet van hun toegelaten aantal of volgorde. Bijvoorbeeld wanneer de DTD zegt dat je maar één titel element mag gebruiken, zal de XML plugin je niet waarschuwen als je er twee schrijft. Omdat de plugin ook (nog) geen validatiemogelijkheid heeft maak je nog dikwijls ongeldige documenten.

Hier is een overzicht van de mogelijkheden van de plugin:

Taak Opdracht
XML Invoegen (elementen en attributen) Ctrl+Return
Entity Invoegen F10
Tag Sluiten F11

KDE DocBook

Het KDE project zelf gebruikt ook DocBook als het formaat voor de documentatie. De XML plugin wordt dan ook standaard meegeleverd met de KDE-versie van DocBook. Het is uiteraard aangewezen om die Meta DTD voor DocBook te gebruiken (in plaats van de Meta DTD voor DocBook XML 4.1.2) indien je KDE documentatie schrijft.

MathML en SVG

DocBook ondersteunt tegenwoordig MathML voor het invoegen van wiskundige vergelijkingen. Een 'gemengde' DTD om DocBook documenten met MathML erin te valideren kun je vinden in deze email.

De SVG DTD is er spijtig genoeg niet op berekend om gemengd te worden met DocBook. Maar er wordt in ieder geval aan gewerkt.

Om dit in de Kate XML plugin te doen moet je met dtdparse een nieuwe Meta DTD maken gebaseerd op de samengestelde DTD.

Conclusie

De Kate XML plugin is echt een hulp bij het schrijven van DocBook XML. Perfect is het niet, maar het bestaat dan ook nog maar kort. En tesamen met KDE 3.0 is het beschikbaar voor enorm veel mensen.

mirror server hosted at Truenetwork, Russian Federation.