在写作过程中,有一些单词可能要经常输入,那么你可以使用entity来表示它们。这样在需要的地方使用entity就可以方便地输入这些内容了。如果以后对内容修改,只要修改实体定义部分即可,不用全文替换,很方便。
其实关于entity的定义,在第 1.2 节 “多个物理文档”中已经用过了,不过那个定义是引用外部文件。一般entity的定义可以象:
<!ENTITY xml "<acronym>XML</acronym>">
这里定义了一个entity,叫xml,它的值为"<acronym>XML</acronym>"。使用这个实体时可以将&xml;插入到任何想要输入"<acronym>XML</acronym>"的地方。xslt处理器对entity的处理相当于先要进行替换操作,然后再进行分析。因此如果想在entity中使<被处理成字符,而不是XML中标记的开始字符,那么要用<的实体形式<。
例 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 "<acronym>XML</acronym>"> ]> <article> <para>use &xml;(&xml;)</para> <para>use &ent;(&ent;)</para> </article>
输出结果为:
use &xml;(XML)
use &ent;(<acronym>XML</acronym>)
如果你仔细地话,你还会看到上面DTD声明中有些特殊的entity定义。
<!ENTITY % entities SYSTEM "entities.xml"> %entities;
在entity名entities前有一个百分号(%),并且后面还使用了SYSTEM定义。下面紧接着对这个entity的引用,不过前面不是&而是%。这个有点象在DocBook正文里面使用的引用文件的entity,它与正文中使用的entity的区别在于:
上面的entity定义表示引用外部entity集(属于DTD的一部分)。使用时用%entities;。而在正文中引用的是正文片断,不是DTD片断。
这样我们可以将entity定义放在单独的文件中统一进行维护。