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

APIs XML Discussion :

[XMI] [SAX] changement de Case des valeurs


Sujet :

APIs XML

  1. #1
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut [XMI] [SAX] changement de Case des valeurs
    Salut,
    voila, je suis en train de parser un fichier XMI.
    J'ai une balise avec un attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <UML:Classifier xmi.idref = 'a4-13' />     <!-- string -->
    Je veux recupere l'attribut, donc je fais, dans le parse de cette balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int index = 0; index < attributs.getLength(); index++) { 
    	if((attributs.getLocalName(index)).equals("xmi.idref"))
    	attr.setType(attributs.getValue(index));
    }
    Mais ca marche pas , je recupere rien... il trouve pas le LocalName de l'attribut en fait.
    Est ce que ce n'est pas la bonne facon de s'y prendre.
    Et pendant que j'y suis, je fais ca pour recuperer le type d'un attribut, qui en XMI est redéfini à la fin (le type) de cette facon la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <UML:DataType xmi.id = 'a4-13'>
            <UML:ModelElement.name>string</UML:ModelElement.name>
            <UML:ModelElement.visibility xmi.value = 'public'/>
            <UML:GeneralizableElement.isRoot xmi.value = 'false'/>
            <UML:GeneralizableElement.isLeaf xmi.value = 'false'/>
            <UML:GeneralizableElement.isAbstract xmi.value = 'false'/>
    </UML:DataType>
    est ce qu'il y a une astuce pour recuperer le type sans parser chronologiquement le fichier? (en utilisant SAX, je prefererai... )
    est ce qu'il existe des parsers de XMI?
    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
    "La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"

  2. #2
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    1/
    le parseur SAX va utiliser les Qualified Name au lieu des localName car les éléments xmi font partie d'un namespace.

    tu peux remplacer getLocalName par getQName, ou plus simplement pour éviter de faire une boucle, tu peux utiliser la méthode getValue("xmi.idref");

    2/
    le parseur SAX parcours séquentiellement ton fichier xmi. Comme les définitions de types sont à la fin, tu vas donc lire les références de chaque type et ensuite tu vas les résoudre quand tu vas tomber sur les éléments UMLataType.

    Pendant le parcours, tu construits ta liste de Classifier en leur associant la référence du type. éventuellement tu peux construire un index sur cette liste avec une table de hachage. Ensuite qd tu tombes sur les éléments dataType, tu recherche le/les classifier qui le référence et tu mets à jour leur type.

    C'est un algo en une seule passe. Mais tu peux le faire en deux passes : 1) tu parses ton fichier et tu construits en mémoire ta liste de classifier et de datatype et 2) tu effectues la résolution.

    Autre solution : tu parses une première fois ton fichier pour extraire les datatype et ensuite tu reparses pour construire tes classifiers avec leur type.
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  3. #3
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    ok, merci
    ca marche avec getValue("xmi.idref");
    C'est bien ce que je pensais faire pour les type, parser le fichier, attribuer les types par les code XMI et les remplacer ensuite.
    Je voulais juste savoir s'il y avait une astuce.
    Encore merci.
    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
    "La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"

  4. #4
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    Autre pb : je recupere les types, je les mets dans une HashTable...
    le truc, c'est que le XMI met apparemment toutes les valeurs en minuscules. Dans je recupere string et pas String, integer et pas Integer.
    Vu que je dois générer du code, ca me pose probleme...
    est ce que c'est normal?
    comme puis je resoudre ce pb?
    merci d'avance?
    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
    "La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"

  5. #5
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    Je ne connais pas XMI, mais les types définis par ce standard ne doivent pas correpondre à ceux du langage que tu utilises (je suppose que c'est java?)
    tu dois effectuer toi même le mapping xmi->java en construisant par ex un tableau associatif ou table de hachage.
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  6. #6
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    ok. Ben vi, evidemment
    Bon, ben je vais me mettre a faire ca alors.
    Merci
    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
    "La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"

Discussions similaires

  1. Sauvegarde des valeurs de cases à cocher
    Par jeunot0108 dans le forum Forms
    Réponses: 5
    Dernier message: 25/09/2007, 15h58
  2. Sauvegarder les changements des valeurs datatable
    Par stephane92400 dans le forum JSF
    Réponses: 3
    Dernier message: 14/08/2007, 19h05
  3. [Débutant] Récupérer des valeurs affichées dans des cases "Edit"
    Par Clint-is-wood dans le forum Interfaces Graphiques
    Réponses: 26
    Dernier message: 24/05/2007, 18h19
  4. [Formulaire] Checkbox changement des valeurs
    Par Samuel78 dans le forum IHM
    Réponses: 6
    Dernier message: 23/04/2007, 12h04
  5. Réponses: 1
    Dernier message: 18/04/2007, 19h38

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