2017-08-17 3 views
0

J'ai un problème avec mon XML et ma DTD et je n'arrive pas à comprendre ce que c'est. Normalement, mon xml est bien formé:Validation d'un fichier XML et d'une DTD

<?xml version='1.0' encoding='UTF-8' standalone="no"?> 
<!DOCTYPE corpus SYSTEM "POUR.dtd"> 

<corpus> 
    <position type="pour"> 
    <discours auteur="Aécio Neves" id="1" date="25/08/2016" lieu="Senado 
    Federal">blablabla</discours> 
    </position> 
</corpus> 

Et je l'ai fait ma DTD aussi:

<?xml version='1.0' encoding='UTF-8'?> 

<!ELEMENT corpus (discours)+> 
<!ELEMENT discours (auteur, date, lieu)> 
<!ATTLIST discours id CDATA #REQUIRED> 
<!ELEMENT auteur (#CDATA)> 
<!ELEMENT date (#CDATA)> 
<!ELEMENT lieu (#CDATA)> 

Ma validation: xmllint POUR.xml --dtdvalid POUR.dtd --noout

Erreurs:

POUR.dtd:7: parser error : ContentDecl : Name or '(' expected 
<!ELEMENT auteur (#CDATA)> 
      ^
POUR.dtd:7: parser error : expected '>' 
<!ELEMENT auteur (#CDATA)> 
      ^
POUR.dtd:7: parser error : Content error in the external subset 
<!ELEMENT auteur (#CDATA)> 

Quelqu'un peut-il m'aider? Je vous remercie! :-)

+0

Vous ne nous avez pas dit quel est le problème. – Quentin

Répondre

0

Vous avez beaucoup de problèmes. Je me concentre sur celui que tu vois.

Avec

<!ELEMENT auteur (whatever here)> 

vous déclarer un élément <auteur>. Pour déclarer un élément qui ne contient que du texte, vous devez déclarer #PCDATA contenu:

<!ELEMENT auteur (#PCDATA)> 

Cependant votre XML ne contient pas < élément > auteur. auteur est un attribut à l'élément <discours>. Par conséquent, le bon moyen de le déclarer est de l'ajouter à la liste des attributs déclarés dans ATTLIST. Et là, puisqu'il s'agit d'un attribut, le type correct à indiquer est CDATA.