当我设置如下所示的年部分(20512或类似内容)时,XSD仍会验证XML。
任何想法。
这是一个缺陷,还是我必须使用给定模式的 simpleType ?
由于
XSD
<xs:attribute name="date" type="xs:date" />
<xs:attribute name="timestamp" type="xs:dateTime" />
XML
<store date="20512-07-11" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="items.xsd">
<store timestamp="20512-07-11T21:50:16" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="items.xsd">
答案 0 :(得分:10)
抱歉,为什么你认为20512-07-11是无效日期?天文学家可能非常热衷于保持数据显示日期将发生日食。
如果要将日期限制在特定范围内,例如在2100年之前,则应使用从xs:date派生的simpleType,使用maxExclusive facet限制值的范围。
答案 1 :(得分:4)
验证器中存在 NOT 缺陷(顺便说一句,您应该指出您正在使用的验证器)。其他验证器(mis)的行为与您期望的一样;例如,.NET会抱怨The value '20512-07-11' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:date' - The string '20512-07-11' is not a valid XsdDateTime value.
请参阅XSD规范的this section,第D3.3节,其中明确指出您的值有效。