逐步适应 DocBook XML 方言

David Mertz,博士
档案保管专家,Gnosis Software, Inc.
2000 年 10 月

内容:
创建内容
准备 DocBook DTD
处理指令
创建章节
下次见
参考资料
关于作者
本专栏继续讨论使用 DocBook 来将异构格式的文档转换成单一、标准 XML 格式的好处。还更详细地介绍了某些 DocBook 标记,并讨论如何编写基本的 DocBook 文档。

如果您的文档档案和我的差不多,它们就包含了从 Microsoft Word 3.3、HTML、Word Perfect 7 到 ASCII 文本每种格式的文件。大多数时候,您甚至无法获得创建原始文档所用的软件。幸运的是,DocBook,这种用于创建通用技术文档的 SGML 方言,可以帮助您将文件转移到单一的标准 XML 格式。在本专栏中,我将解释如何使用 XML 版本的 DocBook DTD 来转换现有文档。

DocBook 是具有几百个元素的相当复杂的 DTD。幸运的是,您不必知道所有 DocBook 就可以使用它。您将看到,基本元素是以逻辑方式排列的,大多数元素都遵循类似的模式来嵌套子元素。

创建内容 -- 不同的方法
使用 DocBook 时很容易犯一些小的输入错误。要使用它,关键问题是在工作时手头有一本好的参考资料。我偏向于 O'Reilly 相当不错的硬拷贝文本,但也有相同的联机材料(请参阅参考资料)。通过您现有的参考资料,就可以用以下两种方式之一来创建 DocBook 内容:

  • 使用专门的 XML 编辑器
  • 使用常规文本编辑器,外加外部确认器

DocBook 非常详尽,以至于您需要一些自动化操作来确保与 DTD 保持一致。使用这两种方法都可以长时间连续工作,并只是偶尔需要确认和改正一些缺陷。

大多数专门的 XML 编辑器可以帮助您输入元素和属性。很多程序都为当前 DTD 中存在的可用标记或标记列表提供与上下文相关的提示(例如 DocBook 的)。不过,要知道专门的编辑器通常没有好的通用文本编辑器灵活,后者可以提供如多个剪贴板、语法突出显示、列标记和节/函数浏览等功能。

不幸的是,我发现 XML 工具的质量仍然不能令人满意。我测试过一些 XML 确认和转换工具,但还没找到一个完全正确的命令行 XML 确认器。实际上,我曾试着在 Win32 下使用 XML Spy,在其它带有 Java 支持的平台上使用 Xeena。这两种工具都可以很好地进行确认,但使用起来又都很麻烦。(有关 XML Spy、Xeena 和常规文本编辑器的评论,请参阅参考资料。)

准备 DocBook DTD
创建 XML DocBook 文档的第一步是准备它的声明。让我们看一下清单 1,一个文档声明示例,然后逐步了解它的不同部分:

清单 1. XML 文档类型声明

<?xml version="1.0"?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"

"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [

<!ENTITY Zizek "&Zcaron;i&zcaron;ek">

<!ENTITY Mocnik "Mo&ccaron;nik">
]>
<?xml-stylesheet type="text/xsl" href="chapter.xsl"?>
<chapter>

<!-- The actual chapter contents are here -->
</chapter>

XML 声明
我们首先包括的是 <?xml> 声明,它表明该文档是 XML。下一个是 <!DOCTYPE> 标记 -- 文档类型声明。值得仔细查看一下文档类型声明的内容。

DOCTYPE 标记元素
<!DOCTYPE> 标记中要注意的第一件事是将用在文档中的根元素 (chapter) 名称。确定要使用哪种根元素类型很重要,因为它说明了(至少大致说明)文档的用途。根元素通常粗略地确定了文档大小。

在最高级别上,可以在包括两个或多个 books(例如整个参考资料集合)时指定根元素 set。在这种情况下,不必将每样东西都放在同一个文件中,而使用“包含”,这在“ XML 问题 #3”中有大致的说明。往往会创建一个 book,它由 partschapters,再加上其它与部分/章节的相同概念级别上的节组成。更谦虚地说,可以创建 articlechapter,如清单 1 中的示例那样。实际上,chapterarticle 是用于 DocBook 文档的最小根元素。

<!DOCTYPE> 声明中,我们接下来看到的是 PUBLIC 和系统标识。PUBLIC 后面的部分是 SGML 特性,实际上在 XML 文档中并不需要它。如果将它包括在内,要确保它的拼写与在 DTD 中的拼写完全一样。DTD 在系统标识中由 URL 表明,后者是所有 DocBook 定义所在的地方。如果希望查看 DTD, 可以下载 URL。还要确保正确地拼写 URL,否则确认程序将无法找到 DTD。

