2012-03-16 29 views
1

如果我在xsd中有很多複雜類型,例如具有一些常用字段,比如'id','name'或'date'或'anyspecificId',這意味着這些類型彼此非常相似,並且向它們中的每一個添加一個共同字段將是噩夢。是否可以爲複雜類型定義一些基本類型,以便這種複雜類型可以擴展基本父類型的字段/項目? 在這種情況下,我只是將這個新字段添加到基本類型,而不是每個子字段。 這可能嗎?多個元素在xsd模式中有很多共同點

+0

擴展並不總是最好的東西;如果遇到涉及限制的問題,將它們轉換爲對象並不乾淨,因此使用組模型(對於元素xsd:group和attributes attributeGroup)是您可能想要考慮實現可重用性的另一種方法。 – 2012-03-16 17:30:28

回答

2

當然,你應該使用類型的擴展名:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="employee" type="fullpersoninfo"/> 

<xs:complexType name="personinfo"> 
    <xs:sequence> 
    <xs:element name="firstname" type="xs:string"/> 
    <xs:element name="lastname" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="fullpersoninfo"> 
    <xs:complexContent> 
    <xs:extension base="personinfo"> 
     <xs:sequence> 
     <xs:element name="address" type="xs:string"/> 
     <xs:element name="city" type="xs:string"/> 
     <xs:element name="country" type="xs:string"/> 
     </xs:sequence> 
    </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

</xs:schema> 

http://www.w3schools.com/schema/el_extension.asp

2

通過擴展派生類型肯定是要解決的方式之一。有時可以更好地工作的另一種方法是使用命名的模型組。這可以更加靈活,例如它不會強制通用元素必須放在自定義元素之前。

相關問題