是否有可能使用XSD將節點名稱重新枚舉爲枚舉,然後基於此枚舉添加其他限制?XSD限制
在例子中,我有這樣的XML:
<a>
<b name="string" value="hello">
<b name="integer" value="123">
</a>
我想 「B」 的節點具有枚舉名稱的屬性{ 「串」, 「整數」}。 然後,如果它是「字符串」,我希望那個「值」屬性是類型的xs:字符串, ,如果它是「整數」,我希望這個「值」屬性是類型的xs:整數。
是否有可能使用XSD將節點名稱重新枚舉爲枚舉,然後基於此枚舉添加其他限制?XSD限制
在例子中,我有這樣的XML:
<a>
<b name="string" value="hello">
<b name="integer" value="123">
</a>
我想 「B」 的節點具有枚舉名稱的屬性{ 「串」, 「整數」}。 然後,如果它是「字符串」,我希望那個「值」屬性是類型的xs:字符串, ,如果它是「整數」,我希望這個「值」屬性是類型的xs:整數。
不,你不能在XSD中做到這一點。本質上,你有不同類型的b> 2 < b> s。這違反了Element Consistency rule。
您有幾種選擇,
你可以做一定的限制,例如你可以限制你的name
屬性的值來自給定的列表 - 但是你不能在XML模式中表示「如果name是字符串,那麼值的類型必須是xs:string」之間的這種關係。
您必須使用其他一些技術(如Schematron),或者在您的應用程序代碼中進行檢查。
馬克
感謝您的回覆。我會更接近schematron。 – ppiotrowicz 2009-08-07 09:24:08
不可以,但你喜歡一個類型的治療名字 - 和XML Schema 確實有一個元素的complexType
由一個字符串值,來確定一定的支持。但是,你必須使用屬性名稱:你的XML文檔中的「XSI型」,所以它看起來像這樣:
<a>
<b xsi:type="string" value="hello">
<b xsi:type="integer" value="123">
</a>
這是XML模式可以做的恐怕是最好的。更多的細節在官方的引物(這可能是很令人困惑,不幸): http://www.w3.org/TR/xmlschema-0/#UseDerivInInstDocs
就像我一樣。感謝您的回答。 – ppiotrowicz 2009-08-07 11:13:58