我想创建一个模式定义,我必须描述以下场景:
...
<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
= UseFilter
,ParamType
= System.Boolean
和ParamValue
类型为布尔值; ProcessorName
= NPT Width
,则ParamName
= UseFilter
,ParamType
= System.Boolean
和ParamValue
输入xs:boolean
}; ProcessorName
= Finder Width
且ParamName
= CMinX
,则ParamType
= System.Int32
和ParamValue
输入xs:integer
}; ProcessorName
= Finder Width
且ParamName
= CMaxX
,则ParamType
= System.Int32
和ParamValue
输入xs:integer
}; ProcessorName
= B Width
,则ParamName
= MinX
,ParamType
= System.Int32
和ParamValue
输入xs:integer
}; 和
DeviceParamUpdate
ProcessorName
= NPT Length
存在,则ProcessorName
= NPT Width
DeviceParamUpdate
ProcessorName
= Finder Width
必须同时存在或不存在。
有没有办法在XSD文件中强制进行这种类型的验证?在此先感谢...
答案 0 :(得分:1)
如果您使用的是XML Schema 1.0 ,则无法在架构中表达此类约束,但您可以使用Schematron,也可以在应用程序级别进行检查。
如果您使用的是XML Schema 1.1 ,则可以使用specify co-occurrence constraints通过XPath 2.0 xs:assert。