我想使用单个XSD定义下面的两个xml结构。
<grandparent action="SUBMIT">
<parent>
<child value="blah"/>
</parent>
<grandparent>
<grandparent action="CANCEL">
<parent>
</parent>
<grandparent>
我想强制执行的规则:
<child>
的maxOccurs应该是无界的<child>
的maxOccurs应为0(即不应出现)是否可以使用XSD强制执行这些规则?
答案 0 :(得分:2)
你不能在XSD 1.0中做这种事情 - 但是你可以在XSD 1.1中实现(目前在Saxon和Xerces的最新版本中实现)。有两种可能的方法:
(a)条件类型赋值:祖父母有两种不同的类型,并根据属性值选择要验证的类型
(b)断言:将maxOccurs保留在语法中无限制,并沿着test="if (@ACTION='cancel') then empty(*/child) else true()"