XmlSchema 断言另一个元素的大小

XmlSchema assert the size with another element

我正在尝试创建一个 xmlSchema 来验证我的游戏地图。

我有一个全局元素定义如下

    <xs:element name="size">
      <xs:complexType>
        <xs:sequence>
          <xs:element type="xs:byte" name="rowCount"/>
          <xs:element type="xs:byte" name="columnCount"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

我还需要其他元素,我希望这些元素的大小与全局元素中定义的元素相同。

所以后面元素的最小值和最大值要遵循全局元素中设置的大小。我正在使用 XSD 1.1,所以我可以使用断言,但我不知道正确定义规则的语法。

<xs:element name="rows" minOccurs & maxOccurs=VALUE OF size.rowCount>

<xs:element name="tiles" minOccurs & maxOccurs=VALUE OF size.columnCount>

谢谢

你可以写,例如

<xs:assert test="every $table in descendant::table 
                 satisfies count($table/row) = size/@rowCount"/>

但细节取决于您的确切结构。

重要的是断言属于包含条件中涉及的所有值的对象 - 断言不能在定义它的元素的子树之外查看。并且 XPath 表达式是相对于包含元素的。另外,如果元素在命名空间中,请记住使用命名空间前缀。