【发布时间】:2012-11-19 04:36:22
【问题描述】:
我正在尝试使用 XSD 1.1 创建一个模式定义,其中一个元素的结果依赖于另一个元素。例如,我有国家列表和每个国家的州列表的下拉列表。当一个人选择一个国家时,只能选择那个国家的州。我试图达到的伪代码看起来像这样。
<xs:schema xmlns:ie="http://www.interviewexchange.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="country">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="USA" />
<xs:enumeration value="UK" />
<xs:enumeration value="India" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="state">
<xs:simpleType>
<xs:restriction base="xs:string">
<assert test="if (country eq 'USA')">
<xs:enumeration value="MA" />
<xs:enumeration value="AR" />
<xs:enumeration value="NY" />
</assert">
<assert test="if (country eq 'India')">
<xs:enumeration value="AP" />
<xs:enumeration value="TN" />
<xs:enumeration value="MP" />
</assert">
</xs:restriction>
</xs:simpleType>
</xs:element>
请建议我是否遵循正确的方法,如果我遵循正确的方法,谁能给我如何达到此限制的代码?提前致谢...
【问题讨论】:
-
这个问题可能会有所帮助stackoverflow.com/questions/13308585/…
-
该解决方案使用的是 schematron,并使用逗号分隔值代替枚举。您能否提供一个解决方案,它使用 XSD 1.1 中添加的功能,如“断言测试”而不使用 schematron,并采用枚举而不是逗号分隔值。谢谢。
-
对不起,错过了 1.1 部分,我还没有使用 1.1,但是从阅读 spec 看来,您不能像这样同时使用断言和枚举,@test 只是一个 XPATH在被测试元素的上下文中评估的 2.0。
标签: enums xsd w3c xsd-validation xsd-1.1