如何指定一个元素以具有一个属性,该属性指出它在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>
答
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实现。
这就是我想的,谢谢。 – sebastien