XML模式如何限制基本类型为xs:dateTime的元素中的毫秒数(秒位置使用的小数位数)?
是否像定义限制xs:dateTime?
的内容模型一样简单我在XSD规范中找到的唯一选项是限制dateTime内容的值,而不是格式。
然后我发现了一个有限制的有效XSD代码段:
<xs:restriction base="xs:dateTime">
<xs:pattern value=".*Z"/>
</xs:restriction>
http://examples.oreilly.com/9780596002527/patterns.html
^\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?
答案 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>