Kapitel 3. DocBook i XML : Ett konkret exempel
Autogenerering av databasbeskrivning
Autogenerering av databasbeskrivning Här skall vi prova att sätta DocBook i arbete, och samtidigt prova köra DockBook i XML istället för SGML. Vi tänker oss att vi jobbar med en relativt stor databas, som dessutom genomgår förändringar ibland. Vi vill kunna ta ut, automatiskt, ett dokument som beskriver tabellerna i databasen. Dokumentformaten skall vara pdf, en ensam HTML fil och en HTML struktur, uppdelad per tabell. Dessutom vill vi gärna kunna byta plattform, om det skulle behövas.
Ett externt verktyg kommer att gå igenom databasen, i detta fall en PostgreSQL 7.3.1, och skapa en fil med XML-syntax för att beskriva databasen. Vi använder oss av tcl för att gå igenom databasen, pgtcl som har stöd för PostgreSQl inbyggt. Utdata från pgtcl passar dock inte riktig in i DocBooks struktur, så vi måste stuva om datat. Det gör vi med XSL. Vi beskriver hur transformeringen skall gå till i ett XSL-dokument. Vi har dessutom ett ramdokument för att beskriva metadata om dokumentet, och vi gör 'include' på den XSL-processade databasbeskrivningen. Vi är dessutom lata, och stoppar allt i en Makefile.
Databasen kan givetvis bytas mot någon annan, men då måste XSL-dokumentet anpassas därefter, likaså det externa verktyget, dvs tcl-skriptet.
3.1. Verktyg
För att klara detta kommer vi att använda oss av:
- PostgreSQL med pgtclsh
- Java
- Fop (Formatting Objects Processor) från Apache
- Saxon (XSL motor)
- DocBook Stylesheets
- Make
För att bringa ordning i detta kommer vi att hantera dessa filer: * datamodel.xml- statiskt huvuddokument
- make_tables.tcl- skriptet som skaffar rådata
- tables.xml- utdata frånmake_tables.tcl
- to_docbook_table.xsl- stylesheet för att dockbook-anpassa rådata
- docbook_tables.xml- utdata från stylsheetet, i docbook-format
- Makefile- hur vi utför kommandona
3.1.1. Installation av verktyg
Här går vi bara genom de docbookrelaterade verktygen, databas och make utgår jag från att de redan finns.
3.1.1.1. Java
Java kan hämtas på[http://java.sun.com/|Suns javasidor]. Detta exempel har använt Java SDK 1.4.1 rpm-versionen, men de flesta nyare versioner duger. Rpm-versionen installerar det mesta, men jag brukar lägga till följande i~/.basrc:
export JAVA_HOME=/usr/java/j2sdk1.4.1_01/jre
Dessutom brukar jag skapa en symbolisk länk till java
ln -s $JAVA_HOME/bin/java /usr/bin/java
3.1.1.2. FOP
Fop kan hämtas på[http://xml.apache.org/fop/|Apaches XML sidor]. Detta exempel har använt Fop 0.20.5. Tara upp Fop, och lägg det t.ex. under/usr/java/fop. Det är bra att lägga till följande i~/.basrc:
export FOP_HOME=/usr/java/fop/fop-0.20.5rc3a
För att hantera bilder behövs ett bildbibliotek. Hämta[http://java.sun.com/products/jimi/|Jimi hos Sun]och packa upp det medtar xvzf jimi1_0.tar.Z. Leta uppJimiProClasses.zipoch kopiera det till$FOP_HOME/lib/jim-1.0.jar. Det skall alltså till ett namnbyte på filen.
3.1.1.3. Saxon
Saxon kan hämtas hos[https://sourceforge.net/project/showfiles.php?group_id=29872|SourceForge]. Detta exempel har använt Saxon 6.5.2, eftersom det är den rekomenderade versionen, även om det finns nyare. Packa upp Saxon, och lägg det t.ex. under/usr/java/saxon.
3.1.1.4. DocBook Stylesheets
Stylesheets kan hämtas hos[http://sourceforge.net/projects/docbook|SourceForge]. Det är 'Docbook-xsl' som skall hämtas, jag kör version 1.61.2. Mandrake 9.1 har 1.60.1 installerat och det duger bra. Finns som/usr/share/sgml/docbook/xsl-stylesheets-1.60.1. Det är ganska vettigt att skapa katalogen/usr/share/sgml/docbook/xsl-stylesheetssom en symbolisk länk till den docbook-version som anväds i systemet. Då blir det lätt att byta mellan versioner, om man vill. Mandrake 9.1 har satt upp det så.
Dessutom behövs en DTD, Mandrake har xml-dtd-4.1.2, som finns som/usr/share/sgml/docbook/xml-dtd-4.1.2men vill man den nyaste är det 4.2, som finns hos[http://www.oasis-open.org/docbook/|Oasis].
