如何指定一个元素以具有一个属性,该属性指出它在XML模式中包含的子元素数量?

问题描述:

它甚至可能吗?如何指定一个元素以具有一个属性,该属性指出它在XML模式中包含的子元素数量?

  • 我知道这是可能基于正则表达式做了限制,但是这不是
  • 我知道这是可以声明的属性作为由XPath计算的外键,但似乎它必须是唯一的

例:

<root children="2"> 
    <child /> 
    <child /> 
</root> 

W3C模式1.0不必限制基于实例的属性值的能力文档。

Schematron是验证文档是否遵守这种自定义验证场景的好工具。

例如:

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://purl.oclc.org/dsdl/schematron"> 
    <pattern> 
     <rule context="root[@children]"> 
      <assert 
       id="children-value" 
       test="@children=count(child)" 
       flag="error"> 
       The root/@children value must be equal to the number of child elements. 
       </assert> 
      </rule> 
    </pattern> 
</schema> 
+0

这就是我想的,谢谢。 – sebastien

XSD 1.1允许你来表达这种约束:

<xs:element name="root"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="child" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute name="children" type="xs:integer"/> 
    </xs:complexType> 
    <xs:assert test="@children = count(child)"/> 
</xs:element> 

XSD 1.1,目前在撒克逊和Xerces实现。