original in en Egon Willighagen
en to nl Floris Lambrechts
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.
Dit artikel beschrijft het gebruik van Kate en z'n XML plugin voor het schrijven van DocBook XML documenten.
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.
./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 :
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).
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:
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:
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 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 |
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.
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.
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.