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

XML模式中组和序列的区别?

xsd
  •  29
  • sourcenouveau  · 技术社区  · 12 年前

    一个 xs:group 和一个 xs:sequence 在XML架构中?你什么时候用一个或另一个?

    1 回复  |  直到 12 年前
        1
  •  41
  •   MiMo    12 年前

    xs:sequence -与 xs:choice xs:all -用于定义目标XML中XML元素的有效序列。例如,此XML的模式:

    <mainElement>
      <firstSubElement/>
      <subElementA/>
      <subElementB/>
    </mainElement>
    

    类似于:

    <xs:element name='mainElement'>
      <xs:complexType>
        <xs:sequence>
          <xs:element name="firstSubElement"/>
          <xs:element name="subElementA"/>
          <xs:element name="subElementB"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    

    xs:group 用于按照某些规则定义一组命名的XML元素,然后这些规则可以在模式的不同部分中引用。例如,如果XML是:

    <root>
    
      <mainElementA>
        <firstSubElement/>
        <subElementA/>
        <subElementB/>
      </mainElementA>
    
      <mainElementB>
        <otherSubElement/>
        <subElementA/>
        <subElementB/>
      </mainElementB>
    
    </root>
    

    可以为公共子元素定义一个组:

    <xs:group name="subElements">
      <xs:sequence>
        <xs:element name="subElementA"/>
        <xs:element name="subElementB"/>
      </xs:sequence>
    </xs:group>
    

    然后使用它:

      <xs:element name="mainElementA">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="firstSubElement"/>
            <xs:group ref="subElements"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    
      <xs:element name="mainElementB">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="otherSubElement"/>
            <xs:group ref="subElements"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>