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