Рассмотрим следующую схему Relax NG , написанную на Компактный синтаксис
key = element key { type, value }
type = element type { text }
value = element value { text }
Таким образом, любой XML-документ, такой как
<key>
<type>someType</type>
<value>someValue</value>
</key>
, будетподтверждено как хорошо сформированный.Теперь я хочу поставить некоторые ограничения, например, некоторые зависимости между значениями элементов.Например,
if type:text = "digit" then value:text = "[0-9]" else
if type:text = "letter" then value:text = "[a-z]"
Это отфильтрует некоторые недействительные документы, такие как
<key>
<type>letter</type>
<value>7</value>
</key>
<!-- illegal - 7 is not a letter ! -->
Синтаксис Relax NG не предоставляет явного механизма написания условных операторов, поэтому мой вопрос заключается в том, какэмулировать такое поведение и реализовать зависимость между значениями некоторых элементов и атрибутов?
Также я буду благодарен, если вы покажете мне способ сделать это, используя классический DTD.
Любая помощь будет оценена.Заранее спасибо.