2015-04-16 25 views
1

我已經在概念模型之後創建了XSD模式,但是模型希望一個類從另外兩個類繼承。我知道基本上這是不可能的,另一方面,我知道在一些面向對象的編程語言中,例如C++或Java可以處理它。 我使用了以下解決方案,但它不是單詞的正確含義中的遺傳:類從一個繼承,並且具有實例化另一個的屬性。最後,我有一個從另一個類繼承的類,它具有屬性,這是另一個類的一個實例。XML類的多重遺傳

<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的一個屬性。關於如何從兩個(或更多的類)繼承有沒有更清潔的解決方案?

+0

你解決這個問題,這個解決方案? – Xstian

回答

0

我建議你使用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> 
+0

請你能更具體嗎?我不明白這怎麼能幫助我解決問題 –

+0

這是我的一個老項目。簡而言之,這個提案是一個或多個組的組成,因爲它不存在多個層次結構。 – Xstian