2011-05-10 48 views
6

我是XML Schema noob,這是我的第一個堆棧溢出問題。請原諒我對兩種標準和禮儀的無知。XML架構 - 如何更改ref'ed元素的名稱?

在一個XML Schema文件(.xsd)中,我包含另一個Schema(我的控制之外),它代表了我的組正在使用的一種事實標準。內外部架構是一個具有悠久名稱的複雜元素:

<xs:element name="AnnoyingLongElementNameOfSuffering"> 
    <xs:complexType> 
     <xs:sequence> 
      ...sub-elements galore... 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

在我的架構文件,有問題的元素被複制,我認爲不好的做法,而且它被賦予的縮寫,微小的名稱。我想要做的是將複製的代碼替換爲其他模式中原始引用的代碼,但我需要維護現有實例文件中已經使用的小名稱(也在我的控制之外)。我想要做類似這樣的事情:

<xsd:element name="TinyName" ref="AnnoyingLongElementNameOfSuffering"/> 

但是,'name'和'ref'屬性是互斥的。我無法重新定義它並重新列出子元素,因爲它們沒有在其他模式中全局聲明。我不能創建派生類型,因爲它被定義爲另一個模式中的元素而不是類型。唉,我的搜索都沒有產生任何有用的,大概是因爲你通常會改變元素名稱或修改其他文件,這兩者都不是我的選擇。可能有一個簡單的答案,所以我期待着你的啓發性迴應。

回答

5

嘗試:

<xsd:element name="TinyName" substitutionGroup="AnnoyingLongElementNameOfSuffering"/> 

還有,告訴誰是保持標準的人停止使用匿名複雜類型(元素中內嵌定義)。大多數大型標準使用基於定義類型而不是元素的方法是有原因的,因此您可以從類型派生或重用它們。您的內部標準可以很容易地遷移到此,而不會失去兼容性:保留元素,但將其分配給顯式類型。

+0

我必須指出,這與模式1.0處理器不兼容。無論如何,它的工作。 – gyorgyabraham 2015-05-21 15:26:33