IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Héritage XSD : Comment faire une séquence d'un type/élément global pouvant contenir les types/élément dérivés


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Héritage XSD : Comment faire une séquence d'un type/élément global pouvant contenir les types/élément dérivés
    Bonjour à tous,

    Je cherche désespérément à faire une séquence d'un type général pouvant contenir des types dérivés de ce type.
    L'idée est: suite à une bonne définition de ce xsd, j'utilise xsd2Code et j'ai mes classes de générées correctement avec tout ce qui va avec (Sérialisation, loadFromFile...)

    Je voudrais donc obtenir une List<Touche>
    Cette Liste devra pouvoir contenir les sous-classes de Touche. En terme d'héritage C#, java c'est tout à fait normal.
    Cependant j'ai du mal à comprendre la réalisation de cette structure en xsd
    Voila ce que j'ai fait:

    Tout d'abord la séquence pouvant contenir des XMLTouche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <xs:element name="Touches">
        <xs:complexType>
          <xs:sequence >
            <xs:element ref ="XMLTouche" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    Une XMLTouche est du type XMLToucheBase
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      <xs:element name="XMLTouche" type="XMLToucheBase"/>

    Un XMLToucheBase possède les propriétés(attributs) ligne et colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      <xs:complexType name ="XMLToucheBase">
        <xs:attribute name="Ligne" type="xs:unsignedByte" use="required"/>
        <xs:attribute name="Colonne" type="xs:unsignedByte" use="required" />
      </xs:complexType>
    Un XMLToucheCaractere est une extension du type XMLToucheBase auquel j'ajoute le caractère et le caractèreShifté. il peut être utilisé/substitué à un élément XMLTouche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      <xs:element name="XMLToucheCaractere" substitutionGroup="XMLTouche">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="XMLToucheBase">
              <xs:attribute name="Label" type="xs:string" use="required" />
              <xs:attribute name="Shifted" type="xs:string" use="optional" />
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    Un XMLToucheBackspace est une extension de XMLToucheBase et peut être utilisé à la place de XMLTouche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      <xs:element name="XMLToucheBackSpace" substitutionGroup="XMLTouche">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="XMLToucheBase"/>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    Maintenant quand je génère avec XSD2Code, j'obtiens bien une List<XMLToucheBase>.
    Par contre lors du loadFromFile, la liste est vide alors qu'elle ne devrait pas l'être.

    Quelqu'un peut-il m'expliquer ou je me suis planté? Je ne vois pas trop pourquoi je n'y arrive pas.
    Le fichier xml que je lis est valide par rapport à l'xsd. Par contre dans le fichier xml, je peux créer des éléments XMLTouche alors que ce n'est pas ce que je veux. Je me demande si le problème ne viens pas de là
    En tout cas, merci de vos futurs conseils

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    C'est une question plutôt pour .NET, n'est-ce pas?

    En java, si on travail avec jaxb 2.0, on droit réussi complètement à faire charger le xml. jaxb 2.0 supporte bien le cas de substitutionGroup ici.

    Pour xsd2code, je crains qu'il le supporte très mal. (Il se peut que je trompe.) Vous devrez réussir de faire charger des éléments du type XMLToucheBase facilement. Mais pour faire charger des types dérivés, pour la version actuelle, il me semble que vous ne pourriez pas utiliser des codes/classes partielles autogens sans intervention particulière de vous-même.

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/01/2007, 17h22
  2. [help!] comment faire une séquence ki incrémente ....
    Par romtrash dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 19/04/2005, 18h52
  3. Réponses: 2
    Dernier message: 03/05/2004, 12h13
  4. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13
  5. Réponses: 10
    Dernier message: 10/10/2003, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo