是否可以使用XSD将节点名称重新枚举为枚举,然后根据此枚举添加其他限制?
在示例中,我有这个xml:
<a>
<b name="string" value="hello">
<b name="integer" value="123">
</a>
我希望“b”节点具有枚举{“string”,“integer”}的name属性。 然后,如果它是“字符串”我希望“value”属性是xs:string的类型, 如果它是“整数”,我希望“value”属性为xs:integer的类型。
答案 0 :(得分:1)
你可以做某些限制,例如您可以限制name
属性的值来自给定列表 - 但是您无法在XML模式中表达“如果name是字符串,那么值的类型必须是xs:string”之间的这种关系
您必须使用其他技术(例如Schematron),或在您的应用代码中进行检查。
马克
答案 1 :(得分:1)
没有。您无法在XSD中执行此操作。从本质上讲,你有两个不同类型的b&lt; b&gt;。这违反了Element Consistency rule。
您有几个选择,
答案 2 :(得分:0)
没有。但是您将名称视为类型 - 而XML Schema 对由字符串值确定的元素的complexType
有一些支持。但是,您必须在XML文档中使用属性名称“xsi:type”,因此它看起来像这样:
<a>
<b xsi:type="string" value="hello">
<b xsi:type="integer" value="123">
</a>
这是XML Schema可以做的最好的事情。官方入门中的更多细节(遗憾的是,它可能非常令人困惑): http://www.w3.org/TR/xmlschema-0/#UseDerivInInstDocs