Xml 无序xsd:所有元素后跟另一个元素
如何为以下XML编写XSDXml 无序xsd:所有元素后跟另一个元素,xml,xsd,xml-validation,Xml,Xsd,Xml Validation,如何为以下XML编写XSD <A></A> <B></B> <C></C> <D></D> <E></E> <E></E> A、 B,C,D只有零或一个。而且它们没有顺序。它可以是D,C,B,A。最后,有一个或多个E元素 我尝试了多种方法,但都没有成功。您被XML模式的非正交性所阻碍。你会认为以下方法应该有效: <?xml version="
<A></A>
<B></B>
<C></C>
<D></D>
<E></E>
<E></E>
A、 B,C,D只有零或一个。而且它们没有顺序。它可以是D,C,B,A。最后,有一个或多个E元素
我尝试了多种方法,但都没有成功。您被XML模式的非正交性所阻碍。你会认为以下方法应该有效:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="top">
<xs:complexType>
<xs:sequence>
<xs:all>
<xs:element name="A" minOccurs="0"/>
<xs:element name="B" minOccurs="0"/>
<xs:element name="C" minOccurs="0"/>
<xs:element name="D" minOccurs="0"/>
</xs:all>
<xs:element name="E" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
允许元素的任何顺序在实践中都不如在理论上重要,特别是考虑到上述非正交性以及与XML模式冲突的可能性。您被XML模式的非正交性所阻碍。你会认为以下方法应该有效:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="top">
<xs:complexType>
<xs:sequence>
<xs:all>
<xs:element name="A" minOccurs="0"/>
<xs:element name="B" minOccurs="0"/>
<xs:element name="C" minOccurs="0"/>
<xs:element name="D" minOccurs="0"/>
</xs:all>
<xs:element name="E" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
允许元素的任何顺序在实践中都不如在理论中重要,特别是考虑到上述非正交性以及与……冲突的可能性。。。。。。。。。。。。。。。。。。。。。。。。它不喜欢按顺序排列。。。。因为我的xml是用户定义的,所以我不希望序列给用户带来不真实的感觉。对不起,因为您的需求冲突,所以必须给出一些东西。我认为牺牲订购是一个明智的前进方向。如果愿意,您可以使用XSD以外的验证方法。也许,您可以用另一种可以接受的方式更改标记约束。您是否愿意在a、B、C和D周围添加包装器元素?对不起。。。我不想在a、B、C和D周围添加包装器元素。如果我想添加包装器元素,为什么不在多个E周围添加包装器元素呢?因为您说过E必须出现在无序的a、B、C和D之后。包装E无助于解决
xs:all
不能按顺序出现的问题。您是对的。所以XML模式无法解决这个问题。正确的?。。。。。。。。。。。。。。。。。。。。。。。。它不喜欢按顺序排列。。。。因为我的xml是用户定义的,所以我不希望序列给用户带来不真实的感觉。对不起,因为您的需求冲突,所以必须给出一些东西。我认为牺牲订购是一个明智的前进方向。如果愿意,您可以使用XSD以外的验证方法。也许,您可以用另一种可以接受的方式更改标记约束。您是否愿意在a、B、C和D周围添加包装器元素?对不起。。。我不想在a、B、C和D周围添加包装器元素。如果我想添加包装器元素,为什么不在多个E周围添加包装器元素呢?因为您说过E必须出现在无序的a、B、C和D之后。包装E无助于解决xs:all
不能按顺序出现的问题。您是对的。所以XML模式无法解决这个问题。对吗?