我有一个提供参考号的XML。它应该具有HeaderNumber和LineNumber或ExternalReference。同时(全部三个元素)都被允许。 我可以通过组和选择来使第一部分正确,但是如何允许(而不是强迫)所有元素都出现?
我有这个XSD来强制所有元素出现:
<xs:schema>
<xs:group name="InternalReference">
<xs:all>
<xs:element name="HeaderNumber" type="xs:int"/>
<xs:element name="LineNumber" type="xs:int"/>
</xs:all>
</xs:group>
<xs:group name="Reference">
<xs:all>
<xs:group ref="InternalReference"/>
<xs:element name="ExternalReference"/>
</xs:all>
</xs:group>
<xs:complexType name="message">
<xs:all>
<xs:group ref="Reference" minOccurs="1"/>
</xs:all>
</xs:complexType>
<xs:element name="Message" type="message"/>
</xs:schema>
和该XSD包含以下任何一个引用:
<xs:schema>
<xs:group name="InternalReference">
<xs:sequence>
<xs:element name="HeaderNumber" type="xs:int"/>
<xs:element name="LineNumber" type="xs:int"/>
</xs:sequence>
</xs:group>
<xs:group name="Reference">
<xs:choice>
<xs:group ref="InternalReference"/>
<xs:element name="ExternalReference"/>
</xs:choice>
</xs:group>
<xs:complexType name="message">
<xs:sequence>
<xs:group ref="Reference" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Message" type="message"/>
</xs:schema>
非常感谢您提供帮助。
答案 0 :(得分:0)
我有一个解决方法。这不是最佳解决方案,但非常可行。
<xs:schema>
<xs:element name="ExternalReference" type="xs:string"/>
<xs:group name="InternalReference">
<xs:sequence>
<xs:element name="HeaderNumber" type="xs:int"/>
<xs:element name="LineNumber" type="xs:int"/>
<xs:element ref="ExternalReference" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:group>
<xs:group name="External">
<xs:sequence>
<xs:element ref="ExternalReference" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:group>
<xs:group name="Reference">
<xs:choice>
<xs:group ref="InternalReference"/>
<xs:group ref="External"/>
</xs:choice>
</xs:group>
<xs:complexType name="message">
<xs:sequence>
<xs:group ref="Reference" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Message" type="message"/>
</xs:schema>
我仍然希望有更好的方法。