# XML & JSON : TP 1 : DTD

## Exercice 1

```xml

    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE film SYSTEM 'exo1_flex.dtd'>
    <Film
        nom = "Les Brigades du tigre"
        genre = "Policier"
        realisateur = "Jérôme Cornuau"
        duree = "2h05"
        annee = "2005"
    >
        <Resume>
            Les aventures du commissaire Valentin et des inspecteurs Terrasson et
            Pujol, membres des Brigades mobiles, corps spécial de la police française
            créé avant la Première Guerre mondiale.
        </Resume>
        <Versions>
            <Version nom="VF"/>
        </Versions>
        
        <Notes>
            <Presse>
                3/5
            </Presse>
            <Spectateurs>
                4/5
            </Spectateurs>
        </Notes>
        <Acteurs>
            <Acteur>
                C. Cornillac
            </Acteur>
            <Acteur>
                D. Kruger
            </Acteur>
            <Acteur>
                E. Baer
            </Acteur>
        </Acteurs>
        <Seances>
            <Seance>
                <Jours>
                    <Jour>Mercredi</Jour>
                    <Jour>Samedi</Jour>
                </Jours>
                <Horaires>
                    <Horaire>14:00</Horaire>
                    <Horaire>16:40</Horaire>
                    <Horaire>19:40</Horaire>
                    <Horaire>22:10</Horaire>
                </Horaires>
            </Seance>
            <Seance>
                <Jours>
                    <Jour>Jeudi</Jour>
                    <Jour>Vendredi</Jour>
                    <Jour>Lundi</Jour>
                    <Jour>Mardi</Jour>
                </Jours>
                <Horaires>
                    <Horaire>14:00</Horaire>
                    <Horaire>19:40</Horaire>
                    <Horaire>22:10</Horaire>
                </Horaires>
            </Seance>
            <Seance>
                <Jours>
                    <Jour>Dimanche</Jour>
                </Jours>
                <Horaires>
                    <Horaire>10:20</Horaire>
                    <Horaire>14:00</Horaire>
                    <Horaire>16:40</Horaire>
                    <Horaire>20:20</Horaire>
                </Horaires>
            </Seance>
        </Seances>
    </Film>
```

Pour construire un document XML qui représente l'ensemble des programmes d'un cinéma, il faut rajouter la balise suivante à la racine du document :

```xml
<Films>

    ....

</Films>
```

DTD : 

```dtd
<?xml encoding="UTF-8"?>
<!ELEMENT Films(Film*)>

<!ELEMENT Film(Resume, Versions, Notes, Acteurs, Seances)>
<!ATTLIST 
    nom CADATA #REQUIRED
    genre CADATA #IMPLIED
    realisateur CADATA #REQUIRED
    duree CADATA #REQUIRED
    annee CADATA #REQUIRED
>

<!ELEMENT Resume (#CDATA)>

<!ELEMENT Versions (Version+)>

<!ELEMENT Version>
<!ATTLIST nom CADATA #REQUIRED>

<!ELEMENT Notes (Presse?, Spectateur?)*>
<!ELEMENT Presse (#CDATA)>
<!ELEMENT Spectateurs (#CDATA)>

<!ELEMENT Acteurs (Acteur+)>

<!ELEMENT Acteur (#CDATA)>

<!ELEMENT Seances (Seance+)>

<!ELEMENT Seance (Jours,Horaires)>

<!ELEMENT Jours (Jour+)>

<!ELEMENT Horaires (Horaire+)>

<!ELEMENT Jour (#CDATA)>

<!ELEMENT Horaire (#CDATA)>
```
Nous sommes partis des hypothèses suivantes : 
- Un film ne peut pas n'avoir aucun acteur.
- Une version minimum est necessaire (VF, VOSTFR, VO, ...) et cette version a forcément un nom.
- En plus de devoir avoir un nom obligatoirement, son année, son réalisateur et sa durée doivent également être forcément indiqués.

Voici la version du DTD plus permissif : 

```dtd
<?xml encoding="UTF-8"?>
<!ELEMENT Films(Film*)>

<!ELEMENT Film(Resume,Versions,Notes,Acteurs,Seances)>
<!ATTLIST 
    nom CADATA #REQUIRED
    genre CADATA #IMPLIED
    realisateur CADATA #REQUIRED
    duree CADATA #REQUIRED
    annee CADATA #REQUIRED
>

<!ELEMENT Resume (#CDATA)>

<!ELEMENT Versions (Version+)>

<!ELEMENT Version>
<!ATTLIST nom CADATA #REQUIRED>

<!ELEMENT Notes (Presse?|Spectateur?,Spectateur?|Presse?)*>
<!ELEMENT Presse (#CDATA)>
<!ELEMENT Spectateurs (#CDATA)>

<!ELEMENT Acteurs (Acteur+)>

<!ELEMENT Acteur (#CDATA)>

<!ELEMENT Seances (Seance+)>

<!ELEMENT Seance (Jours|Horaires,Horaires|Jours)>

<!ELEMENT Jours (Jour+)>

<!ELEMENT Horaires (Horaire+)>

<!ELEMENT Jour (#CDATA)>

<!ELEMENT Horaire (#CDATA)>
```

En utilisant dans les balises <!ELEMENT> les "|" afin de proposer différents choix, on n'impose pas l'ordre des éléments décrivant le film.

## Exercice 2 

Voici le DTD associé au fichier XML en annexe :

```dtd
<?xml encoding="UTF-8"?>

<!ELEMENT bib (domain+)>

<!ELEMENT domain (title, bib_ref+)>

<!ELEMENT title (#CDATA)>

<!ELEMENT bib_ref (year, title, author, weblink, comments?)>

<!ELEMENT year (#PCDATA)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT weblink (#PCDATA)>

<!ELEMENT comments (#PCDATA)>
```

Nous supposons que les éléments de bib_ref year, title, author, weblink et title de domain sont obligatoires.

Voici le DTD moins restrictif : 

```dtd
<?xml encoding="UTF-8"?>

<!ELEMENT bib (domain+)>

<!ELEMENT domain (title | bib_ref+)>

<!ELEMENT title (#CDATA)>

<!ELEMENT bib_ref (year | title | author | weblink | comments?)>

<!ELEMENT year (#PCDATA)>

<!ELEMENT title (#PCDATA)>

<!ELEMENT author (#PCDATA)>

<!ELEMENT weblink (#PCDATA)>

<!ELEMENT comments (#PCDATA)>
```

## Pour les Geeks :

```css
font-family : "Times New Roman";
font-size : 12px;

Films {
    display : block;
    border-style : solid;
}

nom{
    font-weight : bold;
    font-size : 14px;
}

Realisateur, Annee {
    color : red;
}

Acteurs {
    color : blue;
    font-style: italic;
}

Resume {

}

Horaires {

}


```