Document XML valide, DTD

 

1. Une DTD : Définition de Type de Document

un fichier DTD

fichier dia2.dtd

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!-- fichier dia2.dtd -->
<!-- dtd dialogue -->

<!ELEMENT dialogue (situation?, replique+) >
    un dialogue est composé de 0 ou 1 situation puis de au moins 1 replique
<!ELEMENT situation (#PCDATA) >

    une situation est une donnée textuelle PCDATA (Parsed Character Data)
<!ELEMENT replique (personnage, texte) >

    une replique est composée de 1 personnage puis de 1 texte
<!ELEMENT personnage (#PCDATA) >

<!ELEMENT texte (#PCDATA) >

 

2. Fichier Xml déclarant une DTD

DTD interne à un fichier/document XML

fichier dialogue4.xml

<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>
    document ne nécessitant pas d'entité externe
<!-- fichier dialogue4.xml -->

<!DOCTYPE dialogue
    déclaration de DTD interne
[

 <!ELEMENT dialogue (situation?, replique+) >
 <!ELEMENT situation (#PCDATA) >
 <!ELEMENT replique (personnage, texte) >
 <!ELEMENT personnage (#PCDATA) >
 <!ELEMENT texte (#PCDATA) >
]>

<!-- extrait de Tartuffe de Molière -->
<dialogue>
<situation>acte I, Scene 1 : madame pernelle et flipote sa servante,elmire, mariane, dorine, damis, cléante.</situation>
<replique>
<personnage>madame pernelle</personnage>
<texte>Allons, Flipote, allons, que d'eux je me délivre.</texte>
<texte>Vous marchez d'un te ......

DTD externe : Fichier XML déclarant une DTD

fichier dialogue3.xml

<?xml version='1.0' encoding='ISO-8859-1' standalone='no' ?>
    déclaration dans des entités externes au document
<!-- fichier dialogue3.xml -->

<!DOCTYPE dialogue SYSTEM "dia2.dtd">
    déclaration de conformité du document à une DTD externe
<!-- extrait de Tartuffe de Molière -->

<dialogue>
<situation>acte I, Scene 1 : madame pernelle et flipote sa servante,elmire, mariane, dorine, damis, cléante.</situation>
........

 

3. Définition d'Attribut dans une DTD


fichier dia6.dtd DTD externe du document/fichier xml dialogue6.xml
 

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!-- fichier dia6.dtd -->
<!-- dtd dialogue -->

<!ELEMENT dialogue (situation?, replique+) >
<!ELEMENT situation (#PCDATA) >
<!ELEMENT replique (personnage, texte) >
<!ELEMENT personnage (#PCDATA) >
<!ATTLIST personnage attitude  CDATA #REQUIRED
    geste CDATA #IMPLIED >
   l'attribut 'attitude' de l'élément 'personnage' est obligatoire et est une chaine de caractères constante (sans transformation XML), l'attribut 'geste' est facultatif
<!ELEMENT texte (#PCDATA) >

<!ATTLIST texte ton (normal | fort | faible) "normal">
  l'attribut 'ton' aura une valeur parmi les 3 de la liste et par défaut celle-ci est "normal"

Attribut or not Attribut ?

La construction
<replique>
<personnage attitude='pressée' geste='marchant vite' >madame pernelle</personnage>
<texte ton='fort' >Allons, Flipote, allons, que d'eux je me délivre.</texte>
</replique>
pourrait être remplacée par :
<replique>
<personnage>madame pernelle</personnage>
<attitude>pressée</attitude>
<geste>marchant vite</geste>
<ton>fort</ton>
<texte>Allons, Flipote, allons, que d'eux je me délivre.</texte>
</replique>

 

4. Entités et notations

Document XML utilisant des entités

fichier dialogue5.xml

<?xml version='1.0' encoding='ISO-8859-1' standalone='no' ?>
<!-- fichier dialogue5.xml -->

<!DOCTYPE dialogue SYSTEM "dia2.dtd"[
 <!ENTITY prl "madame pernelle">
    entité interne
<!ENTITY elm "elmire">

 <!ENTITY dialogue_a SYSTEM "dialogue5a.xml">
    entité externe
 <!ENTITY dialogue_b SYSTEM "dialogue5b.xml">

]>

<!-- extrait de Tartuffe de Molière -->
<dialogue>
&dialogue_a;
    référence à une entité
&dialogue_b;

</dialogue>

fichier dialogue5a.xml

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!-- fichier dialogue5a.xml -->

<situation>acte I, Scene 1 : &prl; et flipote sa servante,&elm;, mariane, dorine, damis, cléante.</situation>
<replique>
<personnage>&prl;</personnage>
    référence à une entité
<texte>Allons, Flipote, allons, que d'eux je me délivre.</texte>

</replique>
<replique>
<personnage>&elm;</personnage>
<texte>Vous marchez d'un tel pas qu'on a peine à vous suivre.</texte>
</replique>

fichier dialogue5b.xml

....

entités non XML et notations

<!NOTATION flash SYSTEM "/usr/bin/flash.exe">
  déclaration de notation associant le format nommé flash à l'application spécifiée
<!ENTITY animation SYSTEM "../anim.fla" NDATA flash>

   déclaration de l'entité animation dont le contenu est le fichier de format (NDATA : notation data) non XML
...
<scene loc='animation' />
  le "parser" ne verra que la valeur 'animation', mais l'application flash pourra traiter le contenu et donc l'animation

entités paramètres

entité de DTD : référençable uniquement dans une DTD !

<!DOCTYPE dialogue SYSTEM "dia2.dtd"[
  <!ENTITY % prédialogue SYSTEM "predia2.dtd">
    entité paramètre
  
<!ENTITY % postdialogue SYSTEM "postdia2.dtd">
&prédialogue;
&postdialogue;
]
  la DTD est composée des déclarations des 3 fichiers : dia2.dtd predia2.dtd postdia2.dtd

Très utile pour composer une DTD à partir de plusieures autres.

 

5. Doctype

doctype dans le document XML

6. instructions de la DTD

Contenu d'une DTD

exercice :

Ecrire la DTD pour mettre les differents composants de la situation en attribut de dialogue.

 

7. Document XML valide

= document bien formé
+ respecte la structure définie par la DTD
+ résolution des entités

 

 index  suivant