2011-03-22 374 views
0

我還沒有想出一個好的,乾淨的方式來做到這一點,所以我會給你帶來我的困境!XML元素覆蓋

我想用XML表示一個配置。我有一些領域,一些需要,一些不是,大多數都有嚴格的限制。我有一個基本的配置,我將代表作爲config.xml中可能有這樣一些內容:

... 
<config> 
    <element-a value="3.2" /> 
    <element-b value="hello world" /> 
</config> 
... 

有相關聯的模式,說這兩個領域的需要。一個是浮動,一個是一個字符串。現在我有另一個配置,它與第一個相似,只有一個小改動。我謹代表這樣說:

... 
<include base-config="config.xml"> 
<config> 
    <element-a value="1.5" /> 
</config> 
... 

實際上,這種新的配置拉一切從基本配置文件中的元素,只規定了什麼是壓倒一切的。我不能爲此使用相同的模式,因爲現在所有的元素都是可選的,但是我想對數據保持相同的約束(最好不必創建一個新的模式,並且所有元素都是「可選的」)。

是否有符合XML標準的方式來做到這一點?或者任何人有幸完成了這一切?也許你有一個你想分享的設計模式?

目前,我期待具有每架構的兩個副本,並在處理步驟然後過載更新的元素我將加載鹼。這是一個麻煩的方法,所以希望有更好的方法。

回答

0

如果模塊化的架構,這樣你定義使用全局類型的限制,那麼你可以重新使用那些當你定義您的基本配置模式(這裏的/是必需的所有元素的大多數元素)的類型和可選的配置模式(其中每個元素都是可選的)。這種方法可能也會使用全局元素,然後在序列中引用它們。

然而,XML模式不能幫助你閱讀的實際配置文件和執行超載的東西。

+0

假設我擁有BaseSchema和OverrideableSchema包含的GlobalTypes。我如何挑選和選擇BaseSchema中需要的元素,以及OverrideableSchema中的可選元素? – Anthony 2011-04-01 23:15:14

+0

(至於讀取實際的配置和執行超載,我完全預期的XML不由我在這裏。我在實施的解決辦法是總是需要一個基礎包括通過了嚴格的架構。) – Anthony 2011-04-01 23:16:19