限制XML模式的dateTime元素中的小数位/毫秒位置?

时间:2016-09-26 11:22:24

标签: regex xml datetime xsd

XML模式如何限制基本类型为xs:dateTime的元素中的毫秒数(秒位置使用的小数位数)?

是否像定义限制xs:dateTime?

的内容模型一样简单
  1. 我在XSD规范中找到的唯一选项是限制dateTime内容的,而不是格式

  2. 然后我发现了一个有限制的有效XSD代码段:

  3. <xs:restriction base="xs:dateTime"> <xs:pattern value=".*Z"/> </xs:restriction>

    • 这是直接从有效的XML Schema实例获取的(即它在xs命名空间中验证)
    • 请参阅O'Reilly XML书中的示例35-38:

    http://examples.oreilly.com/9780596002527/patterns.html

    1. 终于得到了这个正则表达式:
    2. ^\d\d\d\d-(0[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])T(00|[0-9]|1[0-9]|2[0-3]):(0[0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])((\.)\d\d\d)?(Z|(\+(00|0[0-9]|1[0-4]):(0[0-9]|[0-5][0-9]))|(\-(00|0[0-9]|1[0-2]):(0[0-9]|[0-5][0-9])))?$

      除了XML正则表达式不需要^ $来标记要匹配的字符串之外,这是否适用于完成的.xsd?

2 个答案:

答案 0 :(得分:0)

xs:dateTime的格式在dateTime中的规范中指定,并在isoformats中进一步说明。格式定义为

'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?

正如您所见,小数秒是可选的,具有任意精度。无法强制执行其他格式或修正小数位数。

答案 1 :(得分:0)

最后我采用了XSD限制,因为我还需要包含时区并采用特定格式:

<xs:restriction base="xs:dateTime"> <xs:pattern value="([^\.]*|([^\.]*(\.((\d){1,3})){0,1}))(Z|\+([01][0-9]|2[0-3]):([0-5][0-9])|-([01][0-9]|2[0-3]):([0-5][0-9]))" /> </xs:restriction>