如何为以下XML编写XSD?
<A></A>
<B></B>
<C></C>
<D></D>
<E></E>
<E></E>
A,B,C,D 只有零或一个。他们没有序列。它可以是 D,C,B,A 。最后,有一个或多个E 元素。
我尝试了多种方法,但无法完成。
答案 0 :(得分:0)
您被XML Schema的非正交性所阻止。您认为以下内容应该有效:
<?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>
然而,它没有。 XSD的xs:all
结构是二等公民;它不能出现在xs:sequence
。
推荐:根据您的要求删除“任何订单”限额:
<?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:element name="A" minOccurs="0"/>
<xs:element name="B" minOccurs="0"/>
<xs:element name="C" minOccurs="0"/>
<xs:element name="D" minOccurs="0"/>
<xs:element name="E" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
允许任何元素顺序最终在实践中不如理论重要,特别是考虑到非正交性,如上述情况以及与Unique Particle Attribution发生冲突的可能性。