我猜这个功能不存在,但我想我会给它最后一次拍摄。
我有一个我正在尝试验证的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标记创建一个选项,每个类型都有固定值类型和自定义属性集,但它抱怨标记具有相同的名称。
答案 0 :(得分:4)
您所描述的功能的名称是&#34;共现约束&#34;,并且XSD 1.0中不支持它们。
您可以使用&#34;条件类型分配&#34;在XSD 1.1中执行此操作。语法,其中元素的类型取决于其属性的值;你也可以使用断言来做到这一点。 XSD 1.1现在是最终的W3C推荐标准,在Xerces和Saxon中实现。
答案 1 :(得分:1)
你是对的,这个功能不存在。
可以在Schematron中完成,但我不知道它是否适合您的项目。