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