加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:55:43 所属栏目:百科 来源:网络整理
导读:我试图使两个XML属性相互排斥.如何创建XSD模式来捕获这种场景? 我想要有一个 elem value="1" /elem ref="something else" / 但不是 elem value="1" ref="something else" / 由于在Alnitak的答案中提到了 RelaxNG,这里是一个解决方案 与RelaxNG(一种在大多数
我试图使两个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>

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文件:

<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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读