验证包含布尔值的XML架构

4

你好,我有一个像这样的XML:

<xml><fullname>
<name attrib="true"/>
<lastname1 attrib="false"/>
<lastname2 attrib="false"/></fullname></xml>

我需要创建一个模式来进行验证,以便只允许一个属性具有值“true”(其余的必须为false [属性属性被定义为xs:boolean]),因此我在fullname元素中添加了一个唯一性检查,如下所示:

   <xs:unique name="attribcheck">
<xs:selector xpath="name|lastname1|lastname2"/>
<xs:field xpath="@attrib"/>

当然,它会检测到有一个重复的"true",但是,它也会检测到一个重复的"false"。有人知道是否有一种方法可以设置限制来应用唯一约束条件吗?意思是我可以确保在任何给定时间只有一个值为"true"。
1个回答

2

XML Schema 1.0 不支持共存限制 - 您无法根据另一个元素的值表达对一个元素的条件。

这将在XML Schema 1.1中发生改变,但后者仅处于草案阶段,仍在不断修改,并且在一段时间内不会得到广泛实现。

然而,如果您使用Saxon 9.2,它现在具备 XML Schema 1.1 的初步支持。请参见功能矩阵以确定需要哪个版本进行模式验证。


谢谢,我想我会尝试使用模式1.1的初步支持。 - amorales

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接