将序列和all都放在一个complexType节点下的xml架构

时间:2010-03-09 10:02:13

标签: xml schema

这是xml文件:

<section>
    <number>1</number>
    <title>A Title goes here...</title>
    <code>TheCode</code>

    <element></element>
    <element></element>
</section>

在节节点中,有数字,标题和代码节点。他们的顺序不能修复。 然后,节节点下也有多个元素。

我们的想法是使用以下架构:

<xs:complexType name="Type-section">

  <xs:all>
    <xs:element name="number" minOccurs="0"></xs:element>
    <xs:element name="code"  minOccurs="1"></xs:element>
    <xs:element name="title"  minOccurs="1"></xs:element>
  </xs:all>

  <xs:sequence>
    <xs:element maxOccurs="unbounded" name="element"></xs:element>
  </xs:sequence>
</xs:complexType>

但它无效。我只是不能把“序列”和“所有”放在同一级别。我该如何解决?

1 个答案:

答案 0 :(得分:1)

如果订单不重要,那么您可以这样做的方法是列出所有排列并将其作为选择。然而,随着选择数量增加O(n!),将很难维持。由于XML Schema上存在这些限制,我不得不重新编写我编写的一些内容的序列。

e.g。

<choice>
  <sequence>
    <element name="a" />
    <element name="b" />
    <element name="c" />
  </sequence>

  <sequence>
    <element name="a" />
    <element name="c" />
    <element name="b" />
  </sequence>


  <sequence>
    <element name="b" />
    <element name="a" />
    <element name="c" />
  </sequence>


  <sequence>
    <element name="b" />
    <element name="c" />
    <element name="a" />
  </sequence>


  <sequence>
    <element name="c" />
    <element name="a" />
    <element name="b" />
  </sequence>


  <sequence>
    <element name="c" />
    <element name="b" />
    <element name="a" />
  </sequence>
</choice>