修改xsd:dateTime简单类型以使用不同的日期和时间分隔符

时间:2009-12-14 08:09:40

标签: xml xsd

我有一个遗留系统,它生成的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>

这只允许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>

当然,通过使用字符串,任何使用Schema创建语言绑定的自动工具也将检索字符串,必须手动将日期/时间转换为适当的语言类型。

2 个答案:

答案 0 :(得分:15)

您可以对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>

修改

我在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>

希望有所帮助。

答案 1 :(得分:3)

我认为你不能从xsd:dateTime派生出其他东西,因为XML处理器将无法理解这一点。您最好的选择是使用具有正确模式的字符串。