内部一般实体

  所谓内部一般实体就是指在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>

该文档的合法检验结果为:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值