B.4. 转换

WarningTLDP 将会转换您的文档
 

本节介绍如何将文档从 DocBook 转换为其他格式。如果您不需要为自己的网站转换文档,或者不需要校对内容,请跳过本节

如果您想为了校对目的转换文档,请使用 XML to HTML 在线转换器。您需要将 XML 文件上传到网站。然后只需将 URL 放入表格并点击提交按钮。您的文档将被神奇地转换为美观(且易于阅读)的 HTML 文档。支持外部文件。您可以使用绝对或相对 URI。

另一个易于使用的软件包是 xmlto。它是 xsltproc 的前端。它可以作为 RedHat、Debian (等) 软件包提供,也可以从 http://cyberelk.net/tim/xmlto/ 下载。您可以使用它来转换文档,方法是:

bash$ xmlto html mydoc.xml
bash$ xmlto txt mydoc.xml

您在提交给 LDP 之前永远不需要转换文档。LDP 志愿者有一个系统,可以将您的 DocBook 文件转换为 HTML、PDF 和纯文本格式。已经警告过您了。

还在看?太棒了!转换是一个相当基本的要求,可以将您编写的内容从混乱的标签汤变成可读的内容。本节将帮助您设置系统并准备好将最新的文档转换为其他格式。如果您想在向世界发布文档之前查看文档,这将非常有用。

目前有两种转换文档的方法:文档样式语义和规范语言 (DSSSL);以及 XML 样式表 (XSLT)。虽然 LDP 网站使用 DSSSL 转换文档,但如果您愿意,也可以使用 XSLT。您只需要选择其中一种方法。有关 DSSSL 的更多信息,请阅读:B.4.1 节,有关 XSLT 的更多信息,请阅读:B.4.3 节

B.4.1. DSSSL

使用 DSSSL 转换文档有三个基本要求

B.4.1.1. 样式表

LDP 使用文档样式语义和规范语言的两个版本,将文档从原始 DocBook 文件转换为其他格式(然后发布到 Web 上)。LDP 版本的样式表需要 Norman Walsh 版本——这基本上意味着如果您使用 DSSSL,则 Norman Walsh 版本可以被认为是系统设置的要求。

Norman Walsh DSSSL http://docbook.sourceforge.net/projects/dsssl/. 文档样式语义和规范语言告诉 Jade(见 B.4.1.2 节)如何将 DocBook 文档渲染为打印或在线形式。DSSSL 将标题标签转换为 <h1> HTML 标签,或者转换为 14 磅 Times Roman 粗体(例如,对于 RTF)。DSSSL 的文档位于同一站点。请注意,修改 DSSSL 不会修改 DocBook 本身。它只是更改渲染文本的外观。LDP 使用修改后的 DSSSL(见下文)。

LDP DSSSL http://www.tldp.org/authors/tools/ldp.dsl. LDP DSSSL 需要 Norman Walsh 版本(见上文),但它是一个略微修改过的 DSSSL,以提供诸如目录之类的功能。

示例 B-5. “安装” DSSSL 样式表

创建一个基本目录来存储所有内容,例如/usr/share/sgml/。将 DSSSL 样式表复制到名为dsssl.

B.4.1.2. DSSSL 处理器

Jade 处理器有两个版本:James Clark 的原始版本;以及一个大致相同的程序的开源版本 OpenJade。您只需要这些程序中的一个。它应该在 DTD 和 DSSSL 被“安装”之后安装。

DSSSL 转换工具

Jade

ftp://ftp.jclark.com/pub/jade/

目前,该软件包的最新版本是jade-1.2.1.tar.gz.

Jade 是 SGML 和 XML 的前端处理器。它使用 DSSSL 和 DocBook DTD 执行从 SGML 和 XML 到目标格式的验证和渲染。

OpenJade

http://openjade.sourceforge.net/

由 DSSSL 社区编写的 Jade 的扩展。某些应用程序需要 jade,但正在更新以支持任一软件包。

