Исходя из предоставленной вами схемы, я бы сказал следующее: помните, что наследование сложных типов в XML-схеме не точно , как вы ожидаете в Java.
В вашей схеме / объектной модели у вас есть тип inhalt
и тип text
, который наследуется от него.inhalt
абстрактно.Все идет нормально.Разница заключается в использовании типов.Вы присваиваете тип inhalt
элементу с именем inhalt
.Это означает, что там может появиться только элемент inhalt
, а не text
, а переопределение xsi: type необходимо, чтобы указать, какой подтип используется (парсер не может его угадать).
Вы можете достичь того, чтовы хотите достичь, если вы используете группу подстановки в дополнение к подтипу, это позволит элементу text
появиться.Выполните рефакторинг схемы следующим образом:
- Создайте глобальный элемент с именем «inhalt» и введите «inhalt» (введите имя типа в верхнем регистре, если вы считаете, что это не так)
- Создайте глобальный элемент с именем «текст» и типом «текст».Установите для атрибута группы подстановки «text» значение «inhalt».
- Замените ссылку на локальный элемент в «marke» ссылкой на глобальный элемент.
Для справки здесьэто новая модель marke
:
<xs:element name="inhalt" type="inhalt"/>
<xs:element name="text" type="text" substitutionGroup="inhalt"/>
<xs:complexType name="marke">
<xs:sequence>
<xs:element ref="inhalt"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="typ" type="markenTyp" use="required"/>
</xs:complexType>
После этого text
может появиться внутри marke
.