Programmation Web Avancée Parsers XML



Documents pareils
Programmation des Applications Réparties. Parsers XML DOM et SAX

< _155_0>

34. DOM (Document Object Model)

XML et Java Vue Balisée en XML. Programmation avancée NFP 121. XML pourquoi faire? Structuration des données. Titre Auteur Section Paragraphe

Master d Informatique Corrigé du partiel novembre 2010

XML, PMML, SOAP. Rapport. EPITA SCIA Promo janvier Julien Lemoine Alexandre Thibault Nicolas Wiest-Million

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Faculté de Génie Chaire industrielle en infrastructures de communication. La technologie XML. Wajdi Elleuch

La base de données XML exist. A. Belaïd

Thierry BOULANGER. par la pratique. Bases indispensables Concepts et cas pratiques XML. 3 ième édition. Nouvelle édition

Programmation Web Avancée Introduction aux services Web

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Qu'est-ce que XML? XML : Extensible Markup Language. Exemple de document SGML SGML

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

L'API DOM : Document Object Model

OpenPaaS Le réseau social d'entreprise

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Architecture Orientée Service, JSON et API REST

Programmer en JAVA. par Tama

Évaluation et implémentation des langages

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Introduction aux concepts d ez Publish

BASE DE DONNÉES XML NATIVE

Corrigé des exercices sur les références

Document Object Model (DOM)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Publication et Traitement avec XSL. 1. XPATH 2. XSLT 3. XSLFO 4. Traitement de documents 5. Conclusion

4. SERVICES WEB REST 46

Architectures web/bases de données

Chapitre VI- La validation de la composition.

Programmation Web. Madalina Croitoru IUT Montpellier

DOM - Document Object Model

SQL Parser XML Xquery : Approche de détection des injections SQL

Arbres binaires de recherche

Evolution d Applications. Une Approche pour l Evolution des Systèmes Logiciels. Exemple : Le Serveur WWW. Applications Considérées

Premiers Pas en Programmation Objet : les Classes et les Objets

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Bases de Données Avancées

Faculté Polytechnique de Mons. Le processus d Extraction, Transformation et Load (ETL) dans des entrepôts de données XML

Bases de Données Avancées

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Evolution et architecture des systèmes d'information, de l'internet. Impact sur les IDS. IDS2014, Nailloux 26-28/05/2014

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

as Architecture des Systèmes d Information

TP1 : Initiation à Java et Eclipse

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Meta Object Facility. Plan

Gestion documentaire (Extraits du CCI version 1.2)

Générer du code à partir d une description de haut niveau

Information utiles. webpage : Google+ : digiusto/

Alfstore workflow framework Spécification technique

Programmation par composants (1/3) Programmation par composants (2/3)

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

Création d objet imbriqué sous PowerShell.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

BIRT (Business Intelligence and Reporting Tools)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Programmation Internet

Programmation en Java IUT GEII (MC-II1) 1

GUI Client in HomeSIP Project

Devenez un véritable développeur web en 3 mois!

FileMaker Server 12. publication Web personnalisée avec XML

Remote Method Invocation (RMI)

Accès à l'information XML par des requêtes XQuery au travers de son XSchema

RMI le langage Java XII-1 JMF

Travaux Pratiques : Lucène - Gestion d un index plein texte

Introduction aux «Services Web»

Documentation CAS à destination des éditeurs

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Université de Bangui. Modélisons en UML

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Introduction : les processus. Introduction : les threads. Plan

La carte à puce. Jean-Philippe Babau

Programmation Objet Java Correction

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Synchro et Threads Java TM

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

Projet de programmation (IK3) : TP n 1 Correction

Cours 1: Java et les objets

Compte Rendu d intégration d application

Tp 1 correction. Structures de données (IF2)

TD3: tableaux avancées, première classe et chaînes

EXTENSION D UN OUTIL DE VISUALISATION DE TRACES

OCL - Object Constraint Language

Catalogue des formations Edition 2015

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Un ordonnanceur stupide

Transcription:

1/33 Programmation Web Avancée Parsers XML Thierry Hamon Bureau H202 - Institut Galilée Tél. : 33 1.48.38.35.53 Bureau 150 LIM&BIO EA 3969 Université Paris 13 - UFR Léonard de Vinci 74, rue Marcel Cachin, F-93017 Bobigny cedex Tél. : 33 1.48.38.73.07, Fax. : 33 1.48.38.73.55 thierry.hamon@univ-paris13.fr http://http://www-limbio.smbh.univ-paris13.fr/membres/hamon/

