我的XML结构如下所示:
<node>
<!-- node contains a lot of optional property nodes,
and the order is random. -->
<property2>value</property2>
<property1>value</property1>
<property4>value</property4>
<property3>value</property3>
<!-- node also contains 0-to-unbounded child elements
to simplify things, these are listed after the properties. -->
<child> ... </child>
<child> ... </child>
<child> ... </child>
</node>
据我所知,在XSD 1.1中,我可以按如下方式验证:
<xs:all>
<xs:element name="property1" minOccurs="0"/>
<xs:element name="property2" minOccurs="0"/>
<xs:element name="property3" minOccurs="0"/>
<xs:element name="property4" minOccurs="0"/>
...
<xs:element name="child" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>
不幸的是,我应该在XSD 1.0中执行此操作。(即使用的应用程序不支持XSD 1.1。)但是,XSD 1.0不允许maxOccurs="unbounded"
限制在一个xs:all
节点。
并非所有事情都必须严格验证。
property3
的多次)。答案 0 :(得分:1)
如果这些属性没有子结构,请考虑将它们作为属性而不是元素;那么你可以订单无足轻重。
否则,请声明属性元素的排序,不要担心。从来没有看到过排序对生成XML数据的应用程序造成过度负担。相反,XSD设计师始终认为没有内在的订购需求,并且担心任意强加一个。然而,实际上,除非元素的顺序本身用于传达信息,否则序列工作正常。在所有其他情况下,XSD 1.0 xs:sequence
都可以。