格式化和渲染 XML-DocBook 文档最简单的方法是使用 xmlto 工具链。它随 Red Hat 发行版一起提供;Debian 用户可以使用命令 apt-get install xmlto 获取。
通常,您将执行以下操作从 DocBook 源文件生成 XHTML
bash$ xmlto xhtml foo.xml bash$ ls *.html ar01s02.html ar01s03.html ar01s04.html index.html |
在此示例中,您转换了一个名为foo.xml的 XML-Docbook 文档,该文档包含三个顶级部分,转换为一个索引页和两个部分。制作一个大的页面同样容易
bash$ xmlto xhtml-nochunks foo.xml bash$ ls *.html foo.html |
最后,这是制作 PDF 以进行打印的方法
bash$ dblatex foo.xml # To make PDF bash$ ls *.pdf foo.pdf |
一些旧版本的 xmlto 可能会更冗长,发出诸如“正在转换为 XHTML”之类的噪音。
要将您的文档转换为 HTML 或 PDF,您需要一个引擎,它可以将 DocBook DTD 和合适的样式表应用于您的文档。以下是用于执行此操作的开源工具如何组合在一起的
当前的 XML-DocBook 工具链
解析您的文档并应用样式表转换将由三个程序之一处理。最有可能的是 xsltproc。其他可能性是两个 Java 程序,Saxon 和 Xalan。
从 DocBook 生成高质量的 XHTML 相对容易;XHTML 只是另一个 XML DTD 这一事实对此有很大帮助。转换为 HTML 是通过应用一个相当简单的样式表来完成的,这就是故事的结局。以这种方式生成 RTF 也很简单,并且从 XHTML 或 RTF 可以轻松地在紧要关头生成纯 ASCII 文本近似值。
棘手的情况是打印。生成高质量的打印输出(实际上是指 Adobe 的 PDF 或可移植文档格式,PostScript 的打包形式)很困难。要正确地做到这一点,需要算法地复制人类排版员从内容到呈现级别的细致判断。
因此,首先,样式表将 Docbook 的结构化标记转换为另一种 XML 方言——FO(格式化对象)。FO 标记在很大程度上是呈现级别的;您可以将其视为 troff 的 XML 功能等效物。它必须转换为 Postscript 才能打包在 PDF 中。
在大多数现代 Linux 发行版附带的工具链中,这项工作最好由一个名为 dblatex 的程序处理(这取代了以前版本的 tis HOWTO 中描述的旧版 passivetex 包)。
dblatex 将 xsltproc 生成的格式化对象转换为 Donald Knuth 的 TeX 语言。TeX 是最早的开源项目之一,是一种古老但功能强大的呈现级格式化语言,深受数学家喜爱(因为它为描述数学符号提供了特别精细的功能)。TeX 在基本的排版任务(如字距调整、行填充和断字)方面也非常出色。然后将 TeX 的输出处理成 PDF。
如果您认为这种从 XML 到 Tex 宏再到 PDF 的桶链听起来像是一个笨拙的拼凑,那么您是对的。它发出哐当声、喘息声,并且有丑陋的疣。字体是一个重要的问题,因为 XML、TeX 和 PDF 对字体的工作方式有非常不同的模型;此外,处理国际化和本地化是一个噩梦。这种代码路径唯一的好处是它可以工作。
优雅的方式将是 FOP,这是 Apache 项目正在开发的直接 FO 到 Postscript 的转换器。使用 FOP,国际化问题即使没有解决,也至少得到了很好的限制;XML 工具可以处理 Unicode 一直到 FOP。字形到字体的映射也严格来说是 FOP 的问题。这种方法的唯一问题是它完全不能正常工作。截至 2010 年 10 月,FOP 为 1.0 版且可用,但存在粗糙的边缘和缺少的功能。我推荐 dblatex 用于生产用途。
以下是 FOP 工具链的外观
未来的 XML-DocBook 工具链(使用 FOP)。