Я пытаюсь разработать схему, которая будет проверять некоторые существующие XML-файлы, которые я унаследовал. Я хотел бы, чтобы схема выполняла как можно больше работы по проверке. Проблема заключается в том, что атрибуты и элементы зависят от значений других атрибутов.
Реальные данные довольно абстрактны, поэтому я создал несколько простых примеров. Допустим, у меня есть следующие XML-файлы:
<?xml version="1.0" encoding="UTF-8"?>
<Creature type="human" nationality="British">
<Address>London</Address>
</Creature>
<?xml version="1.0" encoding="UTF-8"?>
<Creature type="animal" species="Tiger">
<Habitat>Jungle</Habitat>
</Creature>
Если "тип" существа - "человек", у меня будет атрибут "национальность" и дочерний элемент "Адрес". Если «тип» существа - «животное», у меня будет атрибут «вид» и дочерний элемент «среда обитания». Для целей этого примера «человек» с «видом» или «средой обитания» будет недействительным, как и «животное» с «национальностью» или «адресом».
Если бы «Существо» не было корневым элементом, я мог бы иметь два разных варианта «Существо» ниже корневого элемента, но я не понимаю, как я могу заставить эту работу работать, когда «Существо» является корневым элементом.
Есть ли способ создать схему для этих файлов, которая бы соответствовала только действительным документам? Если так, как бы я поступил об этом?