2011-08-05 79 views
1

我有以下問題:是否可以從我的XML模式中刪除此冗餘?

我有兩個複合類型,foobar同時與會員foobar

<xs:complexType name="foo"> 
    <xs:sequence> 
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="bar"> 
    <xs:sequence> 
    <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" /> 
    </xs:sequence> 
</xs:complexType> 

以減少冗餘,我要聲明一個foobar的一個複雜類型,其被引用在這兩個foobar,這樣的事情:

<xs:complexType name="foobar"> 
    <xs:sequence> 
    <xs:element type="xs:string /> 
    </xs:sequence> 
</xs:complexType> 

但這似乎並沒有被正確的方式。這實際上可能在XML模式中嗎?

回答

1

我還沒有檢查正確性以下,但我相信你能做到這一點是這樣的:

<xs:complexType name="hasFoobar" abstract="true"> 
    <xs:sequence> 
     <xs:element name="foobar" … /> 
    </xs:sequence> 
    </xs:complexType> 

然後在「擴展」這個抽象類型:

<xs:complexType name="foo"> 
    <xs:complexContent> 
     <xs:extension base="hasFoobar"> 
     … 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="bar"> 
    <xs:complexContent> 
     <xs:extension base="hasFoobar"> 
     … 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 
3

你可能最好使用xs:group而不是複雜類型的元素:

<xs:complexType name="foo"> 
    <xs:group ref="foobarGroup"/> 
</xs:complexType> 

<xs:complexType name="bar"> 
    <xs:group ref="foobarGroup"/> 
</xs:complexType> 

<xs:group name='foobarGroup'> 
    <xs:sequence> 
     <xs:element name="foobar" type="xs:string" maxOccurs="unbounded" /> 
    </xs:sequence>   
</xs:group> 

你c不要直接將該序列表示爲xs:complexType的一部分。