Перечисленные имена элементов RelaxNG - PullRequest
0 голосов
/ 12 февраля 2012

Если у меня есть имена элементов, которые должны выглядеть следующим образом:

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

Где 'n' = 0;

Как бы я применил это RelaxNG?

Сложная часть - это динамически генерируемые имена элементов.

1 Ответ

1 голос
/ 15 февраля 2012

Относительно вашего файла примера 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>
...