2/33 Introduction Objectifs du XML fournir un cadre strict pour Stocker des données Echanger des données Besoin d outils pour l analyse (parsing) des documents XML (SAX, DOM, JAXP, JDOM, etc.) la validité et la conformité des documents XML produits (utilisent l analyse syntaxique du XML) la décomposition des documents en éléments/attributs/... le traitement (manipulation) des documents XML

3/33 Parseurs XML Deux principes d analyse du XML (avec les API correspondantesq) : SAX (Simple API for XML) : Interface évennementielle Manipulation d un document XML au fur et à mesure de la lecture Extraction des informations en fonction de la gestion des évènements liés aux balises rencontrées (création d un élément, etc.) DOM (Document Object Model) : Modèle objet Manipulation d un document XML après l avoir représenté en mémoire sous forme d un arbre d objets

4/33 Parseurs XML Autres API : JAXP (Java API for XML Parsing) - JavaSoft/Sun - http://java.sun.com/xml/jaxp/ Intégrer à Java depuis la version 1.4 Normalisation du parser et XML et uniformisation les paramètres standards (SAX et DOM) API standard pour les transformations de documents XML (processeurs XSLT, XSL-FO et XPATH) JDOM (Java + XML) Définition de classes JAVA pour manipuler des fichiers XML

