允许元素的随机顺序一些重复,一些不重复在XSD模式中

时间:2017-06-14 11:28:40

标签: xml xsd

我正在尝试创建一个XSD,并尝试使用以下要求编写定义:

Allow child elements specified to appear only once, but one elements to appear multiple times
Allow child elements to be in any order

示例:

<parent>
<child1/>
<child2/>
<child3/>
<child3/>
</parent>

child1和child2元素必须能够交换订单但不应重复。

2 个答案:

答案 0 :(得分:0)

这个简单的v1.0,XSD将需要一个parent,其中只有一个child1和一个child2,任意顺序,任意数量的child3:< / p>

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="parent">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="child3" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice>
          <xs:sequence>
            <xs:element name="child1"/>
            <xs:element name="child3" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="child2"/>
            <xs:element name="child3" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
          <xs:sequence>
            <xs:element name="child2"/>
            <xs:element name="child3" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="child1"/>
            <xs:element name="child3" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

答案 1 :(得分:0)

在XSD 1.0中一般不可能,除了列出@kjhughes已经完成的所有可能的排列,如果你有超过4个允许的元素子女,那就变得无法管理。

在XSD 1.1中你可以写

<xs:all>
  <xs:element name="child1"/>
  <xs:element name="child2"/>
  <xs:element name="child3" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>