Ваши варианты для такого рода вещей зависят от того, как 'поля' представлены в XML, и от того, какую версию XSD вы используете.
Если fieldA
и fieldB
- это элементы, то некоторая структура следующей формы в соответствующей модели контента поможет.
<sequence minOccurs="0">
<element ref="tns:fieldA" minOccurs="0"/>
<element ref="tns:fieldB"/>
</sequence>
(Если хотите, ссылки на два элемента могут появляться в другом порядке.) Мне не ясно, почему Эрик Хесселинк беспокоится, что это может привести к дублированию, или о какой форме дублирования он беспокоится.
Если вы сделаете fieldB
элементом, а fieldA
- атрибутом (необязательным?) Этого элемента, то ограничение совместного вхождения, которое вы хотите, будет следовать автоматически.
Если вы зададите им оба атрибута, ограничение совместного использования не может быть применено в XSD 1.0; некоторые люди прибегают к Schematron для таких вещей. В XSD 1.1 варианты принудительного применения ограничения в этой ситуации включают xs:assert
и условное присвоение типа.