xsd两个替代可选标签

时间:2014-07-09 08:16:14

标签: xml xsd

我正在尝试像这样验证一些xml:

     <Rpms>
        <Rpm>path/file.rpm</Rpm>
        <SlImport>path/file.xml</SlImport>
     <Rpms>

标签 Rpm SlImport 遵循以下规则:

  1. 都是可选的
  2. 可能不止一次出现
  3. 可以按任何顺序出现,无论是否混合
  4. 必须至少有一个(Rpm或SlImport)标签
  5. 我写了这个xsd:

      <xs:element name="Rpms">
        <xs:complexType>
          <xs:sequence>
            <xs:choice maxOccurs="unbounded">
              <xs:element name="SlImport" type="SlElement" minOccurs="0" />
              <xs:element name="Rpm" type="rpmElement" maxOccurs="unbounded">
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    

    它工作正常,除非在这种情况下:如果 Rpms 标记为空,它不会抛出错误。

1 个答案:

答案 0 :(得分:1)

我会在“SlImport”定义中省略“minOccurs”属性,比如

<xs:element name="Rpms">
    <xs:complexType>
        <xs:choice maxOccurs="unbounded">
            <xs:element name="SlImport" type="xs:string"/>              
            <xs:element name="Rpm" type="xs:string" />              
        </xs:choice>
    </xs:complexType>
</xs:element>

因为空“Rpms”是有效的,因为可能存在SlImport的“零发生”。

IMO包装“xs:sequence”也是多余的,可以删除。