【问题标题】:Include Elements in XSD Complex Type Without New Element在没有新元素的 XSD 复杂类型中包含元素
【发布时间】:2009-10-16 12:05:18
【问题描述】:

我有这个复杂的类型:

<xsd:complexType name="Identifier">
    <xsd:sequence>
        <xsd:element name="Id" type="xsd:string"/>
        <xsd:element name="Version" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

现在我想将它包含在另一个复杂类型中,我一直在这样做:

<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="Id" type="Identifier"/>
              <!-- More elements here -->
    </xsd:sequence>
</xsd:complexType>

但这并不是我真正想要的。我想将标识符类型的元素直接包含在我的第二个复杂类型中,而不创建新元素。例如。就像这样做一样:

<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="Id" type="xsd:string"/>
        <xsd:element name="Version" type="xsd:string"/>
              <!-- More elements here -->
    </xsd:sequence>
</xsd:complexType>

希望这是有道理的。

提前致谢。

【问题讨论】:

    标签: xsd element complextype


    【解决方案1】:

    你可以像这样扩展类型:

    <xsd:complexType name="MySubType">
        <xsd:complexContent>
            <xsd:extension base="Identifier">
                           <xsd:sequence>
                                <!-- More elements here -->
                           </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    

    【讨论】:

    • 完美 - 谢谢。你知道如何在一个复杂类型中包含多个扩展吗?
    • 找到了答案。我想要的是多重继承,可以使用 xsd:group 来实现。
    • 是的,群组是非常方便的东西,但如果你过度使用它们会让人感到困惑。
    【解决方案2】:

    这种复杂类型总是会解析为

    <Identifier>
       <Id>string</Id>
       <Version>string</Version>
    </Identifier>
    

    如果您不想要子结构,您可以将 Id 和 Version 定义为元素并使用来引用它们

    <xsd:element ref="Id"/>
    <xsd:element ref="Version"/>
    

    稍后。但是你不能保证它们都会发生

    您还可以为复杂类型中的 Identifier 元素设置 Id 和 Version 属性

    祝你好运 迈克

    【讨论】:

      猜你喜欢
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多