
2007-2-25 17:34
hinet
3.1.3.1 定义有效的元素属性
3.1.3.1 定义有效的元素属性
好了,上面我们用了很大的篇幅来讲ETD的定义,现在我们已经学会如何定义一个元素以及它的内容,如何描述父元素与子元素之间错综复杂的关系,只差不知道如何定义元素的属性了。
在第二章中我们曾经提到过属性,那个例子是一个有关“商品”的元素,它有两个属性,即“类型”和“颜色”:
<商品 类型 = "服装" 颜色 = "黄色">
在DTD中定义属性时,我们使用下面的格式:
<ATTLIST 元素名 (属性名 属性类型 缺省值)*>
元素名是属性所属的元素的名字,在上面例子中,元素名是“商品”;属性名是属性的命名,例子中,“类型”和“颜色”是属性名;缺省值说明在XML文件中,如果没有特别说明属性的取值,语法分析器默认它具有的取值;属性类型则用来指定该属性是属于十个有效属性类型中的哪种类型。
注意:由于ATTLIST是一个属性的列表,它可以包含很多属性,在实际应用中,一个元素也经常有多个属性。
上面例子中的属性可以如下定义:
<ATTLIST 商品 颜色 CDATA #IMPLIED
>
在元素说明的四个部分中,我们需要再详细讨论一下元素类型和缺省值。在下一节中,我们就从缺省值说起。
2007-2-25 17:34
hinet
3.1.3.2 属性缺省值
3.1.3.2 属性缺省值
根据XML文件是否必须为一个属性提供取值,属性的缺省值又可以分为以下三类:
必须赋值的属性
关键字REQUIRED说明XML文件中必须为这个属性给出一个属性值。例如,假设你想定义一个"页面作者"元素,并把这个元素加入所有网站中的每一个页面。之所以定义这个元素,是为了页面编辑者能够提供他的联系信息,以便当发现页面错误或无效链接时,可以及时地通知他。在这种情况下,每个页面作者都有不同的个人信息,所以你无法事先知道应该用什么作为缺省值,但你又的确需要提供每个人的信息。这时候,你就可以把与联系信息相关的属性定义为必须的(REQUIRED),而且不用提供缺省值。
属性值可有可无的属性
当使用IMPLIED关键字时,文法解释器不再强行要求你在XML文件中给该属性赋值,而且也无须在DTD中为该属性提供缺省值。可以说,这是对属性值有无的最低要求,现实中经常用到。
固定取值的属性
还有一种特殊情况,你需要为一个特定的属性提供一个缺省值,并且不希望XML文件的编写者把你的缺省值替代掉。这时候,就应该使用FIXED关键字,同时为该属性提供一个缺省值。
定义缺省值的属性
如果不使用上面任何一种关键字的话,该种属性就是属于这种类型。对于这种属性,你需要在DTD中为它提供一个缺省值。而在XML文件中可以为该属性给出新的属性值来覆盖事先定义的缺省值,也可以不另外给出属性值,后一种情况下它就默认为采用DTD中给出的缺省值。
至于究竟采用哪种缺省值,就看实际需要了。下面给出一个具体的例子:
<ATTLIST 页面作者 年龄 #CDATA #IMPLIED
联系信息 #CDATA #REQUIRED
网站职务 #CDATA #FIXED "页面作者"
个人爱好 #CDATA "上网">
2007-2-25 17:34
hinet
3.1.3.3 属性类型
一个元素可以为以下十种类型中的任意一种:
CDATA
Enumerated
ID
IDREF
IDREFS
ENTITY
ENTITIES
NMTOKEN
NMTOKENS
NOTATION
下面我们就来一个一个讲述。
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.