Проверка XSD с возможностью If Else

Просто пытаюсь выяснить, можно ли реализовать приведенный ниже сценарий с помощью проверки уровня схемы XSD.


E.g-

<PreferredPlan>
This tag can have Values - Family or Single

если я получил значение «Семья», у меня должны быть элементы ниже xml.

<Family>
<tag1></tag1>
<tag2></tag2>

If "Single" value is captured, I should have below tags.

<Single>
<tag3></tag3>
<tag4></tag4>
</Single>



person user1884099    schedule 07.12.2012    source источник


Ответы (1)


Один простой способ определить это будет выглядеть примерно так:

<xs:element name="PreferredPlan">
  <xs:complexType>
    <xs:choice>
      <xs:element ref="Family"/>
      <xs:element ref="Single"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

<xs:element name="Family">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="tag1"/>
      <xs:element ref="tag2"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="Single">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="tag3"/>
      <xs:element ref="tag4"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="tag1" type="xs:string"/>  
<xs:element name="tag2" type="xs:string"/>  
<xs:element name="tag3" type="xs:string"/>  
<xs:element name="tag4" type="xs:string"/>

Это позволяет

<PreferredPlan>
  <Family>
    <tag1/>
    <tag2/>
  </Family>
</PreferredPlan>

а также

<PreferredPlan>
  <Single>
    <tag3/>
    <tag4/>
  </Single>
</PreferredPlan>

и запрещает

<PreferredPlan>
  <Family>
    <tag3/>
    <tag4/>
  </Family>
</PreferredPlan>
person C. M. Sperberg-McQueen    schedule 12.12.2012