包含在XSD复杂类型元素,而新元素

问题描述:

我有这样的复杂类型:包含在XSD复杂类型元素,而新元素

<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:complexType name="MySubType"> 
    <xsd:complexContent> 
     <xsd:extension base="Identifier"> 
         <xsd:sequence> 
          <!-- More elements here --> 
         </xsd:sequence> 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 
+0

完美 - 谢谢。你知道如何在一个复杂类型中包含多个扩展吗? – ng5000 2009-10-16 13:10:21

+1

找到了答案。我想要的是多重继承,可以使用xsd:group来实现。 – ng5000 2009-10-16 13:41:10

+0

Aye,团体是非常方便的事情,尽管如果你过度使用它们,它们会变得混乱。 – skaffman 2009-10-16 13:52:18

这个复杂的类型将始终解析为

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

,如果你不想要一个孩子的结构,你可以定义Id和版本元素和使用

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

以后引用它们。但你没有保证,他们都出现

您也可以Id和版本属性标识符元素复杂类型

好运 迈克