У меня есть XML-схемы, которая определяет следующие типыXML Schema - simpleType со списком наследуется атрибутом
<xsd:complexType name="visualElement" abstract="true">
<xsd:attribute name="id" type="xsd:ID"></xsd:attribute>
<xsd:attribute name="style" type="xsd:string"></xsd:attribute>
</xsd:complexType>
<xsd:complexType name="textElement">
<xsd:complexContent>
<xsd:extension base="sa:visualElement">
<xsd:attribute name="label" type="xsd:string" use="required" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xs:element name="text" type="textElement"/>
Вопрос заключается в том, что это означает, что мы должны определить элемент текста следующим образом
<text id="myText" style="Fancy" label="This is the display text" />
When то, что я действительно хочу сделать, это определить это так:
<text id="myText" style="Fancy">
This is the display text here.
</text>
my textElement Type должен расширить vi sualElement Type, поскольку мы генерируем Java-классы с JAXB для анализа XML. А затем с помощью наследования JaxB CLasses обрабатывать все визуальные элементы аналогичным образом.
Есть ли способ структурировать схему, чтобы я мог достичь желаемого формата XML, сохраняя при этом атрибуты типа visualElement?
Ваше первое предложение сработало. Однако, поскольку мы используем visualElement для ряда других типов, а некоторые из них не должны содержать строку, это все еще не совсем то, что нам нужно. Я уже попробовал свое второе предложение, это неверно. –
Оглядываясь назад, если вы думаете об этом, я желаю многократного наследования ... я думаю, объясняет, почему я не очень далеко. Ради целесообразности мы уже застряли на этикетке. спасибо за ваши предложения. –
@PaulHenry Вы не можете иметь множественное наследование, но у вас может быть агрегация с группами атрибутов. Вы также можете использовать плагин наследования, чтобы ваши классы реализовали определенный интерфейс - который в сочетании с группами атрибутов почти так же хорош, как и реальное множественное наследование. – lexicore