【问题标题】:XSD: Define attributes based on the value of previous attributeXSD:根据前一个属性的值定义属性
【发布时间】:2012-07-09 20:45:50
【问题描述】:

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

我有一个要验证的 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 标签创建一个选项,每个类型具有固定的类型值和自定义属性集,但它抱怨标签具有相同的名称。

【问题讨论】:

    标签: xml xsd schema


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢!将在此期间凑合着做,并在 1.1 成为主流时重新审视它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多