2011-10-25 78 views
1

在XML模式中定義全局元素,然後在特定父元素的上下文中重寫該元素定義是否合法?同一個元素是可以在全局和本地模式中定義的,還是必須是一個或另一個?可以用局部元素定義覆蓋全局元素定義嗎?

重寫全局元素的示例可能如下所示。注意被定義爲包含其他幾個元素的全局元素。但是,在一本書的上下文中,它是一個簡單地包含一個字符串的元素。

<xs:element name="note"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="to" type="xs:string"/> 
     <xs:element name="from" type="xs:string"/> 
     <xs:element name="heading" type="xs:string"/> 
     <xs:element name="body" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="book"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="title" type="xs:string"/> 
     <xs:element name="note" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

回答

1

是的,你可以這樣做。如果你想使用全局定義,你會使用ref而不是name。但是,請注意,在相同的序列中組合這兩個將不被允許,因爲驗證程序可能不再確定您所說的兩個中的哪一個。

編輯:其實,你並不是真的「壓倒一切」任何東西。您剛剛對名稱爲「note」的元素進行了匿名定義。如果你使用了ref然後在本地修改了定義,那麼這將是重寫,但是這不能做AFAIK。無論如何,這是沒有意義的。

+0

感謝您的回覆。我還通過http://www.validome.org/grammar/validate/上的在線驗證器對我的示例模式進行了雙重檢查,並確認這確實是有效的。 – Scott

+0

是的,我只是將它粘貼到XMLSpy中,然後按F8鍵:p不知道XML Schema規格是否足以回答這個問題。有時候我只能像我的工具一樣聰明。 –

0

是的,你可以這樣做,因爲你沒有重寫任何東西。你有一個全局定義,你的「內在」註釋(內部)是一個本地定義,實際上與全局註釋無關。