DTD est l’abréviation de Document Type Definition.
Une DTD est un ensemble de règles qui définissant
les balises autorisées dans un document XML, leur contenu
<!ELEMENT Carnet (Utilisateur|Entrées) >
les attributs associés à une balise, ainsi que leur type
<!ATTLIST Société idname CDATA #IMPLIED
siret CDATA #REQUIRED >
les entités autorisées (macros)
<!ENTITY Email "moi@societe.fr" >
Une DTD peut écrite
directement dans le prologue
<!DOCTYPE Carnet [
Règles de déclarations des éléments,
attributs, entités
]>
Carnet.xml :
<!DOCTYPE Carnet [
<!ELEMENT carnet (ami*)>
<!ELEMENT ami (prenom, nom, adresse*, mobile*)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT adresse (rue, ville)>
<!ELEMENT rue (#PCDATA)>
<!ELEMENT ville (#PCDATA)>
<!ELEMENT mobile EMPTY>
<!ATTLIST prenom genre (M.|Mme) #REQUIRED>
<!ATTLIST rue numero CDATA #REQUIRED>
<!ATTLIST ville codepostal CDATA #REQUIRED>
<!ATTLIST mobile telephone CDATA #REQUIRED>
<!ATTLIST adresse numero CDATA #IMPLIED>
]>
ou dans un fichier externe référencé dans le prologue (plus courant)
<!DOCTYPE Carnet PUBLIC fpi adresse >
Carnet.xml :
<!DOCTYPE Carnet
PUBLIC "-//Exselt/DTD Carnet/en" "Carnet.dtd" >
Carnet.dtd :
<!ELEMENT carnet (ami*)>
<!ELEMENT ami (prenom, nom, adresse*, mobile*)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT adresse (rue, ville)>
<!ELEMENT rue (#PCDATA)>
<!ELEMENT ville (#PCDATA)>
<!ELEMENT mobile EMPTY>
<!ATTLIST prenom genre (M.|Mme) #REQUIRED>
<!ATTLIST rue numero CDATA #REQUIRED>
<!ATTLIST ville codepostal CDATA #REQUIRED>
<!ATTLIST mobile telephone CDATA #REQUIRED>
<!ATTLIST adresse numero CDATA #IMPLIED>
xmllint --dtdvalid Bookcatalogue.dtd BookCatalogue.xml
Définit le nom de l’élément et ce que l’élément peut contenir (éléments fils, contenu texte seulement, contenu mixte)
Éléments fils |
|
Élément vide |
|
Contenu libre |
|
Données (texte) |
|
Contenu mixte |
|
Pour décrire les contenus mixtes/fils d’un élément, on définit une expression de composition des éléments fils.
Les expressions sont délimitées par des parenthèses.
Des opérateurs en définissent la composition
Séquence | , |
|
Alternative | | |
|
De 0 à n occurences | * |
|
Au moins 1 occurence | + |
|
0 ou 1 occurence | ? |
|
Définit le nom de l’élément et ses attributs.
<!ATTLIST Société xml:lang NMTOKEN #IMPLIED
idname ID #IMPLIED
type (SA|SARL|EURL) 'SA' >
Un attribut se définit comme suit
CDATA | Chaîne de caractère littérale |
|
---|---|---|
ID, IDREF |
Renvois à l'intérieur des documents |
|
(a | b) | L'ensemble des valeurs possibles de l'attribut est défini |
|
ENTITY, ENTITIES |
Référence à une ou plusieurs entités externes non XML |
|
NMTOKEN, NMTOKENS |
1 ou plus noms symboliques |
|
NOTATION | (OBSOLÈTE) Indique que le contenu de l'élément doit être passé à l'application identifiée par la notation |
|
#REQUIRED | L'attribut est obligatoire |
|
---|---|---|
#IMPLIED | L'attribut est optionnel |
|
#FIXED "valeur" | La valeur de l'attribut est fixée |
|
"valeur" | Valeur par défaut |
|
Les entités internes référencent des objet qui peuvent être réutilisés dans le document XML (servent de remplacement). Il existe 3 types d’entités internes :
Entités de caractères
Elles remplacent des caractères spéciaux
XML 1.0 définit nativement les entités de caractères suivantes: <
>
"
'
&
,
qui remplacent <
>
"
'
&
respectivement.
Entités générales internes
Elles remplacent des expressions
<!ENTITY mail "@domaine.com">
<bal>sbonhome&mail;</bal>
Entités paramètre
Elles remplacent des paramètres
<!ENTITY % idt "(nom,prenom,age?)">
<!ELEMENT personne (%idt,bal,soc)>
Les entités externes référencent des documents externes. Il existe 2 types d’entités externes :
Entités XML externes
Elles référencent des documents XML externes
<!ENTITY moncv SYSTEM "/home/bonhomme/cv.xml">
Entités générales externes
Elles référencent des documents non XML (binaires)
<!ENTITY maphoto SYSTEM "/home/bonhomme/photo.jpg" NDATA
jpeg>
Un document peut être référencé soit
par une URL
<!ENTITY maphoto SYSTEM "/home/bonhomme/photo.jpg>
par une FPI (Formal Public Identifier), méthode rare et obsolète
La FPI est toujours suivie d’une URL (fallback)
<!ENTITY rec-XML PUBLIC
"-//W3C//DOCUMENT Recommandation open - The recommandation for XML 1.0//EN"
"http://www.w3.org/TR/1998/REC-xml-19980210.xml">
Modèle de données:
une en-tête header contenant les déclarations de modèles disponibles pour les diapositives.
Chaque déclaration de modèle fait l’objet d’un élément vide declare qui porte un attribut name, globalement unique au sein d’un document
une suite de diapositives slide les diapositives portent un attribut model, qui détermine quel modèle elle utilise (parmi ceux déclarés dans l’entête)
Document.xml :
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document SYSTEM "Presentation.dtd">
<document>
<header>
<declare name="titre"/>
<declare name="standard"/>
<declare name="illustration"/>
</header>
<slide model="titre">
<title><p>Exemple DTD</p></title>
</slide>
<slide model="standard">
<title><p>Travail à réaliser</p></title>
<body>
<bloc>
<ul>
<li>
<p>Réaliser une DTD</p>
<ul>
<li><p>Valider une instance</p></li>
</ul>
</li>
<li>
<p>Modifier un document ODP</p>
<ul>
<li><p>Mettre un titre en rouge</p></li>
<li><p>Mettre tous les titres en vert</p></li>
</ul>
</li>
</ul>
</bloc>
</body>
</slide>
<slide model="illustration">
<title><p>Validation</p></title>
<body>
<bloc>
<img src="screenshot"/>
</bloc>
<bloc>
<ul>
<li><p>Xmllite</p></li>
</ul>
</bloc>
</body>
</slide>
</document>
Presentation.dtd :
<!-- / -->
<!ELEMENT document (header, slide*)>
<!-- /document/header -->
<!ELEMENT header (declare)*>
<!ELEMENT declare EMPTY>
<!ATTLIST declare name ID #REQUIRED>
<!-- /document/slide -->
<!ELEMENT slide (title?, body?)>
<!ATTLIST slide model IDREF #REQUIRED>
<!ELEMENT title (p)>
<!ELEMENT body (bloc)*>
<!-- /document/slide/body -->
<!ELEMENT bloc (ul | img)>
<!ELEMENT ul (li)*>
<!ELEMENT li (p, ul?)>
<!ELEMENT p (#PCDATA | b | i | color)*>
<!ELEMENT img EMPTY>
<!ATTLIST img src CDATA #REQUIRED>
<!-- /document/body/body/bloc/p -->
<!ELEMENT b (#PCDATA | i | color)*>
<!ELEMENT i (#PCDATA | b | color)*>
<!ELEMENT color (#PCDATA | b | i)*>
<!ATTLIST color rgb CDATA #REQUIRED>