xml – 如何在XSD中定义互斥属性?
发布时间:2020-12-16 07:46:56 所属栏目:百科 来源:网络整理
导读:首先是代码片段…… tag name="default" abc="10" def="20 !-- not valid,abc and def should be mutually exclusive --tag name="default1" abc="10" !-- valid --tag name="default2" def="20 !-- valid -- 我想做的事… 我可以将什么放入我的XSD,以便@abc
首先是代码片段……
<tag name="default" abc="10" def="20> <!-- not valid,abc and def should be mutually exclusive --> <tag name="default1" abc="10"> <!-- valid --> <tag name="default2" def="20> <!-- valid --> 我想做的事… 我可以将什么放入我的XSD,以便@abc和@def不能作为同一元素的属性共存? 如果它们在同一个元素上共存,那么验证会失败?
XSD 1.0
可以使用xs:key巧妙地完成.见@Kachna’s answer. 请注意,如果xs:key中的多个选定值失败,则某些解析器可能允许这两个属性.过去至少有one known case发生过这种情况. XSD 1.1 可以使用xs:assert完成: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1"> <xs:element name="tag"> <xs:complexType> <xs:sequence/> <xs:attribute name="name" type="xs:string"/> <xs:attribute name="abc" use="optional" type="xs:integer"/> <xs:attribute name="def" use="optional" type="xs:integer"/> <xs:assert test="(@abc and not(@def)) or (not(@abc) and @def)"/> </xs:complexType> </xs:element> </xs:schema> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |