XSD-схема для разных порядков элементов и вхождений как неограниченных - PullRequest
0 голосов
/ 11 января 2019

Ниже приведены 2 примера файлов XML

<Parent>
    <Child1>
        <Child2> value</Child2>
        <Child1>
            <Child2>value<Child2>
            <Child3> value </Child3>
            <Child4> value </Child4>
        </Child1>
        <Child1>
            <Child2>value<Child2>
            <Child4> value </Child4>
        </Child1>
    </Child1>
</Parent> 

<Parent>
    <Child1>
        <Child2> value</Child2>
        <Child3> value </Child3>
        <Child1>
            <Child4> value </Child4>
            <Child2>value<Child2>
            <Child3> value </Child3>
        </Child1>
    </Child1>
</Parent>

Элементы могут быть в любом порядке, а также в любом количестве последовательностей.

Схема определяется как:

<xs:complexType name="Child1">
    <xs:sequence minOccurs="0" >
      <xs:element type="xs:string" name="Child2" minOccurs="0" maxOccurs="unbounded" />
      <xs:element type="xs:string" name="Child3" maxOccurs="unbounded" minOccurs="0" />
      <xs:element type="xs:string" name="Child1" minOccurs="0" maxOccurs="unbounded" />
      <xs:element type="xs:string" name="Child4" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

<xs:complexType name="Parent">
    <xs:sequence>
      <xs:element type="Child1" name="Child1" maxOccurs="unbounded" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

У меня проблема в следующем: 1. Элементы могут быть в разном порядке. Но так как я установил его как xs: sequence, он должен быть в определенном порядке. 2. Если я изменю на xs: все так, чтобы он допускал различный порядок элементов, то я не могу установить maxOccurs как неограниченный, поскольку это не разрешено для xs: all.

Есть ли способ разрешить как различный порядок элементов, так и maxOcurance как неограниченные?

1 Ответ

0 голосов
/ 11 января 2019

Вы можете попробовать xs: choice:

`

<xs:complexType name="Child1">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element type="xs:string" name="Child2" />
      <xs:element type="xs:string" name="Child3" />
      <xs:element type="xs:string" name="Child1"/>
      <xs:element type="xs:string" name="Child4" />
    </xs:choice>
</xs:complexType>

`

...