DTD - Guide rapide

La déclaration de type de document XML, communément appelée DTD, est un moyen de décrire précisément le langage XML. Les DTD vérifient la validité de la structure et du vocabulaire d'un document XML par rapport aux règles grammaticales du langage XML approprié.

Un document XML peut être défini comme -

  • Well-formed- Si le document XML adhère à toutes les règles XML générales telles que les balises doivent être correctement imbriquées, les balises d'ouverture et de fermeture doivent être équilibrées et les balises vides doivent se terminer par '/>', alors il est appelé comme bien formé .

    OU

  • Valid- Un document XML dit valide lorsqu'il est non seulement bien formé , mais également conforme à la DTD disponible qui spécifie quelles balises il utilise, quels attributs ces balises peuvent contenir et quelles balises peuvent apparaître à l'intérieur d'autres balises, entre autres propriétés .

Le diagramme suivant représente qu'une DTD est utilisée pour structurer le document XML -

Les types

La DTD peut être classée sur la base de sa déclaration dans le document XML, par exemple -

  • DTD interne

  • DTD externe

Lorsqu'une DTD est déclarée dans le fichier, elle est appelée Internal DTD et s'il est déclaré dans un fichier séparé, il est appelé External DTD.

Nous en apprendrons plus à ce sujet dans le chapitre Syntaxe DTD

traits

Voici quelques points importants décrits par une DTD -

  • les éléments qui peuvent apparaître dans un document XML.

  • l'ordre dans lequel ils peuvent apparaître.

  • éléments facultatifs et obligatoires.

  • attributs d'élément et s'ils sont facultatifs ou obligatoires.

  • si les attributs peuvent avoir des valeurs par défaut.

Avantages de l'utilisation de DTD

  • Documentation- Vous pouvez définir votre propre format pour les fichiers XML. En regardant ce document, un utilisateur / développeur peut comprendre la structure des données.

  • Validation - Il permet de vérifier la validité des fichiers XML en vérifiant si les éléments apparaissent dans le bon ordre, les éléments et attributs obligatoires sont en place, les éléments et attributs n'ont pas été insérés de manière incorrecte, etc.

Inconvénients de l'utilisation de DTD

  • Il ne prend pas en charge les espaces de noms. L'espace de noms est un mécanisme par lequel les noms d'éléments et d'attributs peuvent être attribués à des groupes. Cependant, dans une DTD, les espaces de noms doivent être définis dans la DTD, ce qui viole le but de l'utilisation des espaces de noms.

  • Il prend uniquement en charge le type de données de chaîne de texte.

  • Ce n'est pas orienté objet. Par conséquent, le concept d'héritage ne peut pas être appliqué aux DTD.

  • Possibilités limitées d'exprimer la cardinalité des éléments.

Une DTD XML peut être soit spécifiée dans le document, soit conservée dans un document séparé, puis le document peut être lié au document DTD pour l'utiliser.

Syntaxe

La syntaxe de base d'une DTD est la suivante -

<!DOCTYPE element DTD identifier
[
   declaration1
   declaration2
   ........
]>

Dans la syntaxe ci-dessus -

  • DTD commence par le délimiteur <! DOCTYPE.

  • Un element indique à l'analyseur d'analyser le document à partir de l'élément racine spécifié.

  • DTD identifierest un identifiant pour la définition du type de document, qui peut être le chemin vers un fichier sur le système ou l'URL d'un fichier sur Internet. Si la DTD pointe vers un chemin externe, elle est appeléeexternal subset.

  • le square brackets [ ] inclure une liste facultative de déclarations d'entités appelées internal subset.

DTD interne

Une DTD est appelée DTD interne si des éléments sont déclarés dans les fichiers XML. Pour le référencer en tant que DTD interne, l' attribut autonome dans la déclaration XML doit être défini suryes. Cela signifie que la déclaration fonctionne indépendamment de la source externe.

Syntaxe

La syntaxe de la DTD interne est la suivante:

<!DOCTYPE root-element [element-declarations]>

où l' élément racine est le nom de l'élément racine et les déclarations d'élément sont l'endroit où vous déclarez les éléments.

Exemple

