当前位置:  开发笔记 > Android > 正文

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

如何解决《如何在XML模式中执行互斥属性?》经验,为你挑选了3个好方法。

我正在尝试使两个XML属性互斥.如何创建XSD架构来捕获这种场景?

我想要其中一个



但不是


Daniel Silve.. 9

你不能使用属性,但你可以使用子元素......


    
        
            
            
        
    

这样你就可以......


    1

要么...


    something else


Alnitak.. 7

不幸的是AFAIK你不能用XML Schema做到这一点,我自己也有同样的问题.

我已经看到它建议如果你需要两个:

 

然后它本身应该分为两种类型,因为它们显然有不同的属性......



1> Daniel Silve..:

你不能使用属性,但你可以使用子元素......


    
        
            
            
        
    

这样你就可以......


    1

要么...


    something else



2> Alnitak..:

不幸的是AFAIK你不能用XML Schema做到这一点,我自己也有同样的问题.

我已经看到它建议如果你需要两个:

 

然后它本身应该分为两种类型,因为它们显然有不同的属性......



3> bortzmeyer..:

由于 在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

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有