Скажем, у меня есть следующий XML-документ:XSD динамическое перечисление на основе XML
<root>
<genres>
<genre name="comedy" />
<genre name="academic" />
</genres>
<authors>
<author name="Thomson">
<writings>
<writing genre="academic">The text book</writing>
<writing genre="comedy">The worst comedy</writing>
<writings>
</author>
</authors>
<readers>
<reader name="Phil">
<read writenBy="Thomson">The text book</read>
</reader>
<reader name="John" />
</readers>
</root>
Как вы можете видеть, что элемент 'читателя может не иметь «читать» Чайлдс.
Однако, я хочу, чтобы процесс проверки, чтобы убедиться, что нет записи, как:
<reader name="Paul">
<read writtenBy="Thomson">A writing the author never wrote</read>
</reader>
Что я могу сделать, это предел значения атрибута может взять на основе предварительно определенных атрибутов с помощью клавиш и keyrefs (см accepted answer). Исходя из этого, я могу убедиться, что атрибут «writtenBy» на самом деле относится к имени автора, или атрибут жанра записи относится к ранее определенному жанру.
Я знаю, что вы можете перечислять жесткие коды на документе XSD (см. accepted answer).
Кроме того, вы можете использовать утверждения (в XSD 1.1) для более гибких перечислений на основе информации, содержащейся в XML (см. accepted answer).
Но я не могу использовать эти apporaches, потому что они жестко закодированы. Есть ли способ сделать аналогичную проверку для значений элементов, как я сейчас делаю это со значениями атрибутов?
Да, мой составленный пример может быть улучшен. Тем не менее, вы дали мне хорошую идею, которая включает в себя определение «перечисления» с уникальными идентификаторами, а затем использовать ключи и keyrefs для их проверки. –