introduction à xml

36
Introduction à XML Généralités

Upload: ura

Post on 15-Jan-2016

19 views

Category:

Documents


0 download

DESCRIPTION

Introduction à XML. Généralités. Introduction. XML ( Extensible Markup Language ) : standard W3C pour le balisage de données. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Introduction à XML

Introduction à XML

Généralités

Page 2: Introduction à XML

Introduction

XML (Extensible Markup Language) : standard W3C pour le balisage de données.

Son origine date des années 80. Il est issu comme le HTML d’un langage très général appelé SGML (Standard Generalized Markup Language) dont il a hérité des principales caractéristiques tout en étant plus simple

à mettre en œuvre.

Page 3: Introduction à XML

Quelques aspects de XML

• Le contenu du document et sa mise en forme sont séparés (contrairement à HTML). Pratique : on peut associer plusieurs mises en forme alternatives pour un même contenu.

• Chaque document XML peut avoir une DTD (document Type Definition) ou un schéma associé qui définissent sa structure.

• Les balises n’ont pas de sémantique prédéfinies (contrairement à HTML où chaque balise a un sens et un effet sur la mise en forme qui

est connu).

Page 4: Introduction à XML

XML - Exemple

La structure d’un document XML est arborescente.

<livre>

<titre>Les Misérables</titre> <auteur>

<prénom>Victor</prénom>

<nom>Hugo</nom>

</auteur> <nb_tomes>3</nb_tomes>

</livre>

A chaque balise ouverte, correspond une balise fermée (ex. <livre> et </livre>).

Chaque élément peut être vu comme un nœud d’un arbre. livre a pour sous-élément (pour « enfants ») auteur, titre et nb_tomes. Auteur a pour enfant prénom et nom.

Page 5: Introduction à XML

XML - Exemple

Arbre XML (pour exemple précédent) :

livre

titre auteur Nb_tomes

prénom nom

Victor Hugo

3Les misérables

Page 6: Introduction à XML

XML exemple

L’exemple suivant montre l’utilisation d’XML dans un texte narratif:

<biographie><auteur>Victor Hugo</auteur> est un écrivain français né à Besançon en <date>1802</date>. Il a écrit un grand nombre de livres, beaucoup considérés comme des <emphase>chef d’œuvres</emphase> de la littérature française. Parmi ses romans : <titre>Les misérables</titre>, <titre>Notre Dame de Paris</titre>.</biographie>

Dans cet exemple, XML est utilisé sous forme assez libre. Biographie comprend un certain nombre de sous éléments (auteur, date,…) mais aussi des données textuelles non structurées.

Page 7: Introduction à XML

XML – Mise en oeuvre

Pour l’utilisation d’XML comme langage de présentation de données sur le web, deux documents au moins sont nécessaires.

• Le premier contient les données proprement dites.

• Le deuxième va contenir les informations nécessaires à sa mise en forme. En pratique, cela revient à définir des feuilles de styles (CSS, XSLT ou XSL-FO ou….) pour transformer les données en un format présentable (HTML voire PDF).

Un fichier supplémentaire peut être ajouté pour définir les balises que le document peut utiliser et les relations entre celles-ci. Il prend la forme d’une DTD ou d’un Schéma.

Page 8: Introduction à XML

Structure d’un document XML - Prologue

En dehors des données présentées sous une forme arborescente (comme dans l’exemple précédent). Chaque document XML contient un prologue.

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

Les informations fournies dans cette déclaration sont de trois sortes : 1. version : version du XML utilisée dans le document, 1.0 ici.2. encoding : jeu de codage de caractères utilisé. Le jeu de caractère

standard pour la France est le ISO-8859-1. Par défaut, sa valeur est UTF-8;

3. standalone : la valeur yes, indique que le processeur de l'application n'attend aucune déclaration de type de document extérieure au document. Sinon, le processeur attend une référence de déclaration de type de document.

Page 9: Introduction à XML

Structure d’un document XML

On peut aussi trouver des instructions de traitement au début du document. Par exemple: <?xml-stylesheet type="text/xsl" href="biblio.xsl"?>

L’instruction ne sert pas pour le document proprement dit mais sera interprétée par l’application à laquelle elle est destinée (ici xml-stylesheet le processeur de feuilles de style du XML).

