Getsuyodev, Programming is mainly used when constructing an application. Programming requires knowledge of application domains, algorithms, and programming language expertise. Programming can be developed in different logic based on developer knowledge.

Client Serveur – DTD

Programmation Client Serveur



Introduction:

  • Dans la première partie, nous avons découvert ce qu’était le XML.
  • Pour ne rien vous cacher, le XML est très peu utilisé seul et on préfère souvent l’utiliser en parallèle d’autres technologies permettant d’étendre les possibilités de la technologie.
  • L’étude de ces autres technologies débute donc maintenant ! Nous allons aborder les technologies qui permettent de définir une structure stricte aux documents XML : les fichiers de définition.
  • Il existe plusieurs technologies qui permettent d’écrire des fichiers de configuration, nous en verrons 2 dans cette seconde partie.
  • Débutons tout de suite avec les DTD.

La définition d’un document XML?:

  • Une définition d’un document XML est un ensemble de règles que l’on impose au document.
  • Ces règles permettent de décrire la façon dont le document XML doit être construit.
  • Elles peuvent être de natures différentes.
  • Par exemple, ces règles peuvent imposer la présence d’un attribut ou d’une balise, imposer l’ordre d’apparition des balises dans le document ou encore, imposer le type d’une donnée (nombre entier, chaîne de caractères, etc.).
  • Dans la partie précédente, nous avons vu ce qu’était un document bien formé.
  • Cette seconde partie est l’occasion d’aller un peu plus loin et de voir le concept de document valide.
  • Un document valide est un document bien formé conforme à une définition.
  • Cela signifie que le document XML respecte toutes les règles qui lui sont imposées dans les fameuses définitions.

Pourquoi?

  • Associer une définition à un document oblige à une certaine rigueur dans l’écriture de vos données XML.
  • C’est d’autant plus important lorsque plusieurs personnes travaillent sur un même document.
  • La définition impose ainsi une écriture uniforme que tout le monde doit respecter.
  • On évite ainsi que l’écriture d’un document soit anarchique et, par conséquent, difficilement exploitable.

DTD :

  • Une Document Type Definition ou en français une Définition de Type de Document, souvent abrégé DTD, est la première technologie que nous allons étudier pour écrire les définitions de nos documents XML.
  • Comme nous l’avons déjà précisé dans l’introduction de cette seconde partie, le but est d’écrire une définition de nos documents XML, c’est-à-dire, de construire un ensemble de règles qui vont régir la construction du document XML.
  • Grâce à l’ensemble de ces règles, nous allons ainsi définir l’architecture de notre document XML et la hiérarchie qui existe entre les balises de celui-ci.
  • Ainsi, on pourra préciser l’enchaînement et le contenu des balises et des attributs contenus dans le document XML.
  • Finalement, sachez qu’avec les DTD, vous ne pourrez pas toujours tout faire, la technologie commençant en effet à vieillir. Mais comme elle est encore beaucoup utilisée, il est indispensable qu’elle soit étudiée dans ce module.

Où écrire les DTD :

  • Tout comme les fichiers XML, les DTD s’écrivent dans des fichiers.
  • Nous reviendrons sur ce point un peu plus tard, mais sachez dès à présent qu’il existe 2 types de DTD : les DTD externes et les DTD internes.
  • Les règles des DTD internes s’écrivent directement dans le fichier XML qu’elles définissent tandis que les règles des DTD externes sont écrites dans un fichier séparé portant l’extension .dtd .

Les éléments : La syntaxe

  • Pour définir les règles portant sur les balises, on utilise le mot clef ELEMENT.
 <!ELEMENT balise (contenu)> 
  • Une règle peut donc se découper en 3 mots clefs: ELEMENTbalise et contenu.

Retour sur la balise

  • Le mot-clef balise est à remplacer par le nom de la balise à laquelle vous souhaitez appliquer la règle.
  • Pour exemple, reprenons une balise du TP de la partie 1 :
<nom>DOE</nom> 

On écrira alors :

<!ELEMENT nom (contenu)>

Retour sur le contenu

  • Cet emplacement a pour vocation de décrire ce que doit contenir la balise : est-ce une autre balise ou est-ce une valeur ?

Cas d’une balise en contenant une autre

  • Par exemple, regardons la règle suivante :
