最近在搞一個把DocBook的Xml文檔轉換成Html的工作。
遇到了一些問題,把解決的心得總結一下寫在這里。
首先介紹一下DocBook的由來,DocBook是一個開源項目,其實就是一些DTD,規定了書寫文檔的一些標準。
在此標準下,就可以拋棄Word,WPS之類的工具用寫字板來寫文檔了。
文檔此Xml形式保存,需要的時候就使用Xslt通過已有的大量的各種各樣的Xsl轉換成所需要的格式,比如:RTF,PDF,HTML等等。
這種方式帶來了比較大的自由和靈活性。很多人對用這種方式寫文檔非常推崇。
DocBook網站:http://www.docbook.org, http://docbook.sf.net
講解DocBook Xsl的一個很好網站:http://www.sagehill.net/docbookxsl
O'reilly出版一本DocBook的書(免費) http://www.oreilly.com/catalog/docbook/chapter/book/docbook.html
DocBook百科全書: http://wiki.docbook.org/topic
遇到的一個主要問題是原來的DocBook就是想把一個Docbook文檔中的章節拆分轉換生成若干個Html.
查閱文檔后得知使用html\chunk.xsl可以實現此功能。
OK,下載Saxon,用Exe4Java生成Windwos平臺下的EXE文件后,進行轉換。
Good,果然生成了一堆Html,不過為什么Html的文件都是些ch0X.html這樣的格式?
再查閱文檔,原來這是DocBook的生成規則,第一章生成的Html就取名為ch01.html,
Sect1生成s01,加上所在章節的前綴,如果在第2章,則生成文件名為ch02s01.html,以此類推。
如果想要生成自定義的文件名,就需要在DocBook中指定相應的id屬性。如:
<chapter id="workflow">...</chapter>, 那么這一章就會生成workflow.html.
ok, 給DocBook文檔中所有章節加上了id屬性,指定了文件名。再生成一下。
Faint,失敗了,生成的文件名還是老樣子?為什么?
再仔細查閱文檔,原來在轉換的時候少指定了一個參數 use.id.as.filename,
只有此參數值不為0時,上述特性才生效。而缺省值是0.
OK,添加此參數, 執行如下命令:
saxon docbook.xml docbook-xsl-1.69.1\html\chunk.xsl use.id.as.file=1
如果使用xsltproc, 命令格式如下:
xsltproc --stringparam use.id.as.filename 1 ..\docbook-xsl-1.69.1\html\chunk.xsl docbook.xml
Good, 成功了。
最后,推薦一本關于Xslt的好書: Manning - Xslt Quickly, 使用了大量的實例來引導讀者一步步,由淺入深逐步學會Xslt