B.4.1.3. DSSSL 转换的系统设置

  1. 告诉您的系统在哪里可以找到 SGML_CATALOG_FILES(是的,即使您正在使用 XML)。您可以在 示例 B-1 中找到如何执行此操作的示例。

  2. 下载 DSSSL 和 DTD 文件并将它们复制到您的工作目录中。您可以在 示例 B-5示例 B-7 中找到如何执行此操作的示例。

B.4.1.4. 使用 DSSSL 进行转换

一旦您的系统配置完成(请参阅上一节),您应该能够开始使用 jade 将文件从 XML 转换为 XHTML。

要创建单独的 HTML 文件,请将 jade 指向正确的 DSL(样式表)。以下示例使用 LDP 样式表。

bash$ jade -t xml -i html \
	-d /usr/local/sgml/dsssl/docbook/html/ldp.dsl#html \
	HOWTO.xml

如果您想生成单文件 HTML 页面,请添加-V nochunks参数。您可以通过在命令末尾附加以下内容来指定最终 HTML 文件的名称 > output.html.

bash$ jade -t xml -i html -V nochunks \
	-d /usr/local/sgml/dsssl/stylesheets/ldp.dsl#html \
	HOWTO.sgml > output.html

Note“不是函数名称”错误
 

如果您收到有关“is not a function name”(不是函数名称)的错误,您将需要添加一个指向xml.dcl的指针。它必须紧接在指向 XML 文档的指针之前列出。请尝试以下位置之一/usr/lib/sgml/declaration/xml.dcl,或者/usr/share/sgml/declaration/xml.dcl。如果该文件不在这两个位置中的任何一个,请使用 locate 查找该文件。修改后的命令将如下所示

bash$ jade -t xml -i html \
	-d /usr/local/sgml/dsssl/docbook/html/ldp.dsl#html \
	/usr/lib/sgml/declaration/xml.dcl HOWTO.xml
	

如果您想创建打印友好的文件而不是 HTML 文件,只需更改您正在使用的样式表。在上面的文件名中,请注意末尾的“html/ldp.dsl”。将其更改为“print/docbook.dsl”,或者如果您想要 XHTML 输出而不是 HTML,请将文件名更改为“xhtml/docbook.dsl”。

B.4.1.4.1. 更改 CSS 文件

如果您希望 HTML 文件使用特定的 CSS 样式表,您将需要编辑ldp.dsl。紧随;; $verbatim-display$ 重新定义的结束添加以下行

(define %stylesheet-type%
  ;; The type of the stylesheet to use
  "text/css")

(define %stylesheet%
  ;; Name of the css stylesheet to use, use value #f if you don't want to
  ;; use css stylesheets
  "base.css")

替换base.css为您想要使用的 CSS 文件的名称。

B.4.2. docbook-utils 软件包

docbook-utils 提供了诸如 db2htmldb2pdfdb2ps 之类的命令,这些命令基于 jw 脚本,jw 脚本是 Jade 的前端。这些工具简化了文档的日常管理并添加了方便的功能。

该软件包最初由 RedHat 创建,可从 http://sources.redhat.com/docbook-tools/ 获取,可以安装在大多数系统上。

示例 B-6. 创建 HTML 输出的示例

验证文档后,只需发出命令 db2html mydoc.xml 即可创建 (一个或多个) HTML 文件。您也可以使用 docbook-utils 作为验证工具。请记住:当发生错误时,始终首先解决第一个问题。当您修复第一个错误时,其余问题可能会得到解决。

如果您收到有关函数名称的错误,请阅读 。

B.4.2.1. 使用 CSS 和 DSL 实现美观的输出

您可以定义自己的其他 DSL 指令,其中可以包含指向个性化 CSS 文件的指针。示例 DSL 和 CSS 文件在附录 A 中提供。

