如何要求一个,或另一个,或两个子元素

时间:2014-11-22 02:19:57

标签: xml validation xsd xsd-validation

<xs:element name="scheduled_times"  >
    <xs:complexType>
        <xs:sequence> 
            <xs:element ref="arrival_time"  />
            <xs:element ref="departure_time" />
        </xs:sequence>
    </xs:complexType>            
</xs:element>

这要求我提供&#34; arrival_time&#34;和&#34; departure_time&#34;。但我希望能够提供其中之一或两者。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

对XSD的最简单更改是通过minOccurs="0"

选择
<xs:element name="scheduled_times">
    <xs:complexType>
        <xs:sequence> 
            <xs:element ref="arrival_time"  minOccurs="0"/>
            <xs:element ref="departure_time" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>            
</xs:element>

请注意,这也不允许出现。两者之一,但不是,因为{{ 3}}约束。

错误 - 违反独特粒子归因

尝试通过xs:choice列出所需可能性的直接方法:

  <xs:element name="scheduled_times">
    <xs:complexType>
      <xs:choice>
        <xs:sequence>
          <xs:element ref="arrival_time"/>
        </xs:sequence>
        <xs:sequence>
          <xs:element ref="departure_time"/>
        </xs:sequence>
        <xs:sequence>
          <xs:element ref="arrival_time"/>
          <xs:element ref="departure_time"/>
        </xs:sequence>
      </xs:choice>
    </xs:complexType>            
  </xs:element>

将违反Unique Particle Attribution约束:

  

cos-nonambig:arrival_time和arrival_time(或来自他们的元素)   替代组)违反“独特粒子归因”。中   针对此模式的验证,将为这些模式创建歧义   两个粒子。

正确 - 不违反独特粒子归因

要解决歧义,请重新选择选项,以便明确可能性:

  <xs:element name="scheduled_times">
    <xs:complexType>
      <xs:choice>
        <xs:sequence>
          <xs:element ref="arrival_time"/>
          <xs:element ref="departure_time" minOccurs="0"/>
        </xs:sequence>
        <xs:element ref="departure_time"/>
      </xs:choice>
    </xs:complexType>            
  </xs:element>