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 :

Erreur nombre non accepté comme ID DTD


Sujet :

XML/XSL et SOAP

  1. #1
    Membre régulier
    Erreur nombre non accepté comme ID DTD
    Bonjour
    Je dois réaliser un DTD pour un fichier XML. Cependant, j'ai deux erreurs:
    -La valeur de l'attribut "1" de type ID doit être un NCName lorsque les espaces de noms sont activés.
    -Des guillemets ouvrants sont attendus pour l'attribut "Num" associé avec un type d'élément "Etudiant".

    D'après mes recherches concernant la première erreur, j'ai trouvé que l'identifiant ne doit pas comporter ou commencer par un chiffre.Mais, selon ce qui est demandé ca doit être comme sa.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE Enseignement SYSTEM "Cours.dtd" >
    <Enseignement>
        <UF Ref="1">
            <Intitule> Web </Intitule>
            <Module>
                <Titre> PHP </Titre>
                <Durée> 16h </Durée>
                <Enseignant> enseignant1 </Enseignant>
                <Etudiants>
                    <Etudiant Num=&#698;E784790&#698;>
                        <Bac> Technique </Bac>
                        <Note> 16 </Note>
                    </Etudiant>
                    <Etudiant Num=&#698;E784790&#698;>
                        <Bac> Technique </Bac>
                        <Note> 15 </Note>
                    </Etudiant>
                </Etudiants>
            </Module>
            <Module>
                <Titre> XML </Titre>
                <Durée> 16 </Durée>
                <Enseignant> enseignant2 </Enseignant>
                <Etudiants>
                    <Etudiant Num=&#698;E235680&#698;>
                        <Bac> Math </Bac>
                        <Note> 12 </Note>
                    </Etudiant>
                </Etudiants>
            </Module>
        </UF>
        <UF Ref=&#698;2&#698;>
            <Intitule> GL </Intitule>
            <Module>
                <Titre> UML </Titre>
                <Durée> 20h </Durée>
                <Enseignant> enseignant3 </Enseignant>
                <Etudiants>
                    <Etudiant Num=&#698;E453476&#698;>
                        <Bac> Math </Bac>
                        <Note> 18 </Note>
                    </Etudiant>
                </Etudiants>
            </Module>
        </UF>
    </Enseignement >


    Fichier DTD :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT Enseignement (UF+)>
    <!ELEMENT UF (Intitule,(Module+)) >
    <!ELEMENT Intitule (#PCDATA)>
    <!ELEMENT Module (Titre,Durée,Enseignant,Etudiants)>
    <!ELEMENT Titre (#PCDATA)>
    <!ELEMENT Durée (#PCDATA)>
    <!ELEMENT  Enseignant (#PCDATA)>
    <!ELEMENT Etudiants (Etudiant+) >
    <!ELEMENT Etudiant (Bac,Note)>
    <!ELEMENT  Bac (#PCDATA)>
    <!ELEMENT  Note (#PCDATA)>
    <!ATTLIST UF Ref ID #REQUIRED>
    <!ATTLIST  Etudiant Num ID #REQUIRED>


    Merci d'avance

  2. #2
    Modérateur

    Hello,

    Citation Envoyé par dibax10 Voir le message
    D'après mes recherches concernant la première erreur, j'ai trouvé que l'identifiant ne doit pas comporter ou commencer par un chiffre.Mais, selon ce qui est demandé ca doit être comme sa.
    Eh bien je confirme, en XML les identifiants ne doivent pas commencer par un chiffre (ils peuvent en contenir après une lettre par exemple, par contre).
    Donc si l'attribut Ref doit être constitué de chiffres uniquement (ou au moins commencer par un chiffre), alors il ne peut pas être de type ID.


    Citation Envoyé par dibax10 Voir le message
    Des guillemets ouvrants sont attendus pour l'attribut "Num" associé avec un type d'élément "Etudiant"
    D'après le code donné, tu as probablement tapé ces guillemets dans Word, qui les remplace par des trucs raffinés d'imprimerie.

    Les attributs doivent être encadrés avec soit " soit ' . Pas des trucs qui ressemblent. Exactement ceux-là.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Citation Envoyé par thelvin Voir le message

    Eh bien je confirme, en XML les identifiants ne doivent pas commencer par un chiffre (ils peuvent en contenir après une lettre par exemple, par contre).
    Donc si l'attribut Ref doit être constitué de chiffres uniquement (ou au moins commencer par un chiffre), alors il ne peut pas être de type ID.
    Dans ce cas la il a aucun moyen a part donner le type CDATA et pourquoi il affiche doit être un NCName dans l'erreur ?

    Citation Envoyé par thelvin Voir le message

    D'après le code donné, tu as probablement tapé ces guillemets dans Word, qui les remplace par des trucs raffinés d'imprimerie.
    Je confirme le fichier XML étai copier à partir de Word. Merci c'est résolu pour ce problème

  4. #4
    Modérateur

    Citation Envoyé par dibax10 Voir le message
    Dans ce cas la il a aucun moyen a part donner le type CDATA
    NMTOKEN est également possible, si tu préfères.

    Citation Envoyé par dibax10 Voir le message
    et pourquoi il affiche doit être un NCName dans l'erreur ?
    C'est du patois de validation XSD. NCName est un type de données qui est comme un Name (le format que doivent respecter les ids) mais sans accepter le : parce que c'est un caractère spécial qui a une importance en validation XSD.

    En réalité un ID peut tout à fait être un Name plutôt qu'un NCName. Ça reste une assez mauvaise idée d'utiliser :

    De nos jours la validation DTD est toujours gérée, mais elle n'est plus très populaire. Résultat les outils XML ont tendance à s'aligner sur XSD à la place, et ça se remarque dans certains messages.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Merci pour les explications.
    Justement le même travail je dois le faire en XSD aussi bon j'ai réussi.Cependant, il a une contrainte qui demande de mettre le type numType pour attribut num au niveau de la balise étudiant.J'ai fais des recherches j'ai trouvé qu'un attribut en XSD ne peut prendre que les types simples ou primitif. Peu tu me confirmer cette information?

    Merci

  6. #6
    Modérateur

    Euh, je confirme oui, mais en même temps les types primitifs sont des types simples.

    Du coup ça veut dire que les attributs ne peuvent prendre que des types simples. Ce qui est un peu normal car les types pas simples ce sont les types complexes, ceux qui peuvent contenir des attributs et des éléments. Un attribut ne risque pas de pouvoir faire ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Merci pour ton aide