xml 子元素的条件检查,同时使用 XSD 进行验证
conditional checking of xml sub elements while validating with XSD
我有一个 XML 如下所示。我想要条件检查。
即
当<datatype>
是int时<subelement>
应该是强制性的。
当<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 是不可能的。
我有一个 XML 如下所示。我想要条件检查。 即
当
<datatype>
是int时<subelement>
应该是强制性的。当
<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 是不可能的。