XSD:minOccurs =“0”和defaultValue =“x”的意义是什么

时间:2013-03-05 19:04:26

标签: xml xsd default optional

我发现自己想知道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>

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

提前多多感谢

米莎

1 个答案:

答案 0 :(得分:2)

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

的同义词
<myType>
  <test1>x</test1>
  <test2>dsjhfdshflk</test2>
</myType>

这会让一些用户更加失望,他们希望只要元素完全不显示就会提供默认值。

原因在于,一般而言,元素不限于最多出现一次,或者最多只出现在儿童中的一个位置。如果你的类型定义中的xs:sequence被xs:choice替换为maxOccurs ='unbounded',那么建议在test1可能出现的地方提供<test1>x</test1>的语言将被强制提供无限数字这种默认的test1元素。对于设计XSD的工作组成员来说,这似乎不是一个好主意。

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