xml 子元素的条件检查,同时使用 XSD 进行验证

conditional checking of xml sub elements while validating with XSD

我有一个 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 是不可能的。