如果我的元素名称必须如下所示:
<myElem>
<subElem_n/>
<subElem_n+1/>
<subElem_n+2/>
</myElem>
其中'n' = 0;
我将如何强制执行这是 RelaxNG?
棘手的部分是动态生成的元素名称。
关于您的 XML 示例文件:
您提供的 XML 格式不正确。XML 名称中+
不允许使用 。请参阅此处,查看PrefixedName
并UnprefixedName
获得精确的语法。
关于您的验证案例:
据我所知,您无法使用 Relax NG 在元素名称上添加动态生成的验证规则。
检查这种结构的唯一方法是对xs:assert
元素使用 ISO Schematron 或即将推出的 XML Schema 1.1 建议。
这两个解决方案使用 XPath,您可以使用该local-name()
函数检查名称。
还有一件事
请注意,拥有这样的结构并不总是被认为是一种好习惯,您也可以考虑这种:
<myElem>
<subElem rank="1"/>
<subElem rank="2"/>
<subElem rank="3"/>
...
</myElem>