XSD选择内部所有

XSD选择内部所有,xsd,Xsd,不能将choice标记放在all标记内。那么,有什么解决办法来获得这种功能性吗? 例如,我有标记,如: <settings> <logging /> <sending /> <useonly /> </settings> 或者类似的 <settings> <logging /> <notuseonly /> <sending /> &l

不能将choice标记放在all标记内。那么,有什么解决办法来获得这种功能性吗? 例如,我有
标记,如:

<settings>
    <logging />
    <sending />
    <useonly />
</settings>

或者类似的

<settings>
    <logging />
    <notuseonly />
    <sending />
</settings>

所以我想防止
同时出现,而顺序并不重要。如果允许的话,在XSD中它看起来像:

  <xs:all>
    <xs:element minOccurs="0" maxOccurs="1" ref="sending" />
    <xs:element minOccurs="0" maxOccurs="1" ref="logging" />
    <xs:choice>
         <xs:element minOccurs="0" maxOccurs="1" ref ="useonly" />
         <xs:element minOccurs="0" maxOccurs="1" ref ="notuseonly" />
     </xs:choice>
  </xs:all>

有什么想法吗?

检查此链接:

我为您总结了建议的解决方案:

一种解决方案是将可以在另一个元素中更改的元素包裹起来:

  <xsd:all>
   <xsd:element minOccurs="0" maxOccurs="1" ref="sending" />
   <xsd:element minOccurs="0" maxOccurs="1" ref="logging"/>
   <xsd:element minOccurs="0" maxOccurs="1" ref ="usetype"/>
  </xsd:all>

 <xsd:element name="usetype">
  <xsd:complexType>
   <xsd:choice>
    <xsd:element ref="useonly"/>
    <xsd:element ref="notuseonly"/>
   </xsd:choice>
  </xsd:complexType>
 </xsd:element>

另一种是使用替换组:

  <xsd:all>
   <xsd:element ref="sending"/>
   <xsd:element ref="logging"/>
   <xsd:element ref="usetype"/>
  </xsd:all>
 </xsd:complexType>
 <xsd:element name="usetype" abstract="true"/>
 <xsd:element name="useonly" substitutionGroup="usetype"> ... </xsd:element>
 <xsd:element name="notuseonly" substitutionGroup="usetype"> ... </xsd:element>

... 
... 

substitutionGroup方法是否正是所需的行为(好像xs:choice在xs:all中)?如果是这样的话,为什么他们不直接允许呢?我一直在尝试让substitutionGroup与php soapClient一起工作,但我一辈子都做不到