我想获得int类型的“ID”属性,其中包含固定的位数和必要的前导零。
所以,如果这个数字是,例如,6,我输入1,我会得到 000001
答案 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。
所有这些都假定您的问题是定义数据类型,而不是强加唯一性约束。