包含在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>
答
这个复杂的类型将始终解析为
<Identifier>
<Id>string</Id>
<Version>string</Version>
</Identifier>
,如果你不想要一个孩子的结构,你可以定义Id和版本元素和使用
<xsd:element ref="Id"/>
<xsd:element ref="Version"/>
以后引用它们。但你没有保证,他们都出现
您也可以Id和版本属性标识符元素复杂类型
好运 迈克
完美 - 谢谢。你知道如何在一个复杂类型中包含多个扩展吗? – ng5000 2009-10-16 13:10:21
找到了答案。我想要的是多重继承,可以使用xsd:group来实现。 – ng5000 2009-10-16 13:41:10
Aye,团体是非常方便的事情,尽管如果你过度使用它们,它们会变得混乱。 – skaffman 2009-10-16 13:52:18