Chaque entité XML est définie dans une DTD. Les entités spécifiques au document sont présentes dans sa DTD interne (images, autres documents non XML, caractères spécifiques). Une entité est un alias associant un nom à un groupe de données. Ces données peuvent prendre un ou plusieurs formats.
<!ENTITY % nom "chaîne_de_remplacement">
Ces entités apparaîssent uniquement dans les DTD. Ce sont des raccourcis vers des parties de déclarations de la DTD.
Par exemple dans la DTD de XHML1.0 on a la déclaration d'entité :
<!ENTITY % Shape "(rect|circle|poly|default)">
qui est ensuite utilisée dans la déclaration d'attributs pour l'élément area
:
<!ATTLIST area
%attrs;
shape %Shape; "rect"
coords %Coords; #IMPLIED
href %URI; #IMPLIED
nohref (nohref) #IMPLIED
alt %Text; #REQUIRED
tabindex %Number; #IMPLIED
accesskey %Character; #IMPLIED
onfocus %Script; #IMPLIED
onblur %Script; #IMPLIED
>
<!ENTITY nom "&#code;">
Ces entités associent un alias à un caractère non disponible sur le clavier, dans le document l'appel s'effectue avec &nom;
. Rappelons que les caractères réservées &, <, >, ", ', sont déjà définis et n'ont pas à être redéfinis par des entités dans la DTD
<!ENTITY exist "∃"> <!-- there exists, U+2203 ISOtech -->
<!ENTITY delta "δ"> <!-- greek small letter delta, U+03B4 ISOgrk3 -->
<!ENTITY nom "texte">
Transforme l'alias (nom) en une phrase incluse dans la déclaration de l'entité. C'est l'équivalent d'une macro.
Par exemple
<!ENTITY wysiwyg "What You See Is What You Get">
permet d'utiliser dans le document XML :
les éditeurs de type &wysiwyg;
ce qui deviendra dans un
navigateur : les éditeurs de type What You See Is What You Get
.
<!ENTITY nom SYSTEM "URI">
Les fichiers contenant des données textuelles sont analysés. Par exemple un livre peut être constitué des documents toc.xml, chapters/c1.xml, chapters/c2.xml et index.xml :
<!doctype book SYSTEM "book.dtd"
[
<!entity toc SYSTEM "toc.xml">
<!entity chap1 SYSTEM "chapters/c1.xml">
<!entity chap2 SYSTEM "chapters/c2.xml">
<!entity index SYSTEM "index.xml">
]>
<book>
<head>&toc;</head>
<body>
&chap1;
&chap2;
&index;
</body>
</book>
<!ENTITY nom SYSTEM "URI" NDATA type_notation>
Les entités externes non analysées permettent de déclarer un contenu non XML dans le document XML (fichiers binaires images, sons...). Le mot clé NDATA (Notation DATA) précise le type d'entité non analysée que le processeur XML doit traiter.
Par exemple, la déclaration d'entité ci-dessous attribue un alias (vacances)
à une entité (images/plage.gif) de type GIF89a sauvegardée sur le disque
(SYSTEM) :
<!ENTITY vacances SYSTEM "images/plage.gif" NDATA GIF89a>
Les fichiers binaires (images, sons...) doivent être identifiés par une notation qui a été déclarée dans la DTD. Par exemple, la notation GIF89a utilisée dans l'exemple précédent est déclarée dans la DTD :
<!NOTATION GIF89a PUBLIC "-//Compuserve//NOTATION Graphics Interchange Format 89a//EN">
Les entités binaires ne peuvent être appelées que dans la valeur d'un attribut, lui-même déclaré comme étant du type ENTITY ou ENTITIES dans la DTD. La DTD comportera donc :
<!NOTATION GIF89a PUBLIC "-//Compuserve//NOTATION Graphics Interchange Format 89a//EN">
<!ATTLIST image source ENTITY #REQUIRED>
<!ENTITY vacances SYSTEM "images/plage.gif" NDATA GIF89a>
ce qui permettra dans le document XML d'appeler l'image :
<image source="vacances">