Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xsd validation 如何在XSD中添加条件验证:_Xsd Validation - Fatal编程技术网

Xsd validation 如何在XSD中添加条件验证:

Xsd validation 如何在XSD中添加条件验证:,xsd-validation,Xsd Validation,现有XSD代码段: <xs:element name="searchcriteria"> <xs:complexType> <xs:sequence> <xs:element ref="filter" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence>

现有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>


。。。

  • RequestType:枚举2个值R1和R2

  • FieldNameType:枚举两个值F1和F2

现在,我想修改此XSD以提供以下验证:

  • 当RequestType=R1时,所有字段名称为F1和F2
  • 当请求类型=R2时,则允许的字段名称为F1、F3和F4。(可能需要新的枚举)
  • 如何添加此类验证? 谢谢。

    XSD(以及大多数其他XML模式语言)的基本思想是将验证行为绑定到元素类型。如果您希望一组实例以一种方式验证,另一组实例以另一种方式验证(这一想法是这样的),那么初步证据表明它们实际上是两种不同类型的元素,并且应该有两个不同的名称

    因此,让XSD验证您所描述的请求的最简单方法是用一对名为
    R1
    R2
    的元素替换
    searchcriteria
    元素。按照您的意愿,使用不同的类型声明它们:或者它们每个都有一个名为
    filter
    的元素,该元素的属性带有适当的枚举类型,或者
    R1
    被声明为具有
    F1
    F2
    作为子元素,并且
    R2
    被声明为具有
    F1
    的选择,
    F3
    ,或
    F4

    如果您不能或不愿意这样做,您可以使用XSD 1.1及其条件类型分配功能为
    searchcriteria
    声明两种类型(这两种类型本应用于
    R1
    R2
    ),并根据
    请求
    属性的值分配适当的类型。您还可以使用
    searchcriteria
    上的断言来检查co约束

    如果您没有访问XSD 1.1验证程序的权限,请告诉XSD 1.0验证程序的供应商您希望升级,并探索使用Schematron断言检查约束

    有关选项的更多具体讨论,请参见,并附有示例