2

我发现自己想知道 XSD 中 defaultValue 属性的用途是什么。例如,考虑一个 complexType

 <xs:complexType name="myType">
    <xs:sequence>
        <xs:element name="test1" type="type1" defaultValue="x" minOccurs="0" maxOccurs="1"/>
        <xs:element name="test2" type="type2"/>
    </xs:sequence>
 </xs:complexType>

我将能够验证表单的 XML 文件

<myType>
  <test2>dsjhfdshflk</test2>
</myType>

现在的 defaultValue 属性有什么意义<test1>

非常感谢提前

米沙

4

1 回答 1

2

在您的架构片段中声明的默认值test1具有导致架构处理器将<test1/>其视为有效同义词的效果<test1>x</test1>。它不会导致模式处理器将您的示例实例视为同义词

<myType>
  <test1>x</test1>
  <test2>dsjhfdshflk</test2>
</myType>

这让一些希望在元素根本不出现时提供默认值的用户感到失望。

原因是一般来说,元素不限于最多出现一次,或者最多出现在子元素中的单个位置。如果您的类型定义中的 xs:sequence 被替换为带有 maxOccurs='unbounded' 的 xs:choice,那么这种语言建议在<test1>x</test1>任何可能出现 test1 的地方提供但没有提供的语言将被迫提供无限数量的此类默认 test1 元素. 对于设计 XSD 的工作组的成员来说,这似乎不是一个好主意。

那么为什么会有默认值呢?有时它们很方便,并且允许元素的默认值可以在子元素和属性的处理之间提供更大的并行性,这是负责工作组中某些人的明确目标。

于 2013-03-05T19:34:34.503 回答