3.3. 编译文档

3.3.1. 准备测试文档——《Hello World》
3.3.2. 用 OpenJade 进行格式转换
3.3.3. 还需进一步完善

下面我们就学习通过我们上面建立的编译环境,将我们的 Hello World 文档转换成可以用来显示的HTML格式和可以打印的RTF格式。

3.3.1. 准备测试文档——《Hello World》

  1. SGML格式

    在本章一开始,介绍了我们的第一个文档——《Hello World》,它是SGML格式的文档,读者可以照着录入到文件:helloworld.sgml。读者可以直接在如下网址下载,以减轻文字录入的负担。网址:http://www.worldhello.net

  2. XML格式

    我们再来准备一个xml格式的文档——helloworld.xml,如下:

    <?xml version="1.0" ?>
    <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN">	1
    <article>		2
    <articleinfo>
      <title>Hello World!</title>
      <author><firstname>名</firstname><surname>姓</surname></author> 3
    </articleinfo>
    
    <sect1><title>Hello World!</title>	4
      <para>
      Hello world! 这是我的第一个 DocBook 文档。
      </para>
    </sect1>
    </article>	5
    
    1

    文档类型声明(Document Type Declaration),声明该文档的根元素是 article。

    2

    文档中的唯一的根元素——article

    3

    在此处添上作者的姓名

    4

    第一章开始。根元素article可以包含任意多的sect1元素。

    5

    本文档的根元素结束。

    [注意]

    该文件也可以直接从网站 http://www.worldhello.net 下载。

3.3.2. 用 OpenJade 进行格式转换

3.3.2.1. Windows 平台
  1. 转换为 HTML

    • 使用 docbook.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -d c:\share\style\dsssl\1.77\html\docbook.dsl helloworld.sgml
          
    • 使用 docbook.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -d c:\share\style\dsssl\1.77\html\docbook.dsl helloworld.xml
          
    • 使用 ldp.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -i html -d c:\share\style\dsssl\ldp.dsl#html helloworld.sgml
          
    • 使用 ldp.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -i html -d c:\share\style\dsssl\ldp.dsl#html helloworld.xml
          
  2. 转换为 单一HTML文件

    • 使用 docbook.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -V nochunks -d c:\share\style\dsssl\1.77\html\docbook.dsl helloworld.sgml > index.html
          
    • 使用 docbook.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -V nochunks -d c:\share\style\dsssl\1.77\html\docbook.dsl helloworld.xml > index.html
          
    • 使用 ldp.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -i html -V nochunks -d c:\share\style\dsssl\ldp.dsl#html helloworld.sgml > index.html
          
    • 使用 ldp.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -i html -V nochunks -d c:\share\style\dsssl\ldp.dsl#html helloworld.xml > index.html
          
  3. 转换为 Word 文档

    • 使用 docbook.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t rtf -d c:\share\style\dsssl\1.77\print\docbook.dsl helloworld.sgml
          
    • 使用 docbook.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t rtf -d c:\share\style\dsssl\1.77\print\docbook.dsl helloworld.xml
          
    • 使用 ldp.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t rtf -i print -d c:\share\style\dsssl\ldp.dsl#print helloworld.sgml
          
    • 使用 ldp.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t rtf -i print -d c:\share\style\dsssl\ldp.dsl#print helloworld.xml
          
3.3.2.2. Linux 平台

同样的命令,在其它Unix平台、Windows+Cygwin 平台同样有效。

  1. 转换为 HTML

    • 使用 docbook.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -d /share/style/dsssl/1.77/html/docbook.dsl helloworld.sgml
          
    • 使用 docbook.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -d /share/style/dsssl/1.77/html/docbook.dsl helloworld.xml
          
    • 使用 ldp.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -i html -d /share/style/dsssl/ldp.dsl\#html helloworld.sgml
          
    • 使用 ldp.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -i html -d /share/style/dsssl/ldp.dsl\#html helloworld.xml
          
  2. 转换为 单一HTML文件

    • 使用 docbook.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -V nochunks -d /share/style/dsssl/1.77/html/docbook.dsl helloworld.sgml > index.html
          
    • 使用 docbook.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -V nochunks -d /share/style/dsssl/1.77/html/docbook.dsl helloworld.xml > index.html
          
    • 使用 ldp.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t sgml -i html -V nochunks -d /share/style/dsssl/ldp.dsl\#html helloworld.sgml > index.html
          
    • 使用 ldp.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t sgml -i html -V nochunks -d /share/style/dsssl/ldp.dsl\#html helloworld.xml > index.html
          
  3. 转换为 Word 文档

    • 使用 docbook.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t rtf -d /share/style/dsssl/1.77/print/docbook.dsl helloworld.sgml
          
    • 使用 docbook.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t rtf -d /share/style/dsssl/1.77/print/docbook.dsl helloworld.xml
          
    • 使用 ldp.dsl 样式表,转换 sgml 格式文件:

          openjade -E 0 -t rtf -i print -d /share/style/dsssl/ldp.dsl\#print helloworld.sgml
          
    • 使用 ldp.dsl 样式表,转换 xml 格式文件:

          openjade -E 0 -t rtf -i print -d /share/style/dsssl/ldp.dsl\#print helloworld.xml
          

3.3.3. 还需进一步完善

经过了上面的实践,对于 DocBook 一定有了直观的了解。我们已经可以通过在《Hello World》文档基础上一步一步扩充,逐渐熟悉 DocBook 的标签和元素的用法,写出更加复杂和实用的 DocBook 文档。在前面的实践过程中,也有一些不完美的地方:

  • 命令行复杂

    复杂的命令行格式既容易出错,又会导致效率低下。但是命令行工具优越于图形界面工具的一个特点就是更容易的实现任务的自动化。在后续的章节我们可以通过例子,了解一些基本方法,对这些复杂命令行进行封装,有效的完成任务。

  • 转换出来的 HTML 文件的格式单调

    大家可以对比一下在我的网站 http://www.worldhello.net 上的 DocBook 文档,就发现在我的网站上的 DocBook 文档转换出来的 HTML 格式文件,有背景图、文字颜色更加丰富,等等。这是如何实现的呢?

  • 转换后的格式不符合习惯

    例如:DocBook源文件中,用 “<firstname>名</firstname><surname>姓</surname></author>”标识作者姓名,而转换出来的目标文件中则对应为“名姓”,即作者的“名”放在了“姓”的前面。这符合西方人的习惯,但不符合中国人的习惯。我们该如何定制呢?

我们将在后续章节,介绍对 DocBook 定制的方法。