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 :

Erreur "Cannot find declaration of element"


Sujet :

Valider XML

  1. #1
    Membre averti
    Erreur "Cannot find declaration of element"
    Salut,

    je débute avec xml et xsd, j'ai quelques soucis, notamment au niveau de l'en-tête. J'espérais que vous puissiez me filer un coup de main

    J'ai ce fichier XML qui est donné.

    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
    <films xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://www.example.com/films/v2"
     xsi:schemaLocation="http://www.example.com/films/v2 Exo3_FilmProvider.xsd">
         <realisateur id_realisateur="real_01">
            <prenom>Martin</prenom>
            <nom>Scorsese</nom>
        </realisateur>
        <realisateur id_realisateur="real_02">
            <prenom>Quentin</prenom>
            <nom>Tarantino</nom>
        </realisateur>
        <realisateur id_realisateur="real_03">
            <prenom>Steven</prenom>
            <nom>Spielberg</nom>
        </realisateur>
        <film id_film="film_01" id_realisateur="real_03" annee="2001">
            <titre>Minority Report</titre>
            <resume>
                <text>Un homme est victime d'une machination. Il est pris au piège d'un système qu'il a l'habitude de contrôler.</text>
            </resume>
        </film>
        <film id_film="film_02" id_realisateur="real_02" annee="2003">
            <titre>Kill Bill</titre>
            <resume>
                <text>Une femme se venge des personnes qui ont voulu l'assassiner.</text>
            </resume>
        </film>
        <film id_film="film_03" id_realisateur="real_01" annee="1995">
            <titre>Casino</titre>
            <resume>
                <text>Le monde de la mafia italienne mêlé à celui des casinos...</text>
            </resume>
        </film>
        <film id_film="film_04" id_realisateur="real_01" annee="1990">
            <titre>Les affranchis</titre>
            <resume>
                <text>Inspiré d'un fait réel : histoire de mafia italienne.</text>
            </resume>
        </film>
    </films>


    J'ai donc écris un fichier XSD correspondant

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    	<xsd:schema xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
     	<xsd:element name="films">
     		<xsd:complexType>
     			<xsd:sequence>
     				<xsd:element name="realisateur">
     					<xsd:complexType>
     						<xsd:sequence>
     							<xsd:element name="prenom" type="xsd:string"/>
     							<xsd:element name="nom" type="xsd:string"/>
     						</xsd:sequence>
     						<xsd:attribute name="id_realisateur" type="xsd:string"/>
     					</xsd:complexType>
     				 </xsd:element>
     				 <xsd:element name="film">
     					<xsd:complexType>
     						<xsd:sequence>
     							<xsd:element name="titre" type="xsd:string"/>
     							<xsd:element name="resume">
     								<xsd:complexType>
     									<xsd:sequence>
     										<xsd:element name="text" type="xsd:string"/>
     									</xsd:sequence>
     								</xsd:complexType>
     						 	</xsd:element>
     						 </xsd:sequence>
     						 <xsd:attribute name="id_film" type="xsd:string"/>
                             <xsd:attribute name="id_realisateur" type="xsd:string"/>
                             <xsd:attribute name="annee" type="xsd:int"/>
     					</xsd:complexType>
     				</xsd:element>	
     			 </xsd:sequence>
     		</xsd:complexType>
     	</xsd:element>	
    </xsd:schema>



    Mon fichier xsd ne m'indique pas d'erreur, mais le fichier xml si.

    Cannot find declaration of element films
    Referenced file Exo3_FilmProvider.xsd containts error
    Sauf que je déclare bien films et l'ide ne me montre pas d'erreur.

    Du coup je suis un peu perdu avec tout ça =)

    Merci de votre aide.

  2. #2
    Membre actif
    Dans ton XSD, voila ce que tu demandes :

    "J'ai une balise parent 'films' qui ne peut contenir qu'un seul realisateur et un seul film"

    A priori ce n'est pas ce que tu veux d'après ton XML, mais "J'ai une balise parent 'films' qui ne peut contenir plusieurs realisateurs et plusieurs films"
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  3. #3
    Membre averti
    Pourtant j'utilise bien séquence pour dire que je peux avoir plusieurs réalisateur ou film .

  4. #4
    Membre émérite
    [1]
    Cannot find declaration of element films
    Referenced file Exo3_FilmProvider.xsd containts error
    La seule et unque raison est que le schéma ainsi écrit serait pour valider un xml du genre sans un (défaut) namespace déclaré, ce qui n'est pas le cas: l'engin cherche en vain une définition de {http://www.example.com/films/v2}films pour commencer, et il ne l'a pas trouvé. Il faut définir le targetNamespace dans le schéma.
    Code xml :Sélectionner tout -Visualiser dans une fenêtre à part
    <xsd:schema xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />sd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/films/v2" elementFormDefault="qualified">


    [2] Une fois c'est fait, il faut s'en occuper le facet dit cardinalité. Le defaut de maxOccurs est 1, même minOccurs. Ce n'est certainement le cas pour realizateur.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    <xsd:element name="realisateur" maxOccurs="unbounded">

    Et le même pour film.
    Code xml :Sélectionner tout -Visualiser dans une fenêtre à part
    <xsd:element name="film" maxOccurs="unbounded">

  5. #5
    Membre averti
    Merci beaucoup, effectivement, maintenant cela fonctionne !

    Il va falloir que je me penche un peu plus en détail sur la partie des namespace pour mieux comprendre la syntaxe de l'en-tête.

    Merci encore !