DTD élaborée
DTD Élaborée (avec fichier CSS)
Exemple de DTD élaborée (produits.dtd)
<!ELEMENT produits (articles+)>
<!-- + pour plusieurs articles -->
<!ELEMENT articles (nom,num,fabricant+,prix+)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT num (#PCDATA)>
<!ELEMENT fabriquant (entreprise,ville?)>
<!ELEMENT entreprise (#PCDATA)>
<!ELEMENT ville (#PCDATA)>
<!ELEMENT prix (#PCDATA)>
<!ATTLIST prix client (commerce|prive) #REQUIRED>
<!-- + pour plusieurs articles -->
<!ELEMENT articles (nom,num,fabricant+,prix+)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT num (#PCDATA)>
<!ELEMENT fabriquant (entreprise,ville?)>
<!ELEMENT entreprise (#PCDATA)>
<!ELEMENT ville (#PCDATA)>
<!ELEMENT prix (#PCDATA)>
<!ATTLIST prix client (commerce|prive) #REQUIRED>
Le "+" signifie que le nœud "article" comporte plusieurs éléments.
Un "?" voudrais dire facultatif (par exemple: fabricant?).
ATTLIST signifie "liste d'attribut". Ici l'attribut "client" pour l'élément "prix" peut recevoir "commerce" ou "prive".
#REQUIRED pour obligatoire, #IMPLIED pour facultatif, #FIXED pour paramètre obligatoire.
Exemple : <!ATTLIST prix client (commerce|prive) #FIXED "prive">
L'attribut "prive" apparaitra dans le résultat final alors qu'il ny a rien écrit dans le document XML.
Attention: #REQUIRE est le minimum requis, sinon erreur de syntaxe.
Et le fichier XML corespondant (produits.xml)
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="style_pour_produit.css" type="text/css"?>
<!DOCTYPE produits SYSTEM "produits.dtd">
<produits>
<articles>
<nom>PC HP</nom>
<num>32987-45</num>
<fabriquant>
<entreprise>HP SA</entreprise>
<ville>Bordeaux</ville>
</fabriquant>
<prix client="prive">600</prix>
<prix client="commerce">400</prix>
</articles>
<articles>
<nom>PC Mac</nom>
<num>3489-23</num>
<fabriquant>
<entreprise>Mac SA</entreprise>
<ville>Stasbourg</ville>
</fabriquant>
<prix client="prive">400</prix>
<prix client="commerce">300</prix>
</articles>
<articles>
<nom>PC Toshiba</nom>
<num>2346-78</num>
<fabriquant>
<entreprise>Toshiba SA</entreprise>
<ville>Tokyo</ville>
</fabriquant>
<prix client="prive">500</prix>
<prix client="commerce">400</prix>
</articles>
</produits>
<?xml-stylesheet href="style_pour_produit.css" type="text/css"?>
<!DOCTYPE produits SYSTEM "produits.dtd">
<produits>
<articles>
<nom>PC HP</nom>
<num>32987-45</num>
<fabriquant>
<entreprise>HP SA</entreprise>
<ville>Bordeaux</ville>
</fabriquant>
<prix client="prive">600</prix>
<prix client="commerce">400</prix>
</articles>
<articles>
<nom>PC Mac</nom>
<num>3489-23</num>
<fabriquant>
<entreprise>Mac SA</entreprise>
<ville>Stasbourg</ville>
</fabriquant>
<prix client="prive">400</prix>
<prix client="commerce">300</prix>
</articles>
<articles>
<nom>PC Toshiba</nom>
<num>2346-78</num>
<fabriquant>
<entreprise>Toshiba SA</entreprise>
<ville>Tokyo</ville>
</fabriquant>
<prix client="prive">500</prix>
<prix client="commerce">400</prix>
</articles>
</produits>
Et le fichier CSS correspondant (style_pour_produit.css)
produits {
font-family: Verdana, Arial;
font-size:12pt;
color:#000099;
line-height: 1.2;}
articles {
display: block;
background-color: silver;
margin: 10px;
padding: 8px;
width: 315px;}
nom {
display: block;
background-color: white;
border-style: solid;
border-width: 1px;
width: 300px;}
fabriquant {
display: block;
font-style: italic; }
num, prix { color: red; }
font-family: Verdana, Arial;
font-size:12pt;
color:#000099;
line-height: 1.2;}
articles {
display: block;
background-color: silver;
margin: 10px;
padding: 8px;
width: 315px;}
nom {
display: block;
background-color: white;
border-style: solid;
border-width: 1px;
width: 300px;}
fabriquant {
display: block;
font-style: italic; }
num, prix { color: red; }
La présence du DTD est reconnue, mais il ne se passe rien de plus... Bouuu !
Pas de panique ! La mise en page XML est détaillée dans la partie suivante ...