问题描述
在 XSD 中,我想定义一个类型 Country
,包括一个设置可以使用的国家/地区名称列表的限制。
这可以通过使用枚举作为限制来轻松完成。
然而,这个列表会随着时间的推移而变化。例如:过去我们有不存在的南斯拉夫;克罗地亚、斯洛文尼亚等取而代之。
因此,一个国家/地区将有一个开始日期和(可能)一个结束日期。 StartDate
和 EndDate
将设置每个特定国家的存在日期范围。
在验证 XML 时,我想验证 XML 是否引用现有国家/地区。
因此,XML 还将包含变量 ReferenceDate
,用于检查 StartDate 和 EndDate。
实际上我想定义类型 Country
并设置属性 CountryName
、StartDate
和 Enddate
。
例如,在使用值克罗地亚和 ReferenceDate
验证 XML 时,我想使用 XSD 中定义的类型 ReferenceDate
验证克罗地亚是否是日期 Country
的有效国家/地区。
鉴于我使用的是 XSD 1.0,对限制有什么想法吗?
解决方法
XSD 1.0
无法强制执行您的约束。
XSD 1.1
您可以编写断言以确保 current-date()
在 XML 实例文档中的值范围内。您不能对 XSD 中的类型给定的范围进行断言。
您所说的约束可能最好通过自定义应用程序代码来实施。
,您可以考虑一个框架,该框架允许您生成适合特定日期的架构(通常通过将 XSLT 转换应用于某种元架构)。
例如,您的元模式本质上可以是一个 XSD 文件,其中任何元素都可以具有开始日期和结束日期属性,并且您可以使用 XSLT 轻松处理此问题以仅保留适用于特定日期的元素.