Université Paris II & LRI Michel de Rougemont [email protected] http://www.lri.fr/~mdr Projets M1 XML, Objets. 1. 2. 3. 4. Projets XML Programmation objet D.O.M. Projets: • Présentation – Objectif – Quels services? – Quels usagers? • Schéma de la Base de données Mysql – Combien de tables – Structures des tables • Architecture HTML – Page d’index, pages principales, liens – Feuilles de style • Scripts PHP – Liens entre page HTML et Base de données. Exemple : gestion de résultats de compétition sportive • Présentation: – offrir la possibilité de gérer des résultats de compétitions de sport. Afficher les résultats sur une page par sport. – Possibilité de s’abonner aux résultats : envoi hebdomadaire. • Schéma B.D. – Table R ( sport, lieu, date, e1,e2,score…) – Table L (nom, email, sport) • Architecture HTML – – – – – Sélection sport sur page d’index Abonnement: lien de la page d’index vers une nouvelle page Entrer de nouveaux résultats sur la page de chaque sport. Feuilles de style : Menu colonne gauche. Select/option pour chaque sport. • Scripts PHP – Insertion d’un formulaire abonnement vers L – Affichage de R sur la page de chaque sport par sélection du sport Gestion de résultats de compétition sportive sur monsite.free.fr • Présentation: – Powerpoint • Schéma B.D. – Powerpoint et MYSQL (via query.php) • Architecture HTML – Powerpoint : Arborescence et liens – Fichiers sur monsite.free.fr • Scripts PHP – Powerpoint : fonction des scripts – Réalisation sur monsite.free.fr Itérations chaque semaine XML Séparation de: Structure (DTD) Style d’affichage (XSL) Données brutes (XML) s1.xml, s2.xml, s3.xml dans XSL.ZIP <?xml version='1.0' ?> <!DOCTYPE livre SYSTEM 'livre.dtd' [ <!ENTITY ionesco SYSTEM 'ionesco.xml'>]> <?xml:stylesheet type="text/xsl" href="s1.xsl"?> <livre> &ionesco; </livre> XML : la DTD •DTD : Document Type Definition Fichier livre.dtd <?xml version='1.0' ?> <!ELEMENT livre (chapitre*,titre,auteur)> <!ELEMENT chapitre (titre,para*)> <!ELEMENT titre (#PCDATA)> <!ELEMENT para (#PCDATA)> <!ELEMENT auteur (#PCDATA)> Structure du document : Plusieurs chapitres, un titre, un auteur XSL : feuilles de style Règles de traduction en HTML s1.xsl <?xml version='1.0' ?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:template match='/'> <xsl:apply-templates/></xsl:template> </xsl:stylesheet> s2.xsl <?xml version='1.0' ?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:template match='/'> <xsl:apply-templates/> </xsl:template> <xsl:template match='chapitre/titre'> <h1><xsl:value-of select='.'/></h1> </xsl:template> </xsl:stylesheet> XSL : s3.xsl ?xml version="1.0"?><xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:output method='xml' indent='yes' standalone='yes'/> <!-- racine --> <xsl:template match='/'> <html><head></head><body> <xsl:apply-templates mode='sommaire' select='livre' /> <hr/> <xsl:apply-templates mode='document' select='livre/chapitre' /></body></html> </xsl:template> <!-- mode sommaire --> <xsl:template mode='sommaire' match='livre'> <h1><xsl:value-of select='titre' /></h1> <xsl:value-of select='auteur' /> <hr/> <xsl:apply-templates mode='sommaire' select='chapitre'></xsl:apply-templates> </xsl:template> <!-- affichage des titres de chapitre --> <xsl:template mode='sommaire‘ match='chapitre'> <h2><xsl:number/> -<xsl:value-of select="titre" /></h2</xsl:template> …… </xsl:stylesheet> Données : ionesco.xml <chapitre> <titre>Exp&#233;rience du th&#233;&#226;tre</titre> <para>Quand on me pose la question : &#171; Pourquoi &#233;crivez vous des pi&#232;ces de th&#233;&#226;tre ? &#187; je me sens toujours tr&#232;s embarras&#233;, je ne sais quoi r&#233;pondre. Il me semble parfois que je me suis mis &#224; &#233;crire du th&#233;&#226;tre parce que je le d&#233;testais. Je lisais des &#339;uvres litt&#233;raires, des essais, j'allais au cin&#233;ma avec plaisir. J'&#233;coutais de temps &#224; autre de la musique, je visitais les galeries d'art, mais je n'allais pour ainsi dire jamais au th&#233;&#226;tre. </para></chapitre> <chapitre><titre> Controverses et t&#233;moignages</titre> <para>Je suis para&#238;t-il, un auteur dramatique d'avant-garde. La chose me para&#238;t m&#234;me &#233;vidente puisque je me trouve ici, aux entretiens sur le th&#233;&#226;tre d'avant-garde. Cela est tout &#224; fait officiel. </para> <para>Maintenant, que veut dire avant-garde ? Je ne suis pas docteur en th&#233;&#226;tralogie, ni en philosophie de l'art, &#224; peine ce qu'on appelle un homme de th&#233;&#226;tre. </para></chapitre> <titre>Notes et contre-notes</titre><auteur>Eug&#232;ne Ionesco</auteur> Structure O.O Page 130-144 du livre de P. Rigaux Objets et classes: • Contenu d’un formulaire • Figure géométrique • Nœud d’un fichier XML Méthodes : fonctions de la classe • Création d’un objet • Manipulation de l’objet Exemple simple Classe Personne • Nom • Société Méthodes : • Création d’un object • Affichage de l’objet Exemple et représentation Java Classe Rectangle • Point (x,y) • Hauteur, Largeur Méthodes : • Création d’un rectangle • Affichage d’un rectangle class Rectangle{ int x; int y; int h; int l; public Rectangle(int x, int y, int h, int l){ this.x=x; this.y=y; this.l=l this.h=h;} public void draw(){ System.out.println(……);} public static void main(String args[]){ Rectangle r1=new Rectangle(5,5,10,10); Rectangle r2=new Rectangle(0,0,10,10); r1.draw(); r2.draw();} } Constructeur Main Réalisation Java Fichier Rectangle.java Compilation : javac Rectangle.java Produit Rectangle.class Exécution : java Rectangle Exemple : programme Hello. class Hello{ public static void main(String args[]){ System.out.println( « Bonjour »);} } Classe Formulaire du livre Classe Formulaire Méthodes : fonctions de la classe • Création d’un formulaire • Affichage de l’objet • Transmission de l’objet Instructions: $form =new Formulaire (…..); $form->champs=« xxxx »; Classes XML : DOM Classes Document, Node,…. Programme: AjoutAnnuaire // à un document // Import des classes Java import java.io.*; import javax.xml.parsers.*; import org.w3c.dom.*; import org.apache.xalan.serialize.*; class AjoutAnnuaire {static String nom, prenom, email; public static void main (String args []) {nom = args[0]; prenom = args[1];email = args[2]; if ( (nom != null) && (nom.length() > 0) && (prenom != null) && (prenom.length() > 0) && (email != null) && (email.length() > 0)) { try { // Instanciation du parseur File fdom = new File ("Annuaire.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); // Analyse du document Document dom = builder.parse(fdom); Node elementRacine = dom.getDocumentElement(); // ajoutElement (dom, nom, prenom, email); System.out.println ("Ajout de " + prenom + " " + nom + ". Email : " + email); // Création du nouvel élément Element elPersonne = dom.createElement ("PERSONNE"); // Ajout des trois fils elPersonne.appendChild (creerElementTexte(dom, "NOM", nom)); elPersonne.appendChild (creerElementTexte(dom, "PRENOM", prenom)); elPersonne.appendChild (creerElementTexte(dom, "EMAIL", email)); // Ajout du nouvel élément elementRacine.appendChild (elPersonne); ………………. Importance de XML Standard de documents. • Conception • Echange (EDI) Applications aux documents texte: • • Archives d’un journal Documents non structurés Documents Multimédia: • Audio • • Vidéo Rechercher un segment, un objet… T.D. 1. Finir les stratégies PHP 2. Formulation du projet M1 3. Pour les projets informatiques • • • • D.O.M en XML Structure orientée objet Langage C Extensions C++ et Java Projets 1. Outil query.php • • Afficher le schéma des tables dans une nouvelle fenêtre. Feuilles de style dans l’affichage. 2. Outil FG ( f.php et g.php) pour éviter FTP. • Concevoir une table à 3 champs Nom, type, Programme Qui va stocker dans programme les scripts à tester. Le script f.php lit un Nom et permet d’éditer le programme ou de l’exécuter avec eval($p) ; Projet XML 1. Correcteur XML • PHP with dom • Java with dom • • Interface pour naviguer dans un arbre XML Implémentation du correcteur