DTD (Document Type Definition) Le rôle d'une DTD (Document Type Definition) est d
DTD (Document Type Definition) Le rôle d'une DTD (Document Type Definition) est de définir précisément la structure d'un document. Il s'agit d'un certain nombre de contraintes que doit respecter un document pour être valide. Ces contraintes spécifient quels sont les éléments qui peuvent apparaître dans le contenu d'un élément, l'ordre éventuel de ces éléments et la présence de texte brut. Elles définissent aussi, pour chaque élément, les attributs autorisés et les attributs obligatoires. 1 On reprend la petite bibliographie du fichier bibliography.xml déjà utilisée au chapitre précédent. La troisième ligne de ce fichier est la déclaration de la DTD qui référence un fichier externe bibliography.dtd. Le nom bibliography de l'élément racine du document apparaît dans cette déclaration juste après le mot clé DOCTYPE. <!DOCTYPE bibliography SYSTEM "bibliography.dtd"> On présente maintenant le contenu de ce fichier bibliography.dtd qui contient la DTD du fichier bibliography.xml. La syntaxe des DTD est héritée de SGML et elle est différente du reste du document XML. Il n'y a pas de balises ouvrantes et fermantes. La DTD contient des déclarations d'éléments et d'attributs délimitées par les chaînes de caractères '<!' et '>'. Un mot clé juste après la chaîne '<!' indique le type de la déclaration. 2 1. Un premier exemple La syntaxe et la signification précise de ces déclarations sont explicitées dans ce chapitre. 3 2. Déclaration de la DTD La déclaration de la DTD du document doit être placée dans le prologue. La DTD peut être interne, externe ou mixte. Elle est interne si elle est directement incluse dans le document. Elle est externe si le document contient seulement une référence vers un autre document contenant la DTD. Elle est finalement mixte si elle est constituée d'une partie interne et d'une partie externe. Une DTD est généralement prévue pour être utilisée pour de multiples documents. Elle est alors utilisée comme DTD externe. En revanche, il est pratique d'inclure directement la DTD dans le document en phase de développement. La déclaration de la DTD est introduite par le mot clé DOCTYPE et a la forme générale suivante où root-element est le nom de l'élément racine du document. <!DOCTYPE root-element ... > Le nom de l'élément racine est suivi du contenu de la DTD dans le cas d'une DTD interne ou de l'URL du fichier contenant la DTD dans le cas d'une DTD externe. 4 2.1. DTD interne Lorsque la DTD est incluse dans le document, sa déclaration prend la forme suivante où son contenu est encadré par des caractères crochets '[' et ']'. <!DOCTYPE root-element [ déclarations ]> Les déclarations déclarations constituent la définition du type du document. Dans l'exemple suivant de DTD, le nom de l'élément racine est simple. La DTD déclare en outre que cet élément ne peut contenir que du texte (Parsed Characters DATA) et pas d'autre élément. <!DOCTYPE simple [ <!ELEMENT simple (#PCDATA)> ]> 2.2. DTD externe Lorsque la DTD est externe, celle-ci est contenue dans un autre fichier dont l'extension est généralement .dtd. Le document XML se contente alors de donner l'adresse de sa DTD pour que les logiciels puissent y accéder. L'adresse de de la DTD peut être donnée explicitement par une URL ou par un FPI (Formal Public Indentifier). Les FPI sont des noms symboliques donnés aux documents. Ils sont utilisés avec des catalogues qui établissent les correspondances entre ces noms symboliques et les adresses réelles des documents. Lorsqu'un logiciel rencontre un FPI, il parcourt le catalogue pour le résoudre, c'est-à-dire déterminer l'adresse réelle du document. Les catalogues peuvent contenir des adresses locales et/ou des URL. Ils constituent donc une indirection qui facilite la maintenance. Lorsqu'un document, une DTD par exemple, est déplacé, il suffit de modifier les catalogues plutôt que tous les documents qui référencent le document. 5 2.2.1. Adressée par FPI Les FPI (Formal Public Identifier) sont des identifiants de documents hérités de SGML. Ils sont plutôt remplacés en XML par les URI qui jouent le même rôle. Ils sont constitués de quatre parties séparées par des chaînes '//' et ils obéissent donc à la syntaxe suivante. type//owner//desc//lang Le premier caractère type du FPI est soit le caractère '+' si le propriétaire est enregistré selon la norme ISO 9070 soit le caractère '-' sinon. Le FPI continue avec le propriétaire owner et la description desc du document. Cette description est formée d'un mot clé suivi d'un texte libre. Ce mot clé est DTD pour les DTD mais il peut aussi être DOCUMENT, ELEMENTS ou ENTITIES. Le FPI se termine par un code de langue lang de la norme ISO 639. Lorsque le document appartient à une norme ISO, le premier caractère '+' ainsi que la chaîne '//' suivante sont supprimés. Des exemples de FPI sont donnés ci-dessous. -//W3C//DTD XHTML 1.0 Strict//EN -//OASIS//DTD Entity Resolution XML Catalog V1.0//EN ISO/IEC 10179:1996//DTD DSSSL Architecture//EN 6 Un FPI peut être converti en URI en utilisant l'espace de noms publicid des URN et en remplaçant chaque chaîne '//' par le caractère ':' et chaque espace par le caractère '+' comme dans l'exemple ci-dessous. urn:publicid:-:W3C:DTD+XHTML+1.0+Strict:EN La déclaration d'une DTD externe peut utiliser un FPI pour désigner la DTD. La référence à un FPI est introduite par le mot clé PUBLIC suivi du FPI et d'une URL délimitée par des apostrophes ''' ou des guillemets '"'. L'URL est utilisée dans le cas où le FPI ne permet pas à l'application de retrouver la DTD. <!DOCTYPE root-element PUBLIC "fpi" "url"> L'exemple suivant est la déclaration typique d'une page HTML qui utilise une des DTD de XHTML. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 7 2.2.2. Adressée par URL La référence à une URL est introduite par le mot clé SYSTEM suivi de l'URL délimitée par des apostrophes ''' ou des guillemets '"'. <!DOCTYPE root-element SYSTEM "url"> L'URL url peut être soit une URL complète commençant par http:// ou ftp:// soit plus simplement le nom d'un fichier local comme dans les exemples suivants. <!DOCTYPE bibliography SYSTEM "http://www.omega-one.org/~carton/Enseignement/bibliography.dtd"> <!DOCTYPE bibliography SYSTEM "bibliography.dtd"> 8 2.3. DTD mixte Il est possible d'avoir simultanément une DTD externe adressée par URL ou FPI et des déclarations internes. La DTD globale est alors formée des déclarations internes suivies des déclarations externes. La déclaration prend alors une des deux formes suivantes On retrouve un mélange de la syntaxe des DTD externes avec les mots clés SYSTEM et PUBLIC et de la syntaxe des DTD internes avec des déclarations encadrées par les caractères '[' et ']'. <!DOCTYPE root-element SYSTEM "url" [ declarations ]> <!DOCTYPE root-element PUBLIC "fpi" "url" [ declarations ]> Il n'est pas possible de déclarer plusieurs fois le même élément dans une DTD. Lorsque la DTD est mixte, tout élément doit être déclaré dans la partie interne ou dans la partie externe mais pas dans les deux. En revanche, il est possible de déclarer plusieurs fois le même attribut. La première déclaration a priorité. Il est ainsi possible de donner une nouvelle déclaration d'un attribut dans la partie interne puisque celle-ci est placée avant la partie externe. Les entités paramètres peuvent également être déclarées plusieurs fois dans une même DTD et c'est encore la première déclaration qui l'emporte. La DTD suivante déclare l'entité paramètre book.entries égale à la chaîne vide. Cette entité est ensuite utilisée dans la déclaration de l'élément book. Cette déclaration laisse la possibilité au document principal d'ajouter des enfants à l'élément book en donnant une nouvelle valeur à l'entité book.entries. 9 La première ligne de cette DTD est une entête XML qui permet de déclarer le codage des caractères. <?xml version="1.0" encoding="iso-8859-1"?> <!-- DTD externe --> <!-- Entité paramètre pour les enfants à ajouter à l'élément book --> <!ENTITY % book.entries ""> <!ELEMENT bibliography (book)+> <!ELEMENT book (title, author, year, publisher, isbn %book.entries;)> <!ATTLIST book key NMTOKEN #REQUIRED> <!ATTLIST book lang (fr | en) #IMPLIED> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT isbn (#PCDATA)> 10 Le document suivant a une DTD mixte dont la partie externe est la DTD précédente. La partie interne de la DTD contient la déclaration de l'élément url. Elle contient également des nouvelles déclarations de l'entité paramètre book.entries et de l'attribut lang de l'élément book, qui devient ainsi obligatoire. <?xml version="1.0" encoding="iso-8859-1" standalone="no"?> <!DOCTYPE bibliography SYSTEM "mixed.dtd" [ <!-- Ajout d'un enfant url à l'élément book --> <!ENTITY % book.entries ", url?"> <!-- Redéclaration de l'attribut lang de l'élément book --> <!-- L'attribut devient obligatoire --> <!ATTLIST book lang (fr | en) #REQUIRED> <!-- Déclaration de l'élément url --> <!ELEMENT url (#PCDATA)> ]> 11 Comme la valeur donnée à l'entité paramètre book.entries est la chaîne ", url?" (sans les guillemets '"'), la déclaration de l'élément book dans le fichier mixed.dtd devient équivalente à la déclaration suivante qui autorise un enfant url optionnel. <!ELEMENT book (title, author, year, publisher, isbn, url?)> 12 3. Contenu de la DTD Une DTD est constituée de déclarations d'éléments, d'attributs et d'entités. Elle peut aussi contenir des déclarations de notations mais celles-ci ne sont pas abordées dans cet ouvrage. Chacune de ces déclarations commence par la chaîne '<!' suivi d'un mot clé qui uploads/s1/ dtd-document-type-definition.pdf
Documents similaires
-
20
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 28, 2022
- Catégorie Administration
- Langue French
- Taille du fichier 0.5625MB