2012-02-21 188 views
2

我在我的XSD中使用擴展類型來處理多種類型所需的常見元素序列。但是,我想控制將繼承元素放入序列的順序。這是我有:擴展類型 - 繼承元素排序

<xs:complexType name="subType"> 
    <xs:complexContent> 
    <xs:extension base="baseType"> 
     <xs:sequence> 
     <xs:element name="name" type="xs:string"/> 
     </xs:sequence> 
    </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="baseType"> 
    <xs:sequence> 
    <xs:element name="element1" type="xs:string"/> 
    <xs:element name="element2" type="xs:string"/> 
    </xs:sequence> 
</xs:complexType> 

這是導致排序:

<subType> 
    <element1>element1</element1> 
    <element2>element2</element2> 
    <name>name</name> 
</subType> 

我想在子類型定義出現第一序列中的序列,來實現:

<subType> 
    <name>name</name> 
    <element1>element1</element1> 
    <element2>element2</element2> 
</subType> 

這可能嗎?我的理解是,總體而言,這與代表的數據是相同的,但我想控制訂單,以便儘可能使其儘可能直觀。

+0

有用(+1)... – 2012-02-21 10:14:09

回答

1

在相同的編譯集合中,不可能實現這樣的事情。如果重用位於列表頂部(與面向對象方向相反),那麼您可以通過< xs:group /> s來實現內容的重用,即group1將具有< element1 />和< element2 />,group2將具有<名稱/>;在不同類型中,您可以更改group1和group2的相對位置以滿足您的需求。

通過使用重新定義(兩個重新定義),您可以通過不同的集合實現變化。但是,即使在這種情況下,基本類型內容也會顯示在子類型之前。如果僅僅是因爲大多數使用XSD編碼綁定的工具都不適用於< xs:redefine /> s,我不會推薦這種麻煩。

+0

謝謝,我擔心可能是這種情況。我想我只需要處理奇怪的順序,或者手動重複元素定義,這是我試圖避免的,因爲我通常只需要爲類似數據的輕微變化添加一個或兩個元素。 – mnemy 2012-02-26 19:04:52