Partage
  • Partager sur Facebook
  • Partager sur Twitter

[XSD] Comment gérer plusieurs éléments du même nom ?

Sujet résolu
    27 octobre 2009 à 11:03:25

    Bonjour,

    Comme l'intitulé le montre, je cherche à gérer plusieurs éléments du même nom dans un schéma XML. Je m'explique. En fait, j'ai le fichier XML que je vous ai copié collé plus loin qui comprend un élément de type complexe "adresse" contenant des éléments fils (rue, codePostal, ville et pays). Mais plus loin, on retrouve un élément du même nom qui est un élément de type simple ! Donc en construisant mon schéma XML (par clonage), je déclare adresse en tant qu'élément simple mais après je dois aussi le déclarer en type complexe de ce fait là et forcément, ça ne peut pas fonctionner car NetBeans me dit qu'il y a deux éléments qui portent le même nom ! Donc, étant débutante, je suis vraiment bloquée pour ce problème... Quelqu'un aurait-il une idée pour m'aider ?? Merci d'avance !!! :)

    Voici le fichier XML :

    <Librairie>
    
       <nom>Librairie Un</nom>
       <adresse>
         <rue> Rue 1</rue>
         <codePostal>XXXXX</codePostal>
         <ville>ville1</ville>
         <pays>france</pays>
       </adresse>
    
       <auteurs>
         <auteur auteur="hugo" tgenre="r p">
            <identite>
              <nom>hugo</nom>
              <prenom>victor</prenom>
            </identite>
            <adresse>Paris</adresse>
         </auteur>
    
         <auteur auteur="king" tgenre="h">
           <identite>
             <nom>King</nom>
             <prenom>Stephen</prenom>
           </identite>
           <adresse>New York</adresse>
         </auteur>
       </auteurs>
    
       <genres>
         <genre genre="h">horreur</genre>
         <genre genre="p">poesie</genre>
         <genre genre="r">roman</genre>
       </genres>
    
       <Livres>
         <titre ecrivain="hugo" typelivre="r">Notre Dame de Paris</titre>
         <titre ecrivain="king" typelivre="h">Bazaar</titre>
         <titre ecrivain="king" typelivre="h">Jessie</titre>
       </Livres>
    
    </Librairie>
    
    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2009 à 11:08:59

      balises code et un peu d'identation... par pitié pour nos yeux :'(


      ensuite, il faudrait nous montrer ton xsd, la gestion des portées est normalement là pour éviter ce genre de problème ^^
      • Partager sur Facebook
      • Partager sur Twitter
        27 octobre 2009 à 11:28:07

        Oui pardon en copiant collant tout s'est aligné de cette façon. Mais là dès l'aperçu il me remet toujours mon code de cette manière. Je suis désolée je suis nouvelle ici et donc je ne connais pas toutes les fonctionnalités :(

        Sinon, pour le XSD, là j'ai essayé de définir mon élément adresse en tant que type complexe et en précisant que ses éléments fils peuvent ou non apparaitre (avec minOccurs). Mais bon toujours le même souci. Il veut que je distingue l'élément de type simple de l'élément complexe. Normal quoi. Voici le schéma XML :

        <?xml version="1.0" encoding="UTF-8"?>
        
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        
        <xsd:element name="rue" type="xsd:string"></xsd:element>
        <xsd:element name="codePostal" type="xsd:string"></xsd:element>
        <xsd:element name="ville" type="xsd:string"></xsd:element>
        <xsd:element name="pays" type="xsd:string"></xsd:element>
        <xsd:element name="nom" type="xsd:string"></xsd:element>
        <xsd:element name="prenom" type="xsd:string"></xsd:element>
        
        <xsd:group name='ContenuAdresse'>
        <xsd:sequence>
        	<xsd:element ref="rue" minOccurs="0" maxOccurs="unbounded"></xsd:element>
        	<xsd:element ref="codePostal" minOccurs="0" maxOccurs="unbounded"></xsd:element>
        	<xsd:element ref="ville" minOccurs="0" maxOccurs="unbounded"></xsd:element>
            <xsd:element ref="pays" minOccurs="0" maxOccurs="unbounded"></xsd:element>
        </xsd:sequence>
        </xsd:group>
        
        <xsd:group name='ContenuIdentite'>
        <xsd:sequence>
        	<xsd:element ref="nom"></xsd:element>
        	<xsd:element ref="prenom"></xsd:element>
        </xsd:sequence>
        </xsd:group>
        
        <xsd:element name="adresse">
        <xsd:complexType>
        	<xsd:group ref='ContenuAdresse'/>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="identite">
        <xsd:complexType>
        	<xsd:group ref='ContenuIdentite'/>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="auteur">
        <xsd:complexType>
        <xsd:sequence>
        	<xsd:element ref="identite" ></xsd:element>
            <xsd:element ref="adresse" ></xsd:element>
        </xsd:sequence>
            <xsd:attribute name="auteur" type="xsd:ID" use="required"></xsd:attribute>
            <xsd:attribute name="tgenre" type="xsd:IDREFS" use="required"></xsd:attribute>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="auteurs">
        <xsd:complexType>
        <xsd:sequence>
        	<xsd:element ref="auteur" ></xsd:element>
        </xsd:sequence>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="genre">
        <xsd:complexType>
            <xsd:attribute name="genre" type="xsd:ID" use="required"></xsd:attribute>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="genres">
        <xsd:complexType>
        <xsd:sequence>
        	<xsd:element ref="genre" ></xsd:element>
        </xsd:sequence>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="titre">
        <xsd:complexType>
            <xsd:attribute name="ecrivain" type="xsd:IDREF" use="required"></xsd:attribute>
            <xsd:attribute name="typelivre" type="xsd:IDREF" use="required"></xsd:attribute>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="Livres">
        <xsd:complexType>
        <xsd:sequence>
        	<xsd:element ref="titre" ></xsd:element>
        </xsd:sequence>
        </xsd:complexType>
        </xsd:element>
        
        <xsd:element name="Librairie">
        <xsd:complexType>
        <xsd:sequence>
            <xsd:element ref="nom"></xsd:element>
            <xsd:element ref="adresse"></xsd:element>
            <xsd:element ref="auteurs"></xsd:element>
            <xsd:element ref="genres"></xsd:element>
            <xsd:element ref="Livres"></xsd:element>
        </xsd:sequence>
        </xsd:complexType>
        </xsd:element>
        
        </xsd:schema>
        
        • Partager sur Facebook
        • Partager sur Twitter
          27 octobre 2009 à 11:44:39

          il suffit d'utiliser les balises <code type="xml"></code>


          essaies de n'avoir qu'un xs:element à la racine de ton xsd, avec éventuellement des types prédéfinis au même niveau...

          • Partager sur Facebook
          • Partager sur Twitter
            27 octobre 2009 à 11:51:03

            Merci pour l'info. J'ai mis à jour mon premier post pour que le code soit plus clair :) Sinon que veux-tu dire par "essaies de n'avoir qu'un xs:element à la racine de ton xsd, avec éventuellement des types prédéfinis au même niveau..." ??
            • Partager sur Facebook
            • Partager sur Twitter
              27 octobre 2009 à 12:04:47

              fais-le aussi pour le xsd stp :D


              je veux dire qu'a priori un fichier xml est composée d'une unique racine, et que dans ma façon de concevoir un schema xml, je ne mets toujours d'un seul xsd:element en fils de xsd:schema... en revanche, on peut abuser des définitions de type préalable à la déclaration de la balise racine, afin de simplifier ce qui va être inclus dans la racine ;)


              petit exemple que j'avais mis pour illustrer un article
              http://djibril.developpez.com/tutoriel [...] l-xml/#LIII-1
              • Partager sur Facebook
              • Partager sur Twitter
                27 octobre 2009 à 12:13:56

                Voilà la mise à jour a été faite ;) J'ai été voir ton lien, en fait j'ai l'impression que tu procèdes par imbrication. Si tu veux, en ce qui me concerne, le fichier que j'ai donné est extrait d'un projet d'école et notre prof veut impérativement que l'on bosse par clonage au niveau des schémas d'où la déclaration de beaucoup de <xsd:element...>.
                • Partager sur Facebook
                • Partager sur Twitter
                  28 octobre 2009 à 16:09:30

                  Bonjour !

                  Le problème est résolu !!!! En fait, je devais en effet déclarer un élément adresse de type complexe au contenu simple et lors de la déclaration de l'élément "auteur", je faisais référence à <adresse> ('ref="adresse"') alors que je devais faire un 'name="adresse"' pour préciser que c'était un nouvel élément à ne pas confondre avec l'autre élément adresse ayant un contenu.

                  J'ai aussi repéré une autre erreur dans le schéma que j'ai posté. A un moment je déclare des éléments ayant un ou plusieurs attributs ne contenant aucun autre élément (donc élément complexe au contenu simple) et ma déclaration était fausse. Par exemple, pour l'élément titre, nous avons ceci :

                  <xsd:element name="titre">
                  <xsd:complexType>
                  <xsd:simpleContent>
                      <xsd:extension base="xsd:string">
                          <xsd:attribute name="ecrivain" type="xsd:IDREF" use="required"></xsd:attribute>
                          <xsd:attribute name="typelivre" type="xsd:IDREF" use="required"></xsd:attribute>
                      </xsd:extension>
                  </xsd:simpleContent>
                  </xsd:complexType>
                  </xsd:element>
                  


                  En tout cas, merci d'avoir pris le temps de m'aider.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 mai 2019 à 14:33:53

                    Bonjour j'aimerais que quelqu'un m'aide j'ai un code en xml que j'aimerais le faire en xsd le code:

                    <diplômes>

                    <obtention année="2009_2010">........</obtention>

                    <obtention année="2010_2011">......</obtention>

                    <obtention année="2011_2012">......</obtention>

                    </diplômes>

                    Merci.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [XSD] Comment gérer plusieurs éléments du même nom ?

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown