是否有可能使用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