XML

Le SGML (Standard Generalized Markup Language) est un langage de description à balises, HTLM étant une application de SGML.

Le DTD quant à lui définit la structure du document,

  • elle décrit les relations entre les éléments ;
  • elle nomme chaque élément par rapport à la structure,  
  • et définit quels éléments sont autorisés au sein d’un document XML

Les DTD ne sont pas décrites en XML (!) et doivent être remplacées par des schémas :

 

Éléments DTD :

Les différentes règles possibles sont

  • ANY : n’importe quel contenu autorisé
  • (#PCDATA) : données caractères (pas de balise)
  • EMPTY : élément vide
  • elt1, ..., eltn : séquence ordonnée
  • elt1|...|eltn : choix

 

Exemples :

<!ELEMENT nom (#PCDATA)>
<!ELEMENT personne (nom, prenom, mail+, telephone*)>
<!ELEMENT media (livre|cdrom)>
<!ELEMENT mail ANY>

Opérateurs d’occurrence

Il est également possible de déclarer si un élément doit apparaître 0 ou 1 fois, plusieurs fois…

  • 0 ou 1 fois : ?
  • 0 ou n fois : *
  • 1 ou n fois : +

(voir exemple au dessus : numéro de téléphone peut être nul ou en avoir plusieurs, contrairement au mail où il y a au moins UN mail, et seulement UN prénom et UN nom)

 

Attributs DTD :

Les attributs DTD appartiennent obligatoirement à des éléments DTD déjà déclarés avant d'utiliser des attributs.

  • nomElement est le nom de l’élément auquel est associé l’attribut
  • nomAttribut : nom de l’attribut
  • type : type de l’attribut
  • défaut : valeur par défaut de l’attribut
 
Types d’attributs


CDATA : données caractères
ENTITY : une entité déclarée dans la DTD
ENTITIES : plusieurs entités déclarées dans la DTD et séparées par des espaces
ID : un identificateur unique d’élément
IDREF : la valeur d’un unique attribut de type ID
IDREFS : les valeurs de plusieurs attributs de type ID, séparées par des espaces
(val1|...|valn) : une des valeurs énumérées

Valeurs par défaut

 

une chaîne de caractères, indiquant la valeur par défaut

 

#REQUIRED : la valeur d’attribut doit obligatoirement être fournie dans la balise

 

#IMPLIED : la valeur d’attribut peut rester non spécifiée

 

#FIXED : la valeur est fixe et ne peut être modifiée par l’utilisateur (faire suivre d’une chaîne de
caractères décrivant la valeur)

 

 

Exemple:

Les ID permettent de définir des identificateurs à certains attributs, référencés par d’autres attributs contenant des IDREF ou IDREFS

 

Fichier XML

XML est un standard de structuration de données.

image-1600796209638.png

La première ligne d’un fichier XML contient généralement une déclaration, elle est optionnelle, mais se révèle souvent nécessaire.  Elle est destinée à l’application qui analysera le fichier XML.

Exemple : <?xml version=”1.0” encoding=”iso-8859-1” standalone=”yes” ?>

 

Principaux composants d’un document XML
 

Chaque élément elt est composé d’une balise ouvrante d’une balise fermante ; d’un contenu situé entre les 2 balises ; et peut être composé d'attributs attr :

Chaque balise ouvrante peut comporter un ou plusieurs attributs, associés obligatoirement à une valeur ; les balises doivent être refermées dans l’ordre inverse de leur ouverture.

Un élément ne peut pas avoir plusieurs attributs de même nom. La valeur d'un attribut doit être entre "" ou ''.

Tous les caractères sont acceptés, à l’exception des caractères <, & 

Les lettres accentuées peuvent également poser des problèmes.  Pour utiliser les caractères non acceptés, il est possible de les protéger à l’intérieur d’une section CDATA (<![CDATA[...]]>

<nom>
<![CDATA[Crustacé]]>
</nom>
XML & DTD

 

Pour appliquer une structuration dans un élément XML, on va faire appel à un fichier DTD. Pour associer un fichier DTD à un fichier XML, après la balise <?xml ....>, il faut mettre la balise :

<!DOCTYPE agenda SYSTEM "agenda.dtd">

agenda sera l'élément racine et agenda.dtd le fichier DTD

Le fichier XML devra alors commencer et terminer impérativement par la balise agenda.

Un fichier XML ne peut avoir qu'un et UN SEUL élément racine !

 

A la suite de la déclaration de cette balise, le fichier DTD suivra la hiérarchie du fichier XML.

agenda.xml :

 <agenda>
	<categorie type="famille">
		<personne>
			<nom><![CDATA[Crustacé]]></nom>
			<prenom><![CDATA[Emilie]]></prenom>
			<mail>crustacé[email protected]</mail>
			<telephone></telephone>
		</personne>
		<personne>
			<nom><![CDATA[boîte]]></nom>
			<prenom><![CDATA[thon]]></prenom>
			<mail>crustacé[email protected]</mail>
			<mail>[email protected]</mail>
			<telephone typeTel="fixe" num="000000000000"></telephone>
			<telephone typeTel="fax" num="000000000000"></telephone>
		</personne>
	</categorie>
	<categorie type="ami">
		<personne>
			<nom><![CDATA[Crustacé]]></nom>
			<prenom><![CDATA[Emilie]]></prenom>
      		<mail>crustacé[email protected]</mail>
			<telephone></telephone>
		</personne>
    </categorie>
</agenda>

agenda.dtd :

!ELEMENT agenda (categorie*)>
<!ELEMENT categorie (personne*)>
<!ELEMENT personne (nom, prenom, mail+, telephone*)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT mail ANY>
<!ELEMENT telephone EMPTY>
<!ATTLIST categorie type (famille|ami|travail) #REQUIRED>
<!ATTLIST telephone typeTel (fixe|portable|fax) #IMPLIED>
<!ATTLIST telephone num CDATA #IMPLIED>

Dans l'élément agenda, on retrouvera une balise catégorie, qui elle-même aura une balise personne. Les balises categorie personne terminent par une * car on retrouvera plusieurs catégories ainsi que plusieurs personnes.

Les attributs sont à la fin de la déclaration de tous les élements.