Как мне написать схему (XSD1.0) для проверки элемента с одинаковым именем, имеющего разное содержимое? (Возможно ли это? Похоже, что первоначальное расследование нарушает «последовательность декларации элемента», но я могу ошибаться в этом.)
Фрагменты ниже иллюстрируют то, что мне нужно - по сути, у меня может быть вхождение «ParentTag» (которое глубоко вложено в мой документ), и оно может содержать любое из содержимого, определенного в 3 вариантах ниже. Я должен отметить, что «ParentTag» виден только один раз под элементом-предком, поэтому в определенной ветви дерева встречается только один вариант.
Я являюсь потребителем XML, а не генератором и не могу изменять исходный XML. Кажется, я хочу сделать что-то похожее на «выбор» (или, может быть, «союз»?), Но это определение ускользнуло от меня.
Как запасной вариант (уродливый ключ), кажется, что лучшее, что я смог сделать, - это использовать «любой», а затем положиться на мой код приложения-потребителя (которым я управляю), чтобы «завершить» проверку по мере ее появления. разбирает XML.
Вариант 1:
<ParentTag>
<!-- '<value>' can repeat -->
<value>some value</value> <!--(type="xsd:string" minOccurs="1" maxOccurs="unbounded")-->
</ParentTag>
Вариант 2:
<ParentTag>
<!-- Note: order of subelements not guaranteed: 'all', not 'sequence' -->
<minValue>v1</minValue> <!--(type="xsd:int" minOccurs="1" maxOccurs="1")-->
<maxValue>v2</maxValue> <!--(type="xsd:int" minOccurs="1" maxOccurs="1")-->
</ParentTag>
Вариант 3:
<ParentTag>
<specialValue>special value</specialValue> <!--(type="xsd:string" minOccurs="1" maxOccurs="1")-->
</ParentTag>