最后,在 <!DOCTYPE> 标记方括号中的是“内部子集”,它只是声明文档中特殊特性的一种方法。在本例中,我为难以在美式键盘上输入的名称创建了别名。

处理指令
清单 1 中文档类型声明标记之后是处理指令 <?xml-stylesheet...>。我将在下一个“XML 问题”专栏中详细讨论可扩展样式表语言转换 (XSLT)。不过,处理指令与 HTML 文档的级联样式表 (CSS) 类似。在本例中,我添加了一个对 XSL 文档的引用,该文档包含某些用于转换 DocBook 文档的规则。与级联样式表相似,这种类型的处理指令是可选的,甚至对于转换工具来说也是这样。根据不同的工具,可以使用任何所需的 XSLT 来指定转换。处理指令只是一种执行的手段。

最后,我们看到在声明根元素中引用的 <chapter> 标记。章节内容都放在这个标记中。

创建章节
章节、文章、前言和书目等都是文档的组成部分。也就是说,各组成部分对同一主题作适当详细的描述。通常,元素名反映了它们的英文含义。

<chapter><appendix>、<preface> 元素的结构是相似的。<article> 与这些元素在结构上几乎一样,但前置内容通常包括在 <artheader> 元素中。类似 <chapter> 的组成部分所包括的前部内容有 <title>,后面跟着节和/或块元素(例如 <p>)。

<title> 元素通常需要作为组成部分和节的前部内容。大多数其它前部内容是可选的,但可以包括作者信息、摘要、图形或其它与 描述组成部分而非建立组成部分相关的信息。让我们看一下清单 2,一个有效、高度精简的章节(假设文档类型声明是在清单 1 中描述的)的示例:

清单 2. DocBook chapter 标记

<chapter>
 <title>Hegemony, and Other Passing Fads</title>
 <epigraph>
 <attribution>
Gould, 1987b, quoting Gunnar Myrdal, <citetitle>An
 American Dilemma</citetitle> (1944)
 </attribution>
 <para>
 But there must be still other countless errors of the
 same sort that no living man can yet detect, because 
 of the fog within which our type of Western culture
 envelops us. Cultural influences have set up the
 assumptions about the mind, the body, and the
 universe with which we begin; pose the questions we
 ask; influence the facts we seek; determine the
 interpretations we give these facts; and direct our
 reaction to these interpretations and
 conclusions.
 </para>
 </epigraph>

 <sect1>
 <title>Day-Care Devil Worshipers</title> 
<!-- para's, sect2's, epigraph's, and other block elements -->  </sect1>
 <sect1>
 <!-- more blocks -->

</sect1>
</chapter>

如该例所示,您需要将一个比较长的章节分为几节 <sect1>。这是有关节有多大的判断问题,但在创建节方面有许多策略。可以使用 <sect1><sect5> 这种层次结构,也可以使用递归嵌套的 <section> 元素。出于我自己的目的考虑 -- 编写哲学散文 -- 我觉得明确编号的节级别更好一些。对于每种类型的节将会有多重要我有完全不同的感觉,编号那种方式就相当合适。不过,对于例如技术引用这一类事物,节的内容可以嵌套在不同的地方,具有不同的深度。例如,可以在概述中描述函数调用,稍后在章节的编程示例中再次出现。在这种情况下, <section> 元素更适用,嵌套的层次可以多达 5 层。

节比块元素大,它们就是一系列块。在组成部分比较短的情况下,可以立即开始使用块元素。基本上,块元素是段落或与段落处于相同概念/层次结构级别上的元素(例如列表、方程式或插图)。有其它专门的块类型,但这些是最常用的。

唯一比块元素“更小”的是内联元素。一般来说,使用垂直空格、带框架的框或类似的东西来将块对象与其它块分开。与之相反,内联元素延伸到它周围的字,但由不同的字体、颜色、超链接等标记。在我们的章节示例中,铭文就象是一个包含两个块的短节:属性 <attribution> 和铭文 <para>。属性包含 <citetitle>,但该引用往往在打印时以内联形式表示,可能以斜体或下划线格式表示,也可能作为到书目的热链接出现(如果以 HTML 产生)。

下次见
在此略述的元素和结构已经足以让您开始创建自己的 DocBook 文档了。请参考参考资料部分获得有关我所创建的 DocBook 文档的示例,以及更详细的标记文档。下一专栏将演示如何将我们的 DocBook 源文档转换成其它格式,并熟悉可扩展样式表语言转换,这在 DocBook 应用程序以外是很有用的。

参考资料

关于作者
David Mertz David Mertz 不再对学术着迷,而成为一个技术记者:发生于其后者必然是其结果。可以通过 mertz@gnosis.cx 与 David 联系,http://gnosis.cx/publish/ 上详细介绍了他的生活。非常欢迎对过去的、这一篇或将来的专栏文章提出意见和建议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值