Les entités paramètres externes permettent de construire une DTD complexe et volumineuse à partir de plusieurs autres DTD complémentaires.
La déclaration dans la DTD d'une entité paramètre externe s'effectue comme suit :
<!ENTITY % nom SYSTEM "URI">
Les références d'entités paramètres externes sont utilisées dans la DTD de la manière suivante :
%nom_entité;Déclaration dans la DTD :
<!ENTITY % règles SYSTEM "http//www.monsite.com/regles.dtd">Utilisation de l'entité dans la même DTD :
%règles;Exemple :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE societe [
<!ENTITY % services SYSTEM "services.dtd">
%services;
<!ENTITY % divisions SYSTEM "divisions.dtd">
%divisions;
<!ENTITY % employes SYSTEM "employes.dtd">
%employes;
<!ELEMENT societe (services, divisions, employes)>
]>
<societe>
<services>
<service id="DG001">
<designation>Direction générale</designation>
</service>
<service id="ST001">
<designation>Service technique</designation>
</service>
<service id="SC001">
<designation>Service commercial</designation>
</service>
<service id="SC101">
<designation>Service clientèle</designation>
</service>
<service id="RH001">
<designation>Ressources humaines</designation>
</service>
<service id="SQ001">
<designation>Service qualité</designation>
</service>
<service id="SP001">
<designation>Service production</designation>
</service>
<service id="RD001">
<designation>Recherche et développement</designation>
</service>
</services>
<divisions>
<division id="A001" services="DG001 RH001"/>
<division id="B001" services="SC001 SC101"/>
<division id="C001" services="SP001 SQ001 RD001"/>
</divisions>
<employes>
<employe id="RJ1002" service="DG001">
<nom>Robierre</nom>
<prenom>Jean</prenom>
</employe>
<employe id="LA1012" service="DG001">
<nom>Lardut</nom>
<prenom>Anne</prenom>
</employe>
<employe id="GA1013" service="ST001">
<nom>Guilde</nom>
<prenom>Angélique</prenom>
</employe>
<employe id="HP1022" service="SC001">
<nom>Henry</nom>
<prenom>Paul</prenom>
</employe>
<employe id="MM1045" service="RH001">
<nom>Mortier</nom>
<prenom>Marc</prenom>
</employe>
<employe id="LS1102" service="SQ001">
<nom>Lebreton</nom>
<prenom>Sophie</prenom>
</employe>
<employe id="JM1095" service="RD001">
<nom>Jolie</nom>
<prenom>Martine</prenom>
</employe>
<employe id="MT1036" service="SC101">
<nom>Marcelin</nom>
<prenom>Tania</prenom>
</employe>
<employe id="LL1029" service="SC101">
<nom>Léger</nom>
<prenom>Laurence</prenom>
</employe>
<employe id="DM1052" service="SC001">
<nom>Duroi</nom>
<prenom>Maxime</prenom>
</employe>
</employes>
</societe>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Fichier services.dtd -->
<!ELEMENT designation (#PCDATA)>
<!ELEMENT service (designation)>
<!ATTLIST service
id ID #REQUIRED
>
<!ELEMENT services (service+)>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Fichier divisions.dtd -->
<!ELEMENT division EMPTY>
<!ATTLIST division
id ID #REQUIRED
services IDREF #REQUIRED
>
<!ELEMENT divisions (division+)>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Fichier employes.dtd -->
<!ELEMENT employe (nom, prenom)>
<!ATTLIST employe
id ID #REQUIRED
service IDREF #REQUIRED
>
<!ELEMENT employes (employe+)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)> |