如何相互比较属性

时间:2010-06-10 09:55:48

标签: xml xsd

我有一个像

这样的Range元素
<Range min="-5.0" max="5.0" />

在XML模式中描述为RangeType

类型
<complexType name="RangeType">
    <attribute name="min" use="required" type="double" />
    <attribute name="max" use="required" type="double" />
</complexType>

是否可以使用XML-Schema要求max属性大于min属性?

2 个答案:

答案 0 :(得分:1)

没有。您不能在XML Schema中指定跨元素(编辑:或跨属性)约束。

您必须编写代码或使用Schematron之类的东西。

答案 1 :(得分:0)

为了将来参考,一种解决方案可能是以不同方式定义您的范围,使用“开始”和“计数”而不是最小值和最大值。

所以你的例子可以改写为:

<Range start="-5.0" count="10.0" /> <!-- range from -5 to 5 -->

然后,您可以使用架构将count限制为最小值0.0,从而使计算出的最大值不可能低于最小值:

<xs:complexType name="RangeType">
  <xs:attribute name="start" use="required" type="xs:double" />
  <xs:attribute name="count" use="required">
    <xs:simpleType>
      <xs:restriction base="xs:double">
        <xs:minInclusive value="0.0"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:attribute>
</xs:complexType>

如果您不需要将范围设为双精度,那么您也可以将count定义为type="unsignedInt",这样可以避免使用自定义类型。