<root>
<elem type="1" id="1"/>
<elem type="1" id="2"/>
</root>
我想检查XSD架构,以便所有元素都应具有“type”的相同属性值。 假设一个元素的type =“1”而另一个元素的type =“2”,那么我希望模式验证失败。 如何在Schema中限制它?
答案 0 :(得分:1)
我认为在xsd 1.0中不可能。
我不知道你到底在做什么,但在这种情况下,它会给我一个感觉,有一些包裹元素,例如elems
会保持这个价值。因此
<root>
<elems type="1">
<elem id="1"/>
<elem id="2"/>
</elems>
</root>
答案 1 :(得分:1)
如果您想要单个值类型,为什么不将该单个值放在一个位置,而不是在多个位置复制它?也就是说,为什么不以这种方式构建XML呢?
<root type="1">
<elem id="1"/>
<elem id="2"/>
</root>
不允许不同元素具有不同类型值的事实表明,类型并不严格地说是elem的属性,而是整个文档的属性。
这样,XML的结构已经保证了类型只有一个值,而不是允许您或验证者必须添加额外的临时检查的不一致。
可能还有一些更复杂的方法可以确保类型只有一个值(可能是一些非常聪明的键和keyref约束;在XSD 1.1中,使用断言;使用外部或内部Schematron断言),但是当有这么简单的选择时,我不想鼓励他们使用。