XSD:如何使用minOccurs one&amp ;;验证特定元素所有元素都可以按任何顺序排列。次数

时间:2016-01-06 15:53:29

标签: xml xsd-validation

我有要求,因为特定元素应至少出现一次&所有元素都可以按任何顺序排列。 例如:

  <xs:element name="ABC">
      <xs:complexType>
      <xs:choice>
        <xs:element ref="SCH" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="ELM" minOccurs="0" maxOccurs="unbounded"/>        
       </xs:choice>
      <xs:attribute type="xs:string" name="id" use="required"/>
      .........
    </xs:complexType>
  </xs:element>

  <xs:element name="SCH">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="PTN" minOccurs="1" maxOccurs="unbounded" />        
        <xs:element ref="ELM" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:attribute type="String" name="type" use="required"/>
      .............      
   </xs:complexType>
  </xs:element>

我想测试'PTN'应始终存在于'SCH'中,minOccurs为'1'和'PTN'&amp; 'ELM'可以按任何顺序出现。 我检查了以下选项:

  1. 'xs:sequence'将始终检查元素序列。
  2. 'xs:all'允许指定的子元素以包含元素的任何顺序显示(或不显示),除非它们只能出现一次。
  3. 'xs:choice'部分地解决了我的问题,但它没有检查特定元素应该至少出现一次。
  4. 有效的XML案例:

    <ABC id="000021"><SCH id="" type="aaa"><ELM id="dfg" type="fff"/><PTN id="NA" type="gxgfd"><ELM id="dfg2" type="fff"/></SCH></ABC>
    
    <ABC id="000021"><SCH id="" type="aaa"><PTN id="NA" name="Machine" type="dgdh"><ELM id="dfg" type="fff"/><ELM id="dfg2" type="fff"/><PTN id="NA" type="machine"></SCH></ABC>
    
    <ABC id="000021"><PTN id="NA" type="gdfg"></SCH></ABC>
    

    以上XML案例有效,因为它至少包含一次“PTN”节点。 PTN&amp; ELM可以是任何顺序和计数。

    无效案例:

    <ABC id="000021"><SCH id="" type="aaa"><ELM id="dfg" type="fff"/><ELM id="dfg2" type="fff"/></SCH></ABC>
    <ABC id="000021"><SCH id="" type="aaa"><ELM id="dfg" type="fff"/></SCH></ABC>
    

    以上情况无效,因为它没有PTN节点。

0 个答案:

没有答案