我遇到了一个空选择的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有效。
我想知道哪个评估结果是正确的。
答案 0 :(得分:2)
空xs:choice
为allowed 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
拥有任何属性和内容模型。