Как ограничить текстовый узел несколькими вариантами?

Скажем, у меня есть тег "фрукты", который может быть только "банан" и "яблоко", а не какой-либо текст, например:

<fruit>banana</fruit>
<fruit>apple</fruit>
<fruit>potato</fruit> <!-- wrong! -->

Если я установлю <text/>, это позволит любой текст... Как сделать более строгую запись Relax NG для этого?

1 ответ

Решение

См. http://relaxng.org/tutorial-20011203.html. Так что вместо

<element name="fruit">
  <text/>
</element>

использование

<element name="fruit">
  <choice>
    <value>banana</value>
    <value>apple</value>
  </choice>
</element>

Пример из реальной жизни в синтаксисе RELAX NG Compact см. По https://github.com/citation-style-language/schema/blob/262af55030bd3f5b389d1b327b2e725d83da34c8/csl-repository.rnc#L89:

element cs:rights {
  "This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License"
}

который только проверяет <rights>This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>,

Другие вопросы по тегам