Cours générale d’eXtensible Markup Language XML


Télécharger Cours générale d’eXtensible Markup Language XML
3.53.5 étoiles sur 5 a partir de 1 votes.
Votez ce document:

Télécharger aussi :


Introduction à XML

1.  Introduction .. 3

1.1  Qu’est-ce que l’XML ? . 3

1.2  Quelle est sa relation avec l’HTML ? Est-il destiné à remplacer l’HTML ? 4

1.3  Conclusion . 4

2.  Affichage d'un document XML 4

2.1  Mon premier document XML .. 4

2.2  Affichage d'un document XML sans feuille de style . 5

2.3  Exercices . 8

2.4  Création d’un document XML bien formé 8

2.4.1  Généralités .. 8

2.4.2  Les commentaires et la section CDATA 9

2.4.3  Les attributs . 10

2.4.4  Exercices . 11

3.  Création d’un document XML valide . 11

3.1  Création de la DTD . 12

3.1.1  Déclarations de type d’éléments .. 12

3.1.2  Déclarations de listes d’attributs .. 18

3.2  Exercices .. 19

3.3  XML Schema Definition (XSD) .. 23

3.3.1  Exemple de base 23 3.3.2 Règles de base . 24

3.3.3 Exercices . 25

4.  Affichage d'un document XML avec une feuille de style . 26

4.1  Petit rappel sur les règles des feuilles de style 27

4.2  Exercices .. 30

5.  Les feuilles de styles XSL .. 30

5.1  Principes de base . 31

5.1.1  Principe de fonctionnement 31

5.1.2  Principales instructions XSLT .. 31 5.1.3 value of select . 32 5.1.4 for each select . 33 5.1.5 apply-templates select 34 5.1.6 sort select .. 35

5.1.7  if test="expression" .. 36

5.1.8  choose . 37

5.1.9  Commentaire .. 37

5.1.10  Transformation XML à _ HTML . 38

5.2  XPATH 38

5.2.1  Les expressions XPATH 38

5.2.2  Les fonctions XPATH 39

5.2.3  Exemples d'expressions XPATH, utilisation des filtres 39

5.2.4  Les axes de recherche . 40

5.3  XSL/FO .. 41

5.4  Exercices .. 43

6.  Affichage d'un document XML avec un langage de script DOM . 44

6.1  Liste des principaux objets DOM pour un document XML 44

6.2  Mozilla vs Internet Explorer .. 47

6.3  Mozilla vs Internet Explorer : la fonction « childNodes » .. 47

6.4  Exercices .. 48

7.  PHP 5 .. 49

7.1  SimpleXML .. 49

7.2  Exercices .. 50 7.3 DOM .. 51 7.4 Inclure une page XML associée à une page XSLT dans PHP .. 54

7.5 Exercices .. 55

8.  RSS .. 55

8.1  Objectifs des flux RSS : . 55

8.2  Création d’un fichier RSS . 56

8.3  Afficher un flux RSS 57

8.4  Exemple de création d’un fichier statique RSS à partir d'une table mysql 58

9.  Pour aller plus loin… .. 59

9.1  XQuery : XML comme une base de données .. 59

9.2  XForms .. 59

9.1  ASP (Active Server Page) . 59

9.2  Liens évolués XLL : XPOINTER et XLINK 60

9.3  Images au format SVG .. 61 9.4 SAX .. 61

9.5 AJAX 61 10. Liens utiles 62

1. Introduction 

1.1 Qu’est-ce que l’XML ?

XML est un acronyme d’eXtensible Markup Language. Le langage XML est utilisé pour le stockage, la préparation et la livraison d’informations sur le net. C’est une solution idéale pour le traitement de l’information qui ne cesse d’évoluer en quantité et complexité. Ce langage permet de décrire virtuellement tout type d’information depuis une simple recette de cuisine à un arbre généalogique.

Le principal objectif d’XML est l'échange de données ou documents entre sites distants ou applications différentes. 

On pourrait dire que c’est un « langage universel permettant d’interfacer des systèmes ne parlant pas la mêmelangue ».

C’est un standard parfaitement adapté par exemple aux contextes suivants :

Ø  eCommerce ;

Ø  Gestion électronique de documents, publication et reporting ;

Ø  Gestion de transactions financières et boursières ;

Ø  Stockage d'informations, dans un contexte de base de données aussi bien « objets » que « relationnelles » ;

Ø  Interopérabilité entre systèmes hétérogènes ;

Ø  Description de structures moléculaires, ADN ;

Ø  Ecriture de partitions musicales ;

Ø  Uniformisation des canaux de publication (PDA, téléphone, TV, PC, );

Ø  Agrégation de RSS (par exemple, récupérer des dépêches.)

Ø  Elaboration de documents à partir d’une seule source vers différents formats : PDF, HTML, WML, image SVG, …)

Ø  La technologie Google utilise XML (SOAP et XML-RPC)

Ø  …

Le XML a été défini par le groupe de travail du W3C (World Wide Web Consortium) en 1996 et finalisé deux ans après en février 1998. Il a décidé de définir un sous ensemble de SGML, comme un sorte de version simplifiée de celui-ci, optimisée pour le web. Le W3C a défini dix objectifs pour l’XML, à titre informatif : 

Ø  XML doit être directement utilisable sur Internet.

Ø  XML doit prendre en charge une grande variété d’applications. (XML peut être utilisé pour l’échange d’informations entre programmes différents, bien que son but premier soit de délivrer de l’information.) Ø XML doit être compatible avec le SGML (XML, comme l’HTML est un sous-ensemble de SGML).

Ø  Il doit être facile d’écrire des programmes pour le traitement des documents XML. (c’était le gros inconvénient du SGML)

Ø  Le nombre de caractéristiques optionnelles dans XML doit être maintenu à un minimum absolu, l’idéal étant zéro.

Ø  Les documents XML doivent être lisibles et clairs (permettre aux non programmeurs de comprendre le code).

Ø  XML doit faire l’objet d’un développement rapide.

Ø  La conception de l’XML doit être formelle et concise (respect de la norme EBNF (Extended Basckus Naur Form))

Ø  Les documents XML doivent être faciles à créer.

Ø  La concision du marquage XML n’a qu’une importance minime

1.2 Quelle est sa relation avec l’HTML ? Est-il destiné à remplacer l’HTML ?

Plutôt que de remplacer l’HTML, XML s’utilise couramment en symbiose avec lui pour augmenter la faculté des pages web.

XML n'est pas le remplaçant de HTML, tout simplement parce qu'ils n'ont pas le même but : XML sert à structurer l'information, tandis que HTML a pour but de la présenter et de lui donner du sens

1.3 Conclusion 

Pour conclure cette introduction nous retiendrons :

L’XML sert à stocker des données structurées (arbres) dans un fichier texte.

L’XML est un standard ouvert et accepté

L’XML offre une solution complète de stockage, manipulation, transformation, etc. de données structurées. L’XML n'est pas une fin mais un moyen.

2. Affichage d'un document XML

2.1 Mon premier document XML

Comme premier exemple de document XML, nous allons recréer le document suivant qui traite par exemple d’un inventaire de bandes dessinées : 

   

Le prologue d'un document XML comprend la déclaration XML (optionnelle) 

                      

et peut aussi comprendre des commentaires (comme en HTML entre )

Nous verrons plus tard qu'un prologue peut aussi contenir 

Ø  une DTD (document type definition) ou un lien vers un schéma XSD

Ø  un ou plusieurs instructionsdetraitement (comme par exemple l'inclusion d'une feuille de style en CSS) L'élément document est la seconde partie d'un document XML, correspond à un élément unique, élément racine (comparable au en HTML) qui peut contenir d'autres éléments.

Un document XML est caractérisé par : 

Ø  le fait qu'il est un fichier XML bienformé (voir suivant)

Ø  le fait qu'il est un fichier XML valide (voir chapitre 5)

2.2 Affichage d'un document XML sans feuille de style 

Si vous voulez afficher un simple document XML, il faudra ouvrir la page dans votre navigateur.

Que constatez-vous avec ce fichier? S'affiche-t-il correctement? Vous aurez un problème avec les caractères spéciaux…

