2011-07-10 3 views
2

Je tente d'écrire un schéma XML pour définir certaines classes de modèle à utiliser dans jaxb dans Java.Interfaces de schéma Xml

Je voudrais être en mesure de définir une interface dans le xsd mais je ne sais pas comment faire cela.

Par exemple, beaucoup de mes classes auront un attribut appelé id qui est de type xs: ID. Ils auront un attribut appelé ref qui est de type xs: IDREF et ils auront un attribut appelé extRef qui signifie qu'il y a une réfrence mais l'élément n'est pas spécifié dans le fichier xml donné.

Idéalement, il s'agirait d'une interface convertie en Java pour deux raisons.

  1. Les classes implémentant cela ne sont pas nécessairement connectées.
  2. Je voudrais spécifier un arbre d'héritage différent pour certains de ces objets.

Exemple:

<!-- 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> 

Ainsi, dans l'exemple ci-dessus, il serait mieux si exteranllyRefrencable était une interface, et si carpart était une interface. Ceci permettrait à CarLamp d'hériter de la lampe plutôt que de la partie externe de la voiture. BicycleLamp pourrait également implémenter l'interface externallyRefrencable et prolonger la lampe également.

Veuillez me demander des éclaircissements si la question n'est pas claire.

Répondre

0

IIRC, JAXB ne génère pas d'interfaces à partir de XSD. JAXB prend également en charge la génération de XSD à partir de classes Java.

Je ne suis pas sûr de ce qu'il fait avec les interfaces à cet égard, mais peut-être que vous devez aller dans la direction opposée - commencer par Java et générer XSD, même si je ne suis pas sûr que cela vous aidera.