如何在XML模式中以步长定义任何元素

时间:2012-08-27 08:37:10

标签: xsd

如果我想在XML模式中定义任何元素,例如min值为0且最大值为91800,则步骤360表示可能的组合为0,360,720,依此类推而不使用枚举模式

我怎么定义这个?

2 个答案:

答案 0 :(得分:0)

我想不出任何办法 - 你不能在验证规则中做算术。

你仍然坚持使用枚举(在你的情况下似乎可能 - 如果我没有记错的话,这是256个可能的值)。

答案 1 :(得分:0)

由于有限状态自动机可以识别可被360整除的数字集,因此原则上可以使用极其复杂的正则表达式来实现这一点,但是对于您所考虑的范围,枚举实际上会更容易理解(并正确写作)。

所以在XSD 1.0中,使用枚举是定义所需类型的唯一方法并不完全正确,但它确实是迄今为止最简单和最好的方式。

在XSD 1.1中,您可以使用XPath 2.0中表示的断言来捕获算术关系:

<xs:simpleType name="small-multiples-of-three-sixty">
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="91800"/>
    <xs:assertion test="$value mod 360 eq 0"/>
  </xs:restriction>
</xs:simpleType>