如何在 <xs:all> 中设置可选项目?

问题描述:

我有这样的 xsd.这些所有字段可以存在也可以不存在,并且顺序不可预测.

I have such xsd. These all fields can exist or not and in unpredictable order.

<?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>

field4 不存在于 xml 中,验证器说他正在等待 field4,但他不应该这样说.那么有什么问题?

field4 doesn't exist in xml and validator says that he is waiting for field4, but he shouldn't say this. So what is wrong?

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"元素可以以任何顺序出现,每个元素可以出现零次或一次!

The example above indicates that the "firstname" and the "lastname" elements can appear in any order and each element CAN appear zero or one time!

您需要将 minOccurs 放在各个元素上,而不是 ,即

You need to put the minOccurs on the individual elements, not the <xs:all>, i.e.

<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>

minOccurs="0" 放在 上表示可以省略整个组,而不是单个元素.

Putting minOccurs="0" on the <xs:all> is saying that entire group may be omitted, not individual elements.

请参阅 XML 架构文档.