使用xsd:assert基于另一个元素创建一个可选/强制元素

时间:2015-03-19 04:40:29

标签: xml xsd schema assert optional

我相信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元素是可选的。< / p>

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

信用: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>