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 :

multiple élément avec le même nom invalide


Sujet :

Valider XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut multiple élément avec le même nom invalide
    Bonjour,

    Je dois respecter une spécification exigeant d'avoir plusieurs blocs xml portant le même nom.

    Voici, ce que j'aimerais comme structure 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
    <?xml version="1.0" encoding="utf-8"?>
    <xml>
    <Content>
    <libellenom>
     <ss_nom1 />
    <ss_nom2>str1234</ss_nom2>
    </libellenom>
    <libellenom>
    <ss_nom1 />
    <ss_nom2 />
    <ss_nom3 />
     <ss_nom4 />
        </libellenom>
        <libellenom>
          <ss_nom1 />
          <ss_nom2 />
        </libellenom>
      </Content>
    </xml>
    et voici une partie du schéma xsd :

    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
    31
    32
    	<!-- CONTENT -->
    	<xs:complexType name="ContentType">
    	<xs:sequence>
    		<xs:element name="libellenom" type="type1" minOccurs="0" maxOccurs="unbounded"/>
    		<xs:element name="libellenom" type="type2" minOccurs="0" maxOccurs="unbounded"/>
    		<xs:element name="libellenom" type="type3" minOccurs="0" maxOccurs="unbounded"/>
    	</xs:sequence>
    	</xs:complexType>
     
    	<xs:complexType name="type1">
    		<xs:sequence>
    			<xs:element name="ss_nom1" nillable="false"/>
    			<xs:element name="ss_nom2" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
    		</xs:sequence>
    	</xs:complexType>
     
    	<xs:complexType name="type2">
    		<xs:sequence>
    			<xs:element name="ss_nom1" nillable="false"/>
    			<xs:element name="ss_nom2"/>
    			<xs:element name="ss_nom3"/>
    			<xs:element name="ss_nom4"/>
    		</xs:sequence>
    	</xs:complexType>
     
    	<xs:complexType name="type3">
    		<xs:sequence>
    			<xs:element name="ss_nom1" nillable="false"/>
    			<xs:element name="ss_nom2"/>
    		</xs:sequence>
    	</xs:complexType>
    </xs:schema>
    je ne parviens pas à valider ce schéma comme plusieurs éléments d'une même séquence portent le même nom et ne possédent pas le même type,
    mais n'y aurait-il pas un moyen de contourner cela pour parvenir à forcer sa validation ?

    Cordialement,

  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
    Dans le cadre de w3c schéma, ce n'est permis que de faire un "markup" lié à la validation (xsi:type) dans l'instance du document xml en outre.

    [1] Dans le document xml, c'est fait comme ça.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <libellenom xsi:type="type1">
        <ss_nom1 />
        <ss_nom2>str1234</ss_nom2>
    </libellenom>
    <libellenom xsl:type="type2">
        <ss_nom1 />
        <ss_nom2 />
        <ss_nom3 />
        <ss_nom4 />
    </libellenom>
    <libellenom xsi:type="type3">
        <ss_nom1 />
        <ss_nom2 />
    </libellenom>
    [1.1] Pourqu'on puisse référencier le préfixe xsi plus éfficacement, dans la racine on fait la déclaration nécessaire :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    [1.2] Juste une chose à côté, la balise nommée "xml" j'ai intention de faire une remarque : mais finalement j'opte à se taire et ce n'est pas la place de le faire et je passe.

    [2] Dans le schéma, on fait comme ça pourqu'il marche.
    Code xsd : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	<!-- CONTENT -->
    	<xs:complexType name="ContentType">
    	<xs:sequence>
    		<xs:element name="libellenom" minOccurs="0" maxOccurs="unbounded"/>
    	</xs:sequence>
    	</xs:complexType>
    et laisse le reste tranquille.
    [2.1] Voyez qu'on éffectivement laisse libellenom sans l'attribut de type explicitement ce que signifie il est d'un type d'ou tous les types dérivent. Dans une instance du document, le concepteur doit mettre le "markup" comme dit en haut si encore que le concepteur a l'intention de le faire valider au sens le plus strict, le premier type1, le deuxième type2 etc.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci tsuji pour ta réponse ,

    Je crois que la solution que tu proposes ne puisse me convenir, car mon xml idéal présenté dans mon premier poste, doit être créé par un générateur d'xml à partir d'un fichier xsd, celui-ci très proche de l'exemple que j'ai présenté précédemment.

    Donc je suis dans l'incapacité d'ajouter la déclaration que tu indiques en entête du fichier xml généré.

    De plus ke suis bien obligé de conserver le type de chaque élément portant le meme nom dans le xsd,
    car ces types font appel à des "complextypes" qui leurs encapsulent des éléments différents les uns des autres.

    Ce que je souhaite c'est qu'avec mon xsd, détaillant une liste d'élément portant le même nom et étant de type différents je puisse parvenir
    à générer un xml,
    Car ce xsd me fait rencontrer une erreur me prétextant : "Multiple definition of element 'TabHeader' causes the content model to become ambiguous. A content model must be formed such that during validation of an element information item sequence, the particle contained directly,[...]"
    sur ce site http://www.xsd2xml.com/.

    Existerait-il un moyen de contourner cette restriction du w3c schéma

    Cordialement,

    ToTEm39.

Discussions similaires

  1. Citation avec le même Nom d'auteur et la même année !
    Par mtanana dans le forum Bibliographies - Index - Glossaires
    Réponses: 2
    Dernier message: 24/03/2009, 12h11
  2. Réponses: 3
    Dernier message: 29/12/2008, 16h22
  3. Deux instances avec le même nom.
    Par Denn's dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/03/2008, 10h09
  4. Problème pour différencier plusieurs select avec le même nom
    Par vallica dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/04/2006, 12h35
  5. Interfaces avec le même nom
    Par myuils dans le forum Langage
    Réponses: 2
    Dernier message: 09/11/2004, 19h18

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