XSD:根据先前属性的值定义属性

时间:2012-07-10 11:20:08

标签: xml xsd schema

我猜这个功能不存在,但我想我会给它最后一次拍摄。

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

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

<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标记,等等。

根据前一个属性的值,无法使属性required / optional / prohibited,嘿?

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

2 个答案:

答案 0 :(得分:4)

您所描述的功能的名称是&#34;共现约束&#34;,并且XSD 1.0中不支持它们。

您可以使用&#34;条件类型分配&#34;在XSD 1.1中执行此操作。语法,其中元素的类型取决于其属性的值;你也可以使用断言来做到这一点。 XSD 1.1现在是最终的W3C推荐标准,在Xerces和Saxon中实现。

答案 1 :(得分:1)

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

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