我有一個XML元素,比方說<fruit>
,這是一個枚舉限制,它只能取值:apple, orange, watermelon
XSD:如何限制多個相關的值?
我也有另外一個字段,也應具有以下值的枚舉限制: red, orange, green
有沒有什麼辦法可以將這兩個元素聯繫起來,這樣唯一可能的組合是:apple-red, orange-orange, watermelon-green
?我試圖在複雜類型中找到某種枚舉,但似乎XSD不支持它們。
我有一個XML元素,比方說<fruit>
,這是一個枚舉限制,它只能取值:apple, orange, watermelon
XSD:如何限制多個相關的值?
我也有另外一個字段,也應具有以下值的枚舉限制: red, orange, green
有沒有什麼辦法可以將這兩個元素聯繫起來,這樣唯一可能的組合是:apple-red, orange-orange, watermelon-green
?我試圖在複雜類型中找到某種枚舉,但似乎XSD不支持它們。
否在XSL架構中不可能做到這一點。
有,你可以實現你想要的方式有兩種:
如果你真的要堅持XSD的架構:
如果您不必被您的環境使用XSD-Schema
放鬆NG你有更多的可能性來表達複雜的行爲。最重要的是比XSD Schema更容易編寫和理解。
在RELAX NG你想表達的是這樣的東西(你會定義元素中3次選擇)
<choice>
<element name="fruit-combination">
<element name="fruit">
<value>apple</value>
<element>
<element name="colour">
<value>red</value>
</element>
</element>
<element name="fruit-combination">
<element name="fruit">
<value>orange</value>
<element>
<element name="colour">
<value>orange</value>
</element>
</element>
<element name="fruit-combination">
<element name="fruit">
<value>watermelon</value>
<element>
<element name="colour">
<value>green</value>
</element>
</element>
</choice>
的RELAX NG實現,那麼會選擇合適的元素你。如果您使用的是良好的xml編輯器,並且將Apple元素放入文件中,它甚至會限制您,以便您只能添加具有紅色值的顏色元素等等。
在Schematron中,您只需爲值爲紅色的顏色元素編寫一條規則,該值只有在其中包含蘋果值的水果元素時纔有效。 Schematron本身不過是一種特殊的XSL轉換,它將一些規則應用於xml文檔並輸出XML Form中的錯誤和警告報告。
參見:
http://relaxng.org/ http://www.schematron.com/(規範) http://www.schematron.com/implementation.html(實施)
這是XSD 1.0的公知的限制,其被固定在1.1 XSD通過斷言和/或條件類型分配的機制。
XSD 1.1目前在Saxon-EE和Apache Xerces中實施。