Перечисленные имена элементов 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>
Другие вопросы по тегам