Интерфейсы XML-схемы - PullRequest
       4

Интерфейсы XML-схемы

2 голосов
/ 10 июля 2011

Я пытаюсь написать схему XML для определения некоторых классов моделей, которые будут использоваться в jaxb в java.

Я бы хотел иметь возможность определить интерфейс в xsd, но я не знаю, как это сделать.

Например, у многих моих классов будет атрибут id с типом xs: ID. У них будет атрибут ref с типом xs: IDREF, и у них будет атрибут extRef, который означает, что существует ссылка, но элемент не указан в данном xml-файле.

В идеале это будет интерфейс при преобразовании в Java по двум причинам.

  1. Классы, которые реализуют это, не обязательно связаны.
  2. Я хотел бы указать другое дерево наследования для некоторых из этих объектов.

Пример:

<!-- 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 также может реализовать интерфейс с внешним восстановлением и расширить лампу.

Пожалуйста, попросите у меня разъяснений, если вопрос не ясен.

1 Ответ

0 голосов
/ 12 июля 2011

IIRC, JAXB не генерирует интерфейсы из XSD.

JAXB также поддерживает генерацию XSD из классов Java.Я не уверен, что он делает с интерфейсами в этом отношении, но, возможно, вам нужно пойти в противоположном направлении - начать с Java и генерировать XSD, хотя я не уверен, что это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...