7

甚至可能吗?

  • 我知道可以根据正则表达式进行限制,但事实并非如此
  • 我知道可以将属性声明为由 XPath 计算的外键,但它似乎必须是唯一的

示例:

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

2 回答 2

6

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 目前在 Saxon 和 Xerces 中实现。

于 2011-06-20T08:26:02.127 回答
5

W3C Schema 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>
于 2011-06-19T19:19:04.423 回答