我想创建一个XSD,当tag1的val为"x"时需要tag2,这基本上是使标签"required"在特定值的情况下。这可能吗?
<T>
<Level template = "a">
<N>a</N>
</Level>
<Level template = "b">
<N>b</N>
<P>c</P>
</Level>
</T>
在那个XML示例中,我想创建2个级别,其中一个具有名为"a"的模板,另一个具有模板" & "。但是,我希望XSD文件禁止创建模板" "没有标记P(这意味着上面的例子是有效的)。使用:
<T>
<Level template = "b">
<N>b</N>
</Level>
</T>
将无效,因为模板名是"b",但是我们没有"P"标签。
在我的例子中,模板的名称应该是具体的-但如果我可以用几个选项来做到这一点,我会很高兴听到。
这不能在XSD 1.0中完成,它需要XSD 1.1。
XSD 1.1在Altova, Saxon和Xerces模式处理器中得到支持,但在libxml或Microsoft中不支持。
要在XSD 1.1中实现这一点,在内容模型中将元素p定义为可选的,并添加断言:<xs:assert test="if (@template = 'b') then exists(child::P) else true()"/>