RelaxNG枚举元素名称

时间:2012-02-12 08:31:47

标签: xml relaxng

如果我的元素名称必须如下所示:

<myElem>
  <subElem_n/>
  <subElem_n+1/>
  <subElem_n+2/>
</myElem>

其中'n'= 0;

如何强制执行此操作是RelaxNG?

棘手的部分是动态生成的元素名称。

1 个答案:

答案 0 :(得分:1)

关于您的XML示例文件:

您提供的XML格式不正确。 XML名称中不允许+See here,请查看PrefixedNameUnprefixedName以获得准确的语法。

关于您的验证案例:

据我所知,您无法使用Relax NG在元素名称上添加动态生成的验证规则。

检查这种结构的唯一方法是使用ISO Schematron或即将推出的带有xs:assert元素的XML Schema 1.1推荐。

这两个解决方案使用XPath,您可以使用local-name()函数检查名称。

还有一件事

请注意,拥有这样的结构并不总是被认为是一种好习惯,您也可以考虑这种结构:

<myElem>
    <subElem rank="1"/>
    <subElem rank="2"/>
    <subElem rank="3"/>
    ...
</myElem>