Создание complexType из нескольких complexTypes

У меня есть набор определенных элементов, инкапсулированных в complexType, которые требуются, если пользователь хочет заниматься бизнесом определенным образом (разрешает этот метод x):

<xs:element name="us">
 <xs:complextype>
 <xs:sequence>
 <xs:element name="usAttribute1" type="xs:string">
 <xs:element name="commonAttribute1" type="xs:string">
 </xs:element></xs:element></xs:sequence>
 </xs:complextype>
</xs:element>

и определенный набор элементов, инкапсулированных в другой complexType, которые требуются, если пользователь хочет заниматься бизнесом по-другому (разрешает вызов y):

<xs:element name="uk">
 <xs:complextype>
 <xs:sequence>
 <xs:element name="ukAttribute1" type="xs:string">
 <xs:element name="commonAttribute1" type="xs:string">
 </xs:element></xs:element></xs:sequence>
 </xs:complextype>
</xs:element>

Между обоими наборами существует перекрытие элементов, так что некоторые элементы являются общими для обоих наборов. Предположим, что пользователь хотел бы вести бизнес как по ходу, так и по y. Как мы объединяем два набора элементов, чтобы не было дублирования элементов?

2 ответа

То, что вы хотите, это в основном "множественное наследование" в XML-схеме.

Это невозможно напрямую (вы получаете только один тип), но есть варианты:

  • Вы можете использовать группы моделей (xs:group, xs:attributeGroup), вы можете ссылаться на некоторые из них (кредит идет на @jasso). Из того, что я прочитал в спецификации, вы должны иметь возможность включать элемент commonAttribute1 два раза, если включение более или менее идентично.
  • Возможно, вы захотите использовать агрегацию вместо наследования. Это часто лучший и легкий подход.


Вы не приводите какой-либо пример кода, поэтому трудно сказать, что именно вы хотите решить и как это сделать, но похоже, что вы можете попробовать использовать элемент .

Создайте группу общих элементов, которые содержат требования к элементу, и в подходящий момент обратитесь к этой группе из двух сложных типов.

licensed under cc by-sa 3.0 with attribution.