SELFHTML

Entités pour blocs de texte et transcriptions

Page d'information: vue d'ensemble

vers le bas Généralités sur les entités
vers le bas Schéma pour définir les entités
vers le bas Entités pour blocs de texte
vers le bas Entités pour le nommage de caractères
vers le bas Entités imbriquées
vers le bas Entités pour ressources externes
vers le bas Paramètre entité pour DTD plus complexes
vers le bas DTD modulaires à l'aide d'entités

 vers le bas 

Généralités sur les entités

Les entités (Entities Singulier: Entity) sont des abréviations définies. Peut-être connaissez vous la possibilité des programmes de traitement de texte de définir des blocs de texte qui peuvent ensuite être insérés très rapidement dans le texte actuel par menu ou par un raccourci clavier. Cette fonctionnalité représente une des tâches des entités.

Les entités en XML peuvent cependant avoir plusieurs fonctions. Les blocs de texte que vous pouvez ainsi définir dont disponibles d'une part dans des fichiers d'application. Il y a les entités qui n'ont une fonction d'abréviation que dans les définitions de DTD ou les entités qui créent une relation avec des sources de données externes, et les entités qui réalisent des transcriptions pour des signes spéciaux.

Les entités sont également fréquentes dans des langage de marquage connus comme HTML. Quand par exemple vous voulez noter des suites de caractères comme é, alors vous utilisez des entités qui ont été définies pour HTML. Pour comprendre les entités en XML, il faut vous libérer toutefois des limites de la fonctionnalité des entités en HTML.

 vers le hautvers le bas 

Schéma pour définir les entités

Les entités sont notées dans une DTD d'après le schéma suivant:

Schéma:

<!ENTITY [%] Nom [SYSTEM|PUBLIC] "valeur" [mentions supplémentaires] >

Explication:

La définition d'une entité commence par la parenthèse pointue d'ouverture <,suivie immédiatement d'un point d'exclamation ! Derrière en majuscules suit le mot clé ENTITY. À la suite suit pour unvers le bas paramètre entité pour bloc de texte dans la DTD un signe pourcentage %, pas pour les autres définitions d'entités. Dans tous les cas pourtant suit un nom pour l'entité. Vous pouvez choisir librement le nom. Il doit cependant satisfaire aux Autre page d'information règles pour les noms en XML. Derrière le nom peut être placé un des mots clés SYSTEM ou PUBLIC, et cela dans le cas des vers le bas Entités pour ressources externes. Pour toutes les autres définitions d'entités, ne mentionnez aucun de ces mots-clés. Enfin, placée entre guillemets, la valeur que vous voulez affecter au nom d'entité. La valeur affectée peut avoir une nature très variée selon le type de l'entité. Derrière le nom, peuvent encore suivre dans des cas spéciaux des mentions particulières. Un exemple à ce sujet est donné dans la partie sur les Autre page d'information attributs avec une valeur d'entité (par exemple pour des références de fichier externe).
Chaque définition d'entité se termine avec une parenthèse pointue de fermeture >. Les différentes parties de la définition de l'entité sont séparées par un ou plusieurs espaces.

Vous pouvez placer une telle définition d'entité à n'importe quel endroit dans la DTD - avant ou après d'autres définitions comme <!ELEMENT...> (Autre page d'information Éléments), <!ATTLIST...> (Autre page d'information Attributs) ou bien <!NOTATION...> (Autre page d'information Notations). Dans chaque cas cependant, une entité doit cependant avoir été définie avant sa première utilisation. C'est à observer par exemple pour les paramètres entités pour blocs de texte de DTD où les définitions d'entités doivent être notées avant les définitions de types d'élément dans lesquels elles sont employées. Dans la pratique, on définit les entités la plupart du temps tout au début de la DTD, avant toutes les définitions d'éléments et d'attributs.

 vers le hautvers le bas 

XML1.0msie5.0 Entités pour blocs de texte

