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 :

Balises xml ayant le même nom mais avec des parents différents [XSD]


Sujet :

Valider XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut Balises xml ayant le même nom mais avec des parents différents
    Bonjour,

    Je souhaiterais créer un fichier dtd ou xsd pour des fichiers xml qui contiennent plusieurs balises au nom identique mais avec des parents différents. J'ai eu beau chercher, je n'ai rien trouvé qui traite de ce cas particulier. J'ai bien trouvé un post qui posait le même problème mais pas vraiment de réponse.

    Voici un exemple de xml :

    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
     
    <chapitre> 
     
         <titre_chapitre>Titre du chapitre</titre_chapitre> 
     
         <contenu>
     
    			<titre>Titre du chapitre</titre> 
    			<paragraphe>Lorem ipsum dolor si...</paragraphe> 
    			<paragraphe>Lorem ipsum dolor si...</paragraphe> 
    			<paragraphe>Lorem ipsum dolor si...</paragraphe> 
    			... 
     
    			<encadre titre="Titre de l'encadre"> 
                     <paragraphe id="1">Lorem ipsum dolor si...</paragraphe> 
                     <paragraphe id="2">Lorem ipsum dolor si...</paragraphe> 
                     .... 
    			</encadre> 
     
    	</contenu>
     
    </chapitre>
    Dans ce magnifique exemple (que j'ai copié aussi et adapté à mon cas), on peut voir que <paragraphe> peut avoir <contenu> ou <encadre> comme parents. Mon souci est qu'il s'agit bien de 2 balises différentes (l'une a un attribut, l'autre pas)

    De même, <titre> peut être une balise ou un attribut.

    Je ne sais absolument pas comment représenter ça sous forme de schéma dtd ou xsd.

    Pour résumer, j'aimerais prendre en compte :

    - l'existence de deux balises différentes mais de nom identique
    - l'existence de deux objets de type différents (élément/attribut) mais de nom identique

    Avec un dtd :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <!ELEMENT chapitre (titre_chapitre,contenu)>
    <!ELEMENT titre_chapitre (#PCDATA)>
    <!ELEMENT contenu (titre,paragraphe*,encadre)>
    <!ELEMENT titre (#PCDATA)>
    <!ELEMENT paragraphe (#PCDATA)>
    <!ELEMENT encadre (paragraphe)>
    <!ATTLIST paragraphe 
    	id CDATA #IMPLIED >
    <!ATTLIST encadre 
    	titre CDATA #IMPLIED >
    J'aurais mis ça, mais ça m'imbrique des paragraphes dans d'autres paragraphes...
    Pour le XSD, je viens de commencer, mais dès que j'essaie de nommer deux fois le même élément, la validation renvoie une erreur, même si je les type différemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xs:element name="paragraphe" type="xs:string"/>
    <xs:element name="paragraphe" type="ct_paragraphe"/>
    <xs:complexType name="ct_paragraphe">
      <xs:simpleContent>
        <xs:extension base="xs:string">
    		<xs:attribute name="id" type="xs:integer"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
    Il paraît que c'est possible, quelqu'un sait comment?
    merci

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    en XML schema ?

    Aucune difficulté il te suffit de faire une déclaration complète à l'intérieur du parent.
    C'est basique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    Bon, j'ai essayé mais toujours la même erreur...

    Donc j'ai tenté de faire un test simple, en essayant de créer un xsd pour un xml bateau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <root>
    <niveau1 att="test">
    	<balise>valeur</balise>
    </niveau1>
    </root>
    XSD associé :

    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
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
    <xs:element name="root">
    	<xs:complexType>
    		<xs:sequence>
    			<xs:element name="niveau1">
    			<xs:complexType>
    				<xs:sequence>
    					<xs:element name="balise" type="xs:string"/>
    				</xs:sequence>
    				<xs:attribute name="att" type="xs:string"/>
    			</xs:complexType>
    			</xs:element>
    		</xs:sequence>
    	</xs:complexType>
    </xs:element>
     
    </xs:schema>
    Peut-être pas tout à fait juste mais ça fonctionne.
    2è étape, j'augmente à peine la difficulté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <root>
    <niveau1 att="test">
    	<balise>valeur</balise>
    </niveau1>
    <niveau2>
    	<balise>autre valeur</balise>
    </niveau2>
    </root>
    C'est-à-dire que j'ajoute une balise <balise> avec un parent différent.
    Le xsd associé, donnerait ça d'après moi :

    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
    23
    24
    25
    26
    27
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
    <xs:element name="root">
    	<xs:complexType>
    		<xs:sequence>
    			<xs:element name="niveau1">
    			<xs:complexType>
    				<xs:sequence>
    					<xs:element name="balise" type="xs:string"/>
    				</xs:sequence>
    				<xs:attribute name="att" type="xs:string"/>
    			</xs:complexType>
    			</xs:element>
    			<xs:element name="niveau2">
    				<xs:complexType>
    					<xs:sequence>
    						<xs:element name="balise" type="xs:string"/>
    					</xs:sequence>
    				</xs:complexType>
    			</xs:element>
    		</xs:sequence>
    	</xs:complexType>
    </xs:element>
     
    </xs:schema>
    Et là,

    Si j'ai mal construit ce xsd a priori tout simple, ça ne m'étonne pas que je me plante sur des fichiers plus conséquents...

    Une âme charitable pourrait-elle me dire où se trouve mon erreur ?
    Merci d'avance!

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Marche bien chez moi

    Quel parseur utilises-tu ?

    Pour illustrer la suite sur un XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
    	<niveau1 att="test">
    		<balise>valeur</balise>
    	</niveau1>
    	<niveau2>
    		<balise>
    			<e>autre valeur</e>
    		</balise>
    	</niveau2>
    </root>
    le XSD sera
    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
    23
    24
    25
    26
    27
    28
    29
    30
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    	<xs:element name="root">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="niveau1">
    					<xs:complexType>
    						<xs:sequence>
    							<xs:element name="balise" type="xs:string"/>
    						</xs:sequence>
    						<xs:attribute name="att" type="xs:string"/>
    					</xs:complexType>
    				</xs:element>
    				<xs:element name="niveau2">
    					<xs:complexType>
    						<xs:sequence>
    							<xs:element name="balise">
    								<xs:complexType>
    									<xs:sequence>
    										<xs:element name="e" type="xs:string"/>
    									</xs:sequence>
    								</xs:complexType>
    							</xs:element>
    						</xs:sequence>
    					</xs:complexType>
    				</xs:element>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>
    </xs:schema>
    On a bien deux balises de même nom avec des parents différentes, on aurait aussi pu déclarer leur type en global

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    ok, si ça marche bien chez toi, le problème vient de mon outil alors.

    En fait, j'utilise un etl (Data Integrator de Business Object) qui nécessite un dtd ou un xsd pour traiter des fichiers de type xml : pour lire un fichier xml, il faut d'abord lui associer un fichier de format.

    J'ai souvent utilisé cet outil pour travailler avec des xml, et je n'ai jamais rencontré de problèmes jusqu'à aujourd'hui.

    Etant donné l'erreur qu'il renvoie dès que j'essaie de visualiser le second fichier xml (avec les deux balises) en lui associant le xsd précédemment décrit (XML Parser failed) j'ai supposé que l'erreur venait de l'adéquation entre le fichier xml et le fichier xsd. Or, si tu me dis qu'il n'y a pas de problème, c'est certainement que l'outil ne gère pas ce genre de cas particulier...

    Juste à tout hasard et pour une dernière tentative désespérée, peux-tu me donner une version dtd pour le second xml? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <root>
    <niveau1 att="test">
    	<balise>valeur</balise>
    </niveau1>
    <niveau2>
    	<balise>autre valeur</balise>
    </niveau2>
    </root>
    Je ne sais pas du tout comment créer le dtd...
    J'ai bien testé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <!ELEMENT root (niveau1,niveau2) >
    <!ELEMENT niveau1 (balise) >
    <!ELEMENT balise (#PCDATA) >
    <!ELEMENT niveau2 (balise) >
    <!ATTLIST niveau1
    	att CDATA #IMPLIED >
    mais toujours la même erreur...

    Encore merci de l'intérêt que tu portes à mon souci!

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par tinwul Voir le message
    ok, si ça marche bien chez toi, le problème vient de mon outil alors.
    Ou de ton XML, est tu sûr qu'il est bien formé ?Est-ce que ta version a bien une entête contrairement à ce que tu postes sur le forum, certains parseurs l'exigent.
    Parce que cela n'a rien de particulier comme XML Schema, c'est même très banal...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    Effectivement, mon xml n'avait pas d'entête. Mais la première version fonctionnait bien sans.
    Bizarrement, en ajoutant l'entête, la seconde version fonctionne bien également.

    C'est très bizarre comme comportement...
    Enfin, ça me laisse un espoir, je vais augmenter la difficulté (je n'ai pas encore testé le typage différent ==< même nom de balise, un attribut et un élément) et voir ce que ça donne!

    Merci encore!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/07/2012, 11h59
  2. Réponses: 4
    Dernier message: 27/06/2012, 20h40
  3. Réponses: 2
    Dernier message: 25/01/2012, 17h57
  4. Comptage dans la même table mais avec des conditions différentes
    Par V i n c e n t dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/08/2010, 14h12
  5. [Débutant] Tracé sur même figure mais avec des ordonnées différentes
    Par telecofr dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/10/2009, 16h28

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