# Programmation XML/Définition de Type Document

* Introduction
* Structure d'un document XML
* Espace de nom
* Définition de Type Document
* Interprétation du XML
** SAX
** DOM
* XPath
Applications fondamentales
* XSLT
* XML Schema
* XLink
* XPointer
* XForms
* XQuery
Applications finales
* WML
* XSL-FO
* SOAP
* XML Signature
* SMIL
* SVG
* MusicXML
* SyncML
* MathML
* VoiceXML
* X3D
* XMI
* XUL
* Introduction
* Structure d'un document XML
* Espace de nom
* Définition de Type Document
* Interprétation du XML
** SAX
** DOM
* XPath
Applications fondamentales
* XSLT
* XML Schema
* XLink
* XPointer
* XForms
* XQuery
Applications finales
* WML
* XSL-FO
* SOAP
* XML Signature
* SMIL
* SVG
* MusicXML
* SyncML
* MathML
* VoiceXML
* X3D
* XMI
* XUL
[ Modifier le sommaire ]

## Introduction

Le DTD permettent de décrire la forme que doit avoir un document XML pour être valide. Les DTD ont été remplacées par XML Schema qui est bien plus puissant et expressif, aussi nous vous encourageons, pour tout nouveau projet de favoriser systématiquement l'utilisation de Schema aux DTD.
Nous abordons toutefois les DTD ici, afin que vous puissiez en comprendre une si besoin. Notamment, vous pourriez être amener à transformer une DTD en un Schema pour utiliser cette nouvelle technologie.

## Spécification d'une DTD

Contrairement aux Schema, la DTD n'est pas un dialecte XML, c'est un langage spécifique.
La DTD n'est pas obligatoire. Elle peut être interne au document XML ou bien externe (dans un fichier à l'extension « .dtd »). On utilise une DTD externe lorsque l'on veut la partager entre plusieurs fichiers XML.
Exemple de déclaration d'une DTD externe dans un fichier XML :
La DTD commence par la balise :
et se termine par :
La DTD doit être placée après la déclaration initiale XML.
Les commentaires, comme en XML sont utilisés de la manière suivante :

## Éléments

Chaque élément de la DTD est défini de la manière suivante :
Les qualificateurs possibles sont :
* ANY : la structure de l'élément est libre
* EMPTY : l'élément est vide
* #PCDATA(Parsed Character Data) : donnée textuelle analysable
On peut préciser ces qualificateurs grâce aux éléments suivants :
* un et un seul sous-élément :
(un seul téléphone par personne)
* 0 ou plusieurs sous-éléments :
(une personne peut avoir 0, 1 ou plusieurs téléphones)
* 1 ou plusieurs éléments :
(une personne doit avoir au moins un téléphone)
* 0 ou 1 seul élément :
(une personne a au maximum 1 téléphone, elle peut ne pas en avoir)
* Plusieurs sous-éléments différents :
(une personne a un nom et un téléphone)
* Des sous-éléments identiques ou non :
(une personne a un nom et deux numéros de téléphone)
* Un sous-élément OU (exclusif) un autre :
(un ou deux téléphone par personne)
Exemple du stockage d'un répertoire de services. Chaque service a un nom et peut avoir un ou plusieurs téléphone(s) :

## Attributs

Ils sont déclarés avec ATTLIST. Par exemple, on définit un type de paiement par défaut en liquide :

### Valeurs des attributs

Les valeurs d'attributs (attribute-value) sont :
| Valeur | Explication |
| value | valeur par défaut de l'attribut |
| #REQUIRED | attribut requis |
| #IMPLIED | attribut optionnel |
| #FIXED value | attribut de valeur fixe |

### Types des attributs

| Type | Description |
| CDATA | valeur de la donnée |
| (en1|en2|..) | valeur dans la liste énumérée |
| ID | identifiant unique |
| IDREF | identifiant d'un autre élément |
| IDREFS | liste d'autres identifiants |
| NMTOKEN | nom d'un XML valide |
| NMTOKENS | liste de noms d'XML |
| ENTITY | entité |
| ENTITIES | liste d'entités |
| NOTATION | nom d'une notation |
| xml: | valeur d'un xml prédéfini |

## Entités

Déclarer une entité permet de l'intégrer ensuite en appelant son nom précédé d'un et commercial, pourcentage ou guillemet ('&', '%' ou ' " ') et suivi d'un point virgule (';'). Ex :

## Exemple

Extrait du cahier des charges XHTML concernant les hyperliens :

## Références

* ↑ http://www.w3schools.com/dtd/dtd_elements.asp
* ↑ http://www.w3schools.com/dtd/dtd_attributes.asp
* ↑ http://xmlwriter.net/xml_guide/entity_declaration.shtml
* ↑ http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd