嗨,我有一个像这样的xml:
<xml><fullname>
<name attrib="true"/>
<lastname1 attrib="false"/>
<lastname2 attrib="false"/></fullname></xml>
我需要创建一个模式来验证它,它只允许1个attrib值为“true”(其余部分必须为false [attrib属性定义为xs:boolean]) ,所以我在元素fullname中添加了一个唯一的检查,如下所示:
<xs:unique name="attribcheck">
<xs:selector xpath="name|lastname1|lastname2"/>
<xs:field xpath="@attrib"/>
当然,它会检测到存在重复的“true”,但它也会检测到重复的“false”。 有没有人知道是否有办法对应用唯一约束的值设置限制?这意味着我可以确保在任何给定时间只有其中一个是“真实的”
答案 0 :(得分:2)
XML Schema 1.0不支持共现约束 - 您无法根据另一个元素的值表示某个元素的条件。
这将在XML Schema 1.1中发生变化,但后者仅处于起草阶段且仍在变化,并且在一段时间内不会广泛实施。
但是,如果您使用Saxon 9.2,它现在已经初步支持XML Schema 1.1。请参阅feature grid以确定架构验证所需的版本。