XSD 多个条件



我有一个XML模式,其中包含以下代码段:

<xs:attribute name="extension" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="((18)|(19)|(20))[0-9][0-9]((0[1-9]|1[0-2]))((0[1-9]|1[0-9]|2[0-9]|3[0-1]))" />
</xs:restriction>
<xs:length value="8" />
</xs:simpleType>
</xs:attribute>

这段代码确定活着的人的出生日期是否正确。它假设任何人出生在从 18、19 或 20 开始的任何年份。然后是任意两个数字,一个月在 01-12 之间,一天在 01-31 之间。出生日期必须包含 8 个数字才能验证。

问题是是否有任何方法可以进一步发展这一点?例如,如果有一个出生年份是1809年,即使那个年龄的人不可能活着,它也会验证。未来一年也将验证 - 比如 2058 年。

我有一种方法可以把像"minyear"和"maxyear"这样的字符串的前 4 个数字不能小于 $minyear 或大于 $maxyear?

我还可以补充一点,与这个 8 个数字字符串直接相关的是另外四个数字,它们是控制数字,与年、月和日无关。这就是为什么底座是字符串。

有什么想法吗?

/保罗

走到这一步:

<xs:attribute name="extension" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(([1][8][9][0-9]|[1][9][0-9][0-9]|[2][0][0-1][0-9])(0[1-9]|1[0-2]))((0[1-9]|1[0-9]|2[0-9]|3[0-1]))" />
</xs:restriction>
<xs:length value="8" />
</xs:simpleType>
</xs:attribute>

这段代码将限制从 1890 年到 2019 年的有效期。唯一的问题是2019年会过去,除此之外它有效。

然而,它不是完美的,当2020年到来时,它将让所有年份过去到2029年,那么有没有办法排除这种不完美呢?

/保罗

是的!已解决:-(

模式部分应如下所示:

<xs:pattern value="(((189)[0-9]|(19)[0-9][0-9]|((200)[0-9]|(201)[0-8]))(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1]))" />

这适用于 XML 架构 1.0。也许 1.1 中有一个更光滑的解决方案?

/保罗

最新更新