我有一个遗留系统,它生成的XML时间戳类似于ISO 8601,但是用来分隔日期和时间的空间.例如2009-12-31 00:00:00.我想定义一个模式来定义这些时间戳的可能范围.xsd:dateTime因此,它非常适合于此目的,它使用T作为日期和时间之间的分隔符.我无法修改遗留系统以使用T作为分隔符返回时间戳.
有没有办法得到一个simpleType派生的定义xsd:dateTime,但改变了分隔符,还是我必须依赖一个具有适当模式和人类可读评论的字符串?
更新:据我所知,我可以使用dateTime模式来限制输入的dateTime对象的范围,但这不会改变分隔符.
例:
<xs:restriction base="xs:dateTime">
<xs:pattern value="[2].*:[0-9]{2}"/>
</xs:restriction>
Run Code Online (Sandbox Code Playgroud)
这将只允许dateTime从2000年开始,没有小数秒和时区信息.
答案摘要:
不能xs:dateTime将此作为基本类型使用.然而,可以使用xs:string和定义图案.
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{4}-[01][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-6][0-9]"/>
</xs:restriction>
Run Code Online (Sandbox Code Playgroud)
当然,通过使用字符串,使用Schema创建语言绑定的任何自动工具也将检索字符串,必须手动将日期/时间转换为适当的语言类型.
dev*_*xer 16
您可以对xs:string数据类型执行正则表达式模式限制.
例如:
<xs:element name="specialDateTime">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9][0-9]/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][9-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
编辑
我在http://www.cs.wisc.edu/condor/classad/refman/node9.html上找到了这个例子.看起来你可以对一个模式限制dateTime:
<xsd:simpleType>
<xsd:restriction base="xsd:dateTime">
<xsd:pattern value="\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d[+\-]\d\d:\d\d" />
</xsd:restriction>
</xsd:simpleType>
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.