【问题标题】:XML Schema: Setting a default value for a complexType?XML Schema:为 complexType 设置默认值?
【发布时间】:2009-06-29 19:59:36
【问题描述】:

假设我想像这样设置一个通用的 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" />

我正在尝试以尽可能简单的方式消除冗余。

【问题讨论】:

    标签: xml schema xsd


    【解决方案1】:

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

    <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

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 2010-12-07
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2012-02-27
      • 1970-01-01
      • 2015-10-02
      相关资源
      最近更新 更多