内部参数实体
通过实体成为文档的一部分,而非DTD的组成部分。通用实体引用仅可用于DTD中能成为文档组成部分的位置上;通用实体引用不能插入那些仅为DTD而非文档内容的文本。然而在DTD中的实体引用通常是有用的。因此,XML提供了参数实体引用的手段。
除了如下两个关键处不同,参数实体引用与通用实体引用非常相似。
(1)参数实体引用以百分号%开始,而非&符号。
(2)参数实体引用仅可在DTD中出现,而不能位于文档内容中。
参数实体引用在DTD中声明的方法与通用实体类似,只是在实体名前加一百分号。句法结构如下:
<! ENTITY %name "replacementtext">
实体名为实体内容的缩写。
<! ENTITY %ERH "Eacely">
<! ENTITY copy99 "Copyright1999%ERH;">
当使用参数实体引用替换通用实体引用后,前文中无法实现的缩写(#PCDATA)变为有效。
<! ENTITY %PCD "(#PCDATA)">
<! ELEMENT ANTIMAL %PCD;>
<! ELEMENT FOOD %PCD;>
在元素间的子元素和属性共享通用列表中呈现参数实体引用的真实值。若替换的文本块较大且使用次数较多,刚参数实体引用用处更大。例如:假如在DTD声明中有许多层次结构元素,如PARAGRAPH、CELL和HEADING。每个元素都有确定的内联元素数目,类似PERSON、DEGREE、MODEL、PRODUCT、ANIMAL、INGREDIENT等的内部元素,这些元素的声明可能表现为以下表述:
2<! ELEMENT CELL (PERSON|dEGREE|MODEL|PRODUCT|ANTIMAL|INGREDIENT)*>
3<! ELEMENT HEADING (PERSON|DEGREE|MODEL|PRODUCT|ANTIMAL|INGREDIENT)*>
4
容器元素都有相同的内定。假如创建了一个新元素如EQUATION、CD或ACCOUNT刚该元素必须声明为所有3个元素的子元素。若在前两个元素中添加新元素,却忘记了在第3个元素中添加,就会引发问题。若元素的数目为30或者300个,而非3个,刚问题将会倍增。
若对每个容器元素不是给出单独的子元素列表,刚DTD的维护将较为简便。替代的方法是子元素列表变为参数实体引用,然后在每个元素中应用参数实体引用。例如:
2<! ELEMENT PARAGRAPH %inlines;>
3<! ELEMENT CELL %inlines;>
4<! ELEMENT HEADING %inlines;>
5
当添加新元素时,仅需简单地改变一个参数实体声明,而无需改变3个元素声明。