<!ELEMENT personne (nom)> 

Cette règle signifie que la balise <personne /> contient la balise <nom />.

Le document XML respectant cette règle ressemble donc à cela :

<personne>
 <nom>John DOE</nom>
</personne>

Cas d’une balise en contenant une autre: Attention!

  • Nous n’avons défini aucune règle pour la balise <nom/>.
  • Le document n’est, par conséquent, pas valide.
  • En effet, dans une DTD, il est impératif de décrire tout le document sans exception.
  • Des balises qui n’apparaissent pas dans la DTD ne peuvent pas être utilisées dans le document XML.

Cas d’une balise en contenant une valeur:

  • En se basant sur l’exemple exemple précédent :
<personne>
<nom>John DOE</nom>
</personne> 
  • nous avions déjà défini une règle pour la balise <personne/> :
<!ELEMENT personne (nom)>

Cas d’une balise en contenant une valeur:

  • Nous pouvons maintenant compléter notre DTD en ajoutant une règle pour la balise <nom/>.
  • Par exemple, si l’on souhaite que cette balise contienne une valeur simple, on écrira : <!ELEMENT nom (#PCDATA)>
  • Au final, la DTD de notre document XML est donc la suivante :
<!ELEMENT personne (nom)>
<!ELEMENT nom (#PCDATA)>

Cas d’une balise vide:

  • Il est également possible d’indiquer qu’une balise ne contient rien grâce au mot-clef EMPTY.
  • Prenons les règles suivantes :
<!ELEMENT personne (nom)>
<!ELEMENT nom EMPTY>

Cas d’une balise vide:

  • Le document XML répondant à la définition DTD précédente est le suivant :
<personne>
    <nom />
</personne>
  •  À noter : lors de l’utilisation du mot clef EMPTY, l’usage des parenthèses n’est pas obligatoire !

Cas d’une balise pouvant tout contenir:

  • Il nous reste un cas à voir : celui d’une balise qui peut tout contenir, c’est à dire, une autre balise, une valeur simple ou tout simplement être vide.
  • Dans ce cas, on utilise le mot-clef ANY.
  • Prenons la règle suivante :
<!ELEMENT personne (nom)>
<!ELEMENT nom ANY>
  • Les documents XML suivants sont bien valides :
<personne>
    <nom>John DOE</nom>
</personne>
<personne>
    <nom />
</personne>
  • Bien que le mot-clef ANY existe, il est souvent déconseillé de l’utiliser afin de restreindre le plus possible la liberté de rédaction du document XML.
  • Comme pour le mot-clef EMPTY, l’usage des parenthèses n’est pas obligatoire pour le mot-clef ANY!
  • Nous allons voir maintenant des syntaxes permettant d’apporter un peu de généricité aux définitions DTD.
  • Par exemple, un répertoire contient généralement un nombre variable de personnes, il faut donc permettre au document XML d’être valide quel que soit le nombre de personnes qu’il contient.

La séquence:

  • Une séquence permet de décrire l’enchaînement imposé des balises.
  • Il suffit d’indiquer le nom des balises en les séparant par des virgules.
  • <!ELEMENT balise (balise2, balise3, balise4, balise5, etc.)>

Prenons l’exemple suivant :

<!ELEMENT personne (nom, prenom, age)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT age (#PCDATA)>
  • Cette définition impose que la balise <personne /> contienne obligatoirement les balises <nom />,<prenom /> et <age /> dans cet ordre.
  • Regardons alors la validité des documents XML qui suivent :
<personne>
    <nom>DOE</nom>
    <prenom>John</prenom>
    <age>24</age>
</personne>

Valide

<personne>
    <prenom>John</prenom>
    <nom>DOE</nom>
    <age>24</age>
</personne>

Invalide:  les balises ne sont pas dans le bon ordre

<personne>
    <prenom>John</prenom>
    <age>24</age>
</personne>

Invalide:  Il manque une balise

<personne>
    <nom>DOE</nom>
    <prenom>John</prenom>
    <age>24</age>
    <date>12/12/2012</date>
</personne>

Invalide:  Il y a une balise en trop qui plus n’est pas déclarée

La liste de choix:

  • Une liste de choix permet de dire qu’une balise contient l’une des balises décrites.
  • Il suffit d’indiquer le nom des balises en les séparant par une barre verticale.
  • <!ELEMENT balise (balise2 | balise3 | balise4 | balise5 | etc.)>
  • Prenons l’exemple suivant :
<!ELEMENT personne (nom | prenom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
  • Cette définition impose que la balise <personne /> contienne obligatoirement la balise <nom /> ou la balise <prenom />.
<personne>
    <nom>DOE</nom>
</personne>

Valide

<personne>
    <prenom>John</prenom>
</personne>

Valide

<personne>
    <prenom>John</prenom>
    <nom>DOE</nom>
</personne>

Invalide: Les deux balises nom et prenom ne peuvent pas être présentes en même temps.

<personne />

Invalide: Il manque une balise.

La balise optionnelle:

  • Une balise peut être optionnelle.
  • Pour indiquer qu’une balise est optionnelle, on fait suivre son nom par un point d’interrogation.
  • <!ELEMENT balise (balise2, balise3?, balise4)>

Prenons l’exemple suivant :

<!ELEMENT personne (nom, prenom?)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
  • Cette définition impose que la balise <personne /> contienne obligatoirement la balise <nom /> puis éventuellement <prenom />.
<personne>
    <nom>DOE</nom>
</personne>

Valide

<personne>
    <nom>DOE</nom>
    <prenom>John</prenom>
</personne>

Valide

<personne>
    <prenom>John</prenom>
    <nom>DOE</nom>
</personne>

Invalide: L’ordre des balises n’est pas respecté

La balise répétée optionnelle:

  • Une balise peut être répétée plusieurs fois même si elle est optionnelle.
  • Pour indiquer une telle balise, on fait suivre son nom par une étoile.
  • <!ELEMENT balise (balise2, balise3*, balise4)>
<!ELEMENT repertoire (personne*)>
<!ELEMENT personne (nom, prenom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
  • Cette définition impose que la balise <repertoire /> contienne entre 0 et une infinité de fois la balise <personne />.
  • La balise <personne />, quant à elle, doit obligatoirement contenir les balises <nom /> et <prenom /> dans cet ordre.
<repertoire>
    <personne>
        <nom>DOE</nom>
        <prenom>John</prenom>
    </personne>
    <personne>
        <nom>POPPINS</nom>
        <prenom>Marie</prenom>
    </personne>
</repertoire>

Valide

<repertoire>
    <personne>
        <nom>DOE</nom>
        <prenom>John</prenom>
    </personne>
</repertoire>

  Valide

<repertoire />

Valide

<repertoire>
    <personne>
        <nom>DOE</nom>
        <prenom>John</prenom>
    </personne>
    <personne>
        <nom>POPPINS</nom>
    </personne>
</repertoire>

Invalide: Il manque la balise prenom dans la balise personne

La balise répétée:

  • Une balise peut être répétée plusieurs fois.
  • Pour indiquer une telle balise, on fait suivre son nom par un plus.
  • <!ELEMENT balise (balise2, balise3+, balise4)>
<!ELEMENT repertoire (personne+)>
<!ELEMENT personne (nom, prenom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
  • Cette définition impose que la balise <repertoire /> contienne au minimum une fois la balise <personne />.
  • La balise <personne /> quant à elle doit obligatoirement contenir les balises <nom /> et <prenom /> dans cet ordre.
<repertoire>
    <personne>
        <nom>DOE</nom>
        <prenom>John</prenom>
    </personne>
    <personne>
        <nom>POPPINS</nom>
        <prenom>Marie</prenom>
    </personne>
</repertoire>

Valide

<repertoire>
    <personne>
        <nom>DOE</nom>
        <prenom>John</prenom>
    </personne>
</repertoire>

Valide

<repertoire />

Invalide: La balise personne doit être présente au moins une fois

Résumé :

  • Un document valide est un document bien formé conforme à une définition.
  • Un document conforme à une définition est un document qui respecte toutes les règles qui lui sont imposées dans les fameuses définitions.
  • Il existe les DTD internes et les DTD externes .
  • Il est possible d’écrire de nombreuses règles grâce aux DTD.
  • Le mot clef ELEMENT permet de d’écrire les règles relatives aux balises XML.

Comments are closed, but trackbacks and pingbacks are open.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More