可能有一些文本片段或标记,您希望一遍又一遍地使用。与其多次键入(并在您想要进行更改时不得不多次编辑),不如使用外部实体。实体可以为您提供快捷方式,以便:重用整个文档、文本片段和特殊标记。实体的一些常见用途包括:
用于标记的文本宏。一个例子是公司 URL。通过使用参数实体,您可以简单地引用 &my-company-url; 而不必每次都键入完整的 <ulink url="http://foo.bar">Foo.bar</ulink>。
软件许可证。例如 GNU 自由文档许可证:它很长。并且必须完整地包含在每个文档中。通过将许可证放在单独的文件中,您可以轻松地将其包含在许多文档中,而无需每次都重新进行标记。
重复文本。例如,一个主题的介绍,既在一个章节中作为摘要包含,又在另一章节中作为完整信息的介绍包含。如果您需要更改两组文本,则可以节省编辑时间。
示例 D-12. 添加实体
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ <-- I can add comments here --> <!ENTITY shortcut "Replace 'shortcut' with this text."> <!ENTITY sc-to-a-file SYSTEM "anotherfile.xml"> <-- note: the square bracket on the third line is closed on the next line--> ]> |
要使用这些实体,只需将您为实体指定的名称插入到 "&"(与号)和 ";"(分号)之间。例如:"&shortcut;" 将展开为 "用这段文本替换 'shortcut'";"&sc-to-a-file;" 将包含以下内容中的所有内容anotherfile.xml.
在编写文本时,一个重要的功能是能够检查它是否会在最终草稿中呈现。通常,文本的几个部分会被标记为草稿,尤其是在更新已存在的文档时。
通过使用参数实体,您只需更改文档开头的行,即可包含或删除这些草稿。
示例 D-13. 参数实体的使用
<!ENTITY % review "INCLUDE"> ... <![%review;[ <para>This paragraph will be included on the draft when the entity "review" is defined with the value "INCLUDE". </para> ]]> |
实体review可能定义了多个文本,如示例 D-13所示。当对文本的更改被认为是最终版本时,您只需删除第 3 行和第 6 行之间的部分文本。
要保留草稿定义并在最终草稿中隐藏文本,只需将实体的规范从INCLUDE更改为IGNORE.