我有一个像
这样的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属性?
答案 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"
,这样可以避免使用自定义类型。