DocBook编译环境
这两天在研究DocBook,打算以后用它来写点东西,可以方便地转换成任意格式。国内DocBook的入门文章不多, 推荐读读这篇:《DocBook 助你完成传世之作》, 虽然目前还没有完成,但一些入门的基础知识还是讲得不错的。
至于编译环境,我推荐使用Linux发行版自带的编译环境,一般都是已经配置好的。 我尝试了Fedora Core 6自带的环境,SGML和XML都能用,还不错。
需要安装以下这些包:
- dialog-1.0.20051107-1.2.2.i386.rpm
- docbook-dtds-1.0-30.1.noarch.rpm
- docbook-simple-1.0-2.1.1.noarch.rpm
- docbook-slides-3.3.1-2.1.1.noarch.rpm
- docbook-style-dsssl-1.79-4.1.noarch.rpm
- docbook-style-xsl-1.69.1-5.1.noarch.rpm
- docbook-utils-0.6.14-5.1.noarch.rpm
- docbook-utils-pdf-0.6.14-5.1.noarch.rpm
- jadetex-3.12-13.1.1.noarch.rpm
- netpbm-10.35-6.fc6.i386.rpm
- netpbm-progs-10.35-6.fc6.i386.rpm
- openjade-1.3.2-27.i386.rpm
- opensp-1.5.2-3.1.i386.rpm
- perl-SGMLSpm-1.03ii-16.2.1.noarch.rpm
- psutils-1.17-26.1.i386.rpm
- sgml-common-0.6.3-18.noarch.rpm
- tetex-3.0-32.fc6.i386.rpm
- tetex-dvips-3.0-32.fc6.i386.rpm
- tetex-fonts-3.0-32.fc6.i386.rpm
- tetex-latex-3.0-32.fc6.i386.rpm
- xml-common-0.6.3-18.noarch.rpm
装完之后,SGML的样式表位于 /usr/share/sgml/docbook/dsssl-stylesheets-1.79, XML的样式表位于/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1。 建议将这两个目录在当前目录下建立符号链接,以便于输入:
ln -s /usr/share/sgml/docbook/dsssl-stylesheets-1.79/ dsssl
ln -s /usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/ xsl
SGML的编译方法:建立一个测试文档 hello.sgml:
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN">
<book>
<article>
<articleinfo>
<title>Hello World!</title>
<author><firstname>名</firstname><surname>姓</surname></author>
</articleinfo>
<sect1><title>Hello World!</title>
<para>
Hello world! 这是我的第一个 DocBook 文档。
</para>
</sect1>
</article>
</book>
然后用如下命令行即可编译成HTML:
$ openjade -E 0 -t sgml -d dsssl/html/docbook.dsl hello.sgml
而XML相对简单些,测试文档 hello.xml 如下:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://docbook.org/xml/4.1.2/docbookx.dtd">
<book lang="zh-CN">
<title>你好,世界!</title>
<article>
<articleinfo>
<title>Hello World!</title>
<author><firstname>名</firstname><surname>姓</surname></author>
</articleinfo>
<sect1><title>Hello World!</title>
<para>
Hello world! 这是我的第一个 DocBook 文档。
</para>
</sect1>
</article>
</book>
编译命令行:
$ xsltproc --nonet -o index.html xsl/html/docbook.xsl hello.xml
不过这时如果你查看生成的index.html的源代码,会发现汉字是被编码成第这样的形式的。 这是因为默认的样式表的编码方式为ISO-8859-1,不能识别汉字。我们要将它改成UTF-8。 可以参考这里:Output encoding。
建立自己的样式表 hello.xsl:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="xsl/html/docbook.xsl"/>
<xsl:output method="html" encoding="UTF-8" indent="no"/>
</xsl:stylesheet>
然后转换:
$ xsltproc --nonet -o index.html hello.xsl hello.xml
这样转换结果中的汉字就原样显示了。
相对来说我更喜欢XML格式,一是因为它的语法比SGML简单些,二是因为转换结果的HTML比较漂亮。
另外,如果你想自己搭建DocBook的编译环境,可以参考这篇文章:
一些DocBook的参考资料:
- DocBook: The Definitive Guide,官方网站 www.docbook.org 上不去,这个O’Reilly版本应该是全的。
- DocBook XSL: The Complete Guide
2009/2/5更新:在cygwin下安装docbook也相当简单,只需安装这几个包即可:
- docbook-xml412
- docbook-xsl
- libxslt
- libxml2
- openjade
- OpenSP
- libgpg-error
2009/2/19更新:如果想把每个章节都做到不同的html文件中(即chunk形式),可以这样定义xsl(已解决汉字被编码成第的问题):
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets-1.69.1-5.1/html/chunk.xsl"/>
<xsl:param name="chunker.output.encoding" select="'UTF-8'"/>
</xsl:stylesheet>