2012-07-10 45 views
3

我要去猜测,这个功能并不存在的价值属性,但我想我给它做最后一个搏。XSD:定义基于以前的属性

我已经得到了我想要验证(我在这个结构中没有控制)的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> 

那么,如果它的类型每种不超过,只需要一个maxAmount标签等

有没有办法让属性必需/可选/禁止在基先前属性的值,嘿?

我试图创建具有多个条件标签的选择,有型和自定义的固定值,每种类型的属性集,但它抱怨具有相同名称的标签。

回答

4

为你所描述的功能名称是“共生的约束”,而他们没有在XSD 1.0的支持。

您可以XSD 1.1使用“条件类型分配”语法,其中一个元素的类型取决于它的属性值做到这一点;你也可以使用断言来做到这一点。 XSD 1.1现在是一个最终的W3C推荐标准和Xerces和撒克逊实现。

+0

谢谢!在此期间,当1.1成为主流时,会做出重新审视。 – Alex 2012-07-10 13:17:59

1

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

它可以Schematron做,但我不知道它是否适合你的项目。