具有固定位数的整数

时间:2012-08-20 13:33:44

标签: xml xsd

我想获得int类型的“ID”属性,其中包含固定的位数和必要的前导零。

所以,如果这个数字是,例如,6,我输入1,我会得到 000001

1 个答案:

答案 0 :(得分:0)

XSD不提供您在此处想到的那种字符串操作。如果您希望ID具有六位十进制数,则可以将其定义为需要六位十进制数。或者,如果您希望用户能够将值设置为“1”,则可以将ID定义为最多六位数。但一般来说,“用户输入字符串X而系统自动映射到字符串Y”形式的规则超出了XSD的范围。

要弄清楚如何处理这种情况,请问自己(也许向那些阅读此问题的人解释)为什么要这种字符串映射?如果要确保“1”,“01”和“000001”都映射到相同的值,则将属性声明为整数已经这样做了。如果它是别的东西(我在提出其他动机方面遇到了麻烦),可能会有不同的解决方案。

但现在回答你实际问过的问题。

要在词法表示中使用正好六位数来定义xs:integer的子类型,您可以这样写:

<xs:attribute name="ID">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:pattern value=".{6}"></xs:pattern>
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>

或者如果(正如Sean Kenny在他的评论中所说)你真正想要的不是一个整数,而只是一个正好六位小数的字符串:

<xs:attribute name="ID">
  <xs:simpleType>
    <xs:restriction base="xs:token">
      <xs:pattern value="\d{6}"></xs:pattern>
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>

要定义最多允许六位数的整数子类型,您可以在上面的模式中将{6}更改为{1,6},或使用maxExclusive 1000000,或设置{{ 1}}到6。

所有这些都假定您的问题是定义数据类型,而不是强加唯一性约束。