XSD 全有或全无组
XSD all-or-nothing group
我要匹配这两个文档:
<a>
<b/>
</a>
和:
<a>
<b/>
<c/>
<d/>
</a>
也就是说,必须既不存在c
又不存在d
,或者不存在c
和d
。
我试过 choice
两个 sequences
,但我得到:“内容模型是
不是决定论者。”,我想是因为选择必须在
第一个元素,对于两个不同的文档是相同的。
您可以将 c
和 d
放在 minOccurs=0 的序列组中。像这样:
<element name="a">
<complexType>
<sequence>
<element name="b" />
<sequence minOccurs="0">
<element name="c" />
<element name="d" />
</sequence>
</sequence>
</complexType>
</element>
如果你想让c
和d
能够以任意顺序出现,你可以这样做:
<element name="a">
<complexType>
<sequence>
<element name="b" />
<choice minOccurs="0">
<sequence>
<element name="c" />
<element name="d" />
</sequence>
<sequence>
<element name="d" />
<element name="c" />
</sequence>
</choice>
</sequence>
</complexType>
</element>
显然,如果组中有两个以上的成员,则此方法无法很好地扩展。
我要匹配这两个文档:
<a>
<b/>
</a>
和:
<a>
<b/>
<c/>
<d/>
</a>
也就是说,必须既不存在c
又不存在d
,或者不存在c
和d
。
我试过 choice
两个 sequences
,但我得到:“内容模型是
不是决定论者。”,我想是因为选择必须在
第一个元素,对于两个不同的文档是相同的。
您可以将 c
和 d
放在 minOccurs=0 的序列组中。像这样:
<element name="a">
<complexType>
<sequence>
<element name="b" />
<sequence minOccurs="0">
<element name="c" />
<element name="d" />
</sequence>
</sequence>
</complexType>
</element>
如果你想让c
和d
能够以任意顺序出现,你可以这样做:
<element name="a">
<complexType>
<sequence>
<element name="b" />
<choice minOccurs="0">
<sequence>
<element name="c" />
<element name="d" />
</sequence>
<sequence>
<element name="d" />
<element name="c" />
</sequence>
</choice>
</sequence>
</complexType>
</element>
显然,如果组中有两个以上的成员,则此方法无法很好地扩展。