无序 xsd:all 个元素后跟另一个元素

Unordered xsd:all elements followed by another element

如何为以下XML写一个XSD?

<A></A>
<B></B>
<C></C>
<D></D>
<E></E>
<E></E>

A、B、C、D 只有 0 或 1。而且它们没有顺序。它可以是 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>

然而,事实并非如此。 XSD 的 xs:all 构造是第二个 class 公民;它不能出现在 xs:sequence.

建议:从您的要求中删除 "any order" 津贴:

<?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 冲突的可能性。