Chinaunix首页 | 论坛 | 博客
  • 博客访问: 411628
  • 博文数量: 95
  • 博客积分: 5001
  • 博客等级: 大校
  • 技术积分: 1030
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-13 11:43
文章分类

全部博文(95)

文章存档

2007年(95)

我的朋友

分类: 系统运维

2007-05-22 11:16:14

属性类型

一个元素可以为以下十种类型中的任意一种:


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) |
0

上一篇:Dtd【2】

下一篇:XML的术语

给主人留下些什么吧!~~