Здесь есть две проблемы:
Во-первых, ваш xs:choice
неоднозначен.
Вместо того, чтобы определять модель контента как choice(sequence(A,B), A)
, определите ее как sequence(A, optional(B))
, где optional B
выражается с использованием minOccurs="0"
для частицы xs:element
.
Выбор в XSD должен быть однозначным: когда валидатор, читая сверху вниз XML, видит элемент, он должен без предвидения знать, какую ветку выбора выбрать, просто взглянув на имя элемента.
Во-вторых, ваша модель содержимого нарушает ограничение "объявления элементов согласованы". Если две элементные частицы в модели содержимого имеют одинаковое имя, они также должны иметь одинаковый тип. В XSD 1.0 этого нет. В XSD 1.1 вы можете добавлять дополнительные ограничения, используя утверждения, например (в объявлении теста элемента)
<xs:assert test="if (exists(parameter)) then option='aaa' else option='bbb'"/>