Données structurées et XML Qu’est ce qu’un document XML ? Comment traduire la structure d’un document en XML ? notion de DTD ( Définition d’un Type de Document)
Données structurées et XML XML permet de représenter des données structurées: Données textuelles Organisées: on manipule un document constitué d ’éléments Un élément : un texte ou constitué d’autres éléments ou un mélange des deux ( titre d’ouvrage, prix , nomAuteur, …etc) Un élément peut être associé à des informations complémentaires , les attributs. La structure est celle d’un arbre; un élément un nœud de l’arbre.
Langage de balisage Les informations, isolées en éléments sont encadrées par une paire de balises (tags) et son contenu: < chapitre > …….< / chapitre> (intitulé de balise) Les balises ouvrantes portent les attributs( s’ils y en a ) < chapitre version = date = …….< / chapitre> L’imbrication et l’ordre des éléments reflètent la structure. Un document au format XML est un document texte constitué de balises.
XML ( extensible markup language) Les principaux avantages de ce langage: Possibilité de définir librement les balises utilisées ( contrairement à HTML) Distinction claire de la forme et du contenu du document XML + XSL : représentation d’un document : ajouter des feuilles de style Facilité pour établir la correspondance entre les données du document et les systèmes de stockage des données.
Exemple de structure HTML <HEAD> <TITLE>essai</TITLE> </HEAD> <BODY> <P>paragraphe </P> </BODY> </HTML>
Exemple But : stocker l’annuaire d’une administration ( nom, prénom, bureau , numéro de poste, email). Le texte du document: les informations. Organisation: ne pas mélanger les données: annuaire personne nom prénom bureau poste email Rossi Fabrice 4823 Fabrice.Rossi @dauphine.fr B520
Exemple (suite) Traduction en XLM de l’arbre: annuaire.xml <?xml version = « 1.0 » encoding= « ISO-8859-1 »?> <annuaire> <personne> <nom> Rossi </nom> <prénom> Fabrice </prénom> <bureau> B520</bureau> <poste> 4823</poste> <email> Fabrice.Rossi @dauphine.fr </email> </personne> <! – suite de l’annuaire --- </annuaire>
Exemple de fichier XML Hello.xml: <?xml version = « 1.0 » standalone = « yes»?> < conversation> <bienvenue > Salut à vous </bienvenue> <réponse > Laissez moi seul </réponse> </conversation> 1. En tête obligatoire, instruction de traitement 2. Balise ouvrante ( la racine de l’arbre) début d’un nœud. 3. Un élément de l’arbre 4. Un élément de l’arbre de même niveau 5 . Balise fermante associée la ligne 2.
Arbre de l’exemple
Exemple de code en XML <?xml version=« 1.0 »?> <!—ceci est un commentaire--> <article> <auteur> Boby Lapointe </auteur> <titre>Une introduction à xml</titre> <section> <titre>Présentation de xml</titre> <paragraphe>ce document est bien formé</paragraphe> </section> </article>
Documents xml bien formés Les éléments: <truc> : balise ouvrante: 1. Doit toujours correspondre à une balise fermante , ici </truc> 2. Le texte entre <> est le nom de l’élément, constitué de lettres, chiffres,’.’, ‘-’,’_’ et ‘:’. Le contenu d’un nœud de l’arbre, d’un élément, entre balise ouvrante et balise fermante. <et_hop/> : balise mixte pour les éléments vides.
fragments xml mal formés <a><b></a></b>: mal formé <p> bla, bla,bla <br> bla, bla, bla </p> :mal formé <nom.pas:très_bien-choisi/> : bien formé <a> contenu de l’élément </A> ( sensible à la casse): mal formé <un/truc> par exemple </un/truc> <pas texte=‘de problème’ > </pas> : bien formé L’attribut ( toujours dans une balise ouvrante) texte , sa valeur entre « » ou ‘ ‘ .
Instructions xml Le document commence par une déclaration: <?xml version = « 1.0 » encoding= « ISO-8859-1 »?> 1 <?xml version = « 1.0 » standalone = « yes»?> <?xml ?> est une déclaration L’attribut encoding précise l’encodage des caractères du document :ISO-8859-1 , notre ascii français. L’attribut standalone précise si le document est seul ( sans DTD) ou non ( auquel cas une instruction <!Doctype … est nécessaire)
La DTD : Définition d’un type de document Un document XML peut posséder une Déclaration formelle de sa structure, une sorte de grammaire (avec des règles d’utilisation ) que doit respecter le document. La DTD de l’annuaire : < ! ELEMENT personne ( nom, prénom, bureau, poste, email?) < ! ELEMENT prénom (# PCDATA) < ! ELEMENT bureau (# PCDATA) < ! ELEMENT poste (# PCDATA) < ! ELEMENT email (# PCDATA) (PCDATA: Parsed Character DATA , chaîne de caractères analysée)
Documents générés < personne > < nom> Rossi </nom> < prénom> Fabrice </prenom> <bureau> B520 </bureau> < poste> 4823 < / poste> < email> Fabrice.Rossi@dauphine.fr </email> <personne>
Autre document généré < personne > < nom> Rossi </nom> < prénom> Fabrice </prenom> <bureau> B520 </bureau> < poste> 4823 < / poste> <personne>
Les règles d’utilisation DTD notations Opérateur signification + L’élément doit être présent au minimum une fois * L’élément peut être présent plusieurs fois (ou aucune) ? L’élément peut être optionnellement présent | L’élément A ou B peuvent être présents
Exemple commenté < ! ELEMENT carnet ( fiche *) > L’élément carnet peut contenir un nombre arbitraire d’éléments fiche. < ! ELEMENT fiche ( nom, prénom, téléphone, email*) L’élément fiche contient exactement un nom , un prénom, un téléphone, et autant de email qu’on le souhaite (< ! ELEMENT nom (# PCDATA)> L’élément nom ne contient que du texte < ! ELEMENT téléphone (fixe fax| portable) *> L’élément téléphone contient dans n’importe quel ordre et en n’importe quelle quantité des éléments: fixe, fax et portable.
DTD associé à un sommaire < ! ELEMENT Sommaire ( Numéro, Date, RubriqueSommaire +)> < ! ELEMENT numéro (# PCDATA)> < ! ELEMENT date(# PCDATA)> < ! ELEMENT RubriqueSommaire( RubriqueTitre, ArticleSommaire+)> < ! ELEMENT RubriqueTitre(# PCDATA)> <! ELEMENT ArticeSommaire(ArticeTitre, ArticlePage)> < ! ELEMENT ArticleTitre (# PCDATA)> < ! ELEMENT ArticlePage (# PCDATA)> Construire l’arbre représentant ce sommaire :
Validité d’un document Un document XML qui possède une DTD associée est dit valide s’il respecte les règles de grammaire. Un document XML est dit bien formé lorsque: toutes les balises ouvrantes ont une balise fermante associée Les balises sont correctement imbriquées.
Deux types de DTD Sous forme interne: la grammaire du document est placé au sein même du document. Sous forme externe: un fichier extérieur contient la grammaire du document .
Doc avec DTD interne <! DOCTYPE bibliothèque ] > <?xml version = « 1.0 » ?> <! DOCTYPE bibliothèque [ < ! ELEMENT bibliothèque ( livre +)> < ! ELEMENT livre (Titre, auteur, ref)> < ! ELEMENT Titre(# PCDATA)> < ! ELEMENT auteur (# PCDATA)> < ! ELEMENT ref (# PCDATA)> ] > < bibliothèque> < livre> < titre > Dune </titre> < auteur> Frank Heckbert </auteur> <ref> Fiction-H-1</ref> < / livre> < / bibliothèque>
Doc avec DTD externe <?xml version = « 1.0 » ?> <! DOCTYPE bibliothèque SYSTEM « biblio.dtd »> < bibliothèque> < livre> < titre > Dune </titre> < auteur> Frank Heckbert </auteur> <ref> Fiction-H-1</ref> < / livre> < / bibliothèque> Biblio.dtd: < ! ELEMENT bibliothèque ( livre +)> < ! ELEMENT livre (Titre, auteur, ref)> < ! ELEMENT Titre(# PCDATA)> < ! ELEMENT auteur (# PCDATA)> < ! ELEMENT ref (# PCDATA)>
Exemple (XML) :disques.xml 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!DOCTYPE disques SYSTEM "DisquesML.dtd"> 3 <disques> 4 <groupe > 5 <nom>MUSE</nom> 6 <membre>Matthew Bellamy</membre> 7 <membre>Dominic Howard</membre> 8 <membre>Chris Wolstenholme</membre> 9 </groupe> 10 <disque> 11 <interprete > TOTO </interprete> 12 <titre>Showbiz</titre> 13 </disque> 14 <disque> 15 <interprete> RIRI </interprete> 16 <titre>Origin of symmetry</titre> 17 </disque> 18 </disques>
Exemple (DTD) DisquesML.dtd 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!ELEMENT disques (groupe*, disque*) > 3 <!ELEMENT groupe (nom,membre+) > 4 <!ELEMENT nom (#PCDATA) > 5 <!ELEMENT membre (#PCDATA) > 6 <!ELEMENT disque (interprete, titre)> 7<!ELEMENT interprete (#PCDATA) > 8 <!ELEMENT titre (#PCDATA) >
DTD INTERNE DTD interne : 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!DOCTYPE carnet [ 3 <!-- contenu de la DTD --> 4 ]> le nom qui suit DOCTYPE est celui de l’élément racine