2.2. 使用entity做为宏替换

在写作过程中,有一些单词可能要经常输入,那么你可以使用entity来表示它们。这样在需要的地方使用entity就可以方便地输入这些内容了。如果以后对内容修改,只要修改实体定义部分即可,不用全文替换,很方便。

其实关于entity的定义,在第 1.2 节 “多个物理文档”中已经用过了,不过那个定义是引用外部文件。一般entity的定义可以象:

<!ENTITY xml "<acronym>XML</acronym>">

这里定义了一个entity,叫xml,它的值为"<acronym>XML</acronym>"。使用这个实体时可以将&xml;插入到任何想要输入"<acronym>XML</acronym>"的地方。xslt处理器对entity的处理相当于先要进行替换操作,然后再进行分析。因此如果想在entity中使<被处理成字符,而不是XML中标记的开始字符,那么要用<的实体形式&lt;

例 2.2. 使用entity的例子

<?xml version="1.0"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
	 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[
<!ENTITY % entities SYSTEM "entities.xml">
%entities;
<!ENTITY xml "<acronym>XML</acronym>">
<!ENTITY ent "&lt;acronym&gt;XML&lt;/acronym&gt;">
]>
<article>
<para>use &amp;xml;(&xml;)</para>
<para>use &amp;ent;(&ent;)</para>
</article>

输出结果为:

use &xml;(XML)

use &ent;(<acronym>XML</acronym>)

如果你仔细地话,你还会看到上面DTD声明中有些特殊的entity定义。

<!ENTITY % entities SYSTEM "entities.xml">
%entities;

entityentities前有一个百分号(%),并且后面还使用了SYSTEM定义。下面紧接着对这个entity的引用,不过前面不是&而是%。这个有点象在DocBook正文里面使用的引用文件的entity,它与正文中使用的entity的区别在于:

上面的entity定义表示引用外部entity集(属于DTD的一部分)。使用时用%entities;。而在正文中引用的是正文片断,不是DTD片断。

这样我们可以将entity定义放在单独的文件中统一进行维护。