2007-2-25 17:37
hinet
3.2.2.4 用Schema定义元素属性
3.2.2.4 用Schema定义元素属性
Schema中用来定义属性的元素有两个,AttributeType元素是声明属性的,attribute元素则是说明一个元素中究竟包含那些属性。
AttributeType元素
AttributeType元素也是Schema中的重要元素之一,用于定义该Schema文档中出现的属性类型。AttributeType的语法表达如下:
name="属性名"
dt:type="属性类型"
dt:values="枚举值列表"
default="缺省值"
required="{yes | no}"
>
下面我们来一个一个看看对于这些属性的规定:
name
name不言而喻,自然是所声明的属性类型的名称。注意,该属性是必须的。
dt:type
dt:type指定所声明属性的数据类型,它除了支持DTD中包含的全部十大数据类型外,还支持一些扩展属性,在下一小节会详细讲述。Schema中的十个基本属性与DTD中属性的对应关系请见下表:
Schema中基本类型 DTD中数据类型
string #PCDATA
enumeration ENUMERATED
id ID
idref IDREF
idrefs IDREFS
nmtoken NMTOKEN
nmtokens NMTOKENS
entity ENTITY
entities EMTITIES
notation NOTATION
注意,当dt:type取值为"enumeration"时,后面的dt:value必须列出所有可能的取值。
dt:value
dt:value只有当dt:type取值"enumeration"时才有效,此时,dt:value需列出所有可能的取值。
default
default指定该属性类型的缺省取值。default取值必须是有效的,例如,当dt:type取值"enumeration"时,default的取值必须来自dt:value所列出的值。
required
required指定该属性对于引用它的元素是否是必须的。取值yes表明是必须的,取值no则表明并非必须。
我想大家一定还记得前面讲DTD时曾根据关于属性缺省值的规定将属性分为四类,在Schema中,是通过default属性和required属性来作这些规定的。看了下面这个列表就一目了然了。
属性类型 DTD定义方法 Schema定义方法 合法实例
必须赋值的属性 <ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) #REQUIRED> name="状况"
dt:type="enumeration"
dt:value="晴 阴 雨 雪"
required="yes"
/> <天气 状况="晴"/>
属性值可有可无的属性 <ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) #IMPLIED> name="状况"
dt:type="enumeration"
dt:value="晴 阴 雨 雪"
required="no"
/> <天气 状况="晴"/>
<天气/>
定义缺省值的属性 <ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) "晴"> name="状况"
dt:type="enumeration"
dt:value="晴 阴 雨 雪"
default="晴"
required="yes"
/> <天气 状况="阴"/>
<天气/>
固定取值的属性 <ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) #FIXED> name="状况"
dt:type="enumeration"
dt:value="晴 阴 雨 雪"
default="晴"
required="no"
/> <天气/>
attribute元素
AttributeType和attribute的关系与ElementType和element的关系相同,AttributeType只是起到声明属性的作用,而真正指明一个元素具有哪些属性还需依靠attribute元素。attribute的语法表达如下:
type="attribute-type"
default="default-value"
[required="{yes | no}"]
>
因为attribute实际上是对该Schema中AttributeType声明的引用,而具体引用什么属性类型,关键就要靠type属性了。type唯一指定了要引用的属性类型,因此其取值必须同某个AttributeType元素中name属性的取值严格一致。其它两个属性与AttributeType中相应属性的含义相同,default指定该属性类型的缺省取值,required指定该属性对于引用它的元素是否是必须的。如果和同一个属性相对应的AttributeType和attribute中都对default和required给出了定义,则在attribute中的取值具有更高的优先级。
最后,我们给出关于上面“天气”元素及其属性的一个完整的Schema定义:
name="状况"
dt:type="enumeration"
dt:value="晴 阴 雨 雪"
required="yes"
/>