我已经按照概念模型创建了XSD模式,但是该模型希望一个类可以从其他两个类继承。我知道基本上是不可能的,另一方面,我知道在某些面向对象的编程语言(例如C ++或Java)中可以处理它。
我使用了以下解决方案,但不是该词的正确含义是遗传:类继承自一个,并且具有实例化另一个的属性。最后,我有一个继承自另一个类并具有属性的类,它是另一个类的实例。
<complexType name="BuildingType">
<complexContent>
<extension base="otherSchema:BaseBuildingType">
<sequence>
<element name="buildingInfo" type="BuildingInfoType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="BuildingInfoType">
<complexContent>
<extension base="anotherSchema:BuildingInfoType"/>
</complexContent>
</complexType>
根据上面的示例,复杂类型BuildingType必须同时继承BaseBuildingType和BuildingInfoType。我已经创建了BuildingInfo的实例,并将其设置为BuildingType的属性。关于如何从两个(或多个类)继承,是否有更清洁的解决方案?
最佳答案
我建议您使用xs:group
<xs:group name="BaseBuildingTypeGroup">
<xs:sequence>
<xs:element name="type" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:group name="BuildingInfoTypeGroup">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:group>
<xs:complexType name="BaseBuildingType">
<xs:sequence>
<xs:group ref="BaseBuildingTypeGroup"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BuildingInfoType">
<xs:sequence>
<xs:group ref="BuildingInfoTypeGroup"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="BuildingType">
<xs:sequence>
<xs:group ref="BuildingInfoTypeGroup"/>
<xs:group ref="BaseBuildingTypeGroup"/>
<xs:element name="date" type="xs:date"/>
</xs:sequence>
</xs:complexType>