Я пытаюсь создать схему XSD для следующего XML:
<root>
<!-- The actual file must contain one of the following constraints -->
<constraint type="interval">
<min>100</min>
<max>200</max>
</constraint>
<constraint type="equals">
<value>EOF</value>
</constraint>
</root>
Дочерние элементы элемента ограничения зависят от значения атрибута type.
Я успешно проверил XML, используя абстрактный тип, определяющий атрибут типа, и два расширяющих типа, определяющих дочерние элементы. Это потребовало бы, чтобы я украсил XML атрибутом xsi: type, назвав фактический тип расширения:
<constraint type="interval" xsi:type="intervalConstraintType">
<min>100</min>
<max>200</max>
</constraint>
К сожалению, я не контролирую XML-структуру, и новые атрибуты будет сложно ввести.
Это выполнимо с XSD? Есть ли альтернативы, которые более подходят?