4

我猜这个功能不存在,但我想我会再试一次。

我有一个我正在尝试验证的 XML 结构(我无法控制这个结构)。

在这个结构中,我可以有多个“条件”标签,每个标签都有一个属性“类型”,然后该标签中的其余属性取决于该类型是什么。因此,例如,如果它看起来像这样:

<Condition type="LessThan" maxAmount="3">
   <Effect type="Add" value="2" />
</Condition>
<Condition type="GreaterThan" minAmount="1">
   <Effect type="Transform" action="Skew" value="4"  />
   <Effect type="Transform" action="Stretch" value="3" />
</Condition>
<Condition type="Range" minAmount="1" maxAmount="3">
   <Effect type="YouGetTheDrift" />
</Condition>

那么如果是LessThan类型,它只需要一个maxAmount标签,等等。

没有办法根据前一个属性的值来使属性成为必需/可选/禁止,嘿?

我尝试使用多个 Condition 标签创建一个选项,每个类型具有固定的类型值和自定义属性集,但它抱怨标签具有相同的名称。

4

2 回答 2

4

您所描述的功能的名称是“共现约束”,它们在 XSD 1.0 中不受支持。

您可以在 XSD 1.1 中使用“条件类型赋值”语法来执行此操作,其中元素的类型取决于其属性的值;你也可以使用断言来做到这一点。XSD 1.1 现在是最终的 W3C 建议,并在 Xerces 和 Saxon 中实现。

于 2012-07-10T12:55:14.810 回答
1

你是对的,这个功能不存在。

它可以在Schematron中完成,但我不知道它是否适合您的项目。

于 2012-07-10T12:32:21.857 回答