2012-07-10 81 views
3

我要去猜測,這個功能並不存在的價值屬性,但我想我給它做最後一個搏。XSD:定義基於以前的屬性

我已經得到了我想要驗證(我在這個結構中沒有控制)的XML結構。

在這種結構中,我可以有多個「條件」標籤,每個標籤都有一個屬性「類型」,然後在該標籤中的其餘屬性依賴於該類型是什麼。因此,例如,如果它看起來像這樣:

<Condition type="LessThan" maxAmount="3"> 
    <Effect type="Add" value="2" /> 
</Condition> 
<Condition type="GreaterThan" minAmount="1"> 
    <Effect type="Transform" action="Skew" value="4" /> 
    <Effect type="Transform" action="Stretch" value="3" /> 
</Condition> 
<Condition type="Range" minAmount="1" maxAmount="3"> 
    <Effect type="YouGetTheDrift" /> 
</Condition> 

那麼,如果它的類型每種不超過,只需要一個maxAmount標籤等

有沒有辦法讓屬性必需/可選/禁止在基先前屬性的值,嘿?

我試圖創建具有多個條件標籤的選擇,有型和自定義的固定值,每種類型的屬性集,但它抱怨具有相同名稱的標籤。

回答

4

爲你所描述的功能名稱是「共生的約束」,而他們沒有在XSD 1.0的支持。

您可以XSD 1.1使用「條件類型分配」語法,其中一個元素的類型取決於它的屬性值做到這一點;你也可以使用斷言來做到這一點。 XSD 1.1現在是一個最終的W3C推薦標準和Xerces和撒克遜實現。

+0

謝謝!在此期間,當1.1成爲主流時,會做出重新審視。 – Alex 2012-07-10 13:17:59

1

你是對的,這個功能並不存在。

它可以Schematron做,但我不知道它是否適合你的項目。

相關問題