XML : Structure des documents
1. Syntaxe XML
Objectif: Cette section a pour objectif de vous initier aux documents XML Distinguez les noms XML correct des noms incorrect et corrigez les erreurs.
• <Drivers_License_Number>98 NY 32</Drivers_License_Number>
• <Driver's_License_Number>98 NY 32</Driver's_License_Number>
• <month-day-year>7/23/2001</month-day-year>
• <first name>Alan</first name>
• <àçttûä>øåú</àçttûä>
• <first_name>Alan</first_name>
• <month/day/year>7/23/2001</month/day/year>
• <_4-lane>I-610</_4-lane>
• <téléphone>011 33 91 55 27 55 27</téléphone>
• <4-lane>I-610</4-lane>
2. Document bien formés
Lisez les exemples suivants et vérifier si les documents XML sont bien formés.
• <?xml version="1.0" ?>
<top>
<item>Question 1<item answer="a">
<item>Question 2<item answer="b">
<item>Question 3<item answer="c">
</top>
• <?xml version="1.0" ?>
<text>
<font size='8pt'>petite police</font>
<font size='24pt'>grande police</font>
</text>
• <?xml version="1.0" ?>
<top> <item val=2/>
<item val=3/>
<item val=12/>
</top>
• <?xml version="1.0" ?>
<text>
<font small>Un petit texte</font>
<font big>Un grand texte</font>
</text>
• <?xml version="1.0" ?>
<test>
<elem att1= toto />
<elem att2= titi />
</test>
• <?xml version="1.0"?>
<a>
<b a="toto">Et hop</b>
</a>
<a>
<b a="titi">Voil_a</b>
</a>
• <?xml version="1.0"?>
<programme titre="Internet">
<ul>
<li>XML<li/>
<li>DTD<li/>
<li>API<li/>
<li>XSL<li/>
</ul>
</programme>
• <?xml version="1.0"?>
<a>
<b><c/></b><d></b>
</a>
• <?xml version="1.0"?>
<!DOCTYPE text [ <!ELEMENT text EMPTY> ]>
<text><bf>Titre</bf></text>
• <?xml version="1.0" ?>
<niveaux>
<truc>chose</truc>
<niveau index="1">
<truc> </truc>
</niveau>
<niveau index="2">
<truc attribut="chose"> </truc>
</niveau> </niveaux>
3. Creation d'un document
On souhaite écrire un livre en utilisant le formalisme XML.
I. Le livre est structuré en section, en chapitres et en paragraphes (au moins 2 pour chaque structures).
II. Le livre doit contenir la liste des auteurs (avec nom et prénom).
III. Tous les éléments doivent posséder un titre, sauf le paragraphe qui contient du texte.
IV. Proposez une structuration XML de ce document.
V. Vérifiez, à l’aide de l’éditeur, que votre document est bien formé.
VI. Attention : ne pas utiliser d’attributs ; l’encodage utilisé est ISO-8859-1 VII. Votre document sera nommé livre1.xml.
4. Création d'un document avec attributs et entités prédéfinis
On souhaite compléter la structure du document XML de l’exercice précédent par les attributs nom et prenom pour les auteurs et titre pour le livre, les sections et les chapitres.
I. Analysez la structure du nouveau document.
II. Y a-t-il des simplifications possibles ?
III. Vérifiez, à l’aide de l’éditeur, que votre document est bien formé.
IV. Placez dans 2 paragraphes un bloc de texte contenant l’extrait suivant :
<element id="10">></element>
V. Pour le premier paragraphe, employez les entités prédéfinies.
VI. Pour le deuxième paragraphe, employez une section CDATA.
5. Espace de noms
Il s’agit de créer un document sur la base de livre1.xml en respectant les points suivants : I. Mettez tous les éléments dans l’espace de noms http://www.masociete.com sans
utiliser d’espace de noms par défaut.
II. Mettez la deuxième section dans un espace de noms http://www.monentreprise.com.
III. Mettez le dernier paragraphe du dernier chapitre de la dernière section sans espace de noms.
6. Utilisation des attributs
L'utilisation des attributs doit être en adéquation avec les besoins des traitements. Le choix optimal dépendra de l'usage prévu d'un document et des outils utilisé pour sa création.
<cartes>
<personne>
<nom>Dupond</nom>
<prenom>Jean</prenom>
<bureau>
<compagnie>INRIA</compagnie>
<adresse>
<rue>Route des Lucioles</rue>
<nbr></nbr>
<post-code>F-06560</post-code>
<ville>Sophia Antipolis</ville>
<pays>France</pays></adresse>
<bureau-nbr>2506</bureau-nbr>
<telephone>+33.4.9365.7777</telephone><fax>+33.4.9365.7788</fax>
</bureau>
</personne>
<personne>
<nom>Michard</nom>
<prenom>Alain</prenom>
<bureau>
<compagnie>INRIA</compagnie>
<adresse>
<rue>Domaine de Voluceau</rue>
<nbr>BP 105</nbr>
<post-code>F-78153</post-code>
<ville>Le Chesnay Cedex</ville>
<pays>France</pays></adresse>
<bureau-nbr>3276</bureau-nbr>
<telephone>+33.1.3963.7777</telephone><fax>+33.1.3963.5114</fax>
</bureau>
</personne>
</cartes>
Ce document contient 2 cartes de visites professionnelles.
I. Donner un inconvénient et un avantage à ce type d'écriture.
II. Proposer une organisation différente.
Les corrections Ex1
• <Drivers_License_Number>98 NY 32</Drivers_License_Number>
Correction: Correct
• <Driver's_License_Number>98 NY 32</Driver's_License_Number>
Correction: Incorrect (apostrophe)
• <month-day-year>7/23/2001</month-day-year>
Correction: Correct
• <first name>Alan</first name>
Correction: Incorrect (présence d'un espace)
• <àçttûä>øåú</àçttûä>
Correction: Correct
• <first_name>Alan</first_name>
Correction: Correct
• <month/day/year>7/23/2001</month/day/year>
Correction: Incorrect (à cause des /)
• <_4-lane>I-610</_4-lane>
Correction: Correct
• <téléphone>011 33 91 55 27 55 27</téléphone>
Correction: Correct
• <4-lane>I-610</4-lane>
Correction: Incorrect (un nom XML ne commence pas par un chiffre)
EX2
Correction: Il comprend un entête XML du type Il existe un seul élément racine qui contient tous
les autres éléments Les balises sont correctement imbriquées : les balises ouvrantes ont une
balise fermante associée et il n'y a pas de chevauchement Le nom des balises est libre mais il
contient au moins une lettre Les attributs des balises, lorsqu'ils existent (ce n'est pas le cas), ont
obligatoirement une valeur qui doit toujours apparaître entre quotes
• <?xml version="1.0" ?>
<top>
<item>Question 1<item answer="a">
<item>Question 2<item answer="b">
<item>Question 3<item answer="c">
</top>
Correction: <item> n est pas fermé des attributs ne se mettent pas dans la balise fermante
• <?xml version="1.0" ?>
<text>
<font size='8pt'>petite police</font>
<font size='24pt'>grande police</font>
</text>
Correction: Bien formé
• <?xml version="1.0" ?>
<top> <item val=2/>
<item val=3/>
<item val=12/>
</top>
Correction: Manque des guillemets pour les attributs
• <?xml version="1.0" ?>
<text>
<font small>Un petit texte</font>
<font big>Un grand texte</font>
</text>
Correction: pas d'espaces dans les noms de balise (ou alors small est un attribut mais doit être suivi par affectation à une valeur)
• <?xml version="1.0" ?>
<test>
<elem att1= toto />
<elem att2= titi />
</test>
Correction: Bien formé, les attributs ne sont pas nécessaires
• <?xml version="1.0"?>
<a>
<b a="toto">Et hop</b>
</a>
<a>
<b a="titi">Voil_a</b>
</a>
Correction: Manque un élément Racine
• <?xml version="1.0"?>
<programme titre="Internet">
<ul>
<li>XML<li/>
<li>DTD<li/>
<li>API<li/>
<li>XSL<li/>
</ul>
</programme>
Correction: les balises fermantes ne sont pas bonnes </li>
• <?xml version="1.0"?>
<a>
<b><c/></b><d></b>
</a>
Correction: Mauvaise balise </b> </d>
• <?xml version="1.0"?>
<!DOCTYPE text [ <!ELEMENT text EMPTY> ]>
<text><bf>Titre</bf></text>
Correction: Bien formé mais non valide (le DTD interne impose que l élément text soit vide)
• <?xml version="1.0" ?>
<niveaux>
<truc>chose</truc>
<niveau index="1">
<truc> </truc>
</niveau>
<niveau index="2">
<truc attribut="chose"> </truc>
</niveau> </niveaux>
Correction: Bien Formé (truc peut etre utilisé à plusieurs endroits)
Ex3
Nous avons fait le choix de créer des balises supplémentaires telles que auteurs, sections, chapitres, paragraphes pour éviter de mélanger des ensembles distincts, comme le titre.
Cela présente l’avantage de créer des blocs homogènes (tels que les auteurs, les sections, les chapitres…).
<?xml version="1.0" encoding="iso-8859-1"?>
<livre>
<titre>Mon livre</titre>
<auteurs>
<auteur><nom>Brillant</nom><prenom>Alexandre</prenom></auteur>
<auteur><nom>Briand</nom><prenom>Aristide</prenom></auteur>
</auteurs>
<sections>
<section>
<titre>Section 1</titre>
<chapitres>
<chapitre>
<titre>Chapitre 1</titre>
<paragraphes>
<paragraphe>Premier paragraphe</paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</paragraphes>
</chapitre>
<chapitre>
<titre>Chapitre 2</titre>
<paragraphes>
<paragraphe>Premier paragraphe</paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</paragraphes>
</chapitre>
</chapitres>
</section>
<section>
<titre>Section 2</titre>
<chapitres>
<chapitre>
<titre>Chapitre 1</titre>
<paragraphes>
<paragraphe>Premier paragraphe</paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</paragraphes>
</chapitre>
<chapitre>
<titre>Chapitre 2</titre>
<paragraphes>
<paragraphe>Premier paragraphe</paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</paragraphes>
</chapitre>
</chapitres>
</section>
</sections>
</livre>
EX4
<?xml version="1.0" encoding="iso-8859-1"?>
<livre titre="Mon livre">
<auteurs>
<auteur nom="Brillant" prenom="Alexandre"/>
<auteur nom="Briand" prenom="Aristide"/>
</auteurs>
<sections>
<section titre="Section 1">
<chapitre titre="Chapitre 1">
<paragraphe>Premier paragraphe</paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</chapitre>
<chapitre titre="Chapitre 2">
<paragraphe>Premier paragraphe</paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</chapitre>
</section>
<section titre="Section 2">
<chapitre titre="Chapitre1">
<paragraphe><element id="10">&gt;</element></paragraphe>
<paragraphe><![CDATA[<element id="10">></element>]]></paragraphe>
</chapitre>
<chapitre titre="Chapitre 2">
<paragraphe>Premier paragraphe</paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</chapitre>
</section>
</sections>
</livre>
Ex5
Il y a plusieurs combinaisons possibles en fonction de l’utilisation du préfixe ou de l’espace de noms par défaut.
<p1:livre titre="Mon livre" xmlns:p1="http://www.masociete.com"
➥xmlns:p2="http://www.monentreprise.com">
<p1:auteurs>
<p1:auteur nom="nom1" prenom="prenom1"/>
<p1:auteur nom="nom2" prenom="prenom2"/>
</p1:auteurs>
<p1:sections>
<p1:section titre="Section1">
<p1:chapitre titre="Chapitre1">
<p1:paragraphe>Premier paragraphe</p1:paragraphe>
<p1:paragraphe>Deuxième paragraphe</p1:paragraphe>
</p1:chapitre>
</p1:section>
<p2:section titre="Section2">
<p2:chapitre titre="Chapitre1">
<p2:paragraphe>Premier paragraphe</p2:paragraphe>
<p2:paragraphe>Deuxième paragraphe</p2:paragraphe>
</p2:chapitre>
<p2:chapitre titre="Chapitre2">
<p2:paragraphe>Premier paragraphe</p2:paragraphe>
<paragraphe>Deuxième paragraphe</paragraphe>
</p2:chapitre>
</p2:section>
</p1:sections>
</p1:livre>
EX : 6
- Si le document est complété par des cartes relatives à des personnes travaillant dans la même entreprise et sur le même site, l'élément adresse sera répliqué à l'identique pour chaque
personne.
- Chaque carte est complète et peut être traitée indépendamment des autres. L'affichage ou l'impression est facilité.
Nouvelle organisation : L'idée est de simplifier les éléments personne. L'avantage en matière de concision est évident : l'adresse ne sera pas répétée pour des personnes travaillant dans le même établissement (cette structure facilite la génération automatique du document à partir d'une base de données) en revanche la réalisation ou l'affichage d'une fiche complète nécessitera des traitements supplémentaires. Il sera nécessaire d'utiliser l'attribut site des éléments bureau pour retrouver les éléments de l'adresse qui devront être insérés.
<cartes>
<nom-comp>
<compagnie>INRIA</compagnie>
<adresse site="Rocquencourt">
<rue>Domaine de Voluceau</rue>
<nbr>BP 105</nbr>
<post-code>F-78153</post-code>
<ville>Le Chesnay Cedex</ville>
<pays>France</pays></adresse>
<adresse site="Sophia">
<rue>Route des Lucioles</rue>
<nbr></nbr>
<post-code>F-06560</post-code>
<ville>Sophia Antipolis</ville>
<pays>France</pays></adresse></nom-comp>
<personne>
<nom>Dupond</nom><prenom>Jean</prenom>
<bureau site="Sophia">
<bureau-nbr>2506</bureau-nbr>
<telephone>+33.4.9365.7777</telephone><fax>+33.4.9365.7788</fax>
</bureau>
</personne>
<personne>
<nom>Michard</nom><prenom>Alain</prenom>
<bureau site="Rocquencourt">
<bureau-nbr>3276</bureau-nbr>
<telephone>+33.1.3963.7777</telephone><fax>+33.1.3963.5114</fax>
</bureau>
</personne>
</cartes>
Cette dernière structuration fait apparaître les informations relatives aux individus comme des valeurs d'attributs. Toute exploitation du document demande une application particulière. Ce peut être l'effet recherché : les cartes de visites peuvent être des objets cachés utilisés pour renseigner une base de données, compléter un tableau.
<cartes>
<nom-comp compagnie="INRIA">
<site site-name="Rocquencourt">
<rue>Domaine de Voluceau</rue>
<nbr>BP 105</nbr>
<post-code>F-78153</post-code>
<ville>Le Chesnay Cedex</ville>
<pays>France</pays></site>
<site site-name="Sophia">
<rue>Route des Lucioles</rue>
<nbr></nbr>
<post-code>F-06560</post-code>
<ville>Sophia Antipolis</ville>
<pays>France</pays></site>
</nom-comp>
<personne name="Michard"
prenom="Alain"
site-name="Rocquencourt"
telephone="01.3963.7777"
bureau-nbr="2512" />
<personne name="Dupond"
prenom="Jean"
site-name="Sophia"
telephone="04.9365.7777"
bureau-nbr="2506" />
</cartes>
La règle est de n'utiliser des attributs que pour des paramètres de traitement utilisés par les application. Le contenu informatif doit figurer dans le contenu des éléments.