0

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

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

其中'n' = 0;

我将如何强制执行这是 RelaxNG?

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

4

1 回答 1

1

关于您的 XML 示例文件:

您提供的 XML 格式不正确。XML 名称中+不允许使用 。请参阅此处,查看PrefixedNameUnprefixedName获得精确的语法。

关于您的验证案例:

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

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

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

还有一件事

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

<myElem>
    <subElem rank="1"/>
    <subElem rank="2"/>
    <subElem rank="3"/>
    ...
</myElem>
于 2012-02-15T08:59:53.533 回答