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 :

problème de validation


Sujet :

Valider XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut problème de validation
    Bonjour,

    Je débute avec XML/XSD.
    Je rencontre des difficultés lors de la validation du fichier XSD, je n'ai notamment pas compris l'utilisation de complexType et simpleType.


    Voici le fichier 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?xml version="1.0" encoding="utf-8"?>
     
    <intervention nomintervention="vidange" nombreemecaniciens="1"
    xmlns="http://www.w3schools.com"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.w3schools.com intervention.xsd">
     
    	<dureetauxhoraire1 unite="heures">1</dureetauxhoraire1>
     
    	<dureetauxhoraire2 unite="heures">0</dureetauxhoraire2>	
     
    	<piece nompiece="filtre">
    		<quantite unite="filtre">1</quantite>	
    	</piece>
     
    	<piece nompiece="joint">
    		<quantite unite="joint">1</quantite>	
    	</piece>
     
    	<piece nompiece="huile">
    		<quantite unite="litre">4</quantite>	
    	</piece>
     
    	<instructions>
    		<etape>Dévisser le bouchon de vidange à l'aide d'une clé de 13</etape>
    		<etape>Faire couler l'huile usagée</etape>
    		<etape>Revisser le bouchon de vidange</etape>
    		<etape>Dévisser le bouchon moteur et vider l'huile neuve</etape>
    		<etape>Faire le niveau et reboucher</etape>
    	</instructions>
     
    </intervention>
    et le fichier XSD suivant :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?xml version="1.0" encoding="UTF-8"?>
     
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.w3schools.com"
    xmlns="http://www.w3schools.com"
    elementFormDefault="qualified">
     
    <xs:element name="intervention">
     
    	<xs:complexType>
     
    	<xs:sequence>
     
    		<xs:element name="dureetauxhoraire1" minOccurs="1" maxOccurs="1">
    			<xs:complexType>
    				<xs:attribute name="unite" use="required">
    					<xs:simpleType>
    						<xs:restriction base="xs:string">
    							<xs:enumeration value="secondes"/>
    							<xs:enumeration value="minutes"/>
    							<xs:enumeration value="heures"/>
    						</xs:restriction>
    					</xs:simpleType>
    				</xs:attribute>
    			</xs:complexType>
    		</xs:element>
     
     
    		<xs:element name="dureetauxhoraire2" minOccurs="1" maxOccurs="1">
    			<xs:complexType>
    				<xs:attribute name="unite" use="required">
    					<xs:simpleType>
    						<xs:restriction base="xs:string">
    							<xs:enumeration value="secondes"/>
    							<xs:enumeration value="minutes"/>
    							<xs:enumeration value="heures"/>
    						</xs:restriction>
    					</xs:simpleType>
    				</xs:attribute>
    			</xs:complexType>
    		</xs:element>
     
     
    		<xs:element name="piece" minOccurs="2" maxOccurs="10">
    			<xs:complexType>
    				<xs:attribute name="nompiece" type="xs:string" use="required">
    					<xs:element name="quantite">	
    						<xs:complexType>
    							<xs:attribute name="unite" type="xs:string" use="required"/>
    						</xs:complexType>
    					</xs:element>
    				</xs:attribute>
    			</xs:complexType>
    		</xs:element>
     
     
    		<xs:element name="instructions" minOccurs="1" maxOccurs="1">
    			<xs:simpleType>
    				<xs:element name="etape" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
    			</xs:simpleType>
    		</xs:element>
     
     
    	</xs:sequence>
     
    	<xs:attribute name="nomintervention" type="xs:string" use="required"/>
    	<xs:attribute name="nombreemecaniciens" type="xs:integer" use="required"/>
     
    	</xs:complexType>
     
    </xs:element>
     
    </xs:schema>

    Voici les erreurs que cela me renvoie :

    Errors in the XML document:

    8: 57 cvc-complex-type.2.1: Element 'dureetauxhoraire1' must have no character or element information item [children], because the type's content type is empty.
    10: 57 cvc-complex-type.2.1: Element 'dureetauxhoraire2' must have no character or element information item [children], because the type's content type is empty.
    14: 10 cvc-complex-type.2.1: Element 'piece' must have no character or element information item [children], because the type's content type is empty.
    18: 10 cvc-complex-type.2.1: Element 'piece' must have no character or element information item [children], because the type's content type is empty.
    22: 10 cvc-complex-type.2.1: Element 'piece' must have no character or element information item [children], because the type's content type is empty.
    30: 17 cvc-type.3.1.2: Element 'instructions' is a simple type, so it must have no element information item [children].


    Errors in file intervention.xsd:

    46: 34 s4s-elt-must-match.1: The content of 'nompiece' must match (annotation?, (simpleType?)). A problem was found starting at: element.
    57: 19 s4s-elt-must-match.1: The content of 'simpleType' must match (annotation?, (restriction | list | union)). A problem was found starting at: element.

    Auriez vous une idée de ce qui ne va pas ?
    Merci beaucoup pour votre aide !

  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
    Il y a nombreux d'erreurs, mais parmi eux souvent provenant d'erreur de conception identique. Donc, au final, un fois compris, ça se réduit à un petit nombre de cas générique.

    [1] L'élément instructions: c'est évidemment faux de le définir comme xs:simpleType. C'est évident.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xs:element name="instructions" minOccurs="1" maxOccurs="1">
        <!-- xs:simpleType -->
        <xs:complexType>
            <xs:sequence>
                <xs:element name="etape" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
        <!-- /xs:simpleType -->
    </xs:element>
    [2] L'élément piece:
    [2.1] Un attribut n'est capable d'avoir un contenu complex, donc, xs:element n'est dans aucun cas permit d'apparaître comme enfant. Il faut laisser l'attribut nompiece tout seul, et attention, d'y mettre à la fin après des définitions d'éléments enfants, si il y en a.
    [2.2] Puis, ici c'est plus générique et applicable à tous les autres éléments semblables comme dureetauxhoraire1, dureetauxhoraire2 etc. Pour un élément origalement conçu comme du type simple et puis on veut l'attacher un ou plusieurs attributs, il devient en tout cas un élément du type complexe. Mais, il garde son caractère d'avoir un contenu simple. Et les attributs font une extension pour y être définis. Partout comme dureetauxhoraire1 etc se corrige de la même façon montrée dessous.
    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
    <xs:element name="piece" minOccurs="2" maxOccurs="10">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="quantite">	
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:string">
                                <xs:attribute name="unite" type="xs:string" use="required"/>
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <!-- remettre à la fin -->
            <xs:attribute name="nompiece" type="xs:string" use="required"></xs:attribute>
        </xs:complexType>
    </xs:element>
    [3] Et ceci n'est pas une erreur: quand on considère les facets comme minOccurs="2" maxOccurs="10", on peut y voir peut-être une nécessité, mais l'engin de validation y prend parfois assez mal et le procès commande pas mal de mémoires physiques en réserve. Donc, si, en cas, ces dernières sont précieuses et si il n'y a pas de raison incontournable, il vaut mieux éviter et le relaxe un peu comme mettant maxOccurs="unbounded". Mais c'est un détail pour le mement, on dirait.

    Voilà!

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup tsuji pour ta réponse.
    Je n'ai pas très bien compris le point 2.2

    Voici ce que j'ai fait pour dureetauxhoraire1 (et qui ne marche pas) :

    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
    <xs:element name="dureetauxhoraire1" minOccurs="1" maxOccurs="1">
    	<xs:complexType>
    		<xs:sequence>
    		</xs:sequence>
    		<xs:simpleContent>
    			<xs:extension base="xs:string">
    				<xs:attribute name="unite" type="xs:string" use="required"/>						
    				<xs:simpleType>
    					<xs:restriction base="xs:string">
    						<xs:enumeration value="secondes"/>
    						<xs:enumeration value="minutes"/>
    						<xs:enumeration value="heures"/>
    					</xs:restriction>
    				</xs:simpleType>						
    			</xs:extension>	
    		</xs:simpleContent>	
    	</xs:complexType>
    </xs:element>

  4. #4
    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
    1) Enlevez lignes #2 et #3 <xs:sequence></xs:sequence>, on ne les trouve pas dans mon exemple. xs:sequence et xs:simpleContent sont mutuellement exclusifs.
    2) Et puis xs:attribut ne doit pas fermé avant d'ecriture de xs;simpleType/xs:restriction/xs:enumeration, il les enveloppe.

  5. #5
    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
    2.1) L'écriture de xs:attribute etait correcte dans le post original; mais n'est plus dans le post dernier. A part mentionné dans 2), je dois ajouter qu'il ne faut pas mettre type="xs:string" dans la ligne #7 une fois xs:attribute est corrigé d'après 2): soit on met type="xxx", soit on fait xs:simpleType/xs;restriction etc...

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ta réponse.
    J'ai enlevé type="xs:string" à la ligne <xs:attribute name="unite" type="xs:string" use="required"> et cela fonctionne à présent.

    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
    		<xs:element name="dureetauxhoraire2" minOccurs="1" maxOccurs="1">
    			<xs:complexType>
    				<xs:simpleContent>
    					<xs:extension base="xs:string">
    						<xs:attribute name="unite" use="required">					<!-- enlevé à cette ligne type="xs:string" -->		
    							<xs:simpleType>
    								<xs:restriction base="xs:string">
    									<xs:enumeration value="secondes"/>
    									<xs:enumeration value="minutes"/>
    									<xs:enumeration value="heures"/>
    								</xs:restriction>
    							</xs:simpleType>
    						</xs:attribute>						
    					</xs:extension>	
    				</xs:simpleContent>	
    			</xs:complexType>
    		</xs:element>
    Un gros merci.

Discussions similaires

  1. problème de validation de formulaire
    Par calitom dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2006, 15h12
  2. Problème de validation de données
    Par loutsky dans le forum Access
    Réponses: 3
    Dernier message: 23/11/2005, 14h11
  3. [débutante] problème de validation des méta-tags
    Par silversky dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/09/2005, 17h26
  4. problème de validation HTML
    Par silversky dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 05/09/2005, 13h47

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