3

当我像下面这样设置年份部分(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">
4

2 回答 2

11

抱歉,但为什么您认为 20512-07-11 是无效日期?天文学家可能非常热衷于维护显示日食将在该日期发生的数据。

如果您想将日期限制在特定范围内,例如在 2100 年之前,那么您应该使用从 xs:date 派生的 simpleType,它使用 maxExclusive facet 来限制值的范围。

于 2012-07-27T21:54:54.493 回答
3

不是您的验证器的缺陷(顺便说一句,您应该指出您正在使用哪个验证器)。其他验证器(错误)的行为方式与您预期的一样;例如,.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 规范的这一部分,第 D3.3 节,其中明确指出您的值是有效的。

于 2012-07-27T17:57:19.627 回答