这是对 xsd:choice 的错误使用吗?

Is this an incorrect use of xsd:choice?

我正在 JavaScript 中编写一个程序,它读取 XSD,创建一个 HTML 表单,并将该表单导出到 XML。

为了做到这一点,我必须学习 XSD 的结构,但我对 xsd:choice 有疑问。

在给我的示例 XSD 文件中,我有这个:

<xsd:choice>
    <xsd:sequence>
        <xsd:element name="tagname1" type="pedidoInf:complexTypeName" />
    </xsd:sequence>
    <xsd:sequence>
        <xsd:choice>
            <xsd:sequence>
                <xsd:element name="tagname2" type="pedidoInf:otherComplexTypeName" />
            </xsd:sequence>
            <xsd:sequence>
                <xsd:element name="tagname3" type="pedidoInf:anotherComplexTypeName" />
            </xsd:sequence>
        </xsd:choice>
    </xsd:sequence>
</xsd:choice>

不知道是我没有正确理解xsd:choice,还是这段代码无缘无故使用了嵌套xsd:choice

上面的代码是不是完全一样:

<xsd:choice>
    <xsd:sequence>
        <xsd:element name="tagname1" type="pedidoInf:complexTypeName" />
    </xsd:sequence>
    <xsd:sequence>
        <xsd:element name="tagname2" type="pedidoInf:otherComplexTypeName" />
    </xsd:sequence>
    <xsd:sequence>
        <xsd:element name="tagname3" type="pedidoInf:anotherComplexTypeName" />
    </xsd:sequence>
</xsd:choice>

标题问题:不,xsd:choice 的用法都不正确——它们只是比必须的更复杂。

(而且,是的,这两个 xsd:choice 构造是相同的。)

两者也等同于:

  <xsd:choice>
    <xsd:element name="tagname1" type="pedidoInf:complexTypeName" />
    <xsd:element name="tagname2" type="pedidoInf:otherComplexTypeName" />
    <xsd:element name="tagname3" type="pedidoInf:anotherComplexTypeName" />
  </xsd:choice>