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

2024-01-11

我有一个遗留系统,它生成带有类似于 ISO 8601 的时间戳的 XML,但使用空格来分隔日期和时间。例如。2009-12-31 00:00:00。我想定义一个模式来定义这些时间戳的可能范围。xsd:dateTime非常适合该目的,但是,它使用T作为日期和时间之间的分隔符。我无法修改旧系统以使用 T 作为分隔符返回时间戳。

有没有办法有一个simpleType定义源自xsd:dateTime,但改变分隔符还是我必须依赖具有适当模式和人类可读注释的字符串?

Update:据我了解,我可以使用 dateTime 模式来限制输入的 dateTime 对象的范围,但这不会改变分隔符。

Example:

<xs:restriction base="xs:dateTime">
  <xs:pattern value="[2].*:[0-9]{2}"/>
</xs:restriction>

这仅允许日期时间从 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>

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


您可以对正则表达式模式进行限制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>

Edit

我在以下位置找到了这个例子http://www.cs.wisc.edu/condor/classad/refman/node9.html http://www.cs.wisc.edu/condor/classad/refman/node9.html。看起来像你can对 a 施加模式限制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>

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