What is the recommended toolchain for formatting XML DocBook? [closed] What is the recommended toolchain for formatting XML DocBook? [closed] xml xml

What is the recommended toolchain for formatting XML DocBook? [closed]


I've been doing some manual writing with DocBook, under cygwin, to produce One Page HTML, Many Pages HTML, CHM and PDF.

I installed the following:

  1. The docbook stylesheets (xsl) repository.
  2. xmllint, to test if the xml is correct.
  3. xsltproc, to process the xml with the stylesheets.
  4. Apache's fop, to produce PDF's.I make sure to add the installed folder to the PATH.
  5. Microsoft's HTML Help Workshop, to produce CHM's. I make sure to add the installed folder to the PATH.

Edit: In the below code I'm using more than the 2 files. If someone wants a cleaned up version of the scripts and the folder structure, please contact me: guscarreno (squiggly/at) googlemail (period/dot) com

I then use a configure.in:

AC_INIT(Makefile.in)FOP=fop.shHHC=hhcXSLTPROC=xsltprocAC_ARG_WITH(fop, [  --with-fop  Where to find Apache FOP],[    if test "x$withval" != "xno"; then        FOP="$withval"    fi])AC_PATH_PROG(FOP,  $FOP)AC_ARG_WITH(hhc, [  --with-hhc  Where to find Microsoft Help Compiler],[    if test "x$withval" != "xno"; then        HHC="$withval"    fi])AC_PATH_PROG(HHC,  $HHC)AC_ARG_WITH(xsltproc, [  --with-xsltproc  Where to find xsltproc],[    if test "x$withval" != "xno"; then        XSLTPROC="$withval"    fi])AC_PATH_PROG(XSLTPROC,  $XSLTPROC)AC_SUBST(FOP)AC_SUBST(HHC)AC_SUBST(XSLTPROC)HERE=`pwd`AC_SUBST(HERE)AC_OUTPUT(Makefile)cat > config.nice <<EOT#!/bin/sh./configure \    --with-fop='$FOP' \    --with-hhc='$HHC' \    --with-xsltproc='$XSLTPROC' \EOTchmod +x config.nice

and a Makefile.in:

FOP=@FOP@HHC=@HHC@XSLTPROC=@XSLTPROC@HERE=@HERE@# Subdirs that contain docsDOCS=appendixes chapters reference XML_CATALOG_FILES=./build/docbook-xsl-1.71.0/catalog.xmlexport XML_CATALOG_FILESall:    entities.ent manual.xml htmlclean:@echo -e "\n=== Cleaning\n"@-rm -f html/*.html html/HTML.manifest pdf/* chm/*.html chm/*.hhp chm/*.hhc chm/*.chm entities.ent .ent@echo -e "Done.\n"dist-clean:@echo -e "\n=== Restoring defaults\n"@-rm -rf .ent autom4te.cache config.* configure Makefile html/*.html html/HTML.manifest pdf/* chm/*.html chm/*.hhp chm/*.hhc chm/*.chm build/docbook-xsl-1.71.0@echo -e "Done.\n"entities.ent: ./build/mkentities.sh $(DOCS)@echo -e "\n=== Creating entities\n"@./build/mkentities.sh $(DOCS) > .ent@if [ ! -f entities.ent ] || [ ! cmp entities.ent .ent ]; then mv .ent entities.ent ; fi@echo -e "Done.\n"# Build the docs in chm formatchm:    chm/htmlhelp.hpp@echo -e "\n=== Creating CHM\n"@echo logo.png >> chm/htmlhelp.hhp@echo arrow.gif >> chm/htmlhelp.hhp@-cd chm && "$(HHC)" htmlhelp.hhp@echo -e "Done.\n"chm/htmlhelp.hpp: entities.ent build/docbook-xsl manual.xml build/chm.xsl@echo -e "\n=== Creating input for CHM\n"@"$(XSLTPROC)" --output ./chm/index.html ./build/chm.xsl manual.xml# Build the docs in HTML formathtml: html/index.htmlhtml/index.html: entities.ent build/docbook-xsl manual.xml build/html.xsl@echo -e "\n=== Creating HTML\n"@"$(XSLTPROC)" --output ./html/index.html ./build/html.xsl manual.xml@echo -e "Done.\n"# Build the docs in PDF formatpdf:    pdf/manual.fo@echo -e "\n=== Creating PDF\n"@"$(FOP)" ./pdf/manual.fo ./pdf/manual.pdf@echo -e "Done.\n"pdf/manual.fo: entities.ent build/docbook-xsl manual.xml build/pdf.xsl@echo -e "\n=== Creating input for PDF\n"@"$(XSLTPROC)" --output ./pdf/manual.fo ./build/pdf.xsl manual.xmlcheck: manual.xml@echo -e "\n=== Checking correctness of manual\n"@xmllint --valid --noout --postvalid manual.xml@echo -e "Done.\n"# need to touch the dir because the timestamp in the tarball# is older than that of the tarball :)build/docbook-xsl: build/docbook-xsl-1.71.0.tar.gz@echo -e "\n=== Un-taring docbook-xsl\n"@cd build && tar xzf docbook-xsl-1.71.0.tar.gz && touch docbook-xsl-1.71.0

to automate the production of the above mentioned file outputs.

I prefer to use a nix approach to the scripting just because the toolset is more easy to find and use, not to mention easier to chain.


We use XMLmind XmlEdit for editing and Maven's docbkx plugin to create output during our builds. For a set of good templates take a look at the ones Hibernate or Spring provide.


For HTML output, I use the Docbook XSL stylesheets with the XSLT processor xsltproc.

For PDF output, I use dblatex, which translates to LaTeX and then use pdflatex to compile it to PDF. (I used Jade, the DSSSL stylesheets and jadetex before.)