L’attribut type indique de quel type de feuille de style il s’agit (XSL ou CSS).

L’attribut href donne l’URL (« l’emplacement »)  du fichier de feuille de style.

Page 10: Introduction à XML

Exemple

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

<?xml-stylesheet href="Film.xsl" type="text/xsl"?>

<FILMS>

<FILM Annee='1979'>

<TITRE>Alien</TITRE>

<GENRE>Science-fiction</GENRE><PAYS>USA</PAYS>

<ROLES><ROLE><PRENOM>Sigourney</PRENOM><NOM>Weaver </NOM><INTITULE>Ripley</INTITULE></ROLE></ROLES>

<RESUME> Près d'un vaisseau spatial échoué sur une lointaine planète, des Terriens en mission découvrent de bien étranges "oeufs". Ils en ramènent un à bord, ignorant qu'ils viennent d'introduire parmi eux un huitième passager particulièrement féroce et meurtrier.</RESUME>

</FILM></FILMS>

Page 11: Introduction à XML

XML - Structure

Tout document XML se présente sous la forme d’un arbre d’éléments. Il contient une racine, des nœuds et des feuilles (appelés éléments).

La racine : chaque document contient une unique racine (document element). Elle englobe tous les autres : <FILMS> dans l’exemple précédent.

Les éléments : Ils peuvent contenir du texte ou d’autres éléments (ses enfants). <ROLE><PRENOM>Sigourney</PRENOM><NOM>Weaver </NOM><INTITULE>Ripley</INTITULE></ROLE>

Page 12: Introduction à XML

XML - Structure

Les attributs: tout élément peut contenir un ou plusieurs attributs. Chaque attribut se compose d’un nom et d’une valeur.

Par exemple : <FILM Annee='1997‘/>

Les entités : elles peuvent être prédéfinies ou définies par l’utilisateur dans la DTD (et seront utilisables dans le fichier XML ou la DTD).

Les entités prédéfinies sont : &amp; (pour &), &lt; (pour <), &gt; (pour >), &quot; (pour «  ), &aquot; (pour ‘).

Elles permettent de ne pas interpréter les caractères spéciaux et réservés d’XML.

Page 13: Introduction à XML

XML - Structure

Les sections CDATA: une section CDATA peut contenir toute sorte de suite de caractères. Sert à définir des blocs de parties qui ne devront pas être analysés par le processeur XML. Elle est mise en œuvre par <![CDATA[ et ]]> . Ce qui est entre ces deux balises ne sera pas interprété (pratique pour mettre du code XML en exemple et « échapper » un texte contenant pleins de caractères spéciaux réservés).

Par exemple : <Introduction à <![CDATA[<XML>]]>>

Les commentaires : comme en HTML. Par exemple : <!-- Ce qui suit ne sera pas affiché

par le processeur XML -->

Page 14: Introduction à XML

XML - Structure

Les règles de base à respecter sont :

1. Toutes les balises portant un contenu non vide doivent être fermées;

2. Les balises n'ayant pas de contenu doivent se terminer par />;

3. Les noms d'attributs sont en minuscules;

4. Les valeurs d'attributs doivent être entre guillemets;

5. La casse (majuscules/minuscules) doit être respectée pour toutes les occurrences de noms de balises. XML est sensible à la casse!

Un document respectant ces critères est dit bien formé (well formed).

D’autres règles peuvent être ajoutées à l’aide d’un DTD.

Page 15: Introduction à XML

Introduction à XML

Les DTD (Document Type Definition)

Page 16: Introduction à XML

Introduction

Bien que XML soit un langage très flexible, il est nécessaire parfois de

préciser la structure d’un document.

• Garantir qu’un document suit bien les règles d’une application spécifique (format d’échange de données dans un protocole, par exemple).

• Dire ce qu’il est possible ou pas possible de trouver dans un document. Ex : tel élément peut être suivi de tel autre.

• Spécifier que certains éléments doivent avoir des attributs obligatoires. Ex : tout élément employé doit avoir un attribut no_secu.

C’est grâce aux DTD que l’on peut spécifier la structure du document.

Page 17: Introduction à XML

Introduction

Une DTD devra donner la liste de tous les éléments, attributs et entités qu’utilise le document (ainsi que leur contexte).

