SELFHTML/Aides à la navigation XML/DTD Définitions de type de document (DTD) |
Un élément est ce qui dans un langage de marquage basé sur XML est représenté par une notation comme par exemple <date_naissance>...</date_naissance>
. Dans une DTD, vous pouvez définir le type d'élément qui en fait partie, donc par exemple le type d'élément date_naissance
. Ce faisant, vous définissez le nom de l'élément et mentionnez quel contenu l'élément peut avoir.
Les éléments peuvent aussi être imbriqués et des règles sont possibles pour fixer à quel endroit et combien de fois un élément peut être placé. Ainsi en HTML par exemple, l'élément <tr>...</tr>
ne peut être placé que dans <table>...</table>
. Entre <table>
et </table>
vous ne pouvez en conséquence noter aucun texte mais devez respecter la structure du tableau qui exige des éléments intérieurs tels que <tr>...</tr>
. Vous déterminez ces règles en définissant les types d'éléments de votre DTD.
Les types d'éléments sont notés dans une DTD d'après le schéma suivant:
<!ELEMENT Nom(contenu)> |
La définition d'un élément commence par la parenthèse pointue d'ouverture <
suivie immédiatement d'un point d'exclamation !
. Derrière en majuscules suit le mot clé ELEMENT
. À la suite enfin un nom pour l'élément. Vous pouvez choisir librement le nom. Il doit cependant satisfaire aux règles pour les noms en XML. Derrière le nom, notez des mentions sur le contenu du type d'élément. Ces mentions peuvent être très compliquées et régir ce qui doit constituer un élément. La définition du type d'élément se termine par une parenthèse pointue de fermeture >
. Les différentes parties de la définition du type d'élément sont séparées par un ou plusieurs espaces.
Vous pouvez définir une telle définition de type d'élément à n'importe quel endroit dans la DTD - avant ou après d'autres définitions comme <!ATTLIST...>
( attributs), <!ENTITY...>
( entités) ou bien <!NOTATION...>
( notations).
Contenir des caractères signifie qu'un élément peut contenir le texte que vous désirez dans la quantité que vous désirez mais sans autres éléments. Un contenu en caractères est une chaîne de caractères choisie, d'une longueur choisie donc du texte, des chiffres et des caractères spéciaux.
<!ELEMENT telephone (#PCDATA)> |
Dans l'exemple un type d'élément est défini qui, dans l'application, pourra être noté comme élément <telephone>...</telephone>
. Le schéma de définition de types d'élément s'applique ici. Le contenu de caractères est indiqué par l'identificateur-clé #PCDATA
(abréviation pour parsed character data, en français données en caractères analysées). Le signe dièse est indispensable, PCDATA doit être écrit en majuscules et le tout doit être mis entre parenthèses.
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 telephone SYSTEM "telephone.dtd"> <telephone>123456</telephone> |
Le type d'élément telephone
permet des données en caractères, une chaîne de caractères telle que 123456
est donc un contenu correct.
L'élément telephone
est dans cet exemple simplifié à l'extrême en même temps l'élément document.
#PCDATA
signifie certes à peu près "autant de texte que vous voulez", mais il signifie aussi "aucun autre élément intérieur". Une application comme <telephone><gras>123456</gras></telephone>
n'est donc pas permise d'après la définition de l'élément telephone
. Pour ces cas là, vous devez définir des types d'élément avec un contenu d'élément ou bien définir des éléments avec un contenu mixte .
Le P
dans PCDATA
signifie, que le contenu est analysé complètement par l'analyseur syntaxique XML. En pratique, cela signifie dans le contenu d'un élément ainsi défini, s'appliquent les règles pour les signes, jeux de caractères .
Dans la version 1.0 XML ne fait pas de distinction entre les différents types de données par exemple pour les données numériques ou les données alphanumériques. Le type de données PCDATA correspond au type de données alphanumériques pour les chaînes de caractères (Strings) dans les langages de programmation - il n'y a pas de type de données pour les nombres, le format de date ou autres. Cela est déjà ressenti comme gros inconvénient par les développeurs, et les versions futures de XML proposeront vraisemblablement à côté de PCDATA plusieurs types de données.
À la différence d'un type d'élément contenant des caractères un type d'élément avec un contenu d'éléments est un élément qui contient d'autres types d'éléments internes. Il ne peut toutefois pas contenir lui même de données en caractères mais ne comporte que des autres éléments.
<!ELEMENT annuaire (code_etranger, telephone)> <!ELEMENT code_etranger (#PCDATA)> <!ELEMENT telephone (#PCDATA)> |
Dans l'exemple trois types d'éléments sont définis. La première des trois définitions est un type d'élément avec un contenu d'éléments. Cette définition a la même construction que la définition d'un type d'élément contenant des caractères. Le schéma de définition de types d'élément s'applique ici. La différence réside en ce que dans les parenthèses dans lesquelles est défini le contenu du type d'élément, sont notés les noms d'autres types d'éléments, séparés par des virgules.
Dans le premier des exemples ci-dessus une suite invariable d'éléments est définie pour le type d'élément annuaire
; elle comprend les types d'élément code_etranger
et telephone
. Le type d'élément annuaire
peut donc d'après la définition ci-dessus contenir exactement une fois les éléments code_etranger
et telephone
, et cela dans cet ordre.
Par la même occasion, l'élément annuaire
de l'exemple est l'élément document, donc l'élément situé le plus à l'extérieur des données.
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 annuaire SYSTEM "annuaire.dtd"> <annuaire> <code_etranger>0049</code_etranger> <telephone>974791003</telephone> </annuaire> |
Les types d'élément annuaire
, code_etranger
et telephone
sont imbriqués de la façon définie dans la DTD. Les types d'élément code_etranger
et telephone
ne contiennent rien d'autre que des données en caractères et ont ainsi un contenu correct.
En l'absence de toute autre mention, un type d'élément ne peut être placé qu'une fois. Afin que l'élément d'un type d'élément puisse être noté plusieurs fois, vous devez l'exprimer dans la DTD.
<!ELEMENT recettes (liste_ingredients, suite_instructions)> <!ELEMENT liste_ingredients (ingredient)+> <!ELEMENT ingredient (#PCDATA)> <!ELEMENT suite_instructions (instruction)*> <!ELEMENT instruction (#PCDATA)> |
L'exemple montre une DTD simple pour une recette de cuisine. Pour toutes les définitions de l'exemple, le schéma de définition de types d'élément s'applique. Dans un premier temps, le type d'élément recettes
est défini comme élément document. Ce type d'élément est un type d'élément avec un contenu d'éléments. Son contenu se compose des deux types d'élément liste_ingredients
et suite_instructions
. Ces deux types d'éléments sont définis. Tous deux comportent eux aussi un contenu d'éléments.
Le type d'élément liste_ingredients
peut contenir un ou plusieurs types d'élément ingredient
. La raison en est le signe plus +
dans la définition derrière la mention du contenu. Par le signe plus, vous mentionnez que le contenu, dans l'exemple le type d'élément ingredient
, doit être placé au moins une fois, autrement aussi souvent que souhaité dans liste_ingredients
. Pour l'exemple de la recette, une telle construction est judicieuse car une recette doit comporter au moins un ingrédient.
Le type d'élément suite_instructions
peut contenir de la même façon un ou plusieurs types d'élément instruction
mais peut cependant également rester vide. La raison dans ce cas-ci est l'étoile *
dans la définition derrière la mention du contenu. Par l'étoile, vous mentionnez que le contenu, dans l'exemple le type d'élément instruction
, peut ne pas être placé, être placé une fois ou aussi souvent que souhaité dans suite_instructions
. Pour l'exemple de la recette, cela signifie qu'il peut aussi y avoir des recettes avec ingrédients mais sans instructions.
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 recettes SYSTEM "recettes.dtd"> <recettes> <liste_ingredients> <ingredient>300 g pommes de terre épluchées</ingredient> <ingredient>2 poireaux</ingredient> <ingredient>1 oignon</ingredient> <ingredient>1 tb beurre</ingredient> <ingredient>600 ml eau</ingredient> </liste_ingredients> <suite_instructions> <instruction>couper les pommes de terre en petits dès.</instruction> <instruction>laver les poireaux, les couper en fines rondelles.</instruction> <instruction>éplucher l'oignon, le couper fin et le faire réduire au beurre.</instruction> <instruction>ajouter les pommes de terre, les poireaux et l'eau et cuire 18 à 20 minutes.</instruction> </suite_instructions> </recettes> |
Les types d'éléments sont imbriqués de la façon définie dans la DTD. Les types d'éléments ingredient
et instruction
sont placés plusieurs fois dans liste_ingredients
ou dans suite_instructions
, ce qui est permis d'après la définition. Dans ingredient
et dans instruction
n'ont été placées en tous cas rien d'autre que des contenus en caractères ainsi que ces types d'éléments ont été définis dans la DTD avec l'identificateur-clé #PCDATA
.
Si l'exemple ne devait contenir aucun élément du type instruction
, ce qui d'après la définition serait tout à fait permis grâce à l'étoile, vous devriez malgré tout noter dans l'explication valide:
<suite_instructions></suite_instructions>
La raison en est que, lors de la définition du type d'élément recettes
dans l'exemple ci-dessus, on a fixé qu'il devait comporter les deux types d'élément liste_ingredients
et suite_instructions
, et que ces deux types d'éléments doivent être placés, à savoir exactement une fois.
Quand vous définissez des types d'élément avec un contenu d'éléments, il peut arriver que cette suite rigide d'éléments que vous prévoyez pour l'élément, ne soit pas toujours appropriée dans la pratique. Pour une adresse postale par exemple, on pourrait faire la distinction alternativement entre la mention de la rue et du numéro et une mention de boite postale, et la mention du titre d'une personne est un exemple typique de mention facultative, quelque chose donc que l'on désire mentionner pour quelques adresses mais par contre pas pour d'autres.
<!ELEMENT adresses (adresse)*> <!ELEMENT adresse (titre?, nom, (boite_postale | numero_rue), codepostal_ville)> <!ELEMENT titre (#PCDATA)> <!ELEMENT nom (#PCDATA)> <!ELEMENT boite_postale (#PCDATA)> <!ELEMENT numero_rue (#PCDATA)> <!ELEMENT codepostal_ville (#PCDATA)> |
L'exemple montre une DTD simple pour la gestion d'adresses. Pour toutes les définitions de l'exemple, le Schéma de définition de types d'élément s'applique. Un type d'élément nommé adresses
est défini comme élément document. Celui-ci peut contenir autant de répétitions que l'on veut pour le type d'élément adresse
. Le type d'élément adresse
définit un type d'élément avec un contenu d'éléments. Le contenu comprend différents types d'éléments pour les différentes données d'une adresse . Ces types d'élément sont définis comme types d'éléments contenant des caractères tout simples.
Le titre est défini dans l'exemple comme étant facultatif. Cela est permis par le point d'interrogation ?
placé dans la définition derrière la mention de contenu prés du nom du type d'élément. La simple notation de titre
définirait l'utilisation du type d'élément comme étant absolument indispensable, alors que la mention titre?
désigne son utilisation comme étant facultative.
Par ailleurs il a été défini dans l'exemple que le choix est possible entre une mention de boite postale ou d'adresse géographique. Pour cela, les types d'éléments au choix sont mis dans de nouvelles parenthèses. Dans ces parenthèses les types d'élément au choix sont notés, séparés par une barre verticale |
.
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 adresses SYSTEM "adresses.dtd"> <adresses> <adresse> <nom>Société Générale</nom> <boite_postale>7001</boite_postale> <codepostal_ville>13100 Aix en Provence</codepostal_ville> </adresse> <adresse> <titre>Monsieur</titre> <nom>Luc Minighetti</nom> <numero_rue>112 rue de Lyon</numero_rue> <codepostal_ville>13000 Marseille</codepostal_ville> </adresse> </adresses> |
Dans l'exemple, deux adresses sont notées. La première adresse est celle d'une banque, pour cette raison, le titre peut être omis pour cette adresse, car il n'est nécessaire que pour des personnes. Étant donné que le type d'élément titre a été défini comme facultatif, l'omission est possible. Dans l'exemple de la banque l'adresse est une boite postale. Étant donné qu'à cet endroit d'après la définition, soit le type d'élément boite_postale
soit le type d'élément numero_rue
peuvent être placés, l'application est correcte. Pour la deuxième adresse, il s'agit de celle d'une personne. Dans ce cas, le titre est noté et à la place d'une boite postale, une mention de rue et de numéro dans l'élément en alternative numero_rue
.
Pour les types d'élément au choix, vous pouvez mentionner aussi bien sûr plus de deux types d'éléments.
Quand vous désirez définir des applications XML dans lesquelles ne doivent pas être groupés de façon si rigide, mais peuvent être notés dans un ordre relativement libre, - comme par exemple en HTML - alors, vous devez définir des éléments avec un contenu mixte. En HTML <body>...</body>
en est un tel élément typique. Dans cet élément, vous pouvez noter la plupart des autres éléments HTML dans un ordre relativement libre et en respectant quelques règles d'imbrication peu nombreuses. Pour les applications qui sont en général moins orientées sur les bases de données pour l'être davantage sur le texte libre, vous avez besoin de ces contenus mixtes.
<!ELEMENT texte (#PCDATA | menace | rire | question | cynique)*> <!ELEMENT menace (#PCDATA)> <!ELEMENT rire (#PCDATA | clignant_oeil)*> <!ELEMENT question (#PCDATA)> <!ELEMENT clignant_oeil (#PCDATA)> <!ELEMENT cynique (#PCDATA)> |
L'exemple représente une DTD pour du texte dans lequel les émotions sont signalées comme telles. Pour toutes les définitions de l'exemple, le schéma de définition de types d'élément s'applique. Une type d'élément nommé texte
est défini comme élément document avec contenu mixte. Vous déterminez un contenu mixte en notant pour le contenu de l'élément, donc entre parenthèses, l'identificateur-clé #PCDATA
pour des contenus de caractères et en plus une série de types d'élément autorisés pour d'autres types d'élément avec un contenu d'éléments. Les mentions doivent être séparés par la barre verticale |
pour des types d'éléments en alternative. Par ailleurs tout le contenu doit recevoir à la fin l'étoile comme dans l'exemple *
pour autant de répétitions que l'on veut . Ainsi, chacun de ces éléments peut être répété à souhait dans le passage dans lequel il est permis. Un contenu mixte est donc une combinaison de toutes les possibilités de définition traitées jusqu'ici.
Dans l'exemple les autres types d'éléments notés pour texte
sont définis de la même façon. À l'exception du type d'élément rire
il n'a été permis pour tous les types d'élément rien d'autre que des contenus de caractères (#PCDATA
). Le type d'élément rire
correspond par contre lui aussi au modèle pour contenu mixte. Outre le contenu de caractères purs un autre type d'élément clignant_oeil
est permis dans ce type d'élément .
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 text SYSTEM "texte.dtd"> <texte> Quelquefois la conscience nous dit: <menace>tu dois penser davantage aux femmes et aux hommes.</menace> Alors, bien sûr, on se demande parfois , <question>pourquoi il y a là tant matière à reflexion,</question> mais quelquefois aussi, on obéit et réfléchit. La femme dit à l'homme: <rire>Oh chéri, <clignant_oeil>tu vaux ton poids d'or!</clignant_oeil></rire> Et l'homme répond: <cynique>Oui, parceque je pousse le chariot et que j'y ai mis une pièce de dix francs!</cynique> La femme rétorque: <rire>tu as tout compris!</rire> </texte> |
L'exemple d'application contient l'élément document <texte>..</text>
qui contient un contenu mixte typique. Du texte normal est placé (données en caractères) mais également des autres éléments. L'élément rire
est placé deux fois en tout. Cela pourrait tout aussi bien être l'élément menace
qui serait utilisé deux ou plusieurs fois dans l'élément texte
. Cela est permis en raison de l'utilisation de l'étoile *
lors de la définition de tous les types d'élément intérieurs. L'élément clignant_oeil
est placé à l'intérieur de rire
comme c'est permis par la DTD - à l'extérieur il ne pourrait cependant pas être placé.
Les éléments au contenu libre sont une forme plus souple encore des éléments à contenu mixte. Il s'agit ici plus ou moins d'éléments joker ou passe-partout, dont le contenu n'est pas du tout fixé. Tous les autres types d'élément définis dans la DTD peuvent être placés dans un élément au contenu libre.
<!ELEMENT anytext ANY> <!ELEMENT anglais (#PCDATA)> <!ELEMENT italiano (#PCDATA)> |
Pour toutes les définitions de l'exemple, le schéma de définition de types d'élément s'applique. Par le mot clé ANY
(en majuscules) au lieu de la définition concrète du contenu d'un élément, vous mentionnez que cet élément (dans l'exemple l'élément document) peut contenir des contenus de caractères et des types d'élément avec un contenu d'éléments. Dans l'exemple, deux autres types d'éléments sont définis qui peuvent être eux aussi placés.
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 anytext SYSTEM "anytext.dtd"> <anytext> c'est un peu de texte qui signifie en anglais: <anglais>this is some text</anglais> et en italien: <italiano>ciò è un certo testo</italiano> </anytext> |
Dans l'exemple l'élément document <anytext>...</anytext>
est défini. Des données en caractères et tous les autres éléments de votre choix pour lesquels un type d'élément existe dans la DTD peuvent y être placés. L'exemple montre un mélange simple.
Les éléments vides sont ceux qui n'ont pas de contenu. En HTML classique par exemple <br>
ou bien <img>
font partie de ce genre d'éléments. En HTML on les appelle aussi éléments autonomes. Dans la philosophie de XML, à vrai dire, un contenu est prévu pour chaque élément. Quand vous voulez définir des types d'élément qui n'ont pas de contenu, vous devez le mentionner spécialement. Même la notation des éléments dans l'application indique qu'il s'agit d'un cas particulier.
<!ELEMENT lignes_texte (#PCDATA | nouvelle_ligne)*> <!ELEMENT nouvelle_ligne EMPTY> |
Dans l'exemple, deux types d'élément sont définis: un type d'élément lignes_texte
pour l'élément document avec un contenu mixte, et un type d'élément nouvelle_ligne
qui peut être placé à volonté dans le type d'élément lignes_texte
. Pour les deux définitions de l'exemple, le Schéma de définition de types d'élément s'applique.
Le type d'élément nouvelle_ligne
est ici un type d'élément vide. Cela est signalé par le mot clé EMPTY
(en français: vide) à l'endroit où le contenu du type d'élément est défini.
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 lignes_texte SYSTEM "lignes_texte.dtd"> <lignes_texte> Ceci est le texte, mais où commence la <nouvelle_ligne /> nouvelle ligne? </lignes_texte> |
Dans l'exemple l'élément sans contenu est noté conformément aux règles pour les repères, attributs, affectations de valeur. La transcription de la signification de "nouvelle_ligne" peut naturellement n'être assurée que par un langage de style comme les CSS ou XSL.
Pour la création de DTD plus importantes avec de nombreux types d'éléments, vous remarquerez vite qu'il y a beaucoup de répétitions en particulier pour les contenus de types d'éléments. De nombreux types d'éléments forment souvent d'un point de vue logique un groupe de caractéristiques communes qui peut être placé enfermé comme contenu d'élément de plusieurs autres éléments qui lui sont hiérarchiquement supérieurs. Pour ces cas-là, la syntaxe DTD offre la possibilité de récapituler ces types d'éléments dans de tels groupes logiques. Un groupe logique de types d'élément est désigné comme paramètre entité. La mise en œuvre de paramètres entités augmente la lisibilité dans des DTD complexes ainsi que la convivialité pour les modifications. Cette possibilité est décrite dans la partie sur les paramètres entités pour DTD plus complexes.
Pour représenter les relations et règles complexes lors de la définition de types d'élément, il est important de se poser les bonnes questions et de se faire un modèle d'éléments prévus.
Beaucoup de structures de données affichent une forte hiérarchie logique. C'est ce que l'exemple d'un livre met bien en lumière. Un livre comprend de façon typique des chapitres, des index, des pages spéciales comme les informations, des titres etc... Chaque chapitre comporte un titre de chapitre et des sections. Chaque section comprend un titre de section et le contenu de la section. Un contenu de section peut contenir des choses comme des paragraphes de texte normaux, des énumérations, des références de graphique etc.... Chaque paragraphe de texte courant, chaque point d'une énumération peut contenir des lignes de texte avec des formatages spéciaux par exemple pour les caractères gras, l'écriture en italique etc.... L'idéal pour de telles structures de données est de penser lors de la création des types d'éléments et de leurs relations du plus général (le livre) au plus particulier ( le terme en caractères gras au milieu d'un paragraphe). XML soutient particulièrement bien ce genre de structures de données fortement hiérarchisées étant donné qu'un document d'après la philosophie de XML peut être représenté sous forme d'une arborescence. La transcription d'une structure d'éléments fortement hiérarchisée dans une DTD XML est donc également relativement simple tout en pouvant bien être retracée.
<!ENTITY % texte "rehausse | remarque | exigeant | passage_ligne"> <!ELEMENT livre (titre,informations,index_contenu,(chapitre)+,index_motscles)> <!ELEMENT titre (titre_principal,soustitre)> <!ELEMENT titre_principal (#PCDATA)> <!ELEMENT soustitre (#PCDATA)> <!ELEMENT informations (cip,copyright,editeur)> <!ELEMENT cip (#PCDATA | %texte;)*> <!ELEMENT droits_auteur (#PCDATA | %texte;)*> <!ELEMENT editeur (#PCDATA | %texte;)*> <!ELEMENT index_contenu (titre_ic,(mentionchap_ic | mentionsection_ic)*)> <!ELEMENT titre_ic (#PCDATA)> <!ELEMENT mentionchap_ic (#PCDATA)> <!ELEMENT mentionsection_ic (#PCDATA)> <!ELEMENT chapitre (titre_chapitre,(section)+)> <!ELEMENT titre_chapitre (#PCDATA)> <!ELEMENT section (titre_section,(texte_courant | enumeration | graphique)+)> <!ELEMENT titre_section (#PCDATA)> <!ELEMENT texte_courant (#PCDATA | %texte;)*> <!ELEMENT enumeration (point_enumeration)+> <!ELEMENT point_enumeration (#PCDATA | %texte;)*> <!ELEMENT graphique (fichier_graphique)> <!ELEMENT fichier_graphique (#PCDATA)> <!ELEMENT index_motscles (titre_imc,(mention_imc)*)> <!ELEMENT titre_imc (#PCDATA)> <!ELEMENT mention_imc (#PCDATA)> <!ELEMENT rehausse (#PCDATA)> <!ELEMENT remarque (#PCDATA)> <!ELEMENT exigeant (#PCDATA)> <!ELEMENT passage_ligne EMPTY> |
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 livre SYSTEM "livre.dtd"> <?xml:stylesheet type="text/css" href="livre.css" ?> <livre> <titre> <titre_principal>Je suis Valentin</titre_principal> <soustitre>Comment ma vie est devenue ce qu'elle est</soustitre> </titre> <informations> <cip>Bibliothèque nationale de France -unite_commande-CIP:<passage_ligne /> titre disponible à la bibliothèque nationale de France</cip> <droits_auteur>©2000 tous droits réservés chez l'éditeur</droits_auteur> <editeur>Mon édition, Derrière la rotonde</editeur> </informations> <index_contenu> <titre_ic>index_contenu</titre_ic> <mentionchap_ic>Mes jeunes années</mentionchap_ic> <mentionsection_ic>enfance</mentionsection_ic> <mentionsection_ic>jeunesse</mentionsection_ic> <mentionchap_ic>Comment je suis devenu un homme</mentionchap_ic> <mentionsection_ic>Le premier amour</mentionsection_ic> </index_contenu> <chapitre> <titre_chapitre>Mes jeunes années</titre_chapitre> <section> <titre_section>Enfance</titre_section> <texte_courant> Mon enfance comprend deux sections de m vie: </texte_courant> <enumeration> <point_enumeration>- l'âge du nourrisson</point_enumeration> <point_enumeration>- l'âge du garçonnet</point_enumeration> </enumeration> </section> <section> <titre_section>Jeunesse</titre_section> <texte_courant>Ma jeunesse se résume pour l'essentiel à l'acné juvénile. </texte_courant> </section> </chapitre> <chapitre> <titre_chapitre>Comment je suis devenu un homme</titre_chapitre> <section> <titre_section>Le premier amour</titre_section> <texte_courant>Sie <rehausse>surgit</rehausse>, <rehausse>se vécut</rehausse>, et <rehausse>s'en fut</rehausse> à nouveau. </texte_courant> <graphique> <fichier_graphique>premieramour.tif</fichier_graphique> </graphique> </section> </chapitre> <index_motscles> <titre_imc>Index des mots clé</titre_imc> <mention_imc>acné</mention_imc> <mention_imc>amour</mention_imc> <mention_imc>enfance</mention_imc> <mention_imc>jeunesse</mention_imc> <mention_imc>nourrisson</mention_imc> </index_motscles> </livre> |
L'exemple ne peut bien sûr ne détailler que de façon grossière un livre complet - si vous essayez effectivement de décrire une structure de livre complète avec XML, vous aurez certainement besoin d'encore plus de détails. L'exemple veut simplement montrer de quoi une telle description doit avoir l'air dans son principe.
Dans l'exemple, un paramètre entité pour DTD plus complexes est défini dans un premier temps. Quatre types d'élément rehausse
, remarque
, exigeant
et passage_ligne
y sont récapitulés; ils peuvent être placés dans différents paragraphes de texte.
Le reste de la DTD comporte la définition des types d'éléments désirés. L'ordre n'a à vrai dire pas grande importance, pourtant l'exemple respecte une certaine logique et essaie d'aller du plus général au particulier. L'élément dans lequel tout le livre se trouve est défini avec le nom livre
. L'élément est un type d'élément avec un contenu d'éléments. Les types d'éléments titre
, informations
, index_contenu
et index_motscles
peuvent y être placés une fois exactement, et cela dans l'ordre noté. En fait, le type d'éléments chapitre
situé dans la suite indiquée entre index_contenu
et index_motscles
, doit être placé au moins une fois et peut être placé avec autant de répétitions que l'on veut . La structure de base du livre est ainsi fixée.
Les passages titre
et informations
contiennent comme contenus d'élément, les types d'élément correspondants. Pour les types d'élément subordonnés à informations
le paramètre entité défini est d'abord utilisé. Les types d'élément correspondants rehausse
, remarque
, exigeant
et passage_ligne
peuvent être placé à volonté dans cip
, droits_auteur
et editeur
. Les autres passages du livre se divisent en différents types d'élément d'après un schéma semblable.
Attributs et affectation de valeurs | |
Règles de traitement pour les DTD | |
SELFHTML/Aides à la navigation XML/DTD Définitions de type de document (DTD) |
© 2001 Stefan Münz / © 2003 Traduction Serge François, 13405@free.fr
selfhtml@fr.selfhtml.org