xsd - 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 年都过去,那么有没有办法排除这种不完美呢?
/保罗
推荐阅读
- r - R 的文档或语言定义是否说明了 R 整数的预期用途?
- javascript - Setinterval - 2 秒后单击然后再单击。运行一次。没有循环
- python - 使用 Pandas Apply() 创建一个将其他 2 列分开的列
- python - 如何使用 Alpha Vantage API 获取当前价格
- elasticsearch - 在elasticsearch中引用带有vs而没有正斜杠的文档是否有区别
- sql - 尝试使用外键从组合框中获取数据并更新数据库
- r - 基础库中的任何通用函数是否在矩阵上调度?
- c++ - 为什么在没有数组完整大小的情况下传递二维数组仍然可以编译和运行?
- php - 从下拉列表和复选框中提取数据以显示在另一个页面中的表格上的问题
- mips - 使用 MIPS 计算单词数组中的元素数