XSD文件中的复杂限制逻辑

时间:2014-06-04 16:03:59

标签: xml xsd xsd-validation

我想创建一个模式定义,我必须描述以下场景:

...
<DeviceParamUpdate>
   <Update>
      <ProcessorName>NPT Length</ProcessorName>
      <ParamName>UseFilter</ParamName>
      <ParamValue>False</ParamValue>
      <ParamType>System.Boolean</ParamType>
   </Update>
</DeviceParamUpdate>
<DeviceParamUpdate>
   <Update>
      <ProcessorName>NPT Width</ProcessorName>
      <ParamName>UseFilter</ParamName>
      <ParamValue>False</ParamValue>
      <ParamType>System.Boolean</ParamType>
   </Update>
</DeviceParamUpdate>
<DeviceParamUpdate>
   <Update>
      <ProcessorName>Finder Width</ProcessorName>
      <ParamName>CMinX</ParamName>
      <ParamValue>-500</ParamValue>
      <ParamType>System.Int32</ParamType>
   </Update>
</DeviceParamUpdate>
<DeviceParamUpdate>
   <Update>
      <ProcessorName>Finder Width</ProcessorName>
      <ParamName>CMaxX</ParamName>
      <ParamValue>1500</ParamValue>
      <ParamType>System.Int32</ParamType>
   </Update>
</DeviceParamUpdate>
<DeviceParamUpdate>
   <Update>
      <ProcessorName>B Width</ProcessorName>
      <ParamName>MinX</ParamName>
      <ParamValue>-1675</ParamValue>
      <ParamType>System.Int32</ParamType>
   </Update>
</DeviceParamUpdate>
...

,其中

  • 如果ProcessorName = NPT Length,则ParamName = UseFilterParamType = System.BooleanParamValue类型为布尔值;
  • 如果ProcessorName = NPT Width,则ParamName = UseFilterParamType = System.BooleanParamValue输入xs:boolean };
  • 如果ProcessorName = Finder WidthParamName = CMinX,则ParamType = System.Int32ParamValue输入xs:integer };
  • 如果ProcessorName = Finder WidthParamName = CMaxX,则ParamType = System.Int32ParamValue输入xs:integer };
  • 如果ProcessorName = B Width,则ParamName = MinXParamType = System.Int32ParamValue输入xs:integer };

  • 如果DeviceParamUpdate ProcessorName = NPT Length存在,则ProcessorName = NPT Width
  • 必须存在 {li> DeviceParamUpdate ProcessorName = Finder Width必须同时存在或不存在。

有没有办法在XSD文件中强制进行这种类型的验证?在此先感谢...

1 个答案:

答案 0 :(得分:1)

如果您使用的是XML Schema 1.0 ,则无法在架构中表达此类约束,但您可以使用Schematron,也可以在应用程序级别进行检查。

如果您使用的是XML Schema 1.1 ,则可以使用specify co-occurrence constraints通过XPath 2.0 xs:assert