对定义为空选择的元素的XSD验证

时间:2016-12-12 16:09:02

标签: xml xsd xsd-validation

我遇到了一个空选择的XSD元素定义:

   <xs:element name="Data">
    <xs:complexType>
     <xs:choice>
     </xs:choice>
    </xs:complexType>
   </xs:element>

当我得到元素实例时:

<Data/>

在XML文档中,一些解析器(SoapUI,Oracle SOA 12c)将其评估为错误: 元素数据@ http://www.namespace.com/ensc)中的预期元素。

而其他人(Eclipse工具)将XML评估为Schema有效。

我想知道哪个评估结果是正确的。

1 个答案:

答案 0 :(得分:2)

xs:choiceallowed in XSD

<choice
  id = ID
  maxOccurs = (nonNegativeInteger | unbounded)  : 1
  minOccurs = nonNegativeInteger : 1
  {any attributes with non-schema namespace . . .}>
  Content: (annotation?, (element | group | choice | sequence | any)*)
</choice>

请注意,Content:可能包含 可选 annotation,后跟 {更多} (element | group | choice | sequence | any)。因此,您的XSD很好,只包含Data的XML文档对它有效。

您的XSD可以简化为

<xs:element name="Data">
  <xs:complexType/>
</xs:element>

但请注意,它无法进一步简化为

<xs:element name="Data"/>

因为这实际上允许Data拥有任何属性和内容模型。