如何在<xs:all>中使项目成为可选项目?

问题描述

| 我有这样的XSD。这些所有字段可以存在或不存在,并且顺序不可预测。
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\">

<xs:element name=\"request\">
<xs:complexType>
  <xs:all  minOccurs=\"0\">
    <xs:element ref=\"field1\"/>
    <xs:element ref=\"field2\"/>
    <xs:element ref=\"field3\"/>
    <xs:element ref=\"field4\"/>
    <xs:element ref=\"field5\"/>
  </xs:all>
</xs:complexType>
</xs:element>

</xs:schema>
xml中不存在field4,验证程序说他正在等待field4,但他不应该这样说。那怎么了? w3cschools.com说
<xs:element name=\"person\">
<xs:complexType>
<xs:all minOccurs=\"0\">
  <xs:element name=\"firstname\" type=\"xs:string\"/>
  <xs:element name=\"lastname\" type=\"xs:string\"/>
</xs:all>
</xs:complexType>
</xs:element>
上面的示例表明\“ firstname \”和\“ lastname \”元素可以以任何顺序出现,并且每个元素可以出现零或一次!     

解决方法

您需要将
minOccurs
放在单个元素上,而不是
<xs:all>
,即
<xs:all>
    <xs:element ref=\"field1\" minOccurs=\"0\"/>
    <xs:element ref=\"field2\" minOccurs=\"0\"/>
    <xs:element ref=\"field3\" minOccurs=\"0\"/>
    <xs:element ref=\"field4\" minOccurs=\"0\"/>
    <xs:element ref=\"field5\" minOccurs=\"0\"/>
</xs:all>
将ѭ5放在ѭ3上表示可以省略整个组,而不是单个元素。 请参阅XML模式文档。     ,尝试这样
 <xs:element ref=\"field4\" minOccurs=\"0\" >