所谓内部一般实体就是指在xml文档内部定义的并且可以在xml文档中使用的实体,这种实体通常是一段代码的缩写。
一个内部实体声明
语法:
<!ENTITY 实体名称 "实体的值">
引用语法:
&实体名;
例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Teams[
<!ELEMENT Teams (Team*)>
<!ELEMENT Team (Teamname,Country,Member+)>
<!ELEMENT Teamname (#PCDATA)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ENTITY Email "xxxx@xxx.com">
<!ENTITY Tel "xxxxxxx">
]>
<Teams>
<Team>
<Teamname>AC</Teamname>
<Country>Italy</Country>
<Member>Tel:&Tel;Email:&Email;</Member>
</Team>
</Teams>
通过了合法性检验(xmlspy),浏览器查看如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Teams (View Source for full doctype...)>
- <Teams>
- <Team>
<Teamname>AC</Teamname>
<Country>Italy</Country>
<Member>Tel:xxxxxxxEmail:xxxxxxx@xxx.com</Member>
</Team>
</Teams>
内部一般实体除了可以在xml文档的基本元素中引用外,还可以在DTD的内部引用,在DTD内部引用要注意3点:
(1) DTD内部对实体的引用一般只能用于另外一个实体的定义中,但不能用于元素的声明中。
(2) 内部一般实体无须先定义后引用。
(3) 由于内部一般实体无须先定义后引用,因此在一个实体定义中引用另外一个实体时,必须要避免重复引用而造成引用的死循环。
例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Teams[
<!ELEMENT Teams (Team*)>
<!ELEMENT Team (Teamname,Country,Member+)>
<!ELEMENT Teamname (#PCDATA)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ELEMENT Email (#PCDATA)>
<!ENTITY Email "Email=&Mail;">
<!ENTITY Mail "xxxxxxx@mail.com">
<!ENTITY Tel "xxxxxxx">
]>
<Teams>
<Team>
<Teamname>AC</Teamname>
<Country>Italy</Country>
<Member>Tel:&Tel;Email:&Email;</Member>
</Team>
</Teams>
浏览器显示结果:
这说明符合(2);如果将内部一般实体的引用用于DTD中的元素的声明会如何呢?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Teams[
<!ELEMENT Teams (Team*)>
<!ELEMENT Team (Teamname,Country,Member+)>
<!ELEMENT Teamname &name;>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ELEMENT Email (#PCDATA)>
<!ENTITY Email "Email=&Mail;">
<!ENTITY Mail "xxxxxxx@mail.com">
<!ENTITY Tel "xxxxxxx">
<!ENTITY name "AC">
]>
<Teams>
<Team>
<Teamname>AC</Teamname>
<Country>Italy</Country>
<Member>Tel:&Tel;Email:&Email;</Member>
</Team>
</Teams>
该文档的合法检验结果为: