代码之家  ›  专栏  ›  技术社区  ›  el2iot2

XMLSchema(XSD):如何表示“组A中最多一个元素,组b中最多一个元素”?

  •  2
  • el2iot2  · 技术社区  · 16 年前

    假设我有两组XML元素:

    <One/>
    <Two/>
    <Three/>
    

    <A/>
    <B/>
    <C/>
    

    我想把它们作为bucket元素的子元素:

    <Bucket>
       <A/>
       <One/>
    </Bucket>
    

    <Bucket>
       <C/>
       <Two/>
    </Bucket>
    

    但我不想允许任何一组元素中有多个元素。即:

    <Bucket>
       <A/>
       <B/>
       <One/>
    </Bucket>
    

    <Bucket>
       <A/>
       <One/>
       <Two/>
    </Bucket>
    

    这将是无效的。如何在XML模式中表达这一点?

    我想试试 xs:unique name() local-name() 字段或选择器中的用法。

    更新

    完整的解决方案是:

    <xs:element name="Bucket">
      <xs:complexType>
        <xs:sequence>
          <xs:choice minOccurs="0">
            <xs:element name="A"/>
            <xs:element name="B"/>
            <xs:element name="C"/>
          </xs:choice>
          <xs:choice minOccurs="0">
            <xs:element name="One"/>
            <xs:element name="Two"/>
            <xs:element name="Three"/>
          </xs:choice>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    
    1 回复  |  直到 16 年前
        1
  •  3
  •   Welbog    16 年前

    我会选择这样的东西,

    <xs:element name="Bucket">
      <xs:complexType>
        <xs:sequence>
          <xs:choice>
            <xs:element name="A"/>
            <xs:element name="B"/>
            <xs:element name="C"/>
          </xs:choice>
          <xs:choice>
            <xs:element name="One"/>
            <xs:element name="Two"/>
            <xs:element name="Three"/>
          </xs:choice>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    

    默认情况下, minOccurs maxOccurs 准备好了吗 1 minOccurs='0' <xs:choice> 元素。