默认值和固定值通过给空元素增加值的方式来扩展实例.如果文档中存在空的元素,模式处理器根据模式文档的定义,会插入默认值或固定值.在XSDL中,默认值和固定值分别通过default和fixed属性设置.两个属性只能出现其中之一,因为它们是互斥的.
如果元素为空,就填入默认值.下例中,声明了city元素,并指定了默认值为"佚名".
<xsd:element name="author" type="xsd:string"
default="佚名"/>
必须注意的是,元素声明中"空"的定义根据数据类型不同而有所不同.某些数据类型允许空值,包括string等.任何允许空字符串值的类型,元素都不会认为是空的,从而对于字符串类型元素,默认值不会被填充.相反,integer数据类型的空元素通常会被认为是空的,从而将填入默认值.此外,如果元素的xsi:nil属性被设置为true,那么就不会插入它的默认值.
<?xml version="1.0" encoding="gb2312"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string" default="N/A"
/>
<xsd:element name="price" type="xsd:integer" default="30"
/>
</xsd:schema>
元素的默认值行为见下表:
情况 |
填充实例结果 |
填充之前 |
填充之后 |
指定值 |
保持原始值 |
<author>罗贯中</author> |
<author>罗贯中</author> |
空元素(integer) |
填充值 |
<price></price> |
<price>30</price> |
空元素(string) |
没有填充值 |
<author></author> |
<author></author> |
元素为空 |
没有填充值 |
<price xsi:nil="true"/> |
<price xsi:nil="true"/> |
固定值与默认值在相同的情况下添加,它们的差别仅在于如果元素拥有一个值,则该值必须和固定值相等.当模式解析器确定元素值和固定值实际上是否相等时,会考虑到元素的数据类型.price元素的数据类型为integer,所以整数1的所有形式在实例中都会被接受,包括01、+1和周围包含空白符的1.相反,对于author元素具有数据类型为string,字符串"01"是无效的,因为与字符串"1"并不相等.
<xsd:element name="author" type="xsd:string"
fixed="1"/>
<xsd:element name="price" type="xsd:integer"
fixed="1"/>
按照以上定义,元素的固定值行为见下表:
有效实例 |
无效实例 |
<price>1</price> |
<price>2</price> |
<price>01</price> |
<author>+1</author> |
<price>+1</price> |
<author>01</author> |
<price></price> |
<author></author> |
<price />
|
<author> </author> |
<authro>1</author> |
<author/> |
加载中,请稍候......