2007年10月1日星期一

DocBook安装手记

让我来说说XML DocBook的安装。

编辑器

你可以使用任何一个纯文本编辑器,比如Windows的记事本,来开始DocBook之旅。为了显得很专业,有更好的编辑体验,你需要一个XML编辑器

我使用Emacs+nXML,在.emacs中添加如下配置:

;;xml
(load "rng-auto.el")
(setq auto-mode-alist
(cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode)
auto-mode-alist))
(mapc
(lambda (pair)
(if (or (eq (cdr pair) 'xml-mode)
(eq (cdr pair) 'sgml-mode)
(eq (cdr pair) 'html-mode))
(setcdr pair 'nxml-mode)))
magic-mode-alist)
nXML可以自动检查所编辑的XML文件的有效性。

文档验证

为了验证一个XML文档,我们需要该文档的文档结构定义。

nXML自带的验证文件是DocBook4.2的,可能需要自己下载一个来更新。DocBook的文档结构定义可以到这里下载,不过,如果你想使用还未正式发布的DocBook5.0,建议去DocBook.org看看,那里的比较新。出于我所不知道的原因,这个地址被和谐了。

一般nXML不需要什么特殊的设置或操作,就可以识别DocBook了,可以用C-c C-s C-w命令查看当前使用的验证文件。

也有单独的验证工具,比如xmllint。Windows版去这里下载,如libxml2-2.6.30.win32.zip。Ubuntu则需要安装libxml2-utilsxmllint支持使用rng验证:
xmllint --noout --relaxng docbook/DTD/rng/docbook.rng test.xml
DocBook充分体现了内容和表现分离的原则。它的文档结构定义是纯语意的,这里是标题,这里是段落,这里是引文等等,却不负责排版,如哪里需要黑体或使用什么字体。一份验证合格的DocBook通常并不用来直接发布,还需要排版成其它更用户友好的格式,如html和pdf。

文档处理工具

熟悉XML的人知道,XML使用XSL来排版,人们发现
准备 XML 文档以备显示的过程中执行的任务可以分成两个阶段:转换和格式化。转换是将一个 XML 文档(或其内存中的表示法)转换成另一个 XML 文档的过程。格式是将已转换的树状结构转换成两维图形表示法或可能是一维音频流的过程。XSLT 是为控制第一阶段“转换”而开发的语言。第二阶段“格式化”的开发工作还是进行中。
XSLT

XSLT规范由W3C制定,最新的是2.0版,今年1月23日正式成为W3C正式标准。DocBook用的还是1.0,2.0离实际应用有点远,目前似乎只有Saxon 8有很好的支持。

DocBook的XSLT样式表可以去sourceforge下载,如果使用DocBook5.0,需要下载DocBook XSL-NS,区别在于添加了名字空间。不过原来的XSL也还可以用,只是转换时可能有警告。

我们还需要一个软件来对用户的DocBook文档应用样式表并输出。最常用的工具之一是xsltproc,Windows用户去这里下载,需要的软件是
  • iconv-1.9.2.win32.zip:需要它的dll文件
  • zlib-1.2.3.win32.zip:需要它的dll文件
  • libxslt-1.1.22.win32.zip:提供了xsltproc程序,用于格式转换。
  • libxml2-2.6.30.win32.zip:需要它的dll文件。同时提供了验证工具xmllint和xmlcatalog。
下面是简单的用法:
xsltproc -o foo.html docbook/XSL/html/docbook.xsl foo.xml
除了xsltproc,还有许多工具可用,参见XSLT processors

XSL-FO

XSL-FO是上面提到的第2阶段关于“格式化”的规范,现在最新的是1.1版本,对中文支持较好。而目前的DocBook XSL
( 1.73.2 )似乎还是1.0版:
xmlns:fo="http://www.w3.org/1999/XSL/Format"
version='1.0'
中文处理相对比较弱

一个XSL-FO文件仍是一个XML文件,可以使用xsltproc来生成:
xsltproc \
--output myfile.fo
--stringparam fop1.extensions 1 \
docbook-xsl/fo/docbook.xsl \
myfile.xml
而要将fo文件“
转换成两维图形表示法或可能是一维音频流”(其实更常用的是转换成pdf),则需要另外的工具,FOP是个不错的选择。注意0.2.x适用于XSL-FO1.0,最新的0.9.x则实现了XSL-FO1.1。
fop.sh -fo myfile.fo -pdf myfile.pdf
也可以直接从xml文件生成pdf:
fop.sh -xsl /docbook-xsl/fo/docbook.xsl -xml myfile.xml -pdf myfile.pdf
可以看出,它的原理还是先生成fo,再输出pdf。

除了FOP,你还可以在XSL-FO processors发现很多处理FO文件的工具。

catalog.xml和ISO符号定义

ISO符号定义可以到这里去下载,其是就是些不方便直接在文档中使用的字符的符号常量。

比如左尖括号(<)在xml文件中被用作元素标记的一部分,要在xml中使用可以这样来表示:"&#60;"。 左尖括号在iso-num.ent中被定义为lt,我们可以这样引用:&lt。相对于十六进制方式,可以看出好记的多。

catalog.xml用来告诉xmllintxsltproc等处理工具,文档中引用的外部文件该到哪里去找。xmllintxsltproc首先使用环境变量XML_CATALOG_FILES的设定,如果为空,则使用/etc/xml/catalog

DocBook的文档结构定义、XSL、
ISO符号定义等软件包都自带了catalog.xml,可以参照着修改合并,符合自己的需要。

有用的资源

DocBook学习:limdou的文档 ,极佳。

DocBook 助你完成传世之作:该文规划宏伟,可惜只完成了环境搭建部分

DocBook学习笔记:前半部分抄自下面的"MS Windows 下建立 DocBook 的解譯環境"

在 MS Windows 下建立 DocBook 的解譯環境:入门读物,很有参考价值

DocBook XSL: The Complete Guide: 必读,DocBook XSL处理方面的权威著作,我上面有些例子就是抄它的。

i18n-zh:解说DocBook文档元素最权威的著作《DocBook: The Definitive Guide》的中文版,不过还没翻译完全。

没有评论: