如何在XSD中定义一系列偶数整数?

时间:2015-01-07 03:57:58

标签: xml xsd

我是创建架构的新手,几乎是创建XML的新手。我正在尝试开发一个简单的基于整数的类型(尽管我会选择基于字符串的类型),它将值限制为-1,然后将整数限制为254.

到目前为止,我已经想到了:

   <xs:simpleType name="toffset">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="-1"/>
      <xs:maxInclusive value="254"/>
    </xs:restriction>

该代码当然不会将值&gt; -1限制为偶数整数。我考虑过创建一个枚举,但对于这么多的值来说这似乎很笨拙。我怎样才能达到预期的限制?

3 个答案:

答案 0 :(得分:4)

当然,使用断言的XSD 1.1机制更清晰。在XSD 1.0中,以这种方式限制整数的唯一方法是使用模式facet,正如@kjhughes建议的那样。但是,您可以在整数上使用模式,它们不仅适用于字符串。

我想我会这样做:

<xs:simpleType name="toffset">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="-1"/>
      <xs:maxInclusive value="254"/>
      <xs:pattern value="-.*|.*[02468]"/>
    </xs:restriction>
</xs:simpleType>

这里的大部分繁重工作都是通过最小/最大约束来完成的,并且模式仅用于限制值,以便它(a)以“ - ”符号开头,或者(b)以“ - ”符号结束甚至数字。模式不需要重复适用的约束,例如:其他字符都是数字。

答案 1 :(得分:3)

您可以使用正则表达式执行此操作:

  <xs:simpleType name="loanNumberType">
    <xs:restriction base="xs:string">
      <xs:pattern value="-1"/>
      <xs:pattern value="[02468]"/>
      <xs:pattern value="[1-9][02468]"/>
      <xs:pattern value="1[0-9][02468]"/>
      <xs:pattern value="2[0-4][02468]"/>
      <xs:pattern value="25[024]"/>
    </xs:restriction>
  </xs:simpleType>

答案 2 :(得分:3)

在XSD 1.0中,您可以按照Kenneth建议的方式定义枚举或用户模式。从我的PoV枚举更好,因为它们不会混淆底层类型。缺点是条目太多,这是真的。但我认为这是一个较小的邪恶。

在XSD 1.1中。你可以做点什么

<xs:simpleType name="toffset">
  <xs:restriction base="xs:integer">
    <xs:assertion test="$value = -1 or ($value <= 254 and ($value mod 2) = 0)"/>
  </xs:restriction>
</xs:simpleType>

我对@test中的语法不太确定,但你明白了。

链接: