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