如何在XML模式中执行互斥属性?

前端之家收集整理的这篇文章主要介绍了如何在XML模式中执行互斥属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使两个XML属性相互排斥.如何创建XSD模式来捕获这种场景?

我想要有一个

<elem value="1" />
<elem ref="something else" />

但不是

<elem value="1" ref="something else" />
由于在Alnitak的答案中提到了 RelaxNG,这里是一个解决方
与RelaxNG(一种在大多数情况下比W3C更好的语言)
架构).在elem的定义中记下OR(|):
start = document
document = element document {elem+}
elem = element elem {ref | value}
ref = attribute ref {text}
value = attribute value {xsd:integer}

如果我有这个XML文件

<document>
    <elem value="1" />
    <elem ref="something else" />
</document>

rnvxmlint接受:

% rnv attributes-exclusive.rnc attributes-exclusive.xml             
 attributes-exclusive.xml

 % xmllint --noout --relaxng attributes-exclusive.rng attributes-exclusive.xml 
 attributes-exclusive.xml validates

如果我添加XML文件

<elem value="1" ref="something else" />

我得到验证错误,我想要(请注意错误消息
是次优):

% 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
原文链接:https://www.f2er.com/xml/292920.html

猜你在找的XML相关文章