XML 基于另一个元素值进行限制

XML Restrict based on another element value

基本上我有我的 XML 1.0 版,我有一个复杂的元素,示例如下:

<tile>
  <position>5</position>
  <type>floor</type>
  <towerPlacement>true</towerPlacement>
</tile>

我在 XML 架构中定义了以下内容:

<xs:element name="type">
   <xs:simpleType>
   <xs:restriction base="xs:string">
   <xs:enumeration value="road"/>
   <xs:enumeration value="floor"/>
   <xs:enumeration value="startPos"/>
   <xs:enumeration value="endPos"/>
   </xs:restriction>
   </xs:simpleType>
</xs:element>

有没有办法让我的 towerPlacement 只有在 type = floor 时才为真?

<xs:element type="xs:boolean" name="towerPlacement" minOccurs="0" maxOccurs="1" />

XSD 1.0

您的约束无法在 XSD 1.0 中表达。

XSD 1.1

您的约束 可以 在 XSD 1.1 中使用断言来表示 towerPlacement 只能是 true 如果 [=13] =]:

<?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="tile">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="position" type="xs:integer"/>
        <xs:element name="type">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="road"/>
              <xs:enumeration value="floor"/>
              <xs:enumeration value="startPos"/>
              <xs:enumeration value="endPos"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="towerPlacement" type="xs:string"/>
      </xs:sequence>
      <xs:assert test="(type='floor' and towerPlacement='true') 
                       or towerPlacement!='true'"/>
    </xs:complexType>
  </xs:element>
</xs:schema>