【问题标题】:XSD "one or both" choice construct leads to ambiguous content modelXSD“一个或两个”选择结构导致内容模型模棱两可
【发布时间】:2011-01-23 06:20:22
【问题描述】:

我正在尝试创建一个简单的 XSD 选择结构,允许两个引用元素中的一个或两个,但不是没有。构造类似于下面,但我不断收到一个模棱两可的错误。我错过了什么?

<xs:schema xmlns:xs="...">
  <xs:element name="Number" type="xs:integer"/>
  <xs:element name="Text" type="xs:string"/>
  <xs:element name="RootStructure">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:sequence>
            <xs:element ref="Number"/>
            <xs:element ref="Text"/>
          </xs:sequence>
          <xs:element ref="Number"/>
          <xs:element ref="Text"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

【问题讨论】:

    标签: xsd


    【解决方案1】:

    一些额外的提示,如果你有多个元素链接,并且你想要一个元素包或另一个包,或两者兼而有之,你可以这样做:

    <xsd:complexType name="ComplexTypeName">
        <xsd:choice>
            <xsd:sequence>
                <xsd:element name="theElement" />
                <xsd:element name="theElementIsFlagged" />
                <xsd:choice>
                    <xsd:sequence>
    <!-- note the empty sequence block -->
                    </xsd:sequence>
                    <xsd:sequence>
                        <xsd:element name="theOtherElement" />
                        <xsd:element name="theOtherElementIsFlagged" />
                    </xsd:sequence>
                </xsd:choice>
            </xsd:sequence>
            <xsd:sequence>
                <xsd:element name="theOtherElement" />
                <xsd:element name="theOtherElementIsFlagged" />
            </xsd:sequence>
        </xsd:choice>
    </xsd:complexType>
    

    以防万一你们中的一些人遇到同样的问题!!

    【讨论】:

      【解决方案2】:

      通常的做法是这样的:

      <xs:schema xmlns:xs="...">
        <xs:element name="Number" type="xs:integer"/>
        <xs:element name="Text" type="xs:string"/>
        <xs:element name="RootStructure">
          <xs:complexType>
            <xs:sequence>
              <xs:choice>
                <xs:sequence>
                  <xs:element ref="Number"/>
                  <xs:element ref="Text" minOccurs="0"/>
                </xs:sequence>
                <xs:element ref="Text"/>
              </xs:choice>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-10
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多