5/33 Document Object Model (DOM) Représentation Objet en mémoire d un document XML ou HTML (4.0). Norme du consortium W3C (http://www.w3.org/dom/) Modèle générique d objets représentant un document Proposition d une interface de programmation pour les documents HTML ou XML DOM noyau (Core DOM) pour XML DOM HTML Représentation arborescente des objets correspondant au document chargé Manipulation de la structure logique et de l information à l aide de méthodes et d attributs API indépendantes des plates-formes, des langages de programmation et de script

6/33 API DOM (Java) http://www.w3.org/dom API org.xml.dom Classes et méthodes permettant la manipulation d un document via l arbre DOM Manipulation des nœuds (ajout, suppression) et des attributs associés au nœd 3 étapes : 1 Analyse du document XML et représentation sous forme d une arborescence DOM 2 Manipulation et transformation de l arborescence initiale en une nouvelle arborescence DOM 3 Production d un nouveau document XML à partir de la nouvelle arborescence

7/33 Exemple import org. w3c. dom. ; import j a v a x. xml. p a r s e r s. ; import j a v a. i o. ; p u b l i c c l a s s domexample1 { public s t a t i c void main ( String [ ] args ) throws Exception { Document doc ; DocumentBuilderFactory dbf = DocumentBuilderFactory. newinstance ( ) ; dbf. s e t V a l i d a t i n g ( t r u e ) ; // v a l i d a t i o n des documents au c o u r s de l a n a l y s e DocumentBuilder db = dbf. newdocumentbuilder ( ) ; doc = db. p a r s e ( new F i l e ( a r g s [ 0 ] ) ) ; a f f i c h e r (, doc ) ;

8/33 Exemple p u b l i c s t a t i c v o i d a f f i c h e r ( S t r i n g i n d e n t, Node n ) { s w i t c h ( n. getnodetype ( ) ) { case org. w3c. dom. Node.COMMENT NODE: System. out. p r i n t l n ( i n d e n t + <! + n. getnodevalue ( ) + > ) ; break ; case org. w3c. dom. Node. TEXT NODE : System. out. p r i n t l n ( i n d e n t + ( ( C h a r a c t e r D a t a ) n ). getdata ( ) ) ; break ; case org. w3c. dom. Node. ELEMENT NODE : System. out. p r i n t l n ( i n d e n t + < + ( ( Element ) n ). gettagname ( ) + > ) ; break ; N o d e L i s t f i l s = n. g e t C h i l d N o d e s ( ) ; f o r ( i n t i =0; ( i < f i l s. g e t L e n g t h ( ) ) ; i ++) a f f i c h e r ( i n d e n t +, f i l s. item ( i ) ) ; i f ( n. getnodetype ( ) == org. w3c. dom. Node. ELEMENT NODE) System. out. p r i n t l n ( i n d e n t + </ + ( ( Element ) n ). gettagname ( ) + > ) ;

9/33 Interface Node Interface fondamentale : La plupart des objets sont considérés comme des nœuds Utilisation : Manipulation de nœuds (propriétés asssociées, navigation dans l arbre, etc. ) NB: Tout nœud est rattaché à un document mais pas forcément à l arborescence Interfaces : Node, NamedNodeMap, NodeList Interfaces héritant de Node : Attr, CharacterData (Comment, Text / CDATASection, Document, DocumentFragment, DocumentType, Element, Entity, EntityReference, Notation, ProcessingInstruction

10/33 Méthodes de l interface Node Propriétés d un nœud getnodetype() : retourne le type du noeud (ELEMENT NODE, ATTRIBUTE NODE, TEXT NODE,...) getnodename() : retourne le nom de l élément (Null si élément Text, sinon nom de la balise ou de l ttribut getnodevalue() : retourne la valeur du nœud (si Attribut, valeur de l attribut ; si élément, null getattributes() : retourne nodemap des attributs (seulement si élément)

11/33 Méthodes de l interface Node Navigation dans un nœud Possèdent des fils : Boolean haschildnodes() Récupération du premier fils : Node getfirstchild() Récupération du dernier fils : Node getlastchild() Récupération de tous les fils : NodeList getchildnodes() Récupération du père : Node getparentnode();

12/33 Méthodes de l interface Node Manipulation de nœuds Ajouter un nœud en tant que dernier fils : appenchild(node nouvel objet) Ajouter nœud : insertbefore(node nouvel objet,node objet fils) Retirer un nœud : removechild(node objet fils) Remplacer un nœud : replacechild(node nouvel objet,node objet fils) Cloner un nœud : CloneNode(boolean deep) deep == false : copie du nœud courant et des attributs si c est un élément deep == true : copie récursive

13/33 Interface Document Représentation de l ensemble du document comme un nœud Nœud document : racine du document mais pas l élément racine Interface de construction 1 Utilisation des méthodes de document pour créer des nœuds createelement(), createattribut(), createtextnode(),... 2 Association des nœuds au document 3 Ajouter ces nœuds à l arbre Accès au nœud Document : Elément Racine : Node getdocumentelement() Accès aux élément à partir du nom de la balise : NodeList getelemenstbytagname(string name)

14/33 Sauvegarde et transformation d un document? l API DOM (sauf niveau 3) ne fournit pas ces fonctionnalités Il faut utiliser JAXP (Java API for XML Parsing - javax.xml.*) qui utilise : un processeur XSL DOM

15/33 SAX Simple API for XML http://www.saxproject.org API org.xml.sax Normalisation proposée par des industriels (xml-dev) Standard de fait (1997) et supportée par la majeure partie des parsers XML Alternative à DOM pour éviter les problèmes de mémoire et la lecture de gros documents XML

16/33 SAX Simple API for XML Modèle événementiel Analyse à la volée par lecture du flux Implémentation d un ensemble de méthodes correspondant aux évènements du parser : Début/fin du document : startdocument(), enddocument(), characters() débutd/fin d un élément : startelement(), endelement() Adaptée aux documents volumineux Mais pas de conservation de l information

17/33 Interfaces de org.xml.sax : Interfaces de SAX 2 ContentHandler : gestion des évènements liés au contenu DTDHandler : gestion des évènements liés à la DTD ErrorHandler : gestion des erreurs Locator : gestion de la position XMLReader et XMLFilter : analyseur Attributes : gestion de la liste des attributs EntityResolver : gestion des entités externes Classes de org.xml.sax.helpers : org.xml.sax.helpers.defaulthandler implémente org.xml.sax.contenthandler org.xml.sax.dtdhandler org.xml.sax.entityresolver org.xml.sax.errorhandler

18/33 import j a v a x. xml. p a r s e r s. ; import org. xml. s a x. ; import j a v a. i o. F i l e ; Exemple 1 Utilisation de la classe DefaultHandler p u b l i c c l a s s saxexample1 extends org. xml. s a x. h e l p e r s. D e f a u l t H a n d l e r { public s t a t i c void main ( String args [ ] ) throws Exception { SAXParserFactory f a c t o r y = SAXParserFactory. n e w I n s t a n c e ( ) ; SAXParser s a x p a r s e r = f a c t o r y. newsaxparser ( ) ; s a x p a r s e r. p a r s e ( new F i l e ( a r g s [ 0 ] ), new saxexample1 ( ) ) ; p u b l i c v o i d startelement ( String uri, String name, String qname, A t t r i b u t e s a t t r s ) { f o r ( i n t i = 0 ; i < a t t r s. g e t L e n g t h ( ) ; i ++) { S t r i n g namea = a t t r s. getqname ( i ) ; S t r i n g typea = a t t r s. gettype ( i ) ; S t r i n g valuea = a t t r s. g e t V a l u e ( i ) ; System. out. p r i n t l n ( \ t + qname + / + namea + : ( + typea + ) + valuea ) ; p u b l i c v o i d startdocument ( ) { System. out. p r i n t l n ( S t a r t document ) ; p u b l i c v o i d enddocument ( ) { System. out. p r i n t l n ( End document ) ;

19/33 import org. xml. s a x. ; Exemple 2 Utilisation de la classe ContentHandler fichier saxexample3.java public c l a s s saxexample3 implements C o n t e n t H a n d l e r { p u b l i c v o i d setdocumentlocator ( L o c a t o r l o c a t o r ) { p u b l i c v o i d startdocument ( ) throws SAXException { System. out. p r i n t l n ( S t a r t document ) ; p u b l i c v o i d enddocument ( ) throws SAXException { System. out. p r i n t l n ( End document ) ; p u b l i c v o i d startprefixmapping ( String p r e f i x, String u r i ) throws SAXException { p u b l i c v o i d e n d P r e f i x M a p p i n g ( S t r i n g p r e f i x ) throws SAXException {

20/33 Exemple 2 Utilisation de la classe ContentHandler fichier saxexample3.java p u b l i c v o i d startelement ( String uri, String localname, S t r i n g qname, A t t r i b u t e s a t t r s ) throws SAXException { f o r ( i n t i = 0 ; i < a t t r s. g e t L e n g t h ( ) ; i ++) { S t r i n g namea = a t t r s. getqname ( i ) ; S t r i n g typea = a t t r s. gettype ( i ) ; S t r i n g valuea = a t t r s. g e t V a l u e ( i ) ; System. out. p r i n t l n ( \ t + localname + / + namea + : ( + typea + ) + valuea p u b l i c v o i d endelement ( String uri, String localname, S t r i n g qname) throws SAXException { p u b l i c v o i d c h a r a c t e r s ( char ch [ ], i n t s t a r t, i n t l e n g t h ) throws SAXException { public void i g n o r a b l e W h i t e s p a c e ( char ch [ ], i n t s t a r t, i n t l e n g t h ) throws SAXException {

21/33 Exemple 2 Utilisation de la classe ContentHandler fichier saxexample3.java p u b l i c v o i d p r o c e s s i n g I n s t r u c t i o n ( S t r i n g t a r g e t, S t r i n g data ) throws SAXException { p u b l i c v o i d s k i p p e d E n t i t y ( S t r i n g name ) throws SAXException {

22/33 Exemple 2 Utilisation de la classe ContentHandler fichier saxexamplemain.java import org. xml. s a x. ; public c l a s s saxexamplemain { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { t r y { XMLReader p a r s e r = org. xml. s a x. h e l p e r s. XMLReaderFactory. createxmlreader ( ) ; ContentHandler contenthandler = new saxexample3 ( ) ; p a r s e r. s e t C o n t e n t H a n d l e r ( c o n t e n t H a n d l e r ) ; p a r s e r. p a r s e ( a r g s [ 0 ] ) ; catch ( E x c e p t i o n e ) { e. p r i n t S t a c k T r a c e ( ) ;

23/33 Gestion des erreurs Interface ErrorHandler Possibilité de personnalisation des messages d erreur : error(saxparseexception) fatalerror(saxparseexception) warning(saxparseexception) Association au parser : parser.seterrorhandler(errorhandler);

24/33 Gestion des évènements liés à la DTD Interface DTDHandler Notification de déclaration de notation void notationdecl(string name,string PublicId,String systemid) Adaptation du comportement au format du fichier Entité non analysé (Unparsed entity) void unparsedentity(string name,string PublicId,String systemid,string notationname)

25/33 Gestion des entités externes Interface EntityResolver Traitement particulier pour les entités externes Modification de la source à traiter Renvoie d un nouvel InputSource InputSource resolveentity(string publicid, String systemid)

26/33 DOM SAX DOM vs. SAX + Interface permettant la navigation dans tout l arbre + Manipulation de l arbre - Chargement de tout l arbre en mémoire - Représentation de tous les éléments - Traitement du document après l analyse + Traitement du document en cours d analyse + traitement des seuls les éléments pertinents - Ecriture de méthodes de traitements plus compliquées pour lesstructures imbriquées - Pas de conservation de l information

27/33 JAXP Java API for XML Parsing : ensemble d APIs Java permettant d effectuer des traitements XML inclut SAX (2.0) DOM (DOM Level 2) la manipulation de transformations XSLT Objectif : Proposer une couche d abstraction au dessus de SAX et DOM et standardiser les aspects non couvert par SAX et DOM

28/33 DOM : JAXP : Utilité de JAXP Pas de spécification sur la création de objet parser (API différentes, problème de portabilité ) Il faut il faut explicitement importer et référencer la classe de l analyseur (org.apache.xerces.parsers.domparser) Pas de standardisation par le W3C de l analyse du document XML et de la création de l objet associé Pas de norme sur l obtention d un document Couche intermédiaire entre le parser utilisé et l application Propose un parser XML minimal (non validant) supporte les espaces de noms

29/33 API JAXP Utilisation de plusieurs paquetages : javax.xml.parsers Ensemble de classes pour interfacer des parsers SAX : SAXParser et SAXParserFactory DOM : DocumentBuilder et DocumentBuilderFactory org.w3c.dom (DOM) org.xml.sax et org.xml.sax.helpers (SAX)

30/33 Exemple i m p o r t org. w3c. dom. ; i m p o r t j a v a x. xml. p a r s e r s. ; i m p o r t j a v a. i o. ; i m p o r t j a v a x. xml. t r a n s f o r m. stream. StreamSource ; i m p o r t j a v a x. xml. t r a n s f o r m. stream. S t r e a m R e s u l t ; i m p o r t j a v a x. xml. t r a n s f o r m. Source ; i m p o r t j a v a x. xml. t r a n s f o r m. R e s u l t ; i m p o r t j a v a x. xml. t r a n s f o r m. T r a n s f o r m e r ; i m p o r t j a v a x. xml. t r a n s f o r m. T r a n s f o r m e r F a c t o r y ; p u b l i c c l a s s jaxpexample { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { T r a n s f o r m e r T r a n s f o = n u l l ; StreamSource FTransfo=new StreamSource ( new F i l e ( t r a n s f o. x s l ) ) ; TransformerFactory TR=TransformerFactory. newinstance ( ) ; t r y { Transfo=TR. newtransformer ( FTransfo ) ; c a t c h ( E x c e p t i o n t e ) { t e. p r i n t S t a c k T r a c e ( ) ; StreamSource s o u r c e=new StreamSource ( new F i l e ( a r g s [ 0 ] ) ) ; S t r e a m R e s u l t r e s u l t=new S t r e a m R e s u l t ( new F i l e ( r e s u l t. html ) ) ; t r y { T r a n s f o. t r a n s f o r m ( s o u r c e, r e s u l t ) ; c a t c h ( E x c e p t i o n t e ) { t e. p r i n t S t a c k T r a c e ( ) ;

31/33 Description de l API JAXP javax.xml.parsers : Définition de factory retournant des instances de parser pour traiter du XML avec SAX et DOM. javax.xml.transform : Définition de classes et d interfaces pour convertir un document XML en HTML, RTF,... javax.xml.transform.dom : Interfaces (Source et Result) pour DOM javax.xml.trasnform.sax : Interfaces (Source et Result) pour SAX javax.xml.transform.stream : Interfaces (Source et Result) pour représenter l information comme un flot de texte

32/33 Description de l API JAXP sauvegarde et transformation Classe TransformerFactory : création des méthodes de transformation de l arborescence XML newtransformer() : production d un nouveau transformer newtransformer(source XML) : production d un nouveau transformer avec possibilité d utiliser XSL Classe Transformer : application des transformations setparameter : spécification des paramètres à la transformations transform(source XmlSource, Result target) : transformation du document source vers le résultat Classe Source : Utilisation des StreamSource ou DOMSource Classe Result : Utilisation des StreamResult ou DOMResult

33/33 Autres API Autres langages de programmation JDOM : proposer une bibliothèque de classes simple pour la représentation et la manipulation de documents XML (http://www.jdom.org) Faciliter l utilisation de DOM, permettre l enregistrement du résultat d une transformation dom4j : bibliothèque java compatible SAX, DOM et JAXP Perl : XML::DOM, XML::SAX XML::XSLT XMl::Simple : module Perl chargeant en mémoire un document XML (dans le style DOM) sous forme de structure Perl PHP : http://www.php.net/manual/en/refs.xml.php...