我正在尝试使两个XML属性互斥.如何创建XSD架构来捕获这种场景?
我想要其中一个
但不是
Daniel Silve.. 9
你不能使用属性,但你可以使用子元素......
这样你就可以......
1
要么...
something else
Alnitak.. 7
不幸的是AFAIK你不能用XML Schema做到这一点,我自己也有同样的问题.
我已经看到它建议如果你需要两个:
然后
它本身应该分为两种类型,因为它们显然有不同的属性......
你不能使用属性,但你可以使用子元素......
这样你就可以......
1
要么...
something else
不幸的是AFAIK你不能用XML Schema做到这一点,我自己也有同样的问题.
我已经看到它建议如果你需要两个:
然后
它本身应该分为两种类型,因为它们显然有不同的属性......
由于 在Alnitak的答案中提到了RelaxNG,因此这里是RelaxNG(一种语言,在大多数情况下,比W3C Schema更好)的解决方案.请注意elem定义中的OR(|):
start = document document = element document {elem+} elem = element elem {ref | value} ref = attribute ref {text} value = attribute value {xsd:integer}
如果我有这个XML文件:
它被rnv和xmlint接受:
% rnv attributes-exclusive.rnc attributes-exclusive.xml attributes-exclusive.xml % xmllint --noout --relaxng attributes-exclusive.rng attributes-exclusive.xml attributes-exclusive.xml validates
如果我添加XML文件:
我得到验证错误,因为我想要(请注意错误消息不是最理想的):
% rnv attributes-exclusive.rnc attributes-exclusive.xml attributes-exclusive.xml attributes-exclusive.xml:4:0: error: attribute ^ref not allowed required: after % xmllint --noout --relaxng attributes-exclusive.rng attributes-exclusive.xml attributes-exclusive.xml:4: element elem: Relax-NG validity error : Invalid attribute value for element elem attributes-exclusive.xml fails to validate