现有的XSD代码段:
<xs:element name="searchcriteria">
<xs:complexType>
<xs:sequence>
<xs:element ref="filter"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Request"
type="RequestType" />
</xs:complexType>
</xs:element>
<xs:element name="filter">
<xs:complexType>
<xs:sequence>
<xs:element ref="filter"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="FieldName"
type="FieldNameType" />
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
...
RequestType:枚举2个值R1和R2
FieldNameType:2个值F1和F2的枚举
现在我想修改此XSD以提供以下验证:
我该如何添加此类验证?谢谢.
XSD(以及大多数其他XML模式语言)的基本思想是将验证行为绑定到元素类型.如果你想要以一种方式验证一组实例,而另一种方式验证另一组实例(实现这个想法),那么初步证明它们实际上是两种不同类型的元素,并且应该有两个不同的名称.
因此,在您描述时,使XSD验证您的请求的最简单方法是searchcriteria使用名为R1和的一对元素替换您的元素R2.声明他们有不同的类型,如你所愿:要么他们每个人都有命名的元素filter与携带适当的枚举类型的属性,或者R1被声明为具有或者一个F1或F2一个孩子,R2被声明为的选择F1,F3或F4.
如果你不能或不会这样做,你可以使用XSD 1.1及其条件类型赋值功能来声明两种类型searchcriteria(否则你将使用的两种类型R1和R2),并根据值分配适当的类型.的Request属性.您还可以使用断言searchcriteria来检查共同约束.
如果您无权访问XSD 1.1验证程序,请告知XSD 1.0验证程序的供应商您要升级,并探索使用Schematron断言来检查约束.
另请参阅这个基本相似的问题,以便通过示例对选项进行更具体的讨论.
| 归档时间: |
|
| 查看次数: |
11279 次 |
| 最近记录: |