XML Schema:为complexType设置默认值?

时间:2009-06-29 19:59:37

标签: xml schema xsd

假设我想设置一个通用的complexType,如下所示:

<xs:complexType name="button">
    <xs:sequence>
        <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="href" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

我想在我的架构文件的各个地方引用complexType,如下所示:

<xs:element name="someButton" type="button" />

我是否可以通过someButton元素为按钮子元素设置默认值? (即如果我想someButton的默认标签为“Go”或默认的href为“index.html”)

基本上......现在我有类似

的东西
<Field Name="State" DataSourceField="State" />

我试图以尽可能简单的方式删除冗余。

1 个答案:

答案 0 :(得分:18)

不,仅适用于简单值。但也许你可以通过为复杂类型的所有简单部分提供默认值来使用它们来做你想要的。但是,它对于属性比对于您拥有的元素更有效(因为“默认属性值适用于缺少属性时,默认元素值适用于元素为空” - 见下文)。默认情况下,属性本身是可选的:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="button" type="button"/>
  <xs:complexType name="button">
    <xs:attribute name="id" type="xs:string"/>
    <xs:attribute name="href" type="xs:string" default="index.html"/>
    <xs:attribute name="label" type="xs:string" default="Go"/>
  </xs:complexType>
</xs:schema>

<button id="1"/>
  

使用默认属性声明属性和元素的默认值,尽管此属性在每种情况下的结果略有不同。当使用默认值声明属性时,属性的值是在实例文档中显示为属性值的任何值;如果属性未出现在实例文档中,则架构处理器为该属性提供的值等于默认属性的值。请注意,属性的默认值仅在属性本身是可选的时才有意义,因此指定默认值和除可选值以外的任何值都是错误的。

     

架构处理器稍微区别对待默认元素。当使用默认值声明元素时,元素的值是在实例文档中显示为元素内容的任何值;如果元素没有任何内容,则架构处理器为元素提供的值等于默认属性的值。但是,如果元素未出现在实例文档中,则架构处理器根本不提供该元素。总之,元素和属性默认值之间的差异可以表示为:缺少属性时应用默认属性值,当元素为空时应用默认元素值。 [强调添加]

http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints