0

如果需要,我想获得一个具有固定位数和前导零的 int 类型的“ID”属性。

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

4

1 回答 1

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},或使用maxExclusive1000000 的 a,或设置totalDigits为 6。

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

于 2012-08-20T14:52:50.940 回答