Voici un exemple simple de DTD interne -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address (name,company,phone)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT company (#PCDATA)>
   <!ELEMENT phone (#PCDATA)>
]>

<address>
   <name>Tanmay Patil</name>
   <company>TutorialsPoint</company>
   <phone>(011) 123-4567</phone>
</address>

Passons en revue le code ci-dessus -

Start Declaration - Commencez la déclaration XML par l'instruction suivante.

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

DTD- Immédiatement après l'en-tête XML, suit la déclaration du type de document , communément appelée DOCTYPE -

<!DOCTYPE address [

La déclaration DOCTYPE a un point d'exclamation (!) Au début du nom de l'élément. Le DOCTYPE informe l'analyseur qu'une DTD est associée à ce document XML.

DTD Body - La déclaration DOCTYPE est suivie du corps de la DTD, où vous déclarez des éléments, des attributs, des entités et des notations -

<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>

Plusieurs éléments sont déclarés ici qui composent le vocabulaire du document <nom>. <! ELEMENT name (#PCDATA)> définit le nom de l'élément comme étant de type "#PCDATA". Ici, #PCDATA signifie des données textuelles analysables.

End Declaration- Enfin, la section de déclaration de la DTD est fermée à l'aide d'un crochet fermant et d'un crochet angulaire fermant (]>). Cela met effectivement fin à la définition, et par la suite, le document XML suit immédiatement.

Règles

  • La déclaration de type de document doit apparaître au début du document (précédée uniquement de l'en-tête XML) - elle n'est autorisée nulle part ailleurs dans le document.

  • Comme pour la déclaration DOCTYPE, les déclarations d'éléments doivent commencer par un point d'exclamation.

  • Le nom dans la déclaration de type de document doit correspondre au type d'élément de l'élément racine.

DTD externe

Dans la DTD externe, les éléments sont déclarés en dehors du fichier XML. Ils sont accessibles en spécifiant les attributs système qui peuvent être soit le fichier légal .dtd , soit une URL valide. Pour le référencer en tant que DTD externe, l' attribut autonome dans la déclaration XML doit être défini commeno. Cela signifie que la déclaration comprend des informations provenant de la source externe.

Syntaxe

Voici la syntaxe de la DTD externe -

<!DOCTYPE root-element SYSTEM "file-name">

nom-fichier est le fichier avec l' extension .dtd .

Exemple

L'exemple suivant montre l'utilisation d'une DTD externe -

<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">

<address>
  <name>Tanmay Patil</name>
  <company>TutorialsPoint</company>
  <phone>(011) 123-4567</phone>
</address>

Le contenu du fichier DTD address.dtd sont comme indiqué -

<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>

Les types

Vous pouvez faire référence à une DTD externe en utilisant soit system identifiers ou public identifiers.

System Identifiers

Un identifiant système vous permet de spécifier l'emplacement d'un fichier externe contenant les déclarations DTD. La syntaxe est la suivante -

<!DOCTYPE name SYSTEM "address.dtd" [...]>

Comme vous pouvez le voir, il contient le mot-clé SYSTEM et une référence URI pointant vers l'emplacement du document.

Public Identifiers

Les identificateurs publics fournissent un mécanisme pour localiser les ressources DTD et sont écrits comme ci-dessous -

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

Comme vous pouvez le voir, il commence par le mot-clé PUBLIC, suivi d'un identifiant spécialisé. Les identificateurs publics sont utilisés pour identifier une entrée dans un catalogue. Les identificateurs publics peuvent suivre n'importe quel format, cependant, un format couramment utilisé est appelé identificateurs publics formels ou FPI.

Ce chapitre abordera les composants XML du point de vue DTD. Une DTD contiendra essentiellement les déclarations des composants XML suivants -

  • Element

  • Attributes

  • Entities

Éléments

Les éléments XML peuvent être définis comme des blocs de construction d'un document XML. Les éléments peuvent se comporter comme un conteneur pour contenir du texte, des éléments, des attributs, des objets multimédias ou un mélange de tout.

Chaque document XML contient un ou plusieurs éléments dont les limites sont soit délimitées par des balises de début et de fin, soit par des éléments vides.

Exemple

Voici un exemple simple d'éléments XML

<name>
   Tutorials Point
</name>

Comme vous pouvez le voir, nous avons défini une balise <nom>. Il y a un texte entre les balises de début et de fin de <nom>. Les éléments, lorsqu'ils sont utilisés dans un XML-DTD, doivent être déclarés, ce qui sera discuté en détail dans le chapitre Eléments de DTD .

Les attributs

Les attributs font partie des éléments XML. Un élément peut avoir n'importe quel nombre d'attributs uniques. Les attributs donnent plus d'informations sur l'élément XML ou plus précisément définissent une propriété de l'élément. Un attribut XML est toujours une paire nom-valeur .

Exemple

Vous trouverez ci-dessous un exemple simple d'attributs XML -

<img src = "flower.jpg"/>

Ici img est le nom de l'élément alors que src est un nom d'attribut et flower.jpg est une valeur donnée pour l'attribut src .

Si des attributs sont utilisés dans une DTD XML, ils doivent être déclarés, ce qui sera discuté en détail dans le chapitre Attributs DTD

Entités

Les entités sont des espaces réservés dans XML. Ceux-ci peuvent être déclarés dans le prologue du document ou dans une DTD. Les entités peuvent être principalement classées comme -

  • Entités intégrées

  • Entités de caractère

  • Entités générales

  • Entités de paramètre

Il existe cinq entités intégrées qui jouent dans du XML bien formé, ce sont -

  • esperluette: & amp;

  • Guillemet simple: & apos;

  • Supérieur à: & gt;

  • Moins de: & lt;

  • Guillemet double: & quot;

Nous étudierons plus en détail les déclarations d'entités dans XML DTD dans le chapitre Entités DTD

Les éléments XML peuvent être définis comme des blocs de construction d'un document XML. Les éléments peuvent se comporter comme un conteneur pour contenir du texte, des éléments, des attributs, des objets multimédias ou un mélange de tout.

Un élément DTD est déclaré avec une déclaration ELEMENT. Lorsqu'un fichier XML est validé par DTD, l'analyseur vérifie d'abord l'élément racine, puis les éléments enfants sont validés.

Syntaxe

Toutes les déclarations d'éléments DTD ont cette forme générale -

<!ELEMENT elementname (content)>
  • La déclaration ELEMENT est utilisée pour indiquer l'analyseur que vous êtes sur le point de définir un élément.

  • elementname est le nom de l'élément (également appelé identificateur générique ) que vous définissez.

  • content définit quel contenu (le cas échéant) peut entrer dans l'élément.

Types de contenu d'élément

Le contenu de la déclaration des éléments dans une DTD peut être classé comme suit -

  • Contenu vide

  • Contenu de l'élément

  • Contenu mixte

  • Tout contenu

Contenu vide

Il s'agit d'un cas particulier de déclaration d'élément. Cette déclaration d'élément ne contient aucun contenu. Ceux-ci sont déclarés avec le mot-cléEMPTY.

Syntax

Voici la syntaxe de la déclaration d'élément vide -

<!ELEMENT elementname EMPTY >

Dans la syntaxe ci-dessus -

  • ELEMENTest la déclaration d'élément de la catégorie VIDE

  • elementname est le nom de l'élément vide.

Example

Voici un exemple simple démontrant la déclaration d'élément vide -

<?xml version = "1.0"?>

<!DOCTYPE hr[
   <!ELEMENT address EMPTY>    
]>
<address />

Dans cet exemple, l' adresse est déclarée comme un élément vide. Le balisage pour l' élément d' adresse apparaîtrait comme <adresse />.

Contenu de l'élément

Dans la déclaration d'élément avec le contenu de l'élément, le contenu serait des éléments autorisés entre parenthèses. Nous pouvons également inclure plus d'un élément.

Syntax

Voici une syntaxe de déclaration d'élément avec le contenu de l'élément -

<!ELEMENT elementname (child1, child2...)>
  • ELEMENT est la balise de déclaration d'élément

  • elementname est le nom de l'élément.

  • child1, child2 .. sont les éléments et chaque élément doit avoir sa propre définition dans la DTD.

Example

L'exemple ci-dessous montre un exemple simple de déclaration d'élément avec le contenu de l'élément -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address (name,company,phone)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT company (#PCDATA)>
   <!ELEMENT phone (#PCDATA)>
]>

<address>
   <name>Tanmay Patil</name>
   <company>TutorialsPoint</company>
   <phone>(011) 123-4567</phone>
</address>

Dans l'exemple ci-dessus, address est l'élément parent et name , company et phone_no sont ses éléments enfants.

Liste des opérateurs et règles de syntaxe

Le tableau ci-dessous montre la liste des opérateurs et des règles de syntaxe qui peuvent être appliqués pour définir les éléments enfants -

Opérateur Syntaxe La description Exemple
+ <! ELEMENT nom-élément (enfant1 +)> Cela indique que l'élément enfant peut apparaître une ou plusieurs fois à l'intérieur de l'élément parent.

<! ELEMENT adresse (nom +)>

Le nom d' élément enfant peut apparaître une ou plusieurs fois dans l' adresse du nom d'élément .

* <! ELEMENT nom-élément (enfant1 *)> Cela indique que l'élément enfant peut apparaître zéro ou plusieurs fois à l'intérieur de l'élément parent.

<! ELEMENT adresse (nom *)>

Le nom d' élément enfant peut apparaître zéro ou plusieurs fois dans l' adresse du nom d'élément .

? <! ELEMENT nom-élément (enfant1?)> Cela indique que l'élément enfant peut apparaître zéro ou une fois à l'intérieur de l'élément parent.

<! ELEMENT adresse (nom?)>

Le nom d' élément enfant peut apparaître zéro ou une fois dans l' adresse du nom d'élément .

, <! ELEMENT nom-élément (enfant1, enfant2)> Il donne une séquence d'éléments enfants séparés par des virgules qui doivent être inclus dans le nom de l'élément.

<! ELEMENT adresse (nom, société)>

Séquence du nom des éléments enfants , société , qui doit apparaître dans le même ordre à l'intérieur de l' adresse du nom de l'élément .

| <! ELEMENT nom-élément (enfant1 | enfant2)> Il permet de faire des choix dans l'élément enfant.

<! ELEMENT adresse (nom | société)>

Il vous permet de choisir l'un des éléments enfants, c'est-à-dire le nom ou la société , qui doit apparaître à l'intérieur de l' adresse du nom de l'élément .

Règles

Nous devons suivre certaines règles s'il y a plus d'un contenu d'élément -

  • Sequences - Souvent, les éléments des documents DTD doivent apparaître dans un ordre distinct. Si tel est le cas, vous définissez le contenu à l'aide d'une séquence.

    La déclaration indique que l'élément <address> doit avoir exactement trois enfants - <nom>, <company> et <phone> - et qu'ils doivent apparaître dans cet ordre. Par exemple -

<!ELEMENT address (name,company,phone)>
  • Choices- Supposons que vous deviez autoriser un élément ou un autre, mais pas les deux. Dans ce cas, vous devez utiliser le caractère pipe (|). Le tube fonctionne comme un OU exclusif. Par exemple -

<!ELEMENT address (mobile | landline)>

Contenu des éléments mixtes

Il s'agit de la combinaison d'éléments (#PCDATA) et enfants. PCDATA signifie des données de caractères analysées, c'est-à-dire du texte qui n'est pas du balisage. Dans les modèles de contenu mixte, le texte peut apparaître seul ou être intercalé entre les éléments. Les règles des modèles de contenu mixte sont similaires au contenu de l'élément, comme indiqué dans la section précédente.

Syntax

Voici une syntaxe générique pour le contenu d'éléments mixtes -

<!ELEMENT elementname (#PCDATA|child1|child2)*>
  • ELEMENT est la balise de déclaration d'élément.

  • elementname est le nom de l'élément.

  • PCDATAest le texte qui n'est pas un balisage. #PCDATA doit venir en premier dans la déclaration de contenu mixte.

  • child1, child2 .. sont les éléments et chaque élément doit avoir sa propre définition dans la DTD.

  • L'opérateur (*) doit suivre la déclaration de contenu mixte si des éléments enfants sont inclus

  • Les déclarations d'élément (#PCDATA) et enfants doivent être séparées par l'opérateur (|).

Example

Voici un exemple simple illustrant la déclaration d'élément de contenu mixte dans une DTD.

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address (#PCDATA|name)*>
   <!ELEMENT name (#PCDATA)>
]>

<address>
   Here's a bit of text mixed up with the child element.
   <name>
      Tanmay Patil
   </name>
</address>

TOUT contenu d'élément

Vous pouvez déclarer un élément à l'aide du mot clé ANY dans le contenu. Il est le plus souvent appelé élément de catégorie mixte. ANY est utile lorsque vous n'avez pas encore décidé du contenu autorisé de l'élément.

Syntax

Voici la syntaxe pour déclarer des éléments avec N'IMPORTE QUEL contenu -

<!ELEMENT elementname ANY>

Ici, le mot clé ANY indique que le texte (PCDATA) et / ou tout élément déclaré dans la DTD peut être utilisé dans le contenu de l'élément <elementname>. Ils peuvent être utilisés dans n'importe quel ordre un nombre de fois illimité. Cependant, le mot clé ANY ne vous permet pas d'inclure des éléments qui ne sont pas déclarés dans la DTD.

Example

Voici un exemple simple démontrant la déclaration d'élément avec N'IMPORTE QUEL contenu -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address ANY>
]>

<address>
   Here's a bit of sample text
</address>

Dans ce chapitre, nous aborderons les attributs DTD. Attribute donne plus d'informations sur un élément ou plus précisément il définit une propriété d'un élément. Un attribut XML se présente toujours sous la forme d'une paire nom-valeur. Un élément peut avoir n'importe quel nombre d'attributs uniques.

La déclaration d'attribut est très similaire aux déclarations d'éléments à bien des égards, sauf une; au lieu de déclarer le contenu autorisé pour les éléments, vous déclarez une liste d'attributs autorisés pour chaque élément. Ces listes sont appelées déclaration ATTLIST.

Syntaxe

La syntaxe de base de la déclaration des attributs DTD est la suivante -

<!ATTLIST element-name attribute-name attribute-type attribute-value>

Dans la syntaxe ci-dessus -

  • Les attributs DTD commencent par le mot clé <! ATTLIST si l'élément contient l'attribut.

  • element-name spécifie le nom de l'élément auquel l'attribut s'applique.

  • attribute-name spécifie le nom de l'attribut qui est inclus avec le nom d'élément.

  • attribute-typedéfinit le type d'attributs. Nous en discuterons plus à ce sujet dans les sections suivantes.

  • attribute-valueprend une valeur fixe que les attributs doivent définir. Nous en discuterons plus à ce sujet dans les sections suivantes.

Exemple

Voici un exemple simple de déclaration d'attribut dans DTD -

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #REQUIRED>
]>

<address>
   <name id = "123">Tanmay Patil</name>
</address>

Passons en revue le code ci-dessus -

  • Commencez par la déclaration XML avec l'instruction suivante -

<?xml version = "1.0"?>
  • Immédiatement après l'en-tête XML se trouve la déclaration de type de document, communément appelée DOCTYPE comme indiqué ci-dessous -

    Le DOCTYPE informe l'analyseur qu'une DTD est associée à ce document XML. La déclaration DOCTYPE a un point d'exclamation (!) Au début du nom de l'élément.

<!DOCTYPE address [
  • Voici le corps de DTD. Ici, nous avons déclaré l'élément et l'attribut -

<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
  • L' identifiant d' attribut pour le nom de l'élément est défini comme indiqué ci-dessous -

    Ici, le type d'attribut est CDATA et sa valeur est #REQUIRED .

<!ATTLIST name id CDATA #REQUIRED>

Règles de déclaration d'attribut

  • Tous les attributs utilisés dans un document XML doivent être déclarés dans la définition de type de document (DTD) à l'aide d'une déclaration de liste d'attributs

  • Les attributs ne peuvent apparaître que dans les balises de début ou vides.

  • Le mot clé ATTLIST doit être en majuscules

  • Aucun nom d'attribut en double ne sera autorisé dans la liste d'attributs pour un élément donné.

Types d'attributs

Lors de la déclaration d'attributs, vous pouvez spécifier la manière dont le processeur doit gérer les données qui apparaissent dans la valeur. Nous pouvons classer les types d'attributs en trois catégories principales -

  • Type de chaîne

  • Types tokenisés

  • Types énumérés

Le tableau suivant résume les différents types d'attributs -

Sr.No. Type et description
1

CDATA

CDATA est une donnée de caractère (texte et non balisage). Il s'agit d'un type d'attribut chaîne .

2

ID

C'est un identifiant unique de l'attribut. Il ne devrait pas apparaître plus d'une fois. C'est un type d'attribut tokenisé .

3

IDREF

Il est utilisé pour référencer un ID d'un autre élément. Il est utilisé pour établir des connexions entre les éléments. C'est un type d'attribut tokenisé .

4

IDREFS

Il est utilisé pour référencer plusieurs ID. C'est un type d'attribut tokenisé .

5

ENTITY

Il représente une entité externe dans le document. C'est un type d'attribut tokenisé .

6

ENTITIES

Il représente une liste d'entités externes dans le document. C'est un type d'attribut tokenisé .

sept

NMTOKEN

Il est similaire à CDATA et la valeur d'attribut se compose d'un nom XML valide. C'est un type d'attribut tokenisé .

8

NMTOKENS

Il est similaire à CDATA et la valeur d'attribut consiste en une liste de noms XML valides. C'est un type d'attribut tokenisé .

9

NOTATION

Un élément sera référencé à une notation déclarée dans le document DTD. Il s'agit d'un type d'attribut énuméré .

dix

Enumeration

Il permet de définir une liste spécifique de valeurs où l'une des valeurs doit correspondre. Il s'agit d'un type d'attribut énuméré .

Déclaration de valeur d'attribut

Dans chaque déclaration d'attribut, vous devez spécifier comment la valeur apparaîtra dans le document. Vous pouvez spécifier si un attribut -

  • peut avoir une valeur par défaut

  • peut avoir une valeur fixe

  • est requis

  • est implicite

Les valeurs par défaut

Il contient la valeur par défaut. Les valeurs peuvent être placées entre guillemets simples (') ou doubles (").

Syntax

Voici la syntaxe de la valeur -

<!ATTLIST element-name attribute-name attribute-type "default-value">

valeur par défaut est la valeur d'attribut définie.

Example

Voici un exemple simple de déclaration d'attribut avec la valeur par défaut -

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA "0">
]>

<address>
   <name id = "123">
      Tanmay Patil
   </name>
</address>

Dans cet exemple, nous avons un élément de nom avec un identifiant d' attribut dont la valeur par défaut est 0 . La valeur par défaut est placée entre guillemets.

Valeurs FIXES

Le mot clé #FIXED suivi de la valeur fixe est utilisé lorsque vous souhaitez spécifier que la valeur d'attribut est constante et ne peut pas être modifiée. Une utilisation courante des attributs fixes est la spécification des numéros de version.

Syntax

Voici la syntaxe des valeurs fixes -

<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >

où #FIXED est une valeur d'attribut définie.

Example

Voici un exemple simple de déclaration d'attribut avec la valeur FIXED -

<?xml version = "1.0"?>

<!DOCTYPE address [
  <!ELEMENT address (company)*>
  <!ELEMENT company (#PCDATA)>
  <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>

<address>
  <company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>

Dans cet exemple, nous avons utilisé le mot-clé #FIXED où il indique que la valeur "tutorialspoint" est la seule valeur pour le nom d' attribut de l'élément <company>. Si nous essayons de changer la valeur d'attribut, cela donne une erreur.

Voici une DTD invalide -

<?xml version = "1.0"?>

<!DOCTYPE address [
  <!ELEMENT address (company)*>
  <!ELEMENT company (#PCDATA)>
  <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>

<address>
  <company name = "abc">we are a free online teaching faculty</company>
</address>

Valeurs REQUISES

Chaque fois que vous souhaitez spécifier qu'un attribut est requis, utilisez le mot clé #REQUIRED.

Syntax

Voici la syntaxe de #REQUIRED -

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

où #REQUIRED est un type d'attribut défini.

Example

Voici un exemple simple de déclaration d'attribut DTD avec le mot clé #REQUIRED -

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #REQUIRED>
]>

<address>
   <name id = "123">
      Tanmay Patil
   </name>
</address>

Dans cet exemple , nous avons utilisé mot - clé #REQUIRED pour spécifier que l'attribut id doit être fourni pour le nom de l' élément nom

Valeurs IMPLICITES

Lors de la déclaration d'attributs, vous devez toujours spécifier une déclaration de valeur. Si l'attribut que vous déclarez n'a pas de valeur par défaut, n'a pas de valeur fixe et n'est pas obligatoire, vous devez déclarer que l'attribut est implicite . Le mot-clé #IMPLIED est utilisé pour spécifier un attribut comme implicite .

Syntax

Voici la syntaxe de #IMPLIED -

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

où #IMPLIED est un type d'attribut défini.

Example

Voici un exemple simple de #IMPLIED

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #IMPLIED>
]>

<address>
   <name />
</address>

Dans cet exemple, nous avons utilisé le mot-clé #IMPLIED car nous ne voulons pas spécifier d'attributs à inclure dans le nom de l' élément . C'est facultatif.

Les entités sont utilisées pour définir des raccourcis vers des caractères spéciaux dans les documents XML. Les entités peuvent être principalement de quatre types -

  • Entités intégrées

  • Entités de caractère

  • Entités générales

  • Entités de paramètre

Syntaxe de la déclaration d'entité

En général, les entités peuvent être déclarées internally ou externally. Comprenons chacun de ces éléments et leur syntaxe comme suit -

Entité interne

Si une entité est déclarée dans une DTD, elle est appelée comme entité interne.

Syntax

Voici la syntaxe de la déclaration d'entité interne -

<!ENTITY entity_name "entity_value">

Dans la syntaxe ci-dessus -

  • entity_name est le nom de l'entité suivi de sa valeur entre guillemets ou guillemets simples.

  • entity_value contient la valeur du nom de l'entité.

  • La valeur d'entité de l'entité interne est dé-référencée en ajoutant un préfixe & au nom de l'entité ie & nom_entité.

Example

Voici un exemple simple de déclaration d'entité interne -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>

<!DOCTYPE address [
   <!ELEMENT address (#PCDATA)>
   <!ENTITY name "Tanmay patil">
   <!ENTITY company "TutorialsPoint">
   <!ENTITY phone_no "(011) 123-4567">
]>

<address>
   &name;
   &company;
   &phone_no;
</address>

Dans l'exemple ci-dessus, les noms d'entités respectifs name , company et phone_no sont remplacés par leurs valeurs dans le document XML. Les valeurs d'entité sont dé-référencées en ajoutant un préfixe & au nom de l'entité.

Enregistrez ce fichier sous sample.xmlet ouvrez-le dans n'importe quel navigateur, vous remarquerez que les valeurs d'entité pour name , company , phone_no sont remplacées respectivement.

Entité externe

Si une entité est déclarée en dehors d'une DTD, elle est appelée comme entité externe. Vous pouvez faire référence à une entité externe en utilisant des identifiants système ou des identifiants publics.

Syntax

Voici la syntaxe de la déclaration d'entité externe -

<!ENTITY name SYSTEM "URI/URL">

Dans la syntaxe ci-dessus -

  • name est le nom de l'entité.

  • SYSTEM est le mot-clé.

  • URI/URL est l'adresse de la source externe entre guillemets simples ou doubles.

Types

Vous pouvez faire référence à une DTD externe en utilisant -

  • System Identifiers - Un identifiant système vous permet de spécifier l'emplacement d'un fichier externe contenant les déclarations DTD.

    Comme vous pouvez le voir, il contient le mot-clé SYSTEM et une référence URI pointant vers l'emplacement du document. La syntaxe est la suivante -

<!DOCTYPE name SYSTEM "address.dtd" [...]>
  • Public Identifiers - Les identificateurs publics fournissent un mécanisme pour localiser les ressources DTD et sont écrits comme ci-dessous -

    Comme vous pouvez le voir, il commence par le mot-clé PUBLIC, suivi d'un identifiant spécialisé. Les identificateurs publics sont utilisés pour identifier une entrée dans un catalogue. Les identifiants publics peuvent suivre n'importe quel format; cependant, un format couramment utilisé est appelé identificateurs publics formels ou FPI.

<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">

Example

Comprenons l'entité externe avec l'exemple suivant -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">

<address>
   <name>
      Tanmay Patil
   </name>
   
   <company>
      TutorialsPoint
   </company>
   
   <phone>
      (011) 123-4567
   </phone>
</address>

Ci-dessous le contenu du fichier DTD address.dtd -

<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>

Entités intégrées

Tous les analyseurs XML doivent prendre en charge les entités intégrées. En général, vous pouvez utiliser ces références d'entité n'importe où. Vous pouvez également utiliser du texte normal dans le document XML, comme dans le contenu des éléments et les valeurs d'attribut.

Il y a cinq entités intégrées qui jouent leur rôle dans un XML bien formé, elles sont -

  • esperluette: & amp;

  • Guillemet simple: & apos;

  • Supérieur à: & gt;

  • Moins de: & lt;

  • Guillemet double: & quot;

Exemple

L'exemple suivant montre la déclaration d'entité intégrée -

<?xml version = "1.0"?>

<note>
   <description>I'm a technical writer & programmer</description>
<note>

Comme vous pouvez le voir ici, le & amp; le caractère est remplacé par & chaque fois que le processeur rencontre cela.

Entités de caractère

Les entités de caractère sont utilisées pour nommer certaines des entités qui sont une représentation symbolique d'informations, c'est-à-dire que les caractères qui sont difficiles ou impossibles à saisir peuvent être remplacés par des entités de caractère.

Exemple

L'exemple suivant montre la déclaration d'entité de caractère -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
   <!ELEMENT author (#PCDATA)>
   <!ENTITY writer "Tanmay patil">
   <!ENTITY copyright "&#169;">
]>
<author>&writer;&copyright;</author>

Vous remarquerez ici que nous avons utilisé &#169;comme valeur pour le caractère de copyright. Enregistrez ce fichier sous le nom sample.xml et ouvrez-le dans votre navigateur et vous verrez que le copyright est remplacé par le caractère ©.

Entités générales

Les entités générales doivent être déclarées dans la DTD avant de pouvoir être utilisées dans un document XML. Au lieu de ne représenter qu'un seul caractère, les entités générales peuvent représenter des caractères, des paragraphes et même des documents entiers.

Syntaxe

Pour déclarer une entité générale, utilisez une déclaration de cette forme générale dans votre DTD -

<!ENTITY ename "text">

Exemple

L'exemple suivant montre la déclaration d'entité générale -

<?xml version = "1.0"?>

<!DOCTYPE note [
   <!ENTITY source-text "tutorialspoint">
]>

<note>
   &source-text;
</note>

Chaque fois qu'un analyseur XML rencontre une référence à une entité de texte source , il fournit le texte de remplacement à l'application au point de référence.

Entités de paramètre

Le but d'une entité paramètre est de vous permettre de créer des sections réutilisables de texte de remplacement.

Syntaxe

Voici la syntaxe de la déclaration d'entité de paramètre -

<!ENTITY % ename "entity_value">
  • valeur_entité est tout caractère qui n'est pas un '&', '%' ou '"'.

Exemple

L'exemple suivant illustre la déclaration d'entité de paramètre. Supposons que vous ayez des déclarations d'élément comme ci-dessous -

<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>

Supposons maintenant que vous souhaitiez ajouter un pays d' élément supplémentaire , puis vous devez l'ajouter aux quatre déclarations. Par conséquent, nous pouvons opter pour une référence d'entité de paramètre. En utilisant maintenant la référence d'entité de paramètre, l'exemple ci-dessus sera -

<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">

Les entités de paramètre sont déréférencées de la même manière qu'une référence d'entité générale, uniquement avec un signe de pourcentage au lieu d'une esperluette -

<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>

Lorsque l'analyseur lit ces déclarations, il remplace le texte de remplacement de l'entité par la référence d'entité.

Nous utilisons DTD pour décrire précisément le document XML. Les DTD vérifient la validité de la structure et du vocabulaire d'un document XML par rapport aux règles grammaticales du langage XML approprié. Maintenant, pour vérifier la validité de DTD, les procédures suivantes peuvent être utilisées -

  • Using XML DTD validation tools - Vous pouvez utiliser certains IDE tels que XML Spy (non gratuit) et XMLStarlet (opensource) peuvent être utilisés pour valider les fichiers XML par rapport au document DTD.

  • Using XML DTD on-line validators- Le service de validation de balisage du W3C est conçu pour valider les documents Web. Utilisez le validateur en ligne pour vérifier la validité de votre DTD XML ici .

  • Write your own XML validators with XML DTD validation API - Les nouvelles versions de JDK (ci-dessus 1.4) prennent en charge l'API de validation XML DTD. Vous pouvez écrire votre propre code de validation pour vérifier la validité de la validation XML DTD.