在使用XSD进行验证时对xml子元素进行条件检查



我有一个类似于下面的XML。我想要条件检查。即

  1. <datatype>为int时,<subelement>应为强制值。

  2. <datatype>为bool时,<subelemnt>为可选。

注意:我使用的是xml 1.0。

这是允许的:

<element>
<name>
abc
</name>
<datatype>
int 
</datatype>
<subelement>
</subelement>
</element>

这是允许的:

<element>
<name>
abc
</name>
<datatype>
bool 
</datatype>
<subelement>
</subelement>
</element>

这是不允许的:

<element>
<name>
abc
</name>
<datatype>
int 
</datatype>

</element>

这是基本的xsd

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="element">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="name"/>
<xs:element type="xs:string" name="datatype"/>
<xs:element type="xs:string" name="subelement"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> 

有可能做到吗?如果有一个例子就太好了。谢谢你抽出时间。

这需要XSD 1.1,带有断言:

<xs:assert test="if (normalize-space(datatype)='int') 
then exists(subelement) 
else true()"/> 

XSD 1.0不可能做到这一点。

最新更新