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

Valider XML Discussion :

[XSD] Clés étrangères explicite dans le XML


Sujet :

Valider XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut [XSD] Clés étrangères explicite dans le XML
    Bonjour,
    Je débute avec Eclipse, XSD et XML.

    J'ai pas mal débrouillé le truc mais là je ne trouve pas comment spécifier dans mon XSD le fait que je veuille que mes XML (générés par un graph ou par un editeur d'arbre avec eclipse) soient écrits en utilisant explicitement l'attribut INDEX lors d'un référencement.

    Voici le xml actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      <System>
        <Node Index="1"/>
        <Node Index="2"/>
        <Section StartNode="#//@ventuneNetworkSimulation/@system/@node.0"/>
      </System>
    Voici le xml que je cherche à obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      <System>
        <Node Index="1"/>
        <Node Index="2"/>
        <Section StartNode="1"/>
      </System>
    Ce que je cherche c'est comment décrire dans mon XSD l'attribut Section:StartNode pour qu'il soit correct. Je ne peux pas le modifier directement dans le ecore car le xsd va forcément évoluer et il faudra que je regénère le ecore inévitablement.

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Pour ton attribut Index, renseigne-toi sur xsd:ID.

    Pour ton attribut StartNode, renseigne-toi sur xsd:IDREF.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut
    Merci beaucoup pour ta réponse.
    J'avais bien repéré ces deux notations, et j'ai même fait quelques essais, mais je n'ai pas réussi à avoir ce que je voulais alors j'ai conclu que ce n'était pas la bonne voie.

    Mais sur tes bons conseils, je vais de nouveau regarder ça de près car j'ai peut être bien fais une boulette lors de mes tests. Et puis j'ai bien épluché la doc w3C, je ne vois vraiment pas ce qui conviendrait.

    Je vous tiens au courant.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut
    Bonjour,
    Alors j'ai réussi à utiliser ID et IDREF, mais je suis confronté à 2 problèmes.

    Pour être plus clair, voici un bout de mon xsd initial (avant ID/IDREF ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    	<xsd:complexType name="Typ_Node">
    		<xsd:attribute name="IndexNode" type="integer"
    			use="required" />
    		<xsd:attribute name="Name" type="string" />
    		<xsd:attribute name="X" type="float" default="0.0"
    			use="optional" />
    		<xsd:attribute name="Y" type="float" default="0.0"
    			use="optional" />
    		<xsd:attribute name="Z" type="float" default="0.0"
    			use="optional" />
    	</xsd:complexType>
     
     
    	<xsd:complexType name="Typ_Section">
    		<xsd:attribute name="Index" type="integer" use="required" />
    		<xsd:attribute name="Name" type="string" />
    		<xsd:attribute name="StartNode" type="integer"
    			use="required" ecore:reference="egis:Typ_Node" ecore:opposite="IndexNode" />
    		<xsd:attribute name="EndNode" type="integer"
    			use="required" ecore:reference="egis:Typ_Node" ecore:opposite="IndexNode"/>
    	</xsd:complexType>
    Je pense et j'espère que c'est assez clair : une section c'est un segment avec un noeud de départ et un noeud d'arrivé => StartNode et EndNode.
    Je veux que chacun face référence à l'index d'un noeud (Typ_Node) existant.
    Ca n'apparait pas ici mais j'ai bien fait les Key et KeyRef et c'est OK ca marche.

    Là, ce que je veux c'est que l'utilisateur puisse saisir à la main le source XML en entrant explicitement le numéro de l'index d'un noeud, par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      <System>
        <Node Index="1"/>
        <Node Index="2"/>
        <Section StartNode="1" EndNode="2"/>
      </System>
    Les problèmes avec ID et IDREF :
    • Les valeurs de ID doivent être formatées idvalue#
    • Je n'arrive pas à référencer 2 fois un noeud car j'ai deux fois le même nom d'attribut



    Voici le xsd avec ID/IDREF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    	<xsd:complexType name="Typ_Node">
    		<xsd:attribute name="IndexNode" type="ID"
    			use="required" />
    		<xsd:attribute name="Name" type="string" />
    		<xsd:attribute name="X" type="float" default="0.0"
    			use="optional" />
    		<xsd:attribute name="Y" type="float" default="0.0"
    			use="optional" />
    		<xsd:attribute name="Z" type="float" default="0.0"
    			use="optional" />
    	</xsd:complexType>
     
     
    	<xsd:complexType name="Typ_Section">
    		<xsd:attribute name="Index" type="integer" use="required" />
    		<xsd:attribute name="Name" type="string" />
    		<xsd:attribute name="IndexNode" type="IDREF"
    			use="required" ecore:reference="egis:Typ_Node" ecore:opposite="IndexNode" />
    		<xsd:attribute name="IndexNode" type="IDREF"          ==========> IMPOSSIBLE
    			use="required" ecore:reference="egis:Typ_Node" ecore:opposite="IndexNode"/>
    	</xsd:complexType>
    et le xml correspondant (si c'était possible avec EndNode) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      <System>
        <Node Index="idvalue1"/>
        <Node Index="idvalue2"/>
        <Section StartNode="idvalue1" EndNode="idvalue2"/>
      </System>
    Bon je sais que je dois pouvoir contourner le pb n°2 en faisant un deuxieme type complexe "TypNode2", mais ça ne résoud pas le 1er pb et ça me plaît pas trop.

    Ouf ! Désolé que ce soit si long, c'est pour être le plus clair possible.
    Merci.

Discussions similaires

  1. [XSD] Gérer les clés étrangères dans un ficher XSD
    Par fioreT dans le forum Valider
    Réponses: 4
    Dernier message: 21/05/2012, 22h15
  2. [XML/XSD] Insertion de html dans fichier XML
    Par castaka dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 20/11/2007, 09h24
  3. insertion dans table avec plusieurs clés étrangères
    Par philippe281281 dans le forum Administration
    Réponses: 2
    Dernier message: 14/06/2006, 18h35
  4. [XSD] [XML Schema]Validation sans mettre le xsd dans le xml
    Par sikapoch dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 07/06/2006, 14h23
  5. [XSD] Ecriture d'un byte dans un XML
    Par Doodoo256 dans le forum Valider
    Réponses: 2
    Dernier message: 14/03/2006, 15h10

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