我处理电子邮件并在xml文档中保存一些标题。我还需要针对xml架构验证文档。
正如主题所示,我需要验证忽略元素顺序,但据我所知,这似乎是不可能的。我是对的吗?
如果我将标题放在<xsd:sequence>
中,则顺序显然很重要。如果我<xsd:all>
我的订单被忽略了,但由于一些奇怪的原因,这意味着这些元素必须至少出现一次。
我的xml是这样的:
<headers>
<subject>bla bla bla</subject>
<recipient>rcp01@domain.com</recipient>
<recipient>rcp02domain.com</recipient>
<recipient>rcp...@domain.com</recipient>
</headers>
但我认为即使交换了主题和收件人元素,最终文档也是有效的。
真的无事可做?
答案 0 :(得分:4)
是的,有可能。只需创建一个选项(当然是某种类型或元素内容模型),并将maxOccurs设置为无限制。
<xs:element name="headers">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="subject" type="xs:string"/>
<xs:element name="recipient" type="xs:string"/>
</xs:choice>
</xs:complexType>
</xs:element>
答案 1 :(得分:0)
首先,一些要求猜测:
由于您只有两个不同的元素,因此很容易实现它:
<xs:element name="headers">
<xs:complexType>
<xs:choice>
<xs:sequence><!-- The recipient MUST be after the subject -->
<xs:element name="subject" type="xs:string" />
<xs:element name="recipient" minOccurs="1" maxOccurs="unbound" type="xs:string" />
</xs:sequence>
<xs:sequence><!-- The recipient is before the subject -->
<xs:element name="recipient" minOccurs="1" maxOccurs="unbound" type="xs:string" />
<xs:element name="subject" type="xs:string" />
<xs:element name="recipient" minOccurs="0" maxOccurs="unbound" type="xs:string" />
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>