甚至可能吗?
- 我知道可以根据正则表达式进行限制,但事实并非如此
- 我知道可以将属性声明为由 XPath 计算的外键,但它似乎必须是唯一的
示例:
<root children="2">
<child />
<child />
</root>
甚至可能吗?
示例:
<root children="2">
<child />
<child />
</root>
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 中实现。
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>