Схема XML не допускает дублирования имен элементов на одном уровне. Я ищу язык проверки XML, который может с этим справиться. XML, которым я не владею и поэтому не могу изменить, выглядит примерно так:
<items>
<item type = "single">
<name>Some single item</name>
</item>
<item type = "group">
<name>Some group item</name>
<groups>
…
</groups>
</item>
<item ref = "../item[0]"></item>
</items>
Как вы понимаете, существует три разных типа предметов.
Это всего лишь простой пример, элементы XML намного сложнее. Я думаю, что ищу язык проверки XML, который выбирает из нескольких определений элементов. например если определение элемента для отдельных типов не подходит, попробуйте group, если это не подходит, попробуйте ref, и если оно все еще не подходит, оно недействительно.
Поскольку я хочу проверить разные версии XML, чтобы найти различия между ними, очень важно, чтобы спецификация была действительно строгой. Это означает, что я буду использовать количественные спецификации, такие как по желанию, только если это необязательно в XML, чтобы не угодить валидатору.
Вы можете добиться этого с помощью XML-схемы (XSD) 1.1, используя функцию «условного присвоения типа», также известную как xs: alternate. Это позволяет вам определять несколько альтернативных типов для элемента item, выбираемых в соответствии со значением атрибутов элемента.