属性类型
一个元素可以为以下十种类型中的任意一种:
CDATA
Enumerated
ID
IDREF
IDREFS
ENTITY
ENTITIES
NMTOKEN
NMTOKENS
NOTATION
下面我们就来一个一个讲述。
CDATA类型
CDATA指的是纯文本,即由字符、符号“&”、小于号“<”和引号“"”组成的字符串。当然,就象我们前面讲到的,你应该使用实体&代替“&”,<代替“<”, "代替“"”。
请看下面这个关于剧本的例子:
encoding="Gb2312"
standalone = "yes"?>
]>
<剧本>
<对话 演员="某甲">我可不这么认为!对话>
<对话 演员="某乙">为什么呢?对话>
剧本>
枚举类型
属性也可以被描述为一组可接受的取值的列表,XML文件中对属性的赋值将从这个列表中选取一个值。这类属性属于枚举类型ENUMERATED,不过,关键字ENUMERATED是不出现在Dtd定义中的。
encoding="Gb2312"
standalone = "yes"?>
]>
<购物篮>
<肉 类型 = "鱼肉"/>
<肉 类型 = "牛肉"/>
<肉/>
购物篮>
注意,在上面这个例子中,给属性“类型”定义的缺省值是“鸡肉”,所以“购物篮”中的第三个元素的“类型”属性取值为“鸡肉”。
ID和IDREF
ID类型
ID是用属性值的方式为文件中的某个元素定义唯一标识的方法,它的作用类似于 HTML文件中的内部链接。在大多数情况下,ID由处理文件的程序或脚本语言使用。
ID的值必须是一个有效的XML名称,它由字母、数字或下划线开始,名字中不能出现空白符。另外一般而言,不要给ID类型的属性事先指定缺省值,这很容易
引起不同的元素具有相同的标识的情况,更不能使用FIXED型的缺省值。此类属性经常使用REQUIRED缺省类型,当然,这也不是必须的。有的应用并不
要求每个元素都有自己的标识,所以,也可以使用IMPLIED缺省类型。
encoding="Gb2312"
standalone = "yes"?>
]>
<联系人列表>
<联系人 编号="1">
<姓名>张三姓名>
zhang@aaa.com
联系人>
<联系人 编号="2">
<姓名>李四姓名>
li@bbb.org
联系人>
联系人列表>
ID和IDREF2
IDREF类型
IDREF类型允许一个元素的属性使用文件中的另一个元素,方法就是把那个元素的 ID标识值作为该属性的取值。例如下面的例子:
encoding="Gb2312"
standalone = "yes"?>
]>
<联系人列表>
<联系人 编号="2">
<姓名>张三姓名>
zhang@aaa.com
联系人>
<联系人 编号="1" 上司="2">
<姓名>李四姓名>
li@aaa.com
联系人>
联系人列表>
NMTOKEN和NMTOKENS
类型NMTOKEN和NMTOKENS是诸多属性类型中面向处理程序的又一个类型。这两个类型用于指示一个有效的名字。
NMTOKEN 类型的属性限定属性值是有效的XML名称,这个属性值可以由英文、数字、"." "_" "-" ":"等组成。这里有几点需要注意:
1.不能包括空格;
2.以上字符中除":"以外,其他字符都可以作为开头字符;
3.“.”可以出现再中间,但是忧郁他是命名域的关键字符,所以一般不提倡使用。
正是用为NMTOKEN类型的属性对于字符的严格要求,使得它再一些常用的编程语言中,都是合法的数据,这就为这些编程语言对xml文档数据的操作打下了良好的基础。
NMTOKENS类型的属性具有与NMTOKEN属性相近的形式。这种类型的属性可以使如下情况合法--属性由若干xml名称组成,彼此间由空格隔开。通常可为使用NMTOKEN属性相同的理由而使用NMTOKENS属性,但仅仅再需要多个名字的时候。
当需要把一个元素和其它的元件,例如一个JAVA 类或一个安全算法,相联系时,可以让它们助你一臂之力。请看下面的例子:
关于元素的定义:
安全性( ON | OFF ) "OFF"
授权用户 NMTOKENS #IMPLIED
>
XML文件:
<数据 安全性="ON" 授权用户 = "Iggieeb SelenaS Guntherb">
blah blah blah
数据>
NOTATION类型
NOTATION类型允许属性值为一个Dtd中声明的符号,这个类型对于使用非XML格式的数据非常有用。
现
实世界中存在着很多无法或不易用XML格式组织的数据,例如图象、声音、影象等等。对于这些数据,XML应用程序常常并不提供直接的应用支持。通过为它们
设定 NOTATION类型的属性,可以向应用程序指定一个外部的处理程序。例如,当你想要为一个给定的文件类型指定一个演示设备时,可以用
NOTATION类型的属性作为触发。
要使用NOTATION类型作为属性的类型,首先要在Dtd中为可选用的记号作出定义。定义的方式有两种,一种是使用MIME类型,形式是:
<!NOTATION 记号名 SYSTEM "MIME类型">
再有一种是使用一个URL路径,指定一个处理程序的路径。
<!NOTATION 记号名 SYSTEM "URL路径名">
在下面这个例子中,为"电影"元素指定了两种可选设备:一种是movPlayer.exe,用来播映.mov文件,另一种则用来绘制GIF图象。
encoding="Gb2312"
standalone = "yes"?>
<!ATTLIST 电影 演示设备 NOTATION ( mp | gif ) #REQUIRED>
]>
<文件>
<电影 演示设备 = "mp"/>
文件>
实体属性类型与参数实体
实体在XML中充当着宏或别名的角色。实体最根本的作用是帮助你为一大段文本创建一个别名,这样,在文件的另一个位置需要引用这段文本时,仅需要指向它的别名就可以了。它还意味着一旦需要修改,仅需要在一个地方作改动,就完成了全局的改动。
我们还提到,实体分为一般实体和参数实体两种类型,它们都可以定义为内部的也可以用关键字SYSTEM定义为外部的。实体的定义必须出现在引用之前,而且要注意正确嵌套,不能出现循环引用的情况。在Dtd中,这两种类型的实体都得到了广泛的应用。
实体属性类型
实体类型的属性值属于一般实体,如前所述,它的定义方式是:
或利用SYSTEM定义外部实体,方式为:
引用方式为: &实体名;
使用关键字ENTITY,则声明一个属性是实体类型,它的取值为已定义的实体。请看下面例子:
encoding="Gb2312"
standalone = "yes"?>
]>
<文件>
<电影 来源 = "&bladeRunner;">
文件>
参数实体参数实体专门用在Dtd中。定义方式是:
或:
引用方式为: %实体名;使用参数实体,可以方便元素和属性的声明。例如:
最后提醒大家注意,不要以为实体属性类型的定义与Dtd有关,所以它使用的就是参数实体。参数实体只能在Dtd中使用,而对于任何元素属性值的指定(除了缺省值外),都是在XML文件正文中进行的,因此实体属性值仍属于一般实体。
阅读(4184) | 评论(0) | 转发(0) |