2007-2-25 17:35
hinet
3.1.3.9 实体属性类型与参数实体
3.1.3.9 实体属性类型与参数实体
在上一章中,我们介绍过实体的概念。相信你还能回忆起来,实体在XML中充当着宏或别名的角色。
实体最根本的作用是帮助你为一大段文本创建一个别名,这样,在文件的另一个位置需要引用这段文本时,仅需要指向它的别名就可以了。可想而知,这样一来,用于重新输入这段文本的大量时间就被节约下来了。它还意味着一旦需要修改,仅需要在一个地方作改动,就完成了全局的改动。
我们还提到,实体分为一般实体和参数实体两种类型,它们都可以定义为内部的也可以用关键字SYSTEM定义为外部的。实体的定义必须出现在引用之前,而且要注意正确嵌套,不能出现循环引用的情况。在DTD中,这两种类型的实体都得到了广泛的应用。
实体属性类型
实体类型的属性值属于一般实体,如前所述,它的定义方式是:
<ENTITY 实体名 "实体内容">
或利用SYSTEM定义外部实体,方式为:
<ENTITY 实体名 SYSTEM "外部文件名">
引用方式为:
&实体名;
使用关键字ENTITY,则声明一个属性是实体类型,它的取值为已定义的实体。请看下面例子:
encoding="GB2312"
standalone = "yes"?>
<DOCTYPE 文件[ <ELEMENT 电影 EMPTY>
<ATTLIST 电影 来源 ENTITY #REQUIRED>
<ENTITY BladeRunner SYSTEM "dvds/BR/br.mov">
]>
<文件>
<电影 来源 = "&BladeRunner;">
参数实体
参数实体专门用在DTD中。定义方式是:
<ENTITY % 实体名 "实体内容">
或:
<ENTITY % 实体名 SYSTEM "外部文件名">
引用方式为:
%实体名;
使用参数实体,可以方便元素和属性的声明。例如:
<ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址">
<ELEMENT 个人联系信息 (%TAG_NAMES; | 生日)>
<ELEMENT 客户联系信息 (%TAG_NAMES; | 公司名)>
最后提醒大家注意,不要以为实体属性类型的定义与DTD有关,所以它使用的就是参数实体。参数实体只能在DTD中使用,而对于任何元素属性值的指定(除了缺省值外),都是在XML文件正文中进行的,因此实体属性值仍属于一般实体。