TechWeb
Accueil Codage HTML CSS DESIGN XML LaboCSS

Document type definition

Présentation informelle

Un document XML est bien formé lorsqu'il respecte les règles syntaxiques .

Une DTD (document type definition) permet définir un sous-ensemble de documents xml bien formé.

Ainsi une DTD précise :

Comme il existe de multiples façons d'organiser l'information sous forme arborescente, une DTD permet de se conformer à une organisation particulière et ainsi garantir une parfaite uniformité entre documents de sources diverses.

Un document bien formé respectueux des contraintes imposées par une DTD est dit valide par rapport à la DTD .

La DTD relative à un document xml peut être intégrée (DTD interne) ou liée au document (DTD externe).

Exemple de DTD

Le fichier xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<courrier>

<destinataire> albert@free.fr</destinataire>

<expediteur> anne@ifrance.com</expediteur>

<date>

<jour> 15 </jour>

<mois> septembre </mois>

<annee> 2005 </annee>

</date>

<contenu langue="fr">

<objet> rappel</objet>

<texte> réunion le 20</texte>

<attachement fichier = "resume.txt" />

</contenu>

</courrier>

Le doctype interne

<!DOCTYPE courrier[

<!ELEMENT courrier (destinataire+,expediteur,date,contenu)>

<!ELEMENT expediteur (#PCDATA)>

<!ELEMENT destinataire (#PCDATA)>

<!ELEMENT date (jour,mois,annee)>

<!ELEMENT jour (#PCDATA)>

<!ELEMENT mois (#PCDATA)>

<!ELEMENT annee (#PCDATA)>

<!ELEMENT contenu (objet,texte,attachement*)>

<!ATTLIST contenu langue (fr|en) #REQUIRED>

<!ELEMENT objet (#PCDATA)>

<!ELEMENT texte (#PCDATA)>

<!ELEMENT attachement EMPTY>

<!ATTLIST attachement fichier CDATA #REQUIRED>

]>

Le doctype externe

Lorsque le doctype est localisé dans un fichier séparé, seules les définitions sont spécifiées.

<!ELEMENT courrier (destinataire+,expediteur,date,contenu)>

<!ELEMENT expediteur (#PCDATA)>

<!ELEMENT destinataire (#PCDATA)>

<!ELEMENT date (jour,mois,annee)>

<!ELEMENT jour (#PCDATA)>

<!ELEMENT mois (#PCDATA)>

<!ELEMENT annee (#PCDATA)>

<!ELEMENT contenu (objet,texte,attachement*)>

<!ATTLIST contenu langue (fr|en) #REQUIRED>

<!ELEMENT objet (#PCDATA)>

<!ELEMENT texte (#PCDATA)>

<!ELEMENT attachement EMPTY>

<!ATTLIST attachement fichier CDATA #REQUIRED>

L'appel à une DTD externe dans un fichier XML est réalisé ainsi

<!DOCTYPE courrier SYSTEM "http://...adresse complete de la DTD">

Les éléments

Déclaration d'un élément

<!ELEMENT nom_de_l'élément (contenu de l'élément)>

<!ELEMENT expediteur (#PCDATA)>

Elément à contenu textuel

<!ELEMENT nom_de_l'élément (#PCDATA)>

ou

<!ELEMENT nom_de_l'élément CDATA>

CDATA signifie character data

#(PCDATA) signifie parsed character data : données textuelles interprétées

Lorsque les données sont interprétées les signes '<' et '>' sont traités comme des délimiteurs de balises.

Elément vide

<!ELEMENT nom_de_l'élément EMPTY>

<!ELEMENT attachement EMPTY>

Elément structuré

<!ELEMENT nom_de_l'élément (élément_enfant)>

ou

<!ELEMENT nom_de_l'élément (élément_enfant1, élément_enfant2... élément_enfantN)>

<!ELEMENT date (jour, mois, annee)>

L'ordre des éléments enfants, donné par la la DTD , doit être respecté dans le document xml associé.

Les alternatives

<!ELEMENT nom_de_l'élément (élément_enfant1 | élément_enfant2... | élément_enfantN)>

L'élément possède un seul élément enfant choisi parmi la liste d'éléments proposés. Lorsque qu'un contenu textuel (#PCDATA) fait partie du choix, celui-ci est propsé en premier :

<!ELEMENT nom_de_l'élément (#PCDATA | élément_enfant1... | élément_enfantN)>

Opérateurs d'occurences

Un élément, une séquence ou un choix peuvent être complété d'un opérateur d'occurence.

L'opérateur * : terme* signale 0 ou plusieurs occurences du terme

<!ELEMENT contenu (objet,texte,attachement*)>

indique qu'un contenu est constitué d'un élément "objet", suivi d'un élément "texte" et éventuellement, mais pas nécessairement, complété par un ou plusieurs éléments "attachement".

L'opérateur + : terme+ signale une ou plusieurs occurence du terme

<!ELEMENT courrier (destinataire+,expediteur,date,contenu)>

indique qu'un courrier est constitué d'un ou plusieurs éléments "destinantaire", suivi d'un élément "expéditeur", d'un élément "date" et d'un élément "contenu")

L'opérateur ? : terme? signale que le terme est facultatif (0 ou 1 occurence)

<!ELEMENT coordonnees (nom,prenom,adresse,telephone?)>

l'élément "coordonnées" est constitué des éléments "nom", "prenom" , "adresse" qui sont obligatoire et d'un éventuel élément "telephone".

Combinaisons

Une alternative peut porter sur du texte (#PCDATA), des éléments simples, des séquences :

<!ELEMENT elt ((a,b,c) | (b,d) | x | #PCDATA>

Une séquence peut porter sur du texte (#PCDATA), des éléments simples, des alternatives :

<!ELEMENT elt (#PCDATA, x, (a|b|c) , (b|d)>

Les opérateurs d'occurence s'appliquent aux éléments simples, aux séquences et aux alternatives

<!ELEMENT elt (x*, (a|b|c)+ , (b|d)?>

En combinant on peut obtenir des expressions complexes :

<!ELEMENT elt ((x*, (a|b|c) , (b,d)+) | ((a*,b,c)+ , (d|e|#PCDATA), (x+,y)*)>

Elément à contenu quelconque

<!ELEMENT nom_de_l'élément ANY>

Signifie que l'élément peut être constitué de texte ou de tout autre élément défini dans la DTD en nombre, ordre et profondeur quelconques. Ce type de déclaration est a éviter allant à l'encontre du principe d'une DTD consitant à containdre les contenus des éléments.

Les attributs

Pour chaque élément on déclare les attributs qu'ils admettent.

<ATTLIST nom_element

   nom_attribut type contrainte

   nom_attribut type contrainte

   ...

>

Le type d'un attribut

Contraintes d'attributs

Valeur par défaut

<!ELEMENT publication EMPTY>

<!ATTLIST publication

   titre CDATA "sans titre"

   type (livre|revue) "livre"

Attribut requis

L'attribut est obligatoire. Son absence invalide le document

<!ELEMENT publication EMPTY>

<!ATTLIST publication

   titre CDATA #REQUIRED

   type (livre|revue) "livre"

Attribut optionnel

L'attribut n'est pas obligatoire. Son absence n'invalide pas le document.

<!ELEMENT publication EMPTY>

<!ATTLIST publication

   titre CDATA #REQUIRED

   type (livre|revue) #IMPLIED

Attribut fixe

La valeur de l'attribut est imposée. Une autre valeur invalide le document.

<!ELEMENT publication EMPTY>

<!ATTLIST publication

   titre CDATA #REQUIRED

   type (livre|revue) #FIXED "livre"

Déclaration d'entités

Les entités permettent de définir des raccourcis qui sont remplaçés par leur valeur dans le document

Entités paramétriques

Une entité paramétrique définit des raccourcis qui ne sont utilisable qu'au sein de la DTD.

<!ENTITY % level CP|CE1|CE2|CM1|CM2 >

qu'on pourra utiliser dans la DTD :

<!ELEMENT classe (enseignant)

   <!ATTLIST classe niveau (%level;) #REQUIRED>

Entités de caractères

Permet d'attribuer un raccourci mnémonique aux caractères. Indispensable pour la saisie de caractères ayant une signification particulière en xml comme <, >, ", ou &.

C'est le code hexadécimal qui permet définition d'une entité caractère.

<!ENTITY euro"&#x2369;" > qui sera remplaçé par "€"

<!ENTITY nbsp "&#160;"> qui sera remplaçé par un espace insécable

<!ENTITY eacute "&#233;"> qui sera remplaçé par "é"

Entités internes

Une entité interne définit un raccourci pour une suite quelconques de caractères dans la DTD, et est utilisable dans le document xml associé.

<!ENTITY umb "Université Marc Bloch">

qui pourra être utilisé dans le document xml associé :

<diplome>

<intitulé> Master Caweb </intitulé>

<organisme> &umb; </organisme>

</diplome>

Entités externes

Une entité externe permet de faire référence à un fichier externe.

<!ENTITY umb SYSTEM "umb.xml">

Le fichier umb.xml :

<?xml version="1.0" encoding="ISO-8859-1"?>

<organisme>

<intitulé> Université Marc Bloch</intitulé>

<adresse> rue de Rome Strabourg </adresse>

</organisme>

Dans le fichier associé à la DTD on pourra écrire :

<?xml version="1.0" encoding="ISO-8859-1"?>

<etudiant>

<nom> Dupond </nom>

&umb;

</etudiant>

qui sera transformé en :

<?xml version="1.0" encoding="ISO-8859-1"?>

<etudiant>

<nom> Dupond </nom>

<organisme>

<intitulé> Université Marc Bloch</intitulé>

<adresse> rue de Rome Strabourg </adresse>

</organisme>

</etudiant>

L'entité externe ne doit pas contenir ou être liée à une DTD. Son contenu doit être valide par rapport à la DTD du document faisant référence à l'entité externe.

Au sein d'une DTD on peut également faire appel à une entité paramétrique externe :

<!ENTITY % a_inclure SYSTEM "sousdtd.dtd">

En faisant référence à l'entité %a_inclure; dans la dtd, le contenu de "sousdtd.dtd" est incorporé en lieu et place de la référence.

 

Valid XHTML 1.0 Strict Valid CSS!

Copyright Gabriel Braun 2007