Un document XML sera dit valide, s’il obéit à sa DTD.

Le principe général est que tout ce qui n’est pas interdit est autorisé.

Une DTD peut déclarer plein de choses sur la structure du document mais a des limites.

Elle ne peut rien dire sur : la longueur du document, le nombre d’occurrences des éléments, le détails des données textuelles, quel est le sens d’un élément, …

Page 18: Introduction à XML

Type de DTD

Les DTD peuvent être de deux sortes : interne ou externe.

Une DTD est interne lorsqu’elle se trouve à l’intérieur du document XML qu’elle décrit. Elle est externe lorsqu’elle se trouve dans un autre fichier. Dans ce dernier cas, le document XML contient une référence à ce fichier.

Dans tous les cas, une déclaration de type de document est de la forme :

<!DOCTYPE élt.racine déclarations>

élt.racine : nom de l’élément racine du document XML.

déclarations : donne la liste des déclarations de la DTD si elle est interne ou l’adresse de fichier la contenant si elle est externe.

Page 19: Introduction à XML

Type de DTD - Exemple

Soit le (détail de) document XML suivant :

<liste.cd>   <cd>     <interprete>Keith Jarret</interprete>     <titre>The Köln Concert</titre>     <specif type="Live" nb_cd="1"/>   </cd>   <cd>     <interprete>Pink Floyd</interprete>     <titre>The Wall</titre>     <specif type="Live" nb_cd="2"/>   </cd>

</liste.cd>

Page 20: Introduction à XML

Type de DTD - Exemple

Une DTD interne pourrait avoir la forme suivante :

<!DOCTYPE liste.cd[   <!ELEMENT liste.cd (cd)*>     <!ELEMENT cd (interprete, titre, specif)>       <!ELEMENT interprete (#PCDATA)>       <!ELEMENT titre (#PCDATA)>       <!ELEMENT specif (#PCDATA)>        <!ATTLIST specif           type (B.O.F.|Live|Compilation) #IMPLIED           nbcd CDATA "1"         > ]>

Page 21: Introduction à XML

Type de DTD - Exemple

Une DTD externe prendrait la forme suivante :<!DOCTYPE liste.cd SYSTEM "listecd.dtd">

Où le fichier listecd.dtd (qui ici doit être dans le même répertoire) contiendrait :

<?xml version="1.0" encoding="ISO-8859-1"?> <!ELEMENT liste.cd (cd+)>   <!ELEMENT cd (interprete, titre, specif)>   <!ELEMENT interprete (#PCDATA)>   <!ELEMENT titre (#PCDATA)>

   <!ELEMENT specif (#PCDATA)>       <!ATTLIST specif         type (B.O.F.|Live|Compilation) #IMPLIED         nbcd CDATA "1"       >

Page 22: Introduction à XML

Type de DTD – remarque

Dans la déclaration de DTD, on peut trouver les mots clés SYSTEM ou PUBLIC.

SYSTEM : indique que la DTD est à usage privé et se trouve (la plupart du temps) sur le serveur. Elle peut être exprimée sous la forme d’une adresse http, d’une adresse relative ou du nom du fichier dtd si celui ci est dans le même répertoire.

PUBLIC : fait référence à une DTD publique accessible à tous. Exemples : une DTD pour HTML ou SVG (Scalable Vector Graphics) sur le site du W3C. Dans ce cas, l’adresse fournie est une URL (ou URI).

Page 23: Introduction à XML

Déclaration d’éléments

Elle est de la forme : <!ELEMENT nom modèle_contenu>

Nom : peut être n’importe quelle nom XML autorisé.

Modèle_contenu : décrit quels sous éléments (et dans quels ordre) l’élément peut avoir.

Le modèle de contenu le plus simple est #PCDATA qui indique que l’élément ne contient que des données textuelles.

Exemple : <!ELEMENT titre (#PCDATA)>

Page 24: Introduction à XML

Déclaration d’éléments - séquence

On indique la présence de sous éléments par le parenthèsage. Cela permettra aussi de combiner les différents types de déclarations sans ambiguïté.

Exemple : <!ELEMENT coordonnées (numéro_portable)> indique que l’élément coordonnées ne contient qu’un seul sous élément numéro_portable (qui devra être défini aussi).

Pour indiquer que l’on peut trouver une liste ordonnée (séquence) de sous-éléments, on utilise la virgule comme séparateur.

Exemple : <!ELEMENT nom (prénom, nom_famille)>. Dans ce cas, la présence du prénom et du nom de famille dans cet ordre doit être nécessaire pour que l’élément nom soit bien formé.

Page 25: Introduction à XML

Déclaration d’éléments - nombre

Le nombre de sous-éléments peut être contrôlé à l’aide des trois caractères spéciaux suivant :

? Autorise zéro ou un élément

* Autorise zéro ou plusieurs éléments

+ Autorise un ou plusieurs éléments

Exemple : <!ELEMENT nom (prénom, deuxième_prénom?, nom_famille+)>. Un prénom, éventuellement un deuxième prénom, au moins un (voire plusieurs) noms de famille.

Exemple : <!ELEMENT nom (prénom+, surnom*, nom_famille)>. Au moins un prénom, éventuellement (zéro ou) plusieurs surnoms, un nom de famille.

Page 26: Introduction à XML

Déclaration d’éléments - choix

On peut avoir des alternatives dans la liste des sous-éléments d’un élément donné. On exprime les choix par une barrre verticale « | ».

Exemple : <!ELEMENT petit_chiffre (un | deux | trois | quatre | cinq)>. L’élément petit_chiffre peut avoir comme sous-élément soit un, soit deux, etc…, soit cinq (ces éléments restent à définir).

Exemple : <!ELEMENT nom ((prénom+, surnom*, nom_famille) | (prénom, deuxième_prénom?, nom_famille+)) >.

Cette déclaration présente la structure de nom comme un choix entre les deux possibilités définies au transparent précédent.

Page 27: Introduction à XML

Déclaration d’éléments - Mixte

Dans certains documents, notamment les document narratif, le contenu peut être mixte, mélangeant élément structuré et texte.

Exemple : <biographie><auteur>Victor Hugo</auteur> est un écrivain français né à Besançon en <date>1802</date>. Il a écrit un grand nombre de livres, beaucoup considérés comme des <emphase>chef d’œuvres</emphase> de la littérature française. </biographie>

L’élément biographie pourrait se définir comme suit :

<!ELEMENT biographie (#PCDATA | auteur | emphase | date )* >

Il contient n’importe quel nombre d’éléments auteur, emphase, date dans n’importe quel ordre, entrecoupé éventuellement de données textuelles.

Page 28: Introduction à XML

Déclaration d’éléments – vide, ANY

On peut spécifier que certains éléments ne contiennent aucun contenu. Ils auront éventuellement, par contre, des attributs (voir après). On utilise le mot clé EMPTY.

Exemple : <!ELEMENT specif EMPTY>

A contrario, on peut aussi vouloir dire qu’un élément existe, qu’il peut avoir du contenu sans vouloir spécifier la nature de ce qu’il contient. On utilise le mot clé ANY.

Exemple : <!ELEMENT qquechose ANY>

Peut-être utile au début de la conception d’une DTD, lorsqu’on ne connaît pas forcement la nature de l’élément mais que l’on souhaite pouvoir valider le document quand même.

Page 29: Introduction à XML

Déclaration d’attributs

Une DTD doit déclarer aussi tous les attributs autorisés dans un document XML à valider.

Principalement, il faut renseigner le type de l’attribut et une déclaration par défaut qui indique son caractère obligatoire ou pas.

On peut décrire tous les attributs d’un élément donné dans la même déclaration.

Déclaration d'un attribut « attr » (de l’élément « elt ») avec une valeur par défaut :

<!ATTLIST elt attr CDATA "valeur">

Si la valeur est omise dans le document XML, il n’y aura pas d’erreur, car l'attribut est ajouté par le processeur avec la valeur par défaut.

Page 30: Introduction à XML

Déclaration d’attributs - défauts

Déclaration d'un attribut requis : <!ATTLIST elt attr CDATA #REQUIRED>

Cette fois, l’attribut requis doit être présent dans le document XML sous peine de provoquer une erreur.

Déclaration d'un attribut optionnel : <!ATTLIST elt attr CDATA #IMPLIED>

Déclaration d'un attribut avec une valeur fixe : <!ATTLIST elt attr CDATA #FIXED "valeur">

Page 31: Introduction à XML

Déclaration d’attributs – Types possibles

Les types d’attributs possibles sont au nombre de 10 : CDATA, ENUMERATION, NMTOKEN, NMTOKENS, ENTITY, ENTITYS,

ID, IDREF, IDREFS, NOTATION.

CDATA : peut contenir n’importe quelle chaîne de caractère comme valeur de l’attribut.

Exemple : <!ATTLIST nom email CDATA #IMPLIED>

ENUMERATION : indique que l’attribut prend sa valeur dans une liste donnée in extenso. Il n’y a pas de mots clés.

Exemple : <!ATTLIST cd type (live | studio | best_of) >

Dans ce cas, le nœud XML suivant sera valide : <cd type = ‘‘live’’>

Page 32: Introduction à XML

Déclaration d’attributs – Types possibles

NMTOKEN (resp. NMTOKENS) : unité lexicale nominale (resp. liste de … ) suite de caractères numériques, alphanumériques et de ponctuation (voir doc du langage pour détails).

ID : doit contenir un nom XML qui est unique dans le document. Aucun autre attribut de type ID ne peut avoir la même valeur dans le document (analogie avec les « clés » du modèle relationnel).

IDREF (resp. IDREFS) : fait référence à un attribut de type ID (resp. liste d’attributs) d’un élément du document. Sert à établir des relations plusieurs-à-plusieurs entre élément dans le document.

ENTITY, ENTITIES (référence à des entités non analysés), NOTATION (contient le nom d’une notation déclarée). Cf doc du langage.

Page 33: Introduction à XML

Déclaration d’entités

On l’a vu, XML possède 5 types d’entités prédéfinies : &amp; (pour &), &lt; (pour <), &gt; (pour >), &quot; (pour «  ), &aquot; (pour ‘).

On peut en définir d’autre dans une DTD.

Pourquoi ? Principalement pour éviter de réécrire des parties revenant souvent (mot particulier, morceaux de code, …).

Se fait par la commande : <!ENTITY mot définition>

Exemple : <!ENTITY super ‘‘superexatrordinairemegatop’’>

L’appel dans le fichier se fait par : &super;

Les entités peuvent aussi contenir des balises.

Exemple : <!ENTITY super ‘<a href=‘‘index.html’’> accueil </a>’>

Page 34: Introduction à XML

Déclaration d’entités

Pour éviter des déclarations trop compliquées et illisibles, on peut utiliser des entités générales externes analysées.

Principe : on stocke dans un fichier externe la partie à insérer (la définition de l’entité). C’est le client qui se chargera de l’inclusion.

Exemple : <!ENTITY super SYSTEM ‘‘http://www.toto.org/toto.xml’’>

Chaque occurrence de &super; sera remplacé par le contenu du fichier dont l’adresse est donnée.

Noter l’utilisation du mot clé SYSTEM.

Page 35: Introduction à XML

Notations

Sur l’exemple suivant :

<!ENTITY super SYSTEM ‘‘http://www.toto.org/toto.jpg’’ NDATA jpeg>

qui fait référence à un fichier qui n’est pas en XML, la déclaration NDATA indique le type de la donnée.

Toutefois, cette indication n’a pas de valeur en soi, elle identifie une notation que l’on doit trouver dans le document :

<!NOTATION jpeg SYSTEM ‘‘image/jpeg’’>

Le type MIME image/jpeg est associé au mot « jpeg ».

Il est possible de définir des entités paramètres (cf. doc du langage).

Page 36: Introduction à XML

Exemple

<!NOTATION jpeg SYSTEM ‘image/jpeg' >

<!ENTITY moi

SYSTEM "http://www.toto.org/mesimages/moi.jpg" NDATA jpeg >

<!ELEMENT LETTRE (DATE, ADRESSE, SALUTATION, CONTENU) >

<!ATTLIST LETTRE moi ENTITY #IMPLIED>

<!ELEMENT DATE (#PCDATA) >

<!ELEMENT ADRESSE (#PCDATA|BR)* >

<!ELEMENT SALUTATION (#PCDATA) >

<!ELEMENT CONTENU (#PCDATA) >

<!ELEMENT BR (EMPTY) >