文档工程

如果你在作一个比较大的文档,建议每个章节使用一个单独的文件存储,便于管理[55]

前面讲到的实体可以用来作这件事情

有两个文件一个是主文件docbook.xml,包含文件头和文档信息;另一个文件file.xml是文档内容,主文件如下:

  1. <?xml version='1.0' encoding="UTF-8"?>
  2. <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5/zh_cn"
  3. "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
  4. [
  5. <!ENTITY file SYSTEM "file.xml">
  6. ]>
  7. <article>
  8. <info></info>
  9. &file;
  10. </article>

1

定义外部实体

2

通过外部实体引用文档

file.xml文件内容如下:

  1. <sect1>
  2. <para>
  3. ……
  4. </para>
  5. </sect1>

如果把引用文件的列表放在外部文件中,则更加容易管理。但是 XML 不允许在 DTD 中引用普通实体[56],这就要定义参数实体:

  1. <?xml version='1.0' encoding="UTF-8"?>
  2. <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5/zh_cn"
  3. "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"
  4. [
  5. <!ENTITY % list SYSTEM "list.xml">
  6. %list;
  7. ]>

1

在定义参数实体时,这里多了一个%

2

引用参数实体时使用%而不是&

list.xml文件内容如下:

  1. <!ENTITY file SYSTEM "file.xml">
  2. <!ENTITY file1 SYSTEM "file1.xml">
  3. <!ENTITY file2 SYSTEM "file2.xml">

这样就可以在正文引用list.xml文件中定义的普通实体了


[55] 即便文档规模不是很大,把内容独立出来也有好处,比如:
每部分单独发布,修改,节省时间
如果出错便于排查

[56] 在 DTD 中能够定义外部文件作为普通实体,但是只能在正文中引用,不能在 DTD 中引用