Как ограничить текстовый узел несколькими вариантами?
Скажем, у меня есть тег "фрукты", который может быть только "банан" и "яблоко", а не какой-либо текст, например:
<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>
,