INFO0406 Olivier Flauzac olivier.flauzac@univ-reims.fr Olivier Flauzac (URCA) INFO0406 olivier.flauzac@univ-reims.fr 1 / 34
Programme Objectif Etude de technologies et de moyens autour de la programmation WEB Programme 1 XML & PHP 2 Transformation XML (XSLT) 3 AJAX 4 Communication et protocoles 5 Clients et Serveurs en Java Olivier Flauzac (URCA) INFO0406 olivier.flauzac@univ-reims.fr 2 / 34
Organisation Volume horaire CM TD TP 10 heures 10 heures 10 heures Equipe pédagogique Olivier Flauzac (CM) Luiz-Angelo Steffenel (TD, TP) Kudiretti Jacques (TP) Sylvain Darras (TP) Olivier Flauzac (URCA) INFO0406 olivier.flauzac@univ-reims.fr 3 / 34
MCC Session 1 ITP 50 % EET (1 heure) 50 % Session 2 ITP 50 % EET (1 heure) 50 % Olivier Flauzac (URCA) INFO0406 olivier.flauzac@univ-reims.fr 4 / 34
XML & PHP INFO0406 Olivier Flauzac olivier.flauzac@univ-reims.fr Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 5 / 34
Plan 1 Généralités 2 Structure des documents XML 3 XML et PHP Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 6 / 34
Plan 1 Généralités 2 Structure des documents XML 3 XML et PHP Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 7 / 34
Introduction XML? Extended Markup Language standard définit par le W3c http://www.w3c.org permet une représentation structurée des informations indépendant des plate-formes indépendant des langages indépendant des logiciels qui l exploite Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 8 / 34
Ce qu est XML Définitions un langage de structuration de données basé sur une structure stricte représentation balisée couple balise ouvrante / fermante extensible définition de nouveaux documents définition de nouvelles "balises" Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 9 / 34
Ce que n est pas XML XML n est pas un langage de visualisation un langage d exécution lié à une technologie ou un langage de programmation Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 10 / 34
XML en action Utilisation de XML organisation "locale" de données sauvegarde dans un fichier de type texte mise en place de données structurées alternative à de "petites" bases de données transmission de données échanges normalisés indépendant de l exploitation des données fichier de configuration traitement des données transformation automatique Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 11 / 34
Plan 1 Généralités 2 Structure des documents XML 3 XML et PHP Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 12 / 34
Un exemple Un carnet d adresse <? xml version= " 1.0 " encoding= "UTF 8" standalone= " yes " > <carnet> <personne> <nom> Flauzac < / nom> <prenom> O l i v i e r < / prenom> <adresse> dans son bureau < / adresse> < / personne> <personne> <nom> S t e f f e n e l < / nom> <prenom> Luiz Angelo < / prenom> <adresse> chez l u i < / adresse> < / personne> < / carnet> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 13 / 34
L en tête Rôles définir et préciser le type du document (XML) définir la version utilisée définir l encodage (codage des caractères) définir les relations avec d autres documents Exemple <? xml version= " 1.0 " encoding= "UTF 8" standalone= " yes " > Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 14 / 34
Les éléments XML Rôles architecture des données hiérarchie des informations définition par imbrication de couples de balises <balise> contenu </balise> <carnet> <personne> <nom> Flauzac < / nom> <prenom> O l i v i e r < / prenom> <adresse> dans son bureau < / adresse> < / personne> < / carnet> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 15 / 34
Représentation sous forme d arbre Flauzac Olivier dans son bureau Steffenel Luiz-Angelo chez lui Arbre du document carnet carnet personne personne nom prénom adresse nom prénom adresse Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 16 / 34
Les attributs Rôles qualification des éléments définit sous la forme : nom="valeur" définit dans la balise "ouvrante" <carnet> <personne> <nom> Flauzac < / nom> <prenom> O l i v i e r < / prenom> <adresse type= " t r a v a i l " > dans son bureau < / adresse> < / personne> <personne> <nom> S t e f f e n e l < / nom> <prenom> Luiz Angelo < / prenom> <adresse type= " perso " > chez l u i < / adresse> < / personne> < / carnet> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 17 / 34
Représentation sous forme d arbre Flauzac Olivier dans son bureau Steffenel Luiz-Angelo chez lui Arbre du document carnet carnet personne personne nom prénom adresse travail nom prénom adresse perso Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 18 / 34
Plan 1 Généralités 2 Structure des documents XML 3 XML et PHP Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 19 / 34
Utiliser XML en PHP Solution codage manuel des opérations gestion des chaînes de caractères, expressions régulières... utilisation de structure élémentaires de gestion XML utilisation directe d une bibliothèque de bas niveau libxml utilisation d une bibliothèque spécifique : SimpleXML utilisation d un système de transformation (XSLT) Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 20 / 34
SimpleXML Caractéristiques opérations de base XML permet la création, manipulation de documents XML bibliothèque objet fournie en standard dans PHP Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 21 / 34
Utilisation Programmation objet création d un objet SimpleXML vide à partir d une chaîne de caractères item à partir d un fichier manipulation à l aide des méthodes manipulation des noeuds XML manipulation des attributs retour d une chaîne affichable sauvegarde dans un fichier texte Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 22 / 34
Construction d un objet SimpleXML A partir d une chaîne utilisation du constructeur de la classe SimpleXML construct ( s t r i n g $data [, i n t $options [, bool $ d a t a _ i s _ u r l [, s t r i n g $ns [, bool $ i s _ p r e f i x ] ] ] ] ) data : chaîne XML bien formé ou URI d un document options : définition de paramètres de la bibliothèque XML data_is_url : définition si data est de type URI Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 23 / 34
Construction d un objet SimpleXML : exemples A partir d une chaîne <? $chaine= " <a> <b> h e l l o </b> <b> s a l u t </b> </a> " ; $xml = new SimpleXMLElement ( $chaine ) ;?> A partir d un URI <? $sxe = new SimpleXMLElement ( h t t p : / / example. org / document. xml, NULL, TRUE ) ;?> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 24 / 34
Construction d un objet SimpleXML A partir d un fichier méthode simple_xml_load_file o b j e c t s i m p l e x m l _ l o a d _ f i l e ( s t r i n g $filename [, s t r i n g $class_name= " SimpleXMLElement " [, i n t $options =0 [, s t r i n g $ns [, bool $ i s _ p r e f i x = false ] ] ] ] ) filename : chemin du fichier class_name : classe de résultat options : définition de paramètres de la bibliothèque XML A partir d un fichier <??> $videotheque = s i m p l e x m l _ l o a d _ f i l e ( " f i c h i e r. xml " ) ; Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 25 / 34
Récupération d une chaîne Récupération à partir d un objet SimpleXML mixed asxml ( [ s t r i n g $filename ] ) filename : fichier à écrire au lieu de retourner la chaîne de caractères Affichage du contenu <? $carnet = s i m p l e x m l _ l o a d _ f i l e ( " f i c h i e r. xml " ) ; echo " <pre > " ; echo $carnet >asxml ( ) ; echo " </ pre > " ;?> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 26 / 34
Ajout des données ajout d un noeud addchild SimpleXMLElement addchild ( s t r i n g $name [, s t r i n g $value [, s t r i n g $namespace ] ] ) name : nom du noeud value : valeur associée namespace : espace de nom associé Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 27 / 34
Ajout de noeuds Construction d un document <? $xml = new SimpleXMLElement ( " <carnet > </ carnet > " ) ; $personne = $xml >addchild ( " personne " ) ; $personne >addchild ( "nom", " Durant " ) ; $personne >addchild ( " prenom ", " Paul " ) ; $personne >addchild ( " adresse ", " i c i et l à " ) ; $personne = $xml >addchild ( " personne " ) ; $personne >addchild ( "nom", " Dupont " ) ; $personne >addchild ( " prenom ", " Jean " ) ; $personne >addchild ( " adresse ", " plus l o i n " ) ; echo " <pre > " ; echo $xml >asxml ( ) ; echo " </ pre > " ;?> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 28 / 34
Un document XML Un document XML <?xml version= " 1.0 " encoding= "ISO 8859 1" standalone= " yes "?> <videotheque> < f i l m > < t i t r e > Pulp f i c t i o n < / t i t r e > <realisateur > Quentin Tarantino < / realisateur > <annee> 1994 < / annee> <acteurs> <acteur> John T r a v o l t a < / acteur> <acteur> Uma Thurman < / acteur> <acteur> Bruce W i l l i s < / acteur> <acteur> Samuel L. Jackson < / acteur> < / acteurs> < / f i l m > < f i l m > < t i t r e > Lawrence d Arabie </ t i t r e > < realisateur > David Lean </ realisateur > <annee> 1962 </annee> <acteurs > <acteur > Peter O Toole < / acteur> <acteur> Omar S h a r i f < / acteur> <acteur> Alec Guinness < / acteur> < / acteurs> < / f i l m > Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 29 / 34
Construction d un document < f i l m > < t i t r e > Le bon, l a brute et l e truand < / t i t r e > <realisateur > Sergio Leone < / realisateur > <annee> 1966 < / annee> <acteurs> <acteur> C l i n t Eastwood < / acteur> <acteur> Lee Van Cleef < / acteur> <acteur> E l i Wallach < / acteur> < / acteurs> < / f i l m > < f i l m > < t i t r e > Impitoyable < / t i t r e > <realisateur > Clint Eastwood < / realisateur > <annee> 1992 < / annee> <acteurs> <acteur> C l i n t Eastwood < / acteur> <acteur> Gene Hackman < / acteur> <acteur> Morgan Freeman < / acteur> < / acteurs> < / f i l m > < / videotheque> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 30 / 34
Parcourir un document Utilisation du tableau des noeuds fils : accès direct les fils d un noeud sont numérotés dans un tableau <? $videotheque = s i m p l e x m l _ l o a d _ f i l e ( " video. xml " ) ; echo " <p> f i l m 1 : ". $videotheque >f i l m [0] > t i t r e. " </p> " ; echo " <p> f i l m 2 : ". $videotheque >f i l m [1] > t i t r e. " </p> " ; echo " <p> f i l m 3 : ". $videotheque >f i l m [2] > t i t r e. " </p> " ; echo " <p> f i l m 4 : ". $videotheque >f i l m [3] > t i t r e. " </p> " ;?> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 31 / 34
Parcourir un document Utilisation du tableau des noeuds fils parcours avec un boucle utilisation de la structure foreach <? $videotheque = s i m p l e x m l _ l o a d _ f i l e ( " video. xml " ) ; foreach ( $videotheque > f i l m as $ f i l m ) { echo " <p> ", $ f i l m > t i t r e, " </p> " ; }?> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 32 / 34
Parcourir un document Utilisation des noeuds fils utilisation de la méthode children SimpleXMLElement c h i l d r e n ( [ s t r i n g $ns [, bool $ i s _ p r e f i x ] ] ) <? $videotheque = s i m p l e x m l _ l o a d _ f i l e ( " video. xml " ) ; foreach ( $videotheque >c h i l d r e n ( ) as $ f i l m ) { echo " <p> ", $ f i l m > t i t r e, " </p> " ; foreach ( $ f i l m >acteurs >c h i l d r e n ( ) as $act ) { echo " <p> > ", $act, " </p> " ; } }?> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 33 / 34
Suppression d un noeud de l arbre Utilisation de unset destruction d une variable (d un noeud) void unset ( mixed $var [, mixed $var [, mixed $... ] ] ) <? $videotheque = s i m p l e x m l _ l o a d _ f i l e ( " video. xml " ) ; echo " <p> f i l m 1 : ". $videotheque >f i l m [0] > t i t r e. " </p> " ; echo " <p> f i l m 2 : ". $videotheque >f i l m [1] > t i t r e. " </p> " ; echo " <p> f i l m 3 : ". $videotheque >f i l m [2] > t i t r e. " </p> " ; echo " <p> f i l m 4 : ". $videotheque >f i l m [3] > t i t r e. " </p> " ; unset ( $videotheque >f i l m [ 0 ] ) ; echo " <hr / > " ; echo " <p> f i l m 1 : ". $videotheque >f i l m [0] > t i t r e. " </p> " ; echo " <p> f i l m 2 : ". $videotheque >f i l m [1] > t i t r e. " </p> " ; echo " <p> f i l m 3 : ". $videotheque >f i l m [2] > t i t r e. " </p> " ;?> Olivier Flauzac (URCA) XML & PHP olivier.flauzac@univ-reims.fr 34 / 34