Относительно вашего файла примера XML:
XML-файл, который вы предоставляете, сформирован неверно. +
не допускается в именах XML. Смотрите здесь , посмотрите на PrefixedName
и UnprefixedName
, чтобы иметь точный синтаксис.
Относительно вашего случая проверки:
Насколько я знаю, вы не можете добавлять динамически сгенерированные правила проверки имен элементов с помощью Relax NG.
Единственный способ проверить такую структуру - это использовать либо Schematron ISO, либо следующую рекомендацию XML Schema 1.1 с элементом xs:assert
.
Эти два решения используют XPath, и вы можете проверить имена с помощью функции local-name()
.
Еще одна вещь
Имейте в виду, что не всегда считается хорошей практикой иметь такую структуру, вы также можете рассмотреть такой тип:
<myElem>
<subElem rank="1"/>
<subElem rank="2"/>
<subElem rank="3"/>
...
</myElem>