示例 DSL 文件将创建一个目录,并使所有 HTML 文件都以以下前缀开头intro2linux-并以以下后缀结尾.html%stylesheet%变量指向应该由您的 HTML 文件调用的 CSS 文件。

要使用特定的 DSL 样式表,应使用以下命令

db2html-d mystyle.dsl mydoc.xml

您可以在此处比较结果:http://tille.xalasys.com/training/unix/ 是一本使用标准工具格式化的书;http://tille.xalasys.com/training/tldp/ 是一本使用个性化 DSL 和 CSS 文件的书。使用了柔和的色调和特效,例如在按钮中,以达到最佳效果。

B.4.3. XSL

DSSSL 和 Jade/OpenJade 还有其他替代方案。

当使用 DocBook XML 时,LDP 提供了一系列 XSL[1] 样式表,用于将文档处理为 HTML。这些样式表使用 XML 工具集创建输出文件,这些文件类似于使用 ldp.dsl 的 SGML 工具生成的输出文件。

使用之间的主要区别在于ldp.dsl和 XSL 样式表在于处理生成多个文件的方式,例如为每个章节、节和附录创建单独的文件。对于 SGML 工具(例如 jadeopenjade),工具本身负责生成单独的文件。因此,只需要一个文件,ldp.dsl作为标准 DocBook DSSSL 样式表的自定义层是必需的。

使用 DocBook XSL 样式表,多个文件的生成由样式表控制。如果您想生成单个文件,则调用一个样式表。如果您想生成多个文件,则调用不同的样式表。因此,LDP XSL 样式表发行版由四个文件组成

  1. tldp-html.xsl- 用于生成单个文件的样式表。

  2. tldp-html-chunk.xsl[2] - 用于基于章节、节和附录元素生成多个文件的样式表。

  3. tldp-html-common.xsl- 包含实际 XSLT 转换的样式表。它被其他两个 HTML 样式表调用,并且从不直接调用。

  4. tldp-print.xsl- 用于生成 XSL 格式化对象以进行打印输出的样式表。

您可以在 http://my.core.com/~dhorton/docbook/tldp-xsl/ 找到文件的最新副本。该软件包包括安装说明,这些说明在 http://my.core.com/~dhorton/docbook/tldp-xsl/doc/tldp-xsl-howto.html 中重复。安装说明的简短版本如下:从网站下载并解压最新的软件包。从htmlTLDP-XSL 的目录并将它们放在htmlNorman Walsh 样式表的目录中。从 TLDP-XSL 中获取文件fo目录并将其放在 Norman Walshfo目录中。

安装这些文件后,您可以使用 xsltproc 从 XML 文档生成 HTML 文件。要将 XML 文件转换为单页 HTML 文档,请使用以下命令

bash$  xsltproc -o HOWTO.html /usr/local/sgml/stylesheets/tldp-html.xsl HOWTO.xml

要生成一组链接的 HTML 页面,每个章节, sect1附录,请使用以下命令

bash$ xsltproc /usr/share/sgml/stylesheets/tldp-html-chunk.xsl HOWTO.xml

请注意,您永远不会直接调用样式表tldp-html-common.xsl。它被其他两个样式表调用。

B.4.3.1. 更改 CSS 文件

如果您希望 HTML 文件使用特定的 CSS 样式表,您将需要编辑tldp-html-common.xsl。查找类似于以下内容的行<xsl:param name="html.stylesheet" select="'style.css'"/>.

替换style.css为您想要使用的 CSS 文件的名称。

注释

[1]

实际上,“XSL”由三个组件组成:XSLT 转换语言、XPath 表达式语言(由 XSLT 使用)和用于描述页面的 XSL 格式化对象 (FO)。样式表实际上是用 XSLT 编写的,并生成 HTML 或(用于打印输出)FO。然后,FO 文件通过 FO 处理器运行,以创建实际的打印(PDF 或 PostScript)输出。有关更多信息,请参阅 W3C 网站

[2]

在 XSL 术语中,生成多个文件的过程称为“分块”。