Pour des expressions plus longues qui reviennent sans arrêt dans les données d'application d'une structure XML gomme par exemple des noms propres ou des formules, vous pouvez définir des abréviations dans la DTD.

Exemple de DTD blocs_de_texte.dtd:

<!ELEMENT blocs_de_texte (#PCDATA)>
<!ENTITY jpa "Je vous prie d'agr&#233;er mes cordiales salutations" >

Explication:

Ici s'applique le vers le haut schéma pour définir les entités. Avec les entités pour blocs de texte, vous n'avez besoin que d'attribuer un nom pour l'entité et de lui attribuer la valeur désirée. Dans l'exemple une entité nommée jpa a été définie et la valeur Je vous prie d'agr&#233;er mes cordiales salutations lui a été affectée.

Exemple d'une application valide:

Démonstration - nouvelle fenêtre Exemple d'affichage: aperçu (un navigateur XML affiche par exemple la structure de données)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE blocs_de_texte SYSTEM "blocs_de_texte.dtd">
<blocs_de_texte>
En l'attente, &jpa;
</blocs_de_texte>

Explication:

Pour utiliser une entité définie dans la DTD dans les données d'application, notez le ET commercial (&), et directement à la suite le nom de l'entité suivi d'un point virgule de clôture (;). L'analyseur syntaxique XML insère alors à l'endroit correspondant le long texte affecté à l'abréviation. L'exemple &jpa; provoque donc la sortie de Je vous prie d'aggr&#233;er mes cordiales salutations.

Vous pouvez noter cette entité dans les données d'applications partout où des chaînes de caractères sont possibles, à savoir dans un contenu de caractères, entre le repère d'ouverture et le repère de fermeture ou même dans des affectations de valeurs à des attributs, pour lesquels des chaînes de caractères sont autorisées.

Attention:

Remplacez dans la chaîne de caractères que vous affectez au nom d'une entité les signes dont la valeur de caractère est plus grande que 127 par leur transcription numérique comme dans l'exemple ci-dessus &#233; pour é. Les valeurs de caractères désirées peuvent être trouvées par exemple dans la Autre page d'information liste des jeux de caractères ISO-8859.

 vers le hautvers le bas 

XML1.0msie5.0 Entités pour le nommage de caractères

Vous connaissez sans doute de HTML les Autre page d'information signes nommés pour le jeu de caractères ISO 8859-1 comme &ccedil; ou &copy;. Vous pouvez définir vous même dans une DTD XML de telles désignations faciles à retenir. Ceci est indiqué avant tout pour des signes qui ne se trouvent pas sur le clavier, ou quand vous ne connaissez pas les environnements de développement et les jeux de caractères internes utilisés par les utilisateurs qui travaillent avec vos DTD XML.

Exemple de DTD emoticones.dtd:

<!ENTITY emoticone_triste "&#x2369;" >
<!ENTITY emoticone_heureux "&#x236A;" >
<!ELEMENT emoticone (#PCDATA)>

Explication:

En tant que graphiques les signes désirés de l'exemple ont à peu près cet aspect:
emoticone_triste: triste mine et emoticone_heureux: mine réjouie

Ici s'applique le vers le haut schéma pour définir les entités. Pour les entités pour le nommage de signes, vous n'avez besoin que d'attribuer un nom pour l'entité et de lui attribuer comme valeur la notation numérique du signe sous forme décimale ou hexadécimale. Dans l'exemple, deux signes sont nommés. Leurs noms sont emoticone_triste et emoticone_heureux. Dans le système Unicode les deux signes désirés qui doivent être affectés à ces noms ont les valeurs hexadécimales 2369 et 236A. La façon de noter est ici la même qu'en HTML 4.0 donc par exemple &#x236A; (hexadécimal) ou &#9066; (décimal). La notation commence par le ET commercial &, suivi d'un signe dièse #. Quand vous notez la valeur de caractère en hexadécimal, le signe x doit suivre suivi lui même par la valeur hexadécimale. Si vous voulez noter la valeur du caractère en décimal le chiffre suit immédiatement (sans être précédé de x). Derrière la valeur du caractère suit un point virgule ;.

Exemple d'une application valide:

Démonstration - nouvelle fenêtre Exemple d'affichage: aperçu (un navigateur XML affiche par exemple la structure de données)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE emoticones SYSTEM "emoticones.dtd">
<emoticones>
Es tu &emoticone_heureux; ou bien &emoticone_triste;?
</emoticones>

Explication:

Pour utiliser les signes nommés dans les données d'application, notez le ET commercial (&), et directement à la suite le nom de l'entité suivi d'un point virgule de clôture (;). L'analyseur syntaxique XML insère alors à l'endroit correspondant le signe en question. Dans l'exemple, vous obtenez donc la même chose en notant &emoticone_heureux; que si vous notiez &#x236A; - mais le nom est plus facile à retenir.

Vous pouvez noter cette entité dans les données d'applications partout où des chaînes de caractères sont possibles, à savoir dans un contenu de caractères, entre le repère d'ouverture et le repère de fermeture ou même dans des affectations de valeurs à des attributs, pour lesquels des chaînes de caractères sont autorisées.

Attention:

Quand le signe désiré n'est pas sorti, cela est dû au soutien Unicode insuffisant ou à ce que pour la sortie de données, aucune police d'écriture n'est disponible qui puisse représenter des signes Unicode à valeur élevée comme ceux de l'exemple ci-dessus.

 vers le hautvers le bas 

XML1.0msie5.0 Entités imbriquées

Pour l'affectation de valeur dans une définition d'entité, il est tout à fait possible d'utiliser d'autres entités pour créer de cette façon des blocs de texte complexes.

Exemple de DTD texte_courriel.dtd:

<!ENTITY rs "Rodrigue et Chimène SARL" >
<!ENTITY c "info@cid.fr" >
<!ENTITY rsc "&rs;, &c;" >
<!ELEMENT texte_courriel (#PCDATA)>

Explication:

Dans cet exemple, les entités rs et c définies auparavant sont utilisées pour l'affectation de valeur à l'entité rsc.

Exemple d'une application valide:

Démonstration - nouvelle fenêtre Exemple d'affichage: aperçu (un navigateur XML affiche par exemple la structure de données)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE texte_courriel SYSTEM "texte_courriel.dtd">
<texte_courriel>
La firme &rs; est heureuse de vous présenter ses produits les plus récents. Veuillez envoyer votre commande à &rsc;.
</texte_courriel>

Explication:

Si dans les données d'application &rsc; est noté, ce sera remplacé par Rodrigue et Chimène SARL, info@cid.fr. Dans le jargon spécialisé XML, on dit aussi que les différents blocs de texte &f; et &m; sont "avancés".

 vers le hautvers le bas 

XML1.0 Entités pour ressources externes

Pour les entités pour ressources externes appelées aussi entités externes (par opposition à tous les autres types d'entités qui sont désignées comme entités internes ), XML offre la possibilité de faire savoir à un analyseur syntaxique que des données d'un autre fichier doivent être incorporées.

Exemple de DTD nouvelles.dtd:

<!ELEMENT nouvelles (donnees_nouvelles)*>
<!ENTITY source_donnees SYSTEM "nouvelles.txt" >
<!ELEMENT donnees_nouvelles EMPTY>
<!ATTLIST donnees_nouvelles
   source            ENTITY              #REQUIRED
>

Explication:

Ici s'applique le vers le haut  schéma pour définir les entités. Avec des entités pour ressources externes, vous devez noter en plus du nom de l'entité, un des deux mots-clés SYSTEM ou bien PUBLIC (à écrire l'un et l'autre en majuscules). Quand vous désignez la source de données externe directement avec le nom de fichier, alors utilisez SYSTEM. Pour l'affectation de valeur, notez alors le nom de fichier de la source externe, le cas échéant avec une mention de chemin relative ou absolue. Cela peut être aussi une URI, par exemple http://www.xy.fr/nouvelles/nouvelles.txt. Si à la place, vous notez une désignation de source publique (public identifier), alors mentionnez PUBLIC et notez pour l'affectation de valeur la désignation de la source publique de la source des données.

Vous ne pouvez utiliser une entité pour ressource externe dans une application XML qu'en en affectant le nom de l'entité à un attribut. C'est une particularité de ce genre d'entités. C'est pourquoi vous devez définir dans la DTD, outre l'entité, également un Autre page d'information  Autre page d'information attribut avec une valeur d'entité pour un type d'élément quelconque souhaité. Dans l'exemple ci-dessus un type d'élément donnees_nouvelles avec un attribut source est défini. Cet attribut est fixé grâce à la mention ENTITY comme étant un attribut avec une valeur d'entité.

Exemple d'une application valide:

Démonstration - nouvelle fenêtre Exemple d'affichage: aperçu (un navigateur XML affiche la structure de données)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE nouvelles SYSTEM "nouvelles.dtd">
<nouvelles>
<donnees_nouvelles source="source_donnees" />
</nouvelles>

Explication:

Le nom d'entité "source_donnees" a été affecté à l'élément donnees_nouvelles par l'attribut source. Ce nom est alors remplacé par la liaison "nouvelles.txt" qui lui est liée. L'analyseur syntaxique est "informé" en même temps qu'il ne s'agit pas d'un remplacement de texte mais de la mention d'une référence externe.

Attention:

Pour que la référence externe puisse être insérée à l'endroit correspondant, l'analyseur syntaxique doit naturellement pouvoir traiter cette information et connaître le chemin pour afficher les données correspondantes. Des mentions supplémentaires sont indispensables pour la définition en particulier pour des données binaires, par exemple pour des graphiques. Vous en trouverez un exemple dans la partie sur les Autre page d'information Attributs avec une valeur d'entité.

XML est silencieux, en ce qui concerne les mentions de chemin locales (SYSTEM), sur la syntaxe exacte. Si l'ordinateur tourne sous Windows, il peut tout à fait être nécessaire d'utiliser pour le chemin des barres obliques inversées \ au lieu de la barre oblique typique chez Unix /. De la même façon il dépend de l'analyseur syntaxique en service s'il pourra trouver l'URI mentionnée ou non.

Un exemple d'utilisation d'une désignation publique (public identifier) pourrait donner:
<!ENTITY % HTML_Chars PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" >
%HTML_Chars;
Avec une telle désignation, vous incorporez les signes nommés de HTML dans votre DTD. De plus amples détails pour l'incorporation de ressources externes dans une DTD peuvent être trouvés dans la partie sur les vers le bas DTD modulaires à l'aide d'entités.

Certains analyseurs syntaxiques protestent avec des exemples comme celui ci-dessus, bien qu'ils soient conformes à XML.

 vers le hautvers le bas 

XML1.0msie5.0 Paramètre entité pour DTD plus complexes

Les paramètres entités permettent de définir des "Macros" pour une utilisation dans la DTD. Leur mise en œuvre est particulièrement indiquée quand certaines mentions plus complexes sur le contenu de types d'élément reviennent pour plusieurs types d'éléments. Ainsi par exemple on peut récapituler des formatages dans un texte comme en caractères gras, en italique, en couleur, souligner etc... en une macro "formatage_de_texte". Si maintenant on définit des éléments de texte significatifs comme des titres, des éléments de listes ou des cellules de tableaux, ce serait un travail de copie inutiles d'attribuer à chacun de ces éléments de texte è chaque fois toutes les possibilités de formatage. Il est plus simple de n'affecter que la macro "formatage_de_texte". Ainsi les paramètres entités améliorent-ils la lisibilité et les possibilités de modification dans des DTD complexes.

Exemple de DTD stock.dtd:

<!ENTITY % article "numero_article, nom_article, quantite_article">
<!ENTITY % additif "description | classe_produit">
<!ELEMENT stock (entree | sortie)*>
<!ELEMENT entree (numero_entree, (%article;), (%additif;))>
<!ELEMENT sortie (numero_sortie, (%article;), (%additif;))>
<!ELEMENT numero_entree (#PCDATA)>
<!ELEMENT numero_sortie (#PCDATA)>
<!ELEMENT numero_article  (#PCDATA)>
<!ELEMENT nom_article    (#PCDATA)>
<!ELEMENT quantite_article   (#PCDATA)>
<!ELEMENT description   (#PCDATA)>
<!ELEMENT classe_produit    (#PCDATA)>

Explication:

L'exemple représente l'extrait de la DTD d'un fichier dans lequel sont consignés les mouvements de stock. Dans le stock, il y a des entrées et des sorties de matériel. Dans chaque enregistrement il doit y avoir une entrée ou une sortie d'un certain produit. Un article en relation avec une sortie ou une entrée de matériel est toujours composé des mêmes données: d'un numéro d'article, nom d'article, quantité d'article et d'un additif de description, qui est soit une description d'article générale ou la classification dans une classe de produit. Ces données interactives peuvent être résumées en paramètres entités dans les définitions de types d'élément.

Dans l'exemple, deux paramètres entités sont définis: article et additif. Ici s'applique le vers le haut schéma pour définir les entités.. Avant le nom d'un paramètre entité notez le signe pourcentage %. Pour l'affectation de valeur, notez une mention sur le contenu d'un type d'élément. Il ne s'agit pas vraiment de la mention sur le contenu d'un type d'élément mais simplement d'un bloc de texte, d'une macro que vous pourrez utiliser dans la définition du type d'élément à venir. Dans les deux paramètres entités de l'exemple ci-dessus sont définies des mentions pour les contenus d'élément.

Dans l'exemple, les paramètres entités sont utilisés lors de la définition des types d'élément entree et sortie. Les deux types d'élément ont un Autre page d'information contenu d'éléments. Ils comportent un numéro de série pour l'entrée ou la sortie, le numéro d'article et le nom d'article, résumés par l'emploi du paramètre entité article, et au choix d'une description d'article ou d'une classe de produits résumés par l'emploi du paramètre entité additif.

Lors de l'utilisation d'un paramètre entité dans une définition de type d'élément, vous devez respecter la notation telle qu'elle est notée dans l'exemple. Les paramètres entités doivent être mis entre parenthèses. Tout de suite avant le nom du paramètre entité (sans espace les séparant) le signe pourcentage % doit figurer. Derrière le nom, il faut noter un point virgule ;.

Exemple d'une application valide:

Démonstration - nouvelle fenêtre Exemple d'affichage: aperçu (un navigateur XML affiche par exemple la structure de données)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE stock SYSTEM "stock.dtd">
<stock>

<entree>
  <numero_entree>452</numero_entree>
  <numero_article>45-234</numero_arcicle>
  <nom_article>fauteuil de bureau "ministre"</nom_article>
  <quantite_article>10</quantite_article>
  <classe_produit>C-III</classe_produit>
</entree>
<sortie>
  <numero_sortie>318</numero_sortie>
  <numero_arcicle>37-917</numero_arcicle>
  <nom_article>armoire à glaces  "Narcisse"</nom_article>
  <quantite_article>3</quantite_article>
  <description>F-IV</description>
</sortie>

</stock>

Explication:

L'exemple d'application n'apporte rien de plus si ce n'est la définition des types d'éléments entree et sortie qui repose en partie sur l'emploi de paramètres entités. Les paramètres entités ne sont donc significatifs que dans les définitions de la DTD, ils n'ont pas d'influence sur l'application. L'exemple d'application des définitions de la DTD montre deux enregistrements, un pour une entrée de matériel, l'autre pour une sortie de matériel. Les éléments intérieurs y sont notés comme les règles définies le permettent.

 vers le hautvers le bas 

XML1.0msie5.0 DTD modulaires à l'aide d'entités

Pour l'élaboration de structures de données plus complexes, il est souvent avisé de répartir les définitions sur plusieurs DTD: À l'aide d'entités, il vous est possible d'importer des DTD dans d'autres DTD en tant que modules. Ainsi par exemple dans un système de données de gestion, la possibilité est offerte d'établir une DTD séparée avec les structures de données d'un produit, DTD qui peut ensuite être importée dans différentes autres structures de données par exemple celle pour u8ne commande du produit ou bien celle pour la gestion des stocks.

Exemple de DTD produit.dtd:

<!ELEMENT produit (numero_produit,description,fabricant)>
<!ELEMENT numero_produit (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT fabricant (#PCDATA)>

Exemple de DTD commandes.dtd:

<!ENTITY % donnees_produit SYSTEM "produit.dtd" >
%donnees_produit;
<!ELEMENT commandes (commande)*>
<!ELEMENT commande (produit,client,nombre,prix)*>
<!ELEMENT client (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT prix (#PCDATA)>

Explication:

Dans la DTD nommée produit.dtd un type d'élément produit Autre page d'information avec un contenu d'éléments est défini. Le contenu d'éléments comprend les types d'élément numero_produit, description et fabricant, qui peuvent avoir chacun un contenu de caractères.

Dans la deuxième DTD nommée commande.dtd la DTD pour les données de produits est alors incorporée. Pour ce faire est d'abord définie une vers le haut entité pour ressources externes avec la nom donnees_produit. Elle mène à l'autre DTD produit.dtd. Il est important ici de noter le signe pourcentage devant le nom d'entité comme il convient pour des vers le haut paramètres entités pour blocs de texte de DTD. Car vous mentionnez avec le signe pourcentage que vous voulez utiliser l'entité dans la DTD actuelle et que son contenu doit être interprété comme partie intégrante de la DTD.

L'entité ainsi définie sera ensuite notée seule dans chaque autre définition de la DTD (%donnees_produit;). Par ce biais, les définitions de produit.dtd seront incorporées à cette endroit et pourront être employées dans les définitions suivantes. Dans l'exemple ci-dessus, vous pouvez le remarquer à la définition du type d'élément commande. Ce type d'élément contient comme contenu d'éléments quatre types d'éléments. Parmi eux, trois seulement sont définis dans la DTD actuelle, à savoir client, nombre et prix. L'autre type d'élément produit est celui qui est défini dans produit.dtd.

Exemple d'une application valide:

Démonstration - nouvelle fenêtre Exemple d'affichage: aperçu (un navigateur XML affiche par exemple la structure de données)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE commandes SYSTEM "commandes.dtd">
<commandes>
  <commande>
    <produit>
       <numero_produit>39304</numero_produit>
       <description>perceuse XPL75</description>
       <fabricant>Bohringer &amp; fils</fabricant>
    </produit>
    <client>Uniprix, Filiale de Venelles</client>
    <nombre>100</nombre>
    <prix>45900,00</prix>
  </commande>
  <commande>
    <produit>
       <numero_produit>92842</numero_produit>
       <description>Bonnet de bain Monaco</description>
       <fabricant>Etienne Monet</fabricant>
    </produit>
    <client>La mode à l'eau, Dunkerque</client>
    <nombre>10</nombre>
    <prix>234,00</prix>
  </commande>
</commandes>

Explication:

Dans le fichier d'application est mentionné en fin de compte le fichier commandes.dtd. Pourtant, même le fichier produit.dtd est lui aussi déterminant étant donné qu'il a été incorporé dans le fichier commandes.dtd. Car à l'endroit dans commandes.dtd, où le contenu d'éléments produit a été affecté au type d'élément commande , c'est toute la définition du type d'élément produit de produit.dtd dont il s'agit.

 vers le haut
page suivante Autre page d'information Notations pour données référencées
page précédente Autre page d'information Attributs et affectation de valeurs
 

© 2001 Stefan Münz / © 2003 Traduction Adresse électronique Serge François, 13405@free.fr
Adresse électronique selfhtml@fr.selfhtml.org