Я пытаюсь написать схему XML для определения некоторых классов моделей, которые будут использоваться в jaxb в java.
Я бы хотел иметь возможность определить интерфейс в xsd, но я не знаю, как это сделать.
Например, у многих моих классов будет атрибут id с типом xs: ID. У них будет атрибут ref с типом xs: IDREF, и у них будет атрибут extRef, который означает, что существует ссылка, но элемент не указан в данном xml-файле.
В идеале это будет интерфейс при преобразовании в Java по двум причинам.
- Классы, которые реализуют это, не обязательно связаны.
- Я хотел бы указать другое дерево наследования для некоторых из этих объектов.
Пример:
<!-- Utility type to be externally referenceable this is too keep all the
externally refrencable attributes in check -->
<xs:complexType name="ExternallyReferenceable" abstract="true">
<xs:attribute name="extRef" type="externalReference" />
<xs:attribute name="id" type="xs:ID" />
<xs:attribute name="ref" type="xs:IDREF" />
</xs:complexType>
<xs:complexType name="ExternalCarPart">
<xs:extension base ="ExternallyReferenceable" />
</xs:complexType>
<xs:complexType name="CarPart">
<xs:extension base ="ExternalCarPart">
<xs:sequence>
<xs:element type="xs:string" name="partName" />
</xs:sequence>
</xs:extension>
</xs:complexType>
<xs:complexType name="CarLamp">
<xs:extension base ="ExternalCarPart">
<xs:sequence>
<xs:element type="xs:string" name="glassPurity" />
</xs:sequence>
</xs:extension>
</xs:complexType>
Так что в вышеприведенном примере было бы лучше, если exteranllyRefrencable был интерфейсом, и если carpart был интерфейсом.
Это позволило бы CarLamp наследовать от лампы, а не от внешней части автомобиля. BicycleLamp также может реализовать интерфейс с внешним восстановлением и расширить лампу.
Пожалуйста, попросите у меня разъяснений, если вопрос не ясен.