• Aucun résultat trouvé

Définition de Type de Document (DTD)

Eléments

Dans une DTD, on définit principalement les éléments intervenant dans un fichier XML. La définition d'un élément possède la syntaxe suivante : <!ELEMENT nom_élément (modèle_contenu)>

nom_élément est le nom de la balise qui sera utilisée ; modèle_contenu renseigne sur ce qui est compris entre <nom_élément> et </nom_élément>.

Ainsi

<!ELEMENT date (jour, mois, année)>

<!ELEMENT jour (#PCDATA)>

<!ELEMENT mois (#PCDATA)>

<!ELEMENT année (#PCDATA)>

définit un élément composé, date, contenant trois éléments simples, jour, mois, année. Ces trois éléments ont un contenu de caractères (PCDATA signifie Parsed Character Data ou chaîne de caractères analysée).

un élément vide, comme la balise <hr/> par exemple se définira par emploi du mot réservé EMPTY :

<!ELEMENT hr EMPTY>

Prenons maintenant un exemple plus complet. Imaginons une bibliothèque composés d'ouvrages. Chaque ouvrage est décrit par un numéro d'inventaire, un titre, un ou plusieurs auteurs, une maison d'édition, un prix d'achat.

Nous avons à construire le fichier XML et la DTD qui définira les balises employées..

Le document XML (enregistré dans le fichier livres.xml) est :

<?xml version="1.0" encoding="ISO-8859-1" ?>

<bouquins>

<livre>

<numero>123</numero>

<titre>Les Trois Mousquetaires</titre>

<auteur>A.Dumas</auteur>

<editeur>Gallimard</editeur>

<prix>246FF</prix>

</livre>

<livre>

<numero>124</numero>

<titre>Les Diaboliques</titre>

<auteur>Boileau</auteur>

<auteur>Narcejac</auteur>

<editeur>Duchnok</editeur>

<prix>210FF</prix>

</livre>

</bouquins>

Les figures suivantes donnent la visualisation du fichier livres.xml dans les navigateurs Netscape6 et Internet Explorer 5 :

Il nous faut maintenant établir la DTD qui définit les balises utilisées. Elle correspondra au fichier suivant enregistré sous le nom de livres.dtd :

<!ELEMENT bouquins (livre+)>

<!ELEMENT livre (numero, titre, auteur+, editeur, prix?)>

<!ELEMENT numero (#PCDATA)>

<!ELEMENT titre (#PCDATA)>

<!ELEMENT auteur (#PCDATA)>

<!ELEMENT editeur (#PCDATA)>

<!ELEMENT prix (#PCDATA)>

Dans une DTD chaque définition de balise est introduite avec la balise <!ELEMENT>. Quelques explications sont nécessaires à la compréhension de ce qui précède :

"livre+" indique que plusieurs occurrences de "livre" vont intervenir. Autrement dit "bouquins" possède plusieurs "livres".

"prix?" indique que le champ "prix" est facultatif : il peut être absent.

Les signes "+", "?" indiquent des contraintes d'occurrence. Il y en a en fait trois : contrainte signification

? 0 ou 1 (optionnel)

* 0 ou plus

+ au moins 1

Il faut évidemment indiquer dans le fichier livres.xml quelle DTD il faut utiliser. Pour cela, on rajoute une ligne (en rouge) :

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE bouquins SYSTEM "livres.dtd">

<bouquins>

<livre>

<numero>123</numero>

<titre>Les Trois Mousquetaires</titre>

<auteur>A.Dumas</auteur>

<editeur>Gallimard</editeur>

<prix>246FF</prix>

</livre>

<livre>

<numero>124</numero>

<titre>Les Diaboliques</titre>

<auteur>Boileau</auteur>

<auteur>Narcejac</auteur>

<editeur>Duchnok</editeur>

<prix>210FF</prix>

</livre>

</bouquins>

Attributs

Les composants d'un fichier XML ne comportent pas que des balises ; celles-ci peuvent contenir des attributs. Il faut donc que la DTD puisse expliciter les attributs de balises. Ceci est effectué avec la syntaxe suivante :

<!ATTLIST nom_élément nom_attribut type_attribut valeur_par_défaut>

nom_élément est le nom de l'élement auquel est attaché l'attribut ; nom_attribut est le nom de l'attribut ; type_attribut est le type de l'attribut ; les différents types sont donnés dans le tableau ci-dessous :

type signification

CDATA la valeur est une chaîne de caractères

(val1|

val2|...) la valeur est l'une des possibilités de l'énumération ID la valeur est un identifiant unique

IDREF la valeur est l'identifiant d'un autre élément IDREFS la valeur est une liste d'identifiants NMTOKEN la valeur est un nom valide XML NMTOKENS la valeur est une liste de noms valides XML

ENTITY la valeur est une entité

ENTITIES la valeur est une liste d'entités NOTATION la valeur est un nom de notation

xml: la valeur est une valeur prédéfinie XML valeur_par_défaut peut prendre les valeurs suivantes :

valeur signification

valeur valeur par défaut de l'attribut

#REQUIRED saisie obligatoire

#IMPLIED saisie facultative

#FIXED valeur constante prédéfinie

exemples :

dans la DTD dans le fichier XML

<!ELEMENT message (#PCDATA)>

<!ATTLIST message longueur CDATA "0"> <message longueur="20">...</message>

<!ELEMENT paiement (#PCDATA)>

<!ATTLIST paiement mode (chèque|espèces|carte) "espèces"> <paiement mode="carte">...</paiement>

<!ELEMENT utilisateur (#PCDATA)>

<!ATTLIST utilisateur username CDATA #REQUIRED>

<!ATTLIST utilisateur password CDATA #REQUIRED>

<utilisateur username="dupont"

password="azerty567">...</utilisateur>

Entités

Une entité est une variable remplaçant du texte. Elle est définie dans une DTD par la syntaxe

<!ENTITY nom_entité valeur_entité>

exemples :

<!ENTITY souris "mickey mouse">

<!ENTITY texte "il était une fois une marchande de foie qui vendait du foie dans la ville de Foix. Elle me dit, 'ma foi, c'est la première fois que je vends du foie dans la ville de Foix.'">

Les entités s'utiliseront dans le document XML sous la forme &souris, &texte.

Les entités précédentes sont des entités internes. On peut aussi définir des entités externes. Leur définition se situe dans un autre document.

La syntaxe est alors :

<!ENTITY nom_entité SYSTEM "URI">

exemple :

<!ENTITY Noe SYSTEM "http://www.bible.fr/arche.dtd">

On peut aussi définir des entités paramètres. Leur syntaxe est

<!ENTITY %nom_entité "type_entité">

exemple

<!ENTITY %car "(#PCDATA)">

<!ELEMENT titre %car>

<!ELEMENT sous_titre %car>

%car remplace, dans l'exemple précédent (#PCDATA) dans toute la DTD.

Nous avons vu qu'Internet Explorer 5 pouvait agir comme afficheur de structure, mais il ne tient pas compte du contenu de la DTD. Internet Explorer 5 est un "analyseur non validant". Existe-t-il des analyseurs "validants", c'est à dire faisant le lien entre le fichier XML et la DTD ? La réponse est oui. Il en existe un, gratuit, offert par Microsoft (Si ! Ca existe !), appelé msxml.

Pour activer cet analyseur validant, il faut ajouter le code Javascript suivant (que l'on peut placer dans un document HTML) : xmldoc= new ActiveXObject("msxml2.DOMDocument");

xmldoc.validateOnParse = true;

xmldoc.load(url);

Information : http://www.xmlwriter.net/msxml.shtml#UseMSXML