使用 xsd:assert 基于另一个元素创建一个元素 optional/mandatory

Make an element optional/mandatory based on another element using xsd:assert

我相信XSD 1.1 有允许条件逻辑的断言。

我有这样的架构:

        <xs:element minOccurs="0" maxOccurs="1" name="Type" type="xs:integer" />
        <xs:element minOccurs="0" maxOccurs="1" name="Comment" type="xs:string" />

我希望 Comment 部分仅在 Type 为 0 时才是强制的。如果 Type 是其他任何内容,我希望 Comment 元素是可选的.

如何使用断言实现此目的?

test="not(Type=0 and not(Comment))"

来源:Michael Kay、George Boole 和 Augustus De Morgan。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           vc:minVersion="1.1">

  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="1" name="Type" type="xs:integer" />
        <xs:element minOccurs="0" maxOccurs="1" name="Comment" type="xs:string" />
      </xs:sequence>
      <xs:assert test="Comment or not(Type = 0)"/>
    </xs:complexType>
  </xs:element>

</xs:schema>