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 :

Validation XML Schema


Sujet :

Valider XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 47
    Points
    47
    Par défaut Validation XML Schema
    Bonjour,

    Je ne trouve pas mon erreur pour que mon XML Schéma soit valide.

    Dans mon cas, j'ai un choix possible entre 2 attributs ainsi qu'un ajout de deux nouveaux attributs si un attribut prends une certaine valeur.

    voici donc le xml schema et un xml exemple pour que vous compreniez bien ce que je veux :

    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
     
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    	<xsd:element name="manager">
    		<xsd:complexType>
    			<xsd:sequence>
    				<xsd:element ref="testimonial" minOccurs="0" maxOccurs="unbounded"/>
    			</xsd:sequence>
    			<xsd:attribute name="author" type="xsd:string" use="required"/>
    			<xsd:attribute name="version" type="xsd:string" use="required"/>
    		</xsd:complexType>
    	</xsd:element>
    	<xsd:element name="testimonial" type="published">
    		<xsd:key name="att_choice">
    			<xsd:selector xpath="testimonial"/>
    			<xsd:field xpath="@question|@answer"/>
    		</xsd:key>
    	</xsd:element>
    	<xsd:complexType name="published" abstract="true">
    		<xsd:attribute name="id" type="xsd:int" use="required"/>
    		<xsd:attribute name="question" type="xsd:int"/>
    		<xsd:attribute name="answer" type="xsd:int"/>
    		<xsd:attribute name="published" type="xsd:boolean" use="required"/>
    	</xsd:complexType>
    	<xsd:complexType name="published-true">
    		<xsd:simpleContent>
    			<xsd:extension base="published">
    				<xsd:attribute name="modified" type="xsd:boolean" use="required"/>
    				<xsd:attribute name="deleted" type="xsd:boolean" use="required"/>
    			</xsd:extension>
    		</xsd:simpleContent>
    	</xsd:complexType>
    	<xsd:complexType name="published-false">
    		<xsd:simpleContent>
    			<xsd:extension base="published"/>
    		</xsd:simpleContent>
    	</xsd:complexType>
    </xsd:schema>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="iso-8859-15"?>
    <manager xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" author="ynostel" version="1.0">
    	<testimonial xsi:type="published-false" id="1" question="2" published="false">Il est temps d'aller se reposer...</testimonial>
    	<testimonial xsi:type="published-false" id="2" question="4" published="false">Fini la sieste, il y a du taf pour Lundi !!</testimonial>
    	<testimonial xsi:type="published-false" id="3" question="6" published="false">Tu es à la bourre. Bouges-toi le cul !</testimonial>
    	<testimonial xsi:type="published-true" id="4" question="7"  published="true" modified="false" deleted="false">Tu vas te faire virer si tu continues comme ca...</testimonial>
    	<testimonial xsi:type="published-false" id="5" answer="4">Pause café !!!!</testimonial>
    </manager>
    nb : ne faites pas attention au contenu du xml exemple, c'est la fatigue

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 47
    Points
    47
    Par défaut
    Personne

    Le validateur me dit ceci :

    Schema Error: System.Xml.Schema.XmlSchemaException: The content type of the base type must be a simple type definition or it must be mixed, and simpleType child must be present.

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    le type qui décrit un élément comprenant des attributs est de catégorie complexContent, pas simpleContent.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 47
    Points
    47
    Par défaut
    Merci

    J'ai donc corrigé et il est désormais valide :

    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
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:element name="manager">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element ref="testimonial" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
                <xsd:attribute name="author" type="xsd:string" use="required"/>
                <xsd:attribute name="version" type="xsd:string" use="required"/>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="testimonial" type="published">
            <xsd:key name="att_choice">
                <xsd:selector xpath="."/>
                <xsd:field xpath="@question|@answer"/>
            </xsd:key>
        </xsd:element>
        <xsd:complexType name="published" abstract="true">
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                    <xsd:attribute name="id" type="xsd:int" use="required"/>
                    <xsd:attribute name="question" type="xsd:int"/>
                    <xsd:attribute name="answer" type="xsd:int"/>
                    <xsd:attribute name="published" type="xsd:boolean" use="required"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
        <xsd:complexType name="published-true">
            <xsd:complexContent>
                <xsd:extension base="published">
                    <xsd:attribute name="modified" type="xsd:boolean" use="required"/>
                    <xsd:attribute name="deleted" type="xsd:boolean" use="required"/>
                </xsd:extension>
            </xsd:complexContent>
        </xsd:complexType>
        <xsd:complexType name="published-false">
            <xsd:complexContent>
                <xsd:extension base="published"/>
            </xsd:complexContent>
        </xsd:complexType>
    </xsd:schema>

    Toutefois un seul problème persiste.
    C'est au niveau de la clé.

    Ma clé est censé gérer le choix entre 2 attributs mais si j'inscris dans mon XML les 2 attributs, il est toujours valide.
    J'ai pourtant fait quasiment un copier-coller du cours disponible sur ce site à ce sujet.

    Merci d'avance.

  5. #5
    Membre régulier Avatar de Kevin12
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    Et avec ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        <xsd:complexType name="published" abstract="true">
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                    <xsd:attribute name="id" type="xsd:int" use="required"/>
                    <xsd:choice>
                           <xsd:attribute name="question" type="xsd:int"/>
                           <xsd:attribute name="answer" type="xsd:int"/>
                    </xsd:choice>
                    <xsd:attribute name="published" type="xsd:boolean" use="required"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 47
    Points
    47
    Par défaut
    Non car <xsd:choice> ca n'est pas valable pour les attributs.

    C'est donc pour ca que j'ai tenté d'utiliser une clé comme le cours sur ce site le suggerait.

    Sauf que dans XPATH le | n'est pas un OU mais un ET dans ce genre d'expression. le problème vient surement de là.

    Donc que dois-je en déduire ?
    Que ce n'est pas possible à faire et que le cours est faux ?

  7. #7
    Membre régulier Avatar de Kevin12
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 122
    Points : 74
    Points
    74
    Par défaut
    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
    <xsd:choice>
    <xsd:element>
    	<xsd:complexType>
    		<xsd:simpleContent>
    			<xsd:extension base = "xsd:string">
    				<xsd:attribute name = "question" type ="xsd:string"/>
    			</xsd:extension>
    		</xsd:simpleContent>		
    	</xsd:complexType>		
    </xsd:element>
    <xsd:element>
    	<xsd:complexType>
    		<xsd:simpleContent>
    			<xsd:extension base = "xsd:string">
    				<xsd:attribute name = "answer" type ="xsd:string"/>
    			</xsd:extension>
    		</xsd:simpleContent>		
    	</xsd:complexType>		
    </xsd:element>
                    </xsd:choice>
    Un choix entre deux éléments de type simple avec attribut. Je n'ai pas vérifié la syntaxe mais l'idée est simple.

Discussions similaires

  1. Problème validation xml schema
    Par k3nsou dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 22/01/2010, 14h30
  2. [JDOM] Validation xml schema & JDOM
    Par helter_skelter dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 22/07/2006, 09h22
  3. SAX Schema -- validation xml ??? au secours...
    Par bouly59 dans le forum Valider
    Réponses: 6
    Dernier message: 05/01/2005, 14h37
  4. Validation de données à partir d'un XML Schema
    Par leup dans le forum Valider
    Réponses: 2
    Dernier message: 10/06/2004, 08h30
  5. validation d'un XML schema
    Par nicolas_jf dans le forum Valider
    Réponses: 2
    Dernier message: 05/05/2003, 11h25

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