代码之家  ›  专栏  ›  技术社区  ›  nd.

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

  •  6
  • nd.  · 技术社区  · 15 年前

    我有一个传统的系统,它生成的XML具有类似于ISO 8601的时间戳,但是使用空间来分隔日期和时间。例如。 2009年12月31日00:00:00 .我想定义一个模式来定义这些时间戳的可能范围。 xsd:dateTime 但是,它使用 T 作为日期和时间之间的分隔符。我不能修改旧系统以返回时间戳,使用T作为分隔符。

    有没有办法 simpleType 派生自的定义 日期时间 ,但要更改分隔符,还是必须依赖具有适当模式和人类可读注释的字符串?

    更新: 据我所知,我可以使用datetime模式来限制输入的datetime对象的范围,但这不会改变分隔符。

    例子:

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

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

    2 回复  |  直到 15 年前
        1
  •  15
  •   devuxer    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>
    

    希望有帮助。

        2
  •  3
  •   Francis Upton IV    15 年前

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