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

XML/XSL et SOAP Discussion :

Eléments de même noms avec attributs différents


Sujet :

XML/XSL et SOAP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 10
    Points
    10
    Par défaut Eléments de même noms avec attributs différents
    Bonjour à tous,

    je dois valider un message XML reçu par une application web. Ce message contient une séquence du type suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    			<racine>
    				<element nom="latitude" valeur="47"/>
    				<element nom="longitude" valeur="0.12"/>
    				<element nom="code" valeur="5497F"/>
    			</racine>
    Le problème, c'est que l'un de ces éléments (code) est facultatif tandis que les deux autres (latitude et longitude) sont obligatoires.
    J'ai essayé ceci:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    	<xsd:element name="racine">
       		<xsd:complexType>				
     
    		   <xsd:sequence>
    		   		<xsd:element name="element ">
    			   		<xsd:complexType>				
    						<xsd:attribute name="nom" use="required">
    							<xsd:simpleType>
    				                <xsd:restriction base="xsd:string">
    				                    <xsd:enumeration value="latitude"/>
    				                </xsd:restriction>
    				            </xsd:simpleType>
    						</xsd:attribute>
    						<xsd:attribute name="valeur" use="required"></xsd:attribute>
    					</xsd:complexType>
    				</xsd:element>	
     
    				<xsd:element name="element ">
    			   		<xsd:complexType>				
    						<xsd:attribute name="nom" use="required">
    							<xsd:simpleType>
    				                <xsd:restriction base="xsd:string">
    				                    <xsd:enumeration value="longitude"/>
    				                </xsd:restriction>
    				            </xsd:simpleType>
    						</xsd:attribute>
    						<xsd:attribute name="valeur" use="required"></xsd:attribute>
    					</xsd:complexType>
    				</xsd:element>
     
    				<xsd:element name="element " minOccurs="0">
    			   		<xsd:complexType>				
    						<xsd:attribute name="nom" use="required">
    							<xsd:simpleType>
    				                <xsd:restriction base="xsd:string">
    				                    <xsd:enumeration value="code"/>
    				                </xsd:restriction>
    				            </xsd:simpleType>
    						</xsd:attribute>
    						<xsd:attribute name="valeur" use="required"></xsd:attribute>
    					</xsd:complexType>
    				</xsd:element>
     
    		   </xsd:sequence>
     
    		</xsd:complexType>
     
    	</xsd:element>
    Seulement, le validateur d'Eclipse renvoie une erreur: Multiple elements with name 'element', with different types.

    Une idée ?

    Merci d'avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    J'ai trouvé un début de réponse ici: http://stackoverflow.com/questions/2...-xsdchoice-ele

    Cela dit, si quelqu'un a une meilleure solution, je reste preneur

  3. #3
    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
    J'ai trouvé un début de réponse ici: http://stackoverflow.com/questions/2...-xsdchoice-ele
    Si vous connaissez xsd 1.1, tant soit peu, et que xsd 1.1 opérationellement vous convient aussi, je peux vous donner des avis, en effet. Le post le monsieur respectable y donné est bonne en maint aspect mais pas exactement une solution pour le problème ici présent. Comment voulez vous faire sortir la bonne cardinalité de chaque @nom recevable ?

    Voici ce que vous pouvez faire.
    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
    15
    16
    17
    18
    19
    20
    <xs:element name="racine" type="racineType" />
    <xs:complexType name="racineType">
        <xs:sequence>
            <xs:element name="element" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:attribute name="nom" use="required">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="latitude" />
                                <xs:enumeration value="longitude" />
                                <xs:enumeration value="code" />
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:attribute>
                    <xs:attribute name="valeur" use="required" type="xs:string" />				
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:assert test="count(element[@nom='latitude'])=1 and count(element[@nom='longitude'])=1 and count(element) &lt;= 3" />
    </xs:complexType>
    Variations sont possibles en respectant le raisonnement directeur.

    Je pense la façon de construire le document n'est pas très bonne, voire contre-productive. On prends la façon de construire le schéma typique comme
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:element name="x" />
    et transpose directement en xml des données comme
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <element nom="x" />
    On peut le faire, mais c'est contre-productif. Il vaut mieux adopter une approche plus directe sans tournure inutile, comme :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <latitude valeur="47" />
    <longitude valeur="0.12" />
    à titre d'exemple. Et la conséquence est que le xsd se construit beaucoup plus facilement en xsd 1.0.

    Avec cette obsérvation, je peux proposer aussi de faire une validation tout en restant sur xslt 1.0 et xsd 1.0 par un processus en tandem : d'abord transformer le xml original en une forme dessus par une transformation qui est facile à construire; et puis construire un xsd 1.0 pour le valider. Le processus en deux étapes reste toujours en mémoire, pas nécessaire de sortir aucun fichier physique. C'est faisable et conceptuellement intéressant aussi.

    Voilà !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 10
    Points
    10
    Par défaut
    Bonjour tsuji, et merci pour ta réponse !

    Effectivement, transformer le xml en quelque chose du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <latitude valeur="47" />
    <longitude valeur="0.12" />
    me paraît être une bonne solution.

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

Discussions similaires

  1. JAX-WS avec même nom d'attributs dans différents XSD
    Par Invité dans le forum Services Web
    Réponses: 0
    Dernier message: 16/07/2013, 21h34
  2. [XSD] attribut même nom avec valeur unique
    Par tiger360 dans le forum Valider
    Réponses: 4
    Dernier message: 08/01/2012, 22h32
  3. [WD-2000] Attribuer même nom à 2 signets différents
    Par tamyme dans le forum Word
    Réponses: 17
    Dernier message: 16/08/2010, 11h54
  4. Réponses: 2
    Dernier message: 24/02/2008, 14h46
  5. Réponses: 2
    Dernier message: 21/09/2007, 15h40

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