Les normes ISO servent à codifier les caractères avec accents ou symboles pour qu'ils soient lisibles partout dans le monde. Si nous ne le faisons pas il est probable qu'ils apparaissent avec des symboles illisibles pour quelqu'un qui voudrait les consulter dans un pays n'utilisant pas notre norme. 

La norme internationale comprend les caractères suivants, qui sont lus par tous les ordinateurs :         !"#$%&'()*+,-./

       0123456789

       :;<=>[email protected]

       ABCDEFGHIJKLMNOPQRSTUVWXYZ

       [\]^_`

       abcdefghijklmnopqrstuvwxyz

       {|}~ 

Tous les autres doivent être codifiés.

Effectivement un document XML doit se conformer à la norme ISO définie par le W3C.

Les deux pages suivantes contiennent une liste des principaux caractères accentués et des caractères spéciaux. Il suffit d'insérer le code ISO du caractère pour l'obtenir dans votre page. Avec cette manipulation, vous garantissez que l'accent sera reconnu correctement par tous les navigateurs.

Le jeu de caractère ISO-8859-1 (Latin 1) permet de codifier la plupart des langues de l'Europe occidentale. Vous pouvez dès lors placer dans l’en-tête d’un document XML la ligne suivante :

Ceci, afin de ne pas devoir coder chaque caractère spécial.

L’attribut encoding permet d’indiquer la représentation physique des caractères du fichier.

Caractère

Code Iso

Entité

Caractère

Code Iso

Entité

Caractère

Code Iso

Entité

À

À

À

Œ

Œ

ö

ö

ö

Á

Á

Á



÷

÷

÷

Â

Â

Â

Ž

Ž

ø

ø

ø

Ã

Ã

Ã



ù

ù

ù

Ä

Ä

Ä



ú

ú

ú

Å

Å

Å

û

û

û

Æ

Æ

&Aelig;

ü

ü

ü

Ç

Ç

Ç

ý

ý

ý

È

È

È

þ

þ

þ

É

É

É

ÿ

ÿ

ÿ

Ê

Ê

Ê

¡

¡

¡

Ë

Ë

Ë

¢

¢

¢

Ì

Ì

Ì

˜

˜

£

£

£

Í

Í

Í

¤

¤

¤

Î

Î

Î

š

š

¥

¥

¥

Ï

Ï

Ï

¦

¦

¦

Ð

Ð

Ð

œ

œ

§

§

§

Ñ

Ñ

Ñ



¨

¨

¨

Ò

Ò

Ò

ž

ž

©

©

©

Ó

Ó

Ó

Ÿ

Ÿ

ª

ª

ª

Ô

Ô

Ô

Espace

 

 

«

«

«

Õ

Õ

Õ

à

à

à

¬

¬

¬

Ö

Ö

Ö

á

á

á

­

­

×

×

×

â

â

â

®

®

®

Ø

Ø

Ø

ã

ã

ã

¯

¯

&masr;

Ù

Ù

Ù

ä

ä

ä

°

°

°

Ú

Ú

Ú

å

å

å

±

±

±

Û

Û

Û

æ

æ

æ

²

²

²

Ü

Ü

Ü

ç

ç

ç

³

³

³

Ý

Ý

Ý

è

è

è

´

´

´

Þ

Þ

Þ

é

é

é

µ

µ

µ

ß

ß

ß

ê

ê

ê



ë

ë

ë

·

·

·

ì

ì

ì

¸

¸

¸

ƒ

ƒ

í

í

í

¹

¹

&supl;

î

î

î

º

º

º

ï

ï

ï

»

»

»

ð

ð

ð

¼

¼

¼

ñ

ñ

ñ

½

½

½

ˆ

ˆ

ò

ò

ò

¾

¾

¾

ó

ó

ó

¿

¿

¿

Š

Š

ô

ô

ô

€ €

õ

õ

õ

Après modification, notre document devient :

  L'île des Mers gelées

  Jean Van Hamme

  Le Lombard

  48

  9,50

  L'épée soleil

  Jean Van Hamme

  Le Lombard

  50

  9,50

  Les bleus de la marine

  LAMBIL/CAUVIN

  Dupuis

  45

  10,00

Vous pouvez maintenant ouvrir le document dans votre navigateur : (Internet explorer adaptera automatiquement une feuille de style pour le document XML)

 

contiendra un élément racine et qui proposera une liste mots avec leurs traductions en français, anglais et néerlandais.

Par exemple, le mot  Bonjour :

Sous le tag français, on aura le contenu « Bonjour » ; Sous le tag anglais, on aura le contenu « Hello » ; Sous le tag néerlandais, on aura le contenu « Dag ». Ajouter au moins 8 mots dans ce document.

2) [] Faites un document XML qui reprend la liste de tous vos DVD, avec, par DVD, le titre du film, la date de sortie du film et une zone « commentaire ».

2.4 Création d’un document XML bien formé 

2.4.1 Généralités 

Un document XML bien formé dépend des conditions suivantes :

Ø  Il y a un élément racine unique qui contient tous les autres éléments (INVENTAIRE dans l'exemple), 

Ø  Les éléments doivent être correctement emboîtés. Aucun chevauchement des éléments n'est accepté. L’agencement suivant est incorrect :

La Magicienne trahie  

Jean Van Hamme 

Ø  Chaque élément doit avoir un marqueur d'ouverture et un marqueur de fermeture. Sauf l'élément sans contenu exemple : (Les balises uniques doivent être de la forme )

Ø  Les noms d'éléments sont sensibles à la casse

Ø  Les commentaires se marquent comme en HTML entre < !-- et -->

Ø  Dans notre premier document, l’élément est appelé « élément parent », et l’élément un « élément enfant ».

Ø  Le nom des balises peut contenir des lettres, des chiffres, des tirets ( - ), des points, des tirets bas ( _ ),et doit contenir au moins une lettre. 

Ø  Le nom doit débuter par une lettre ou un souligné (_) suivi éventuellement de plusieurs lettres, chiffres, points, tirets ou soulignés.

Les éléments des balises suivantes sont-ils légaux ?

OUI

NON

Part

q

q

1erPlace

q

q

_1erePlace

q

q

Section B

q

q

Section/B

q

q

A

q

q

:Leçon

q

q

SECTION-B

q

q

Rue.Adresse.1

q

q

A:Section

q

q

Le non respect des conditions précédentes entraînera systématiquement une erreur. De nombreux outils, éditeurs ou « parser » XML examinent le code XML et signalent si le document XML est bien formé. Si vous commettez une erreur, le navigateur vous affichera un message du style : 

 

En XML, les commentaires débutent par < !-- et se terminent par -->. Vous pouvez placer des commentaires n’importe où dans un document XML, en dehors du marquage lui-même.

La section CDATA est un bloc de texte dans lequel vous pouvez insérer librement n’importe quel caractère (&, <, …) excepté la chaîne]]>. La section CDATA commence par < ![CDATA[ et se termine par ]]>. Exemple : 

< ![CDATA[

Vous pouvez taper ici n’importe quel caractère sauf deux crochets droits suivis par un symbole plus grand que

]]>

Sans la section CDATA, le processeur supposerait que , par exemple, est le début d’un élément HTML à interpréter, plutôt que du texte inséré dans l’élément LIVRE.

2.4.3 Les attributs

  La Magicienne trahie

  Jean Van Hamme

  Le Lombard

  48

  9,00€

  L'île des Mers gelées

  Jean Van Hamme

  Le Lombard

  48

  9,50€

  L'épée soleil

  Jean Van Hamme

  Le Lombard

  50

  9,50€

  La galère noir

  Jean Van Hamme

  Le Lombard

  45

  10,00€

 

Dans le document XML ci-dessous, un élément vide nommé COUVERTURE au début de chaque élément LIVRE a été ajouté. C’est un attribut. Le but de cet élément, dans ce cas-ci, est d’indiquer à l’application XML d’afficher l’image spécifiée pour la couverture du livre. Cependant, pour utiliser un tel élément, nous aurons besoin des scripts ou des feuilles de style XSL (voir plus loin). Définissons déjà les différentes propriétés des attributs 

Ø  Les valeurs des attributs doivent être entre " " ou entre ‘ ‘;

Ø  Par convention, les noms des attributs sont écrits en minuscule ;

Ø  Le nom des attributs peut contenir des lettres, des chiffres, des tirets ( - ), des tirets bas ( _ ),et doit contenir au moins une lettre. 

Ø  Le nom doit débuter par une lettre ou un souligné (_) suivi éventuellement de plusieurs lettres, chiffres, points, tirets ou soulignés.

Ø  Les noms d’attributs commençant par xml sont normalement réservés à des fins de standardisation. Ø Un nom d’attribut ne peut apparaître qu’une seule fois dans un même marqueur. 

2.4.4 Exercices 

1)   [] Réalisez un fichier XML avec l'arbre généalogique ci-dessus.

 

2)   [] Créez un fichier XML, pour la commune, qui contiendrait toutes les informations nécessaires de ses habitants.

3)   [] Créez un fichier XML qui contient toutes les balises HTML et leurs explications.

3. Création d’un document XML valide

Qu’est-ce qu’un document XML valide ?

C’est un document bien formé, qui répond en outre à deux exigences :

Ø  Le prologue du document contient une DTD (déclaration de type de document) ou un schéma W3C qui définit la structure du document

Ø  Le reste du document doit se conformer à ce(tte) DTD/Schéma WC3

Pourquoi un document XML valide ?

Ø  Uniformité « grammaire pour une classe de documents »

Ø  Si plusieurs personnes travaillent sur un même document XML, la DTD garantit que tout le monde respectera la structure définie.

Ø  Rendre plusieurs documents XML utilisables par un même logiciel de traitement

Cependant, le processeur d’Internet ne vérifie pas la validité d’un document, il vérifie uniquement si le document est bien formé (pas d’erreur fatale). 

Le document commence par la déclaration XML : (le "yes" de l'attribut standalone est une indication facultative qui  signifie qu'il n'y a pas de DTD pour le document XML, "no" signifie qu'il y a une DTD)

Votre document DTD (composant optionnel d’un doc XML) peut être, entre autre,  validé sur le site , ou encore dans certains éditeurs XML (p.e. xmlSPY).

 

Une DTD se place dans le prologue d’un document XML.

La DTD se compose d’un crochet gauche [ suivi d’une série de déclarations de marquage, suivi d’un crochet droit ] 

 

Dans cet exemple, notre document XML ne peut contenir que des éléments de type LIVRE, et un élément TITRE peut avoir tout type de contenu possible (ANY)

Une DTD peut contenir les types de déclarations de marquage suivants :

3.1.1 Déclarations de type d’éléments 

EMPTY : signifie que l’élément doit être vide, qu’il ne peut pas y avoir de contenu

< !ELEMENT IMAGE EMPTY>

Par exemple : ou encore

ANY : Signifie que l’élément peut contenir tout type de contenu légal. Donc zéro, un ou plusieurs éléments enfants, dans n’importe quel ordre ou avec n’importe quel nombre de répétitions avec ou sans données texte disséminées.

Contenu d’élément (contenu de filiation)

L’élément peut contenir une filiation d’élément, mais ne peut pas contenir directement du texte.

[

               <!ELEMENT LIVRE (TITRE,AUTEUR)>

]

>

<!ELEMENT TITRE (#PCDATA)>

<!ELEMENT AUTEUR (#PCDATA)>

L’élément LIVRE est déclaré comme ayant un contenu d’élément. L’expression (TITRE, AUTEUR) est appelé modèle de contenu. Celui-ci indique les types d’éléments enfants et leur ordre.

Le modèle de contenu peut avoir deux formes : 

Ø (TITRE, AUTEUR) 

à L’élément LIVRE doit avoir un élément enfant TITRE suivi d’un élément enfant AUTEUR Ø (TITRE | AUTEUR)

à L’élément LIVRE peut contenir un élément TITRE ou un élément AUTEUR (attention il s’agit d’un ou exclusif, c’est soit l’un soit l’autre mais pas les deux !)

Vous pouvez modifier ces modèles de contenu en utilisant le « ? », « + » ou « * » 

 

        ?                            0 ou 1 occurrence de l’élément précédent

       +                            1 ou plusieurs occurrences de l’élément précédent

       *                            0, 1 ou plusieurs occurrences de l’élément précédent

 

Par exemple :

<!ELEMENT LIVRE(NOM+, AUTEUR ?, PRIX)>

<!ELEMENT NOM (#PCDATA)>

<!ELEMENT AUTEUR  (#PCDATA)>

<!ELEMENT PRIX (#PCDATA)>

L’élément suivant serait légal : 

                Roméo & Juliette

               Roméo et Juliette

                10,00€

Vous pouvez aussi emboîter des modèles de contenu dans des modèles de séquence (et vice-versa) Exemple :

<!ELEMENT LIVRE (TITRE, PRIX,(AUTEUR | DESSINATEUR | SCENARISTE))>

<!ELEMENT TITRE (#PCDATA)>

<!ELEMENT PRIX (#PCDATA)>

<!ELEMENT AUTEUR (#PCDATA)>

<!ELEMENT DESSINATEUR (#PCDATA)>

<!ELEMENT SCENARISTE (#PCDATA)>

Contenu mixte

Un élément peut avoir un contenu mixte soit

Ø  Des données de caractères uniquement (#PCDATA)

<!ELEMENT SOUSTITRE (#PCDATA)>

(nb : l’élément SOUSTITRE peut rester vide ou il peut contenir des données de caractères)

Ø  Des données de caractères plus une filiation optionnelle d’éléments

<!ELEMENT TITRE (#PCDATA | SOUSTITRE)*>

Exemple : 

 

-     soit un élément SOUSTITRE 

Et ceci zéro, une ou plusieurs fois (il s’agit donc d’un OU inclusif)  Mais notre document XML ne peut contenir qu’un seul « TITRE ».

Pour les éléments XML suivants :

-     soit un élément SOUSTITRE 

Et ceci une et une seule fois (il s’agit donc d’un OU exclusif).

Mais le documents XML peut contenir zéro, un ou plusieurs « TITRE ».     

ET

-     un élément SOUSTITRE 

Et ceci zéro, une ou plusieurs fois (il s’agit donc d’un ET inclusif)  Mais notre document XML ne peut contenir qu’un seul TITRE.

Pour les éléments XML suivants :

                 Thorgal

                Et la magicienne trahie

 

ET

-     un élément SOUSTITRE 

Et ceci un et une seule fois (il s’agit donc d’un ET exclusif

Mais le document XML peut contenir zéro, un ou plusieurs « TITRE ».

Pour les éléments XML suivants :

3.1.2 Déclarations de listes d’attributs

Une déclaration de liste d’attributs a la forme générale suivante

 

ou encore 

<!ATTLIST LIVRE Annee CDATA #REQUIRED>

Ø     #REQUIRED : Une valeur doit être affectée à l’attribut Année.

Ø     #IMPLIED : l’attribut est facultatif (on peut inclure ou non l’attribut dans un élément

                                                                            de type associé)

Ø     #FIXED valeur par défaut (et uniquement celle-là)

        Remarques :                                     Ø Ou encore directement une valeur par défaut entre guillemets

Ø     vous pouvez déclarer plusieurs attributs à la fois

Ø     Si vous déclarez plusieurs fois le même attribut, seule la première déclaration sera prise en compte, les suivantes seront ignorées.

Type d’attribut 

Ø    type de chaîne  o CDATA: tout type de chaîne conforme aux règles d’attribut (voir point 4.3)

Ø    type tokenisé

Même principe qu’un type de chaîne, mais on ajoute en plus une contrainte particulière ; Exemple 

<!ELEMENT INVENTAIRE (LIVRE*)>

<!ELEMENT LIVRE (#PCDATA)>

<!ATTLIST LIVRE ISBN ID #REQUIRED>

Le mot-clé ID précise que l’attribut ISBN doit avoir une valeur unique (un peu comme une clé primaire dans une table)

IDREF : La valeur de l’attribut doit correspondre à la valeur d’un attribut de type ID dans un élément à l’intérieur du document (un peu comme une clé étrangère dans une table) Exemple 

<!ELEMENT ITEM (#PCDATA)>

<!ATTLIST ITEM CodeStock ID #REQUIRED VaAvec IDREF #IMPLIED> …

Moulin  à café électrique

Brosse pour moulin à café

IDREFS : Comme IDREF, sauf que celui-ci peut inclure une référence à plusieurs identificateurs (séparés par des espaces)

ENTITY : valeur d’attribut correspondant au nom d’une entité non analysée déclarée dans la DTD (un fichier externe)

Exemple

<!ELEMENT IMAGE EMPTY>

ENTITIES : Comme ENTITY sauf que celui-ci peut inclure une référence à plusieurs entités (séparées par des espaces)

NMTOKEN : la valeur est un token de noms, c'est-à-dire que vous pouvez utiliser 1 ou plusieurs lettres, chiffres, points, tirets et  soulignés (également les  double-points sauf à la première position). Le NMTOKEN peut commencer par un chiffre (pas les autres types !)

< !ELEMENT livre (#PCDATA)>

< ATTLIST livre ISBN NMTOKEN #REQUIRED>

NMTOKENS : Comme NMTOKEN sauf que celui-ci peut inclure une référence à plusieurs tokens de noms (séparés par des espaces)

Ø type énuméré

§  Les déclarations d’attributs peuvent aussi prendre la forme suivante : une parenthèse ouverte suivie par une liste de tokens de noms séparés par des « | » suivis d’une parenthèse. Exemple :

<!ELEMENT LIVRE (TITRE, AUTEUR)>

<!ATTLIST LIVRE Genre (Fantastique | Policier | Humour) "Fantastique" >

<!ELEMENT TITRE (#PCADATA)>

<!ELEMENT AUTEUR (#PCADATA)>

Si on omet l’attribut genre, la valeur Fantastique est mise par défaut.

§  Le mot-clé NOTATION suivi d’un espace, puis d’une parenthèse puis d’une liste de noms de notations séparés par des « | » suivis d’une parenthèse. Exemple :

<!ELEMENT EXEMPLE_DOCUMENT (#PCDATA)>

<!ATTLIST EXEMPLE_DOCUMENT Format NOTATION (HTML|SGML|RTF) #REQUIRED>

                        HTML, SGML et RTF doivent être déclarés dans votre DTD.

Remarque : si vous utilisez directement un style CSS dans un document XML, 

Tintin au congo

Il faut déclarer l’attribut style dans la DTD :

<!ATTLIST TITRE STYLE CDATA #IMPLIED>

3.2 Exercices 

1) Soit la DTD suivante :

[

<!ELEMENT INVENTAIRE(LIVRE)+>

<!ELEMENT LIVRE (TITRE, PRIX,(AUTEUR | DESSINATEUR | SCENARISTE))>

<!ELEMENT TITRE (#PCDATA | SOUSTITRE)*>

<!ELEMENT PRIX (#PCDATA)>

<!ELEMENT AUTEUR (#PCDATA)>

<!ELEMENT DESSINATEUR (#PCDATA)>

<!ELEMENT SCENARISTE (#PCDATA)>

<!ELEMENT SOUSTITRE (#PCDATA)>

]>

Les éléments suivants sont-ils conformes à cette DTD ? Si non pourquoi ?

 

2) Soit une série de DTD : les exemples qui suivent sont-ils conformes à la DTD ? Si non, que manque-t-il dans la DTD ?

A)

< !DOCTYPE INVENTAIRE

[

<!ELEMENT INVENTAIRE (PERSONNE)*>

<!ELEMENT PERSONNE (NOM+,AGE,TAILLE?,POIDS)*>

<!ELEMENT NOM (#PCDATA)>

<!ELEMENT AGE (#PCDATA)>

<!ELEMENT TAILLE (#PCDATA)>

<!ELEMENT POIDS (#PCDATA)>

]

>

Charles

22

1m70

65

22

1m70

65

B)

[

<!ELEMENT FILM (ACTEUR* | REALISATEUR | ASSISTANT)>

<!ELEMENT ACTEUR (#PCDATA)>

<!ELEMENT REALISATEUR (#PCDATA)>

<!ELEMENT ASSISTANT (#PCDATA)>

]>

... ... ...

3.3XML Schema Definition (XSD)

Pour rendre un document valide, nous avons vu les DTD, malheureusement celles-ci sont limitées :  Ø pas de support des namespaces

Ø  syntaxe non XML

Ø  modularité assez limitée

Ø  pas de contrainte pour les données textes et attributs.

Ø  Actuellement il existe deux grandes technologies (d’autres, moins connues, existent également) :

Ø  Les schémas du W3C (XSD) (recommandation du 2 mai 2001)

+ norme officielle

+ modèle de contenu très évolué et très riche

-  verbeux

-  très complexe

Remarque : Les schémas doivent obligatoirement être définis dans un document externe.

3.3.1 Exemple de base

Prenons un exemple d’un fichier qui contient un élément et  un nombre arbitraire de vides :

(« »)

    MBODJ

    Babacar

    1996-10-06

    NIIT

    764704140

Le schéma W3C correspondant est : (« »)

Remarque :

Pour utiliser notre fichier schéma W3C au lieu de notre DTD, il faudra préciser l’URI du schéma utilisé : 

3.3.2 Règles de base

Les schémas W3C sont basés sur la notion de type : 

Ø  types simples (simpleType) :

Chaînes de caractères, valeurs numériques, etc…(uniquement élément feuille et sans attribut) Ø types complexes (complexType) :

Tout le reste

Pour définir un type élément, il faut le faire soit directement au niveau global, soit dans la définition d’un type complexe, soit avec un élément element possédant les attributs suivants : 

Ø  name (nom de l’élément)

Ø  type (type de l’élément)

Ø  fixed (valeur de l’élément fixée et précisée)

Ø  default (valeur par défaut quand l’élément est présent mais avec un contenu vide)

Ø  Pour définir un attribut, il faut le faire soit directement au niveau global, soit dans la définition d’un type complexe, soit avec un élément attribut  possédant les attributs suivants :

Ø  name (nom de l’attribut)

Ø  type (type de l’attribut, doit être un type simple)

Ø  fixed (valeur de l’attribut fixée et précisée)

Ø  default (valeur par défaut)

1. Types simples :

De nombreux types simples sont disponibles : 

Ø  string (remplace #PCDATA)

Ø  byte, int

Ø  float, double

Ø  dates et heures

Ø  URI

Ø  Etc.

2. Types dérivés :

On peut restreindre chaque type grâce à des facets

Ø  Valeurs minimales, maximales

Ø  Nombre de chiffres

Ø  Expressions régulières

Ø  Enumération des valeurs possibles

Ø  Etc.

3. Types complexes

Un type complexe se définit comme suit : Ø Elément sequence

Ø  Elément element pour les fils exigéso Attribut ref (permet d’utiliser un élément déjà défini)o Attributs minOccurs et maxOccurs (nombre d’occurrence)o [Valeur par défaut]

Ø  contenu mixte (mixed ="true") 

Ø  attribut  o Attribut ref (permet d’utiliser un élément déjà défini)

o Attribut use (précise si l’attribut est optional, prohibited, required) o [Valeur par défaut]

Exemple pour  notre fichier « » ()

Les schémas W3C permettent d’introduire des commentaires (annotations), de créer des groupes nommés d’éléments (macro, modèles, etc…) 

Les schémas W3C permettent aussi la définition des namespaces , de construire un schéma à partir d’autres schémas, de faire des références croisées, etc…

Pour plus d’informations concernant les schémas W3C : 

3.3.3 Exercices

1)  d]  Créez le schéma XSD pour votre document « »

2)  d] Créez le schéma XSD pour votre document « » 

4. Affichage d'un document XML avec une feuille de style

Comme pour le langage HTML, pour lier une feuille de style à un document XML, il faut inclure celui-ci comme suit :

:

LIVRE

        {display:block;  margin-top:12pt;

                font-size:10pt;}

TITRE

                {font-style:italic;}

AUTEUR

                {font-weight:bold;}

EDITEUR

        {display:block;  font-size:12pt;          font-weight:bold;}

PAGES

                {display:none;}

PRIX

                {}

Dans le fichier “”, nous avons défini les éléments comme ci-dessous :

LIVRE

m 12 points d’espace libre au-dessus de lui (margin-top :12pt)

m Césure de ligne au-dessus et en-dessous (display : block)

m Taille de police de 10 points (font-size : 10pt) TITRE

m Elément en italique (font-style : italic)

AUTEUR

m Elément en gras (font-weight : bold) EDITEUR

m Césure de ligne au-dessus et en-dessous (display : block)

m Taille de police de 12 points (font-size : 12pt)

m Elément en gras (font-weight : bold) PAGE 

m Ne pas afficher cet élément (display :none) PRIX

m Normal

Son affichage dans le navigateur donnera : 

 

Il faut savoir que les CSS ne vous autorise pas à accéder aux attributs. Pour accéder à ceux-ci, vous devrez utiliser soit les liaisons avec un document HTML (voir point 6) soit avec un langage de script (voir point 7).

Les feuilles de styles CSS ne permettent pas de manipuler les éléments, de transformer un document XML source en un autre ainsi, il est déconseillé pour le formatage des documents XML, nous verrons dans le chapitre suivant qu’il est moins puissant que XSL, néanmoins, le XSL aura besoin du CSS pour la mise en forme.

4.1 Petit rappel sur les règles des feuilles de style

Les commentaires se font entre /* et */  Le CSS est insensible à la casse.

Exemple : création d'une marge dans un document :

ARTICLE

               {font-size:12pt;}

Thorgal

Le thème des univers parallèles rapporté aux viking.  Thorgal, seul rescapé d'un vaisseau spatial echoue sur Terre,  et est recueilli par les vikings. 

1-2 : Face à la magicienne

3 : vivre eternellement

4-5-6 : Contre Shardar le Maléfique

7 et 14 : albums clés, tout sur Thorgal et Aaricia

8 : Jolan et l'enfant cauchemar

9-10-11-12-13 : Entre les faux Dieux

15 : quand le temps devient fou !

16 : petite fille née avec les loups

17 : Thorgal face à Thorgal

18-19-20-21-22-23 : Dans les griffes de Kriss

?idserie=142

Vous pouvez aussi ajouter une image dans une zone flottante : Ajoutez dans le fichier :

IMAGE

                {

                background-image:url();          background-repeat:no-repeat;

               background-position:right;

                width:200px;                  height:52px;                  float:right;

                }

Et ajoutez l'élément devant l'élément dans le fichier Vous obtenez bien l'image en haut à droite comme précisée dans le CSS :

 

Insertion d'éléments HTML dans les documents XML

Si vous voulez utiliser un tag HTML, il vous faudra passer par une déclaration d'espace de nom réservé qu'on déclare comme suit :

xmlns:html=''

Par exemple pour insérer directement l'image dans le fichier XML

Ou encore pour que le lien soit cliquable: 

HREF='?idserie=142'> ?idserie=142

Héritage des paramètres

Une définition de propriété attribuée à un élément particulier affecte tous les éléments enfants insérés directement ou indirectement sauf si elle est écrasée par une propriété définie à l’élément enfants.

Mais les propriétés suivantes ne sont pas héritées :

Ø  display (sauf pour l'élément none)

Ø  les propriétés du fond (background-color, background-image,backgroud-repeat et background-position) Ø vertical-align

Ø  les propriétés de cadres

4.2 Exercices 

1)     [] - [] A partir de votre document « », créez un document

« », affichez l’élément LIVRE avec 8 points d’espace libre au-dessus de lui, dans une police

« Arial », césure de ligne au-dessus et une taille de police de 10 points. Affichez les éléments TITRE, AUTEUR, EDITEUR,PAGE chacun sur une ligne séparée en « Verdana ». Indenter les éléments AUTEUR et EDITEUR de 10 points. Affichez l’élément TITRE en gras et affriolez-le d’une couleur bleu. Mettez l’élément EDITEUR en italique et soulignez-le. Affichez le nombre de page en vert. Ne pas afficher le prix. 

2)     [] - []  Créez un fichier CSS pour votre document « »

3)     - Créez un fichier CSS pour votre document « »

5. Les feuilles de styles XSL 

Le XSL (Extensible Style Language) est le langage utilisé pour définir les feuilles de style qui seront associées aux documents XML. 

Cette abréviation recouvre en fait trois langages : 

XPath désigne un moyen d'accéder à un nœud quelconque de l'arborescence d'un document XML à partir d'un autre nœud quelconque à le langage de navigation dans un document XML 

XSLT signifie eXtensible Stylesheet Langage Transformation à il permet de manipuler les données et de les réorganiser

XSL-FO signifie eXtensible Stylesheet Langage - Formating Objects, et désigne un langage permettant le contrôle de la mise en page finale de la transformation. Ce langage est particulièrement destiné à la production de contenus au format PDF

Les feuilles de styles XSLpermettent  un contrôle plus complet de l’affichage d’un document XML. (Modèle de transformation). Une feuille de styleXSL est un fichier qui décrit comment doivent être présentés (c'est-à-dire affichés, imprimés, épelés) les documents XMLbasés sur une même DTDou un même schéma.

5.1 Principes de base

5.1.1 Principe de fonctionnement 

Le fonctionnement du XSL est fondé sur les manipulations de modèles (templates). Les éléments du document XML d'origine sont remplacés (ou plus ou moins légèrement modifiés) par ces modèles. Un modèle contient ainsi le texte (éléments, attributs, texte ) de remplacement d'un élément donné. 

Tout élément pouvant être remplacé dans le fichier de sortie par tout type de contenu texte, XSL est un outil privilégié de production de fichiers HTML à partir de sources XML. PHP fait ainsi appel à des bibliothèques de procédures de type XSL comme libxsltquand il doit gérer l'interfaçage avec des bases de données XML. 

Un fichier XSL étant un fichier XML, il doit respecter les normes de syntaxede ce format. 

Une feuille de styles XSLT est composée d'une suite de règles appelées "template rules" (ou règles de gabarit en français).Le processeur XSLT (composant logiciel chargé de la transformation) crée une structure logique arborescente (on parle d'arbre source) à partir du document XML. Il lui applique ensuite des transformations selon les template rules contenues dans la feuille XSLT pour produire un arbre résultat représentant, par exemple, la structure d'un document HTML. Chaque "template rule" définit des traitements à effectuer sur un élément (noeud ou feuille) de l'arbre source. On appelle "patterns" (en français motifs, parfois "éléments cibles") les éléments de l'arbre source. L'arbre source peut être entièrement remodelé et filtré, si bien que l'arbre résultat peut être radicalement différent de l'arbre source.

5.1.2 Principales instructions XSLT

 

Déclaration de la feuille de style. Tout ce qui se situe à l'intérieur de cette balise relève le la logique de la feuille de style. 

 

L'élément indique le format de sortie du document résultant. Il est à placer immédiatement après l'élément    

L'élément permet de définir une règle de modèle. Ici, par l'intermédiaire de l'attribut 'match' c'est à la racine ('/') du document que l'on applique des règles de style. 

 

L'élément permet d'appliquer les modèles (templates) d'une feuille de style sur les fils et les noeuds de type texte du noeud courant. 

 

L'élément permet d'appeler un modèle (template) directement par son nom. 

 

L'élément permet d'extraire la valeur d'un noeud sélectionné via l'attribut 'select'.

Dans notre fichier « », nous devons lier celui-ci avec un fichier xsl (comme pour les fichiers css).

Un fichier xsl, est un fichier xml, c'est-à-dire qu’il doit se conformer aux règles pour qu’un fichier xml soit bien formé (par exemple; si on veut utiliser un tag html
il faudra ajouter ou uniquement
).

5.1.3 value of select

Exemple value-of select            

Mes Livres

                Auteur :

                Titre :                

                Editeur :

                Page :

à C’est l’espace de noms qui contient les normes XSL

à Permet d’utiliser/d’interpréter les tags HTML & caractère correspondant à la norme ISO-8859-1

à « / » représente la racine du document XML (c’est comme un adressage relatif, on doit faire la référence à un élément en lui donnant son chemin complet : INVENTAIRE/LIVRE/AUTEUR) 

à Le premier avantage de l’xsl est qu’on peut afficher les éléments dans l’ordre de son choix.

Notre fichier xml avec sa liaison xsl tel qu’il est actuellement n’affichera que le premier élément.

5.1.4 for each select

Exemple value-of select /for-each

Mes Livres

                Auteur :

                Titre :

                Editeur :

                Page :

  ... ... ...

5.2.1 Les expressions XPATH 

XPATH est formulé et utilisé sous forme d'expressions. Ces expressions, après avoir été évaluées, peuvent fournir en réponse les éléments suivants :

•    un ensemble de noeuds; 

•    un booléen; 

•    un nombre; 

•    une chaîne de caractères. 

Les expressions Xpath servent en fait à définir ce que l'on appelle couramment des "patterns", c'est-à-dire des chaînes de caractères permettant de repérer un noeud dans un document XML (on peut faire le parallèle avec la technique des expressions régulières). Voici quelques exemples de patterns.

nom 

Exemple : livre description : sélectionne des éléments en fonction de leur nom (ici 'livre')  nom[ ] 

Exemple : livre[1] description : sélectionne un élément ayant un nom donné en fonction de son ordre d'apparition

(ici le premier élément 'livre')  nom[end] 

Exemple : livre[end] description : sélectionne le dernier élément ayant un nom donné (ici le dernier élément

'livre') 

Exemple : livre|revue description : Indique une alternative (l'élément 'livre' ou l'élément 'revue') 

Exemple : / description : utilisé seul, ce pattern définit l'élément de plus haut niveau de l'arborescence ainsi que (de façon implicite) tous ses éléments fils. exemple : bibliographie/livre description : utilisé entre deux éléments, il décrit la localisation d'un élément dans son arborescence 

Exemple : * description : désigne n'importe quel élément 

// 

Exemple : //livre description : désigne tous les descendants d'un noeud 

Exemple : . description : désigne le noeud courant 

.. 

Exemple : .. description : désigne le noeud parent 

Exemple : @titre description : désigne un attribut (la notation @* désigne tous les attributs d'un élément)  text() 

Exemple : text() description : désigne le contenu d'un élément (le texte contenu entre ses balises)

5.2.2 Les fonctions XPATH

•    boolean() : évaluer l'argument comme vrai ou faux 

•    ceiling() : arrondir un nombre 

•    concat() : concaténer des chaînes de caractères 

•    contains() : vérifier certaines sous-chaînes de caractères 

•    count() : rechercher le nombre de nœuds dans un jeu de nœuds 

•    current() : rechercher le nœud actuel 

•    document() : appeler un autre document XML 

•    element-available() : vérifier si un élément XSLT est disponible   false() : créer une valeur booléenne pour "faux": 

•    floor() : arrondir un nombre par défaut 

•    format-number() : transformer un nombre en chaîne de caractères 

•    function-available() : vérifier si une fonction XPath est disponible 

•    generate-id() : générer un identificateur clair pour un élément 

•    id() : choisir un élément avec un identificateur déterminé 

•    key() : choisir un élément grâce à une valeur-clé 

•    lang() : vérifier un code de langue précis pour un élément 

•    last() : rechercher le numéro de position du dernier nœud d'une série 

•    local-name() : rechercher le nom local d'un jeu de nœuds 

•    name() : rechercher le nom d'un jeu de nœuds 

•    namespace-uri() : rechercher l'espace de nommage d'un élément 

•    normalize-space() : retirer les espaces au début et à la fin d'une chaîne de caractères       not() : nier un argument 

•    number() : transformer un argument en nombre 

•    position() : rechercher le numéro de position du jeu de nœuds actuel 

•    round() : arrondi par excès ou par défaut commercial 

•    starts-with() : vérifier si une chaîne de caractères commence par une certaine sous-chaîne 

•    string() : transformer un argument en chaîne de caractères 

•    string-length() : retourne le nombre de caractère de la chaine de caractères 

•    substring() : extraire une sous-chaîne d'une chaîne de caractères 

•    substring-after() : rechercher une sous-chaîne à partir d'une certaine position dans une chaîne de caractères 

•    substring-before() : rechercher une sous-chaîne avant une certaine position dans une chaîne de caractères 

•    sum() : rechercher la somme de valeurs numériques 

•    system-property() : rechercher des propriétés système 

•    translate() : rechercher et remplacer des signes dans une chaîne de caractères 

•    true() : créer une valeur booléenne pour "vrai" 

•    unparsed-entity-uri() : rechercher les éléments de la DTD non vérifiés par l'analyseur syntaxique 

5.2.3 Exemples d'expressions XPATH, utilisation des filtres 

Si on veut sélectionner l'ensemble des noeuds qui sont enfants du noeud qui sont eux même enfant de l’élément (l'élément racine du document), on écrira :

INVENTAIRE/LIVRE/TITRE

Si on veut sélectionner tous les noeuds dont le titre est « La Magicienne trahie », on écrira :

LIVRE[TITRE='La Magicienne trahie']

Si on veut sélectionner tous les noeuds dont l’auteur est « Jean Van Hamme », on écrira :

INVENTAIRE/LIVRE [AUTEUR='Jean Van Hamme'] 

Si on veut sélectionner tous les noeuds dont l’auteur n’est pas « Jean Van Hamme », on écrira : 

INVENTAIRE/LIVRE [AUTEUR!='Jean Van Hamme'] 

Si on veut sélectionner tous les noeuds dont la publication est de 1983, on écrira :

INVENTAIRE/LIVRE/TITRE[@publication=’1983’]"/>

Exemple d'utilisation de fonction :

position()

5.2.4 Les axes de recherche 

Les expressions XPATH peuvent faire référence à des axes de recherche. Ces axes de recherche précisent dans quel sens il faut parcourir l'arbre afin de sélectionner des noeuds. child:: 

Clause sollicitant les enfants du noeud contexte - c'est l'axe par défaut.  descendant:: 

Clause sollicitant les descendants du noeud contexte (les enfants, les enfants des enfants, etc.). 

cdescendant-or-self:: 

Clause sollicitant les descendants du noeud contexte et le noeud contexte lui-même.  parent:: 

Clause sollicitant le parent du noeud contexte. 

ancestor:: 

Clause sollicitant les ancêtres du noeud contexte (le parent, le parent du parent, etc.).  ancestor-or-self:: 

Clause sollicitant les ancêtres du noeud contexte et le noeud contexte lui-même.  following-sibling:: 

Clause sollicitant les frères du noeud contexte (qui ont le même parent) et qui suivent celui-ci dans le contexte. 

preceding-sibling:: 

Clause sollicitant les frères du noeud contexte (qui ont le même parent) et qui précèdent celui-ci dans le contexte.  following:: 

Clause sollicitant tous les noeuds qui suivent le noeud contexte dans l'ordre du document, à l'exclusion des descendants du noeud contexte (et des noeuds attributs et namespaces).  preceding:: 

Clause sollicitant tous les noeuds qui précèdent le noeud contexte dans l'ordre du document, à l'exclusion des ancêtres du noeud contexte (et des noeuds attributs et namespaces).  attribute:: 

Clause sollicitant tous les noeuds attributs enfants du noeud contexte.  namespace:: 

Clause sollicitant tous les noeuds namespaces enfants du noeud contexte.  self:: 

Clause sollicitant le noeud contexte lui-même.

5.3 XSL/FO

Le langage XSL-FO  « XSL formatting objects »  est un « dialecte » XML destiné à décrire la mise en forme d’un document résultat.

Le couple XSLT/XSL-FO permet d’appliquer un processus complet de publication en deux étapes :

 

1.    l’étape de transformation avec XSLT permet d’extraire des informations du document source et de les « marquer » avec des balises XSL-FO pour indiquer la présentation souhaitée : dans le cas d’un document papier, la présentation prend en compte la taille des pages, les marges à respecter, la taille et le poids des caractères, l’alignement du texte, l’espace entre les paragraphes, l’en-tête et le pied de page, etc ;

2.    l’étape de mise en forme (formatting en anglais) s’applique au document XSL-FO obtenu précédemment, et consiste à créer un document final adapté au support de publication, dans un format standard comme PDF ou Postscript.

Exemple : « »

Il faut ensuite un processeur « FOP » qui fait   xml+xsl/fo à PDF  

Pour installer FOP :

Soit 

•    Sur le serveur Apache (installer FOP pour apache + JAVA jdk 1.5 + créer un script pour lancer l’application FOP) (- relativement compliqué !)

•    Utiliser un éditeur XML comme oxygen , xmlspy (payant !) où on effectue cette opération avec un menu.

5.4 Exercices

1.    Afficher tous les éléments du fichier en utilisant une feuille de styles xsl.

2.    Afficher uniquement les livres dont l’auteur est «Leo» dans le fichier

3.    Afficher le document avec les attributs par ordre croissant de titres.

4.    Afficher uniquement les livres, dans le fichier « », dont les titres sont soit « Les archers » soit « O.P.A. ».

5.    Afficher le fichier « » à l’aide d’une feuille de style xsl, en affichant aussi les images.

6.    À l’aide du fichier « » :

a. Afficher uniquement les films qui ont une cotation supérieure à 7/10.

b. Afficher uniquement les remarques des films

c. Afficher tout le document selon le formatage suivant :

(les liens doivent être cliquables et la liste doit être affichée par ordre de la meilleure cote à la moins bonne.)

 

d. Affichez uniquement les films dont le titre commence par la lettre "V" Pour en savoir plus  sur le XSLT…

Pour en savoir plus sur XPATH…

<X   >  ML

6. Affichage d'un document XML avec un langage de script DOM

Le modèle de programmation DOM (Document Object Model) permet, avec l'utilisation de scripts, de gérer la mise en forme d'un document XML à partir d'une page HTML. Il permet l'affichage de tous types de documents XML, même ceux qui ne sont pas structurés de façon symétrique. Il est composé d'objets, de propriétés et de méthodes permettant la gestion des différents composants d'un document XML.

6.1 Liste des principaux objets DOM pour un document XML

(numIndice)  

 

argument (à partir de 0).  

childNodes(numIndice) ou

(numIndice)  

Propriété commune

Contient la collection de tous les nœuds enfants (hors attributs) d'un nœud parent dont l'indice a été spécifié en argument (à partir de 0).  Le nom de cette collection est :

NodeList  

firstChild  

Propriété commune

Contient le premier nœud enfant (hors attributs) d'un nœud parent.  

lastChild

Propriété commune

Contient le dernier nœud enfant (hors attributs) d'un nœud parent.  

nextSibling

Propriété commune

Contient le nœud suivant d'un nœud de même niveau.  

nodeName

Propriété commune

Renvoie le nom du nœud courant, c'est à dire le nom de l'élément XML.  

nodeTypeString

Propriété commune

Renvoie le type du nœud courant. (document, element, attribute,…)  

nodeValue

Propriété commune

Retourne la valeur du nœud. Essentiellement pour des nœuds de type Attribute ou Text.  

parentNode

Propriété commune

Contient le nœud parent du nœud courant (hors attributs).  

previousSibling

Propriété commune

Contient le nœud précédent d'un nœud de même niveau.  

text

Propriété commune

Renvoie le contenu texte d'un nœud et de tous ses descendants.  

xml

Propriété commune

Renvoie le contenu XML d'un nœud et de tous ses descendants.  

nextNode()

NodeList -

NamedNodeMap

Contient le nœud suivant de la collection.  

nodeFromID("id")

Document

Contient le nœud dont l'attribut de type ID possède la valeur spécifiée en argument.  

getAttribute("attr")

Element

Renvoie la valeur de l'attribut spécifié en argument de l'élément courant.  

getAttributeNode("attr")

Element

Contient le nœud attribut dont le nom est spécifié en argument.  

getElementsByTagName("elmt")

Document - Element

Contient le nœud attribut dont le nom est spécifié en argument.  

getNamedItem("attr")

NamedNodeMap

Contient le nœud attribut dont le nom a été spécifié en argument pour la collection NamedNodeMap courante.

Remarque : Vous trouverez des méthodes (DHTML) utiles aux adresses suivantes :

 

Nous sommes donc positionnés sur le 1er fils (childnodes(0)) de l’élément racine

(ThorgalDocument.documentElement). Et nous avons choisi d’afficher le « text », donc le contenu du premier élément.

Si nous avions utilisé :

ThorgalDocument.documentElement.childNodes(0).childNodes(0).text nous serions positionnés sur l’élément « text » du 1er fils de , soit le contenu de :

6.2 Mozilla vs Internet Explorer 

Pour instancier un objet XML, nous utiliserons la fonction suivante pour détecter le navigateur et utiliser la bonne syntaxe en fonction de celui-ci : (attention sous IE, cette fonction ne fonctionnera que site votre page est consulté sur un serveur).

6.3 Mozilla vs Internet Explorer : la fonction « childNodes »

Il y a une grande différence entre le DOM selon qu’on utilise Internet Explorer ou Mozilla. Il s’agit de la façon dont ils manipulent les espaces. Lors de l’ouverture d’un fichier XML, il y a des espaces entre les nœuds (par exemple un caractère comme le passage à la ligne, etc ) Quand on utilise la méthode « node.childNodes », Internet Explorer ne tient pas compte de ces espaces tandis que Mozilla en tient compte!

Ainsi, dans notre fichier « thorgal », les navigateurs de Mozilla  diront que le 1er livre a 11 noeuds d'enfant, alors que l'Internet Explorer n’en verra que 5. Il faudra donc utilise une référence différente à ces « fils » :

En fonction du navigateur nous aurons à l’écran l’affichage du 1er livre :

Pour éviter ce problème, il suffit de vérifier le « type de nœud ». Un noeud d'élément a le type 1, un noeud de texte (espaces, passage à la ligne, etc.) a le type 3, etc. La meilleure manière de traiter seulement des noeuds d'élément est de traiter uniquement ceux dont le type de noeud vaut 1 :

if (livre[i].nodeType==1)

{

}

6.4 Exercices

Dans le fichier « » : 

1)   [dom1tml] Affichez le contenu des 9 (à l’aide de la propriété « length ») en affichant chaque fois le nom du noeud (nodeName) et son contenu. 

2)   [dom2tml] Refaites le même exercice en utilisant une boucle while() (pour passer au nœud suivant à

nextSibling)

3)   [dom3tml] Affichez uniquement les contenus de "titre" et ses attributs pour le  fichier

4)   A l'aide de la technologie DOM, créez un fichier HTML qui, avec l'arbre généalogique créé à l’exercice 4.4 (1) : 

a)    [arbretml] N’affiche que les personnes d'une même génération (exemple Bruno, Roland, Noémie, Gérard,

Franck, Charles, Amandine)

b)   [arbre2tml] Affiche l'arbre en entier, mais par branche :

 

c)    [arbre3tml] Affiche l'arbre en entier, mais par génération 

 

7. PHP 5

L'intégration de la technologie XML (et outils associés) dans le langage PHP augmente de façon significative les capacités de ce dernier à dialoguer avec des systèmes hétérogènes.  

7.1 SimpleXML

Avec l’arrivée de PHP 5, le module SimpleXML permet de manipuler simplement des fichiers XML. Son utilisation est adaptée pour relire ou modifier facilement des fichiers XML simples. (Pour une utilisation de fichiers plus complexes, nous utiliserons la technologie DOM voir point 7.3).

Remarque : 

Pour  pouvoir utiliser les caractères spéciaux ou accentués, vous devez utiliser la fonction utf8_encode() et utf8_decode()

Ouverture d’un fichier XML

$racine=simplexml_load_file(’’) ;

Afficher ou exporter une partie du document XML

Ici, tout le document sera renvoyé, si vous l’employez sur un nœud du document, seul le sous-arbre concerné sera renvoyé.

Accéder à un nœud par son nom

$racine=simplexml_load_file(’’) ;

$livre = $racine->livre; $auteur=$livre->auteur; echo $auteur ;

foreach()

$racine=simplexml_load_file(’’) ;

$livre=$racine->LIVRE;

$premier_livre=$livre->TITRE[0] ; foreach($livre->TITRE as $titre) {     echo utf8_decode($titre), ‘
’ ;

                }

Lister les nœuds fils

$racine=simplexml_load_file(’’) ;

$livre=$racine->LIVRE; $liste=$livre->children(); echo $liste[0] ;

Afficher le contenu textuel d’un nœud

$racine=simplexml_load_file(’’) ;

$livre=$racine->LIVRE; echo $livre->TITRE;

Remarque :

PHP doit décider s’il traite la variable comme un objet (nœud XML) ou comme une chaîne de caractères. Celui-ci ne saura pas toujours faire la distinction (sur d’autres fonctions par exemple), vous pouvez alors forcer l’utilisation du contenu textuel :

$racine=simplexml_load_file(’’) ;

$livre=$racine->LIVRE;

echo htmlentities((string) $livre->TITRE);

Accéder à un attribut

$racine=simplexml_load_file(’’) ;

$livre=$racine->LIVRE; echo $livre->AUTEUR[‘Naissance’];

Remarque : Vous trouverez des méthodes (simpleXML) utiles aux adresses suivantes :

7.2 Exercices

En utilisant le module simpleXML dans le fichier « » : 

1)   Affichez le contenu des 9 (à l’aide de la l’instruction foreach) en affichant chaque fois le nom du noeud5 et son contenu. 

2)   Affichez uniquement les contenus de "titre" et ses attributs pour le  fichier 3) créez un fichier PHP qui, avec l'arbre généalogique créé à l’exercice 4.4 (1) : 

a. N’affiche que les personnes d'une même génération (exemple Bruno, Roland, Noémie, Gérard, Franck, Charles, Amandine)

5  foreach ()

La commande foreach, comme en Perl ou dans d'autres langages, est un moyen simple de passer en revue un tableau.  foreach fonctionne uniquement sur les tableaux et les objets, elle retournera une erreur si vous tentez de l'utiliser sur  une variable d'un autre type ou non initialisée. 

Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première.

foreach (array_expression as $value)     commandes

foreach (array_expression as $key => $value)     commandes

La première forme passe en revue le tableau array_expression. À chaque itération, la valeur de l'élément courant est assignée  à $value et le pointeur interne de tableau est avancé d'un élément (ce qui fait qu'à la prochaine itération, on accédera à l'élément suivant). La deuxième forme fait exactement la même chose, mais c'est la clé de l'élément courant qui est assigné à la variable $key.

b. Affiche l'arbre en entier, mais par branche :

 

[]à , , ,

7.3 DOM

« L'extension DOM de PHP 5 permet de manipuler des documents XML avec une collection d'objets et leurs méthodes et propriétés associées. L'extension DOM de la version 5 de PHP respecte assez fidèlement les spécifications XML (Document Object Model Level 2) du Les interfaces fondamentales et étendues proposées par le W3C sont toutes présentes dans le modèle objet de l'extension DOM. » 

Gestion des erreurs : 

try  {

// code DOM avec erreurs potentiells

} catch(DomException $e){

//traitement de l’erreur

}

Codages caractères :

utf8_encode() utf8_decode()

Création (instanciation) d’un objet DOM :

$document = new DomDocument;

Chargement d’un fichier XML :

$document->load(’’);

Import depuis SimpleXML :

$monfichier = simplexml_load_file(‘);

$monfichierdom = dom_import_simplexml($monfichier);

Accéder à l'élément racine :

$racine = $document->documentElement;

Type de noeuds :

$document = new DomDocument;

$document->load(’’); $element = $document->documentElement;

echo $element->nodeType;

nodeType renvoie un entier : 

Valeur

Signification

Constante

1

élément

XML_ELEMENT_NODE

2

attribut

XML_ATTRIBUT_NODE

3

noeud de texte

XML_TEXT_NODE

4

section CDATA

XML_CDATA_SECTION_NODE

5

référence d'entité externe

XML_ENTITY_REF_NODE

6

entité

XML_ENTITY_NODE

7

instruction de traitement

XML_PI_NODE

8

commentaire

XML_COMMENT_NODE

9

document

XML_DOCUMENT_NODE

Nom d'un noeud :

$document = new DomDocument;

$document->load(’’); $element = $document->documentElement;

echo $element-> nodeName;

Contenu d'un noeud :

$document = new DomDocument;

$document->load(’’); $element = $document->documentElement;

echo $element-> nodeValue;

Navigation dans l'arbre :

$nodelist; // liste de noeud foreach( $nodelist as $node)

print_r($node)

Premier noeud de la liste :

$nodelist->item(0)

Nombre de noeuds :

$node->childNodes->length

Liste de noeuds fils :

$document = new DomDocument;

$document->load(’’); $element = $document->documentElement; foreach($element->childNodes as $node)

{

                  if ($node->nodeType == XML_ELEMENT_NODE)

                  {

                  echo $node->tagName;

                  echo utf8_decode($node->firstChild->nodeValue);

 }

}

Premier fils

$element = $document->documentElement;

$premier = $element->firstChild;

Dernier fils

$element = $document->documentElement;

$premier = $element->lastChild;

Noeud parents :

$parent;

$fils = $parent->firstChild;

$parent = $fils->parentNode;

Noeud frère :

$node->nextSibling;

$node->previousSibling;

getElementByTagName:

$document = new DomDocument();

$document->load('');

$auteur = $document->getElementsByTagName('AUTEUR');

Lecture d'un attribut : 

$node->getAttribute('naissance');

Modification d'un attribut

$node->setAttribute('naissance',’14/12/1970’);

Effacer un attribut

$node->removeAttribute('naissance');

Le moteur DOM, permet de modifier en profondeur le document et de créer de nouveaux nœuds. (SimpleXML permet uniquement des modifications de textes et attributs).

Création d’un élément

$document = new DomDocument;

$node = $document -> createElement(‘LIVRE’) ;

Création de nœuds de texte

$document = new DomDocument;

$livre = $document -> createTextNode(‘Thorgal et Aaricia’) ;

Insertion d'un noeud fils (le fils est ajouté en dernier de la liste si d’autre fils existent déjà)

$node->appendChild('$texte');

Effacer un noeud

$livre->removeChild($livre->lastChild);

Création d'un document XML complet :

Pour créer le document suivant : 

  La Magicienne trahie

  Jean Van Hamme

  Le Lombard

7.4 Inclure une page XML associée à une page XSLT dans PHP

Il est tout à fait possible d'afficher une page XML mise en forme avec XSLT dans une page PHP.

Pour cela, vous devez d'abord vérifier si l'extension XSL de PHP est activée.

Dans  WAMP, cliquez sur l'icône de WAMP, choisissez « PHP » puis « Extensions PHP », et cochez l'option « php_xsl ».

7.5 Exercices

1,2,3,4) Refaites les exercices du point 6.4 en PHP 5, en utilisant l'API DOM.

[]à , , , , ,

2) Créez le document « » (exercice 3.2(1)) à l'aide des objets DOM

8. RSS

Le RSS  «Really Simple Syndication» est un format initié par Netscape afin de présenter les titres des articles en publication de manière standardisée. Chacun peut relire ce fichier XML pour connaître les dernières nouvelles et les intégrer à une interface personnelle dans son propre site. Avec une mise à jour dynamique du contenu sans avoir à visiter manuellement le site distant. On parle de « syndication de données ».

8.1 Objectifs des flux RSS : 

Proposer à vos lecteurs de recevoir automatiquement dans leur logiciel de lecteur de mail, ou dans leur navigateur un résumé de dernières infos ajoutées. Un flux RSS, c'est comme une page web qui se mettrait à jour toute seule en arrière-plan et vous signalerait lorsqu'il y a eu des changements. Le deuxième intérêt d'un flux RSS, c'est que d'autres sites peuvent le récupérer et afficher sur leur site les dernières nouvelles du vôtre. Ils ne récupèrent pas le contenu de votre site, ils affichent seulement votre flux. En cliquant sur les nouvelles, leurs lecteurs arriveront sur votre site. L'intérêt, c'est que des sites web traitant du même sujet peuvent ainsi mettre en commun des nouvelles fraîches, on dit qu'ils se syndiquent. Les webmasters des autres sites ne viendront pas eux-mêmes chercher les fichiers nécessaires chaque fois qu'ils seront mis à jour. Ce processus est géré de façon autonome.


444
x