Data Mining - DESS ASS, 2002 Christophe PHARÈS Mathieu DECORE **************** * Avant-propos * **************** Pour utiliser notre archive, il faut que la variable d'environnement CLASSPATH contienne au moins les archives suivantes : o Pour Xalan/Xerces : xalan.jar xercesImpl.jar xml-apis.jar o Pour SVG : svg.jar xerces.jar ss_css2.jar js.jar Toutes les commandes indiquées se font à partir du répertoire racine du projet (Data-Mining). Les noms des fichiers XML, DTD, HTML et SVG n'étant définits que dans le Makefile de cette racine (pour des raisons de simplicité de maintenance), lancer une commande make dans un des sous-répertoires du projet se solderait par un échec. Pour plus de simplicité, lancer simplement les commandes à partir du même répertoire, le Makefile se charge du reste. Pour la compilation des fichiers Java, la commande javac est utilisée par défaut. Pour utiliser une autre commande (comme jikes, par exemple), ajouter simplement à chaque appel de make l'option JAVAC=jikes (make JAVAC=jikes). ************************************************ * Création du fichier XML à partir des données * ************************************************ Comme on utilise DOM pour cette partie, afin de générer plus facilement le fichier XML à partir d'un arbre DOM, on a "tronqué" les fichiers de données à 100 accidents, batiments et villes. Ces fichiers se trouvent dans le sous-répertoire S1A/data. Les fichiers de données originaux fonctionnent quand même (la moulinette arrête la lecture des données avant qu'il n'y ait plus de mémoire disponible), mais l'exécution est beaucoup plus longue. Pour générer le fichier XML, taper : ------------------------------------------------------------------------------- $ make xml (cd S1A && make test JAVAC=javac FIC_XML=carte.xml \ FIC_DTD=carte.dtd) javac applixml/Token.java javac applixml/txtToXml.java javac applixml/XmlToTxt.java javac applixml/testTxtToXml.java javac applixml/AppliXML.java ./run_text -OUT carte.xml Getting accidents from files data/accident_sem-100 and data/accident_sem-100 done. Getting buildings from files data/lille_bt_sem-100 and data/lille_bt_sem-100 done. Getting roads from files data/lille_ni_sem-100 and data/lille_ni_sem-100 done. Now building tree... Adding accidents to tree done. Adding buildings to tree done. Adding roads to tree done. Writing output file : carte.xml done. $ ------------------------------------------------------------------------------- Le fichier généré ici s'appelle carte.xml, comme l'indique la dernière ligne (Writing output file : carte.xml done.). Pour générer un fichier XML portant un autre nom, préciser en argument l'option FIC_XML : ------------------------------------------------------------------------------- $ make xml FIC_XML=lille.xml (cd S1A && make test JAVAC=javac FIC_XML=lille.xml \ FIC_DTD=carte.dtd) ./run_text -OUT lille.xml Getting accidents from files data/accident_sem-100 and data/accident_sem-100 done. Getting buildings from files data/lille_bt_sem-100 and data/lille_bt_sem-100 done. Getting roads from files data/lille_ni_sem-100 and data/lille_ni_sem-100 done. Now building tree... Adding accidents to tree done. Adding buildings to tree done. Adding roads to tree done. Writing output file : lille.xml done. $ ------------------------------------------------------------------------------- Une interface graphique est disponible pour faciliter l'utilisation de la moulinette. Pour une utilisation rapide, on préconise néanmoins la précédente méthode (make xml). Pour avoir une interface graphique (utilisant Swing), taper simplement : ------------------------------------------------------------------------------- $ make interface & [2] 56406 (cd S1A && make dom JAVAC=javac FIC_XML=carte.xml \ FIC_DTD=carte.dtd) ./run $ ------------------------------------------------------------------------------- Cliquer sur le boutton "TXT -> XML" (voir welcome.gif). Il y a alors une interface permettant de créer le fichier XML comme tout à l'heure. Pour utiliser les fichiers par défaut, laisser tel quel et cliquer simplement sur "Start" (voir txt2xml.gif). Le fichier généré est carte.xml à la racine du projet (comme pour la méthode utilisant Sax). Cliquer sur "Sortir" pour revenir à l'interface principale. Le DTD de notre fichier XML a un nom fixe, carte.dtd. Il se trouve à la racine du projet. **************************** * Parser notre fichier XML * **************************** Pour parser notre fichier XML, on peut utiliser soit DOM, soit SAX. La version avec DOM permet l'affichage d'une interface graphique, la version avec SAX se fait en mode texte. +------------------+ | Version avec SAX | +------------------+ Pour utiliser la version avec SAX, taper simplement : ------------------------------------------------------------------------------- $ make sax (cd S1D && make test JAVAC=javac FIC_XML=carte.xml \ FIC_DTD=carte.dtd) cp ../carte.xml . cp ../carte.dtd . java Sax carte.xml Balise cartes Balise accident Balise id : 0 Balise nombrePersonnes : Nb Pers 6 Balise lieu : VoiePublic Balise localisation : Localisation 0 Balise nuage Balise point attribut de point : x valeur : 2362527 attribut de point : y valeur : 1002280 Balise point attribut de point : x valeur : 2362557 attribut de point : y valeur : 1021707 Balise point attribut de point : x valeur : 2367206 attribut de point : y valeur : 1016190 Balise point attribut de point : x valeur : 2361008 attribut de point : y valeur : 1115500 Balise point attribut de point : x valeur : 2365152 attribut de point : y valeur : 1007646 Balise point attribut de point : x valeur : 2374944 attribut de point : y valeur : 1340045 Balise point attribut de point : x valeur : 2031845 attribut de point : y valeur : 1977906 Balise point attribut de point : x valeur : 2031845 attribut de point : y valeur : 1977906 Balise point attribut de point : x valeur : 2031845 attribut de point : y valeur : 1977906 Balise point attribut de point : x valeur : 2031845 attribut de point : y valeur : 1977906 Balise accident Balise id : 1 Balise nombrePersonnes : Nb Pers 9 Balise lieu : Carrefour Balise localisation : Localisation 1 Balise nuage [...] Balise route Balise id : 99 Balise debit : Debit 4 Balise type : L Balise distance : Distance 99 Balise ligne Balise point attribut de point : x valeur : 237049 attribut de point : y valeur : 513154 Balise point attribut de point : x valeur : 241449 attribut de point : y valeur : 508509 $ ------------------------------------------------------------------------------- Comme précédemment, l'option FIC_XML passée à make permet de préciser quel fichier XML on veut parser : ------------------------------------------------------------------------------- $ make sax FIC_XML=lille.xml (cd S1D && make test JAVAC=javac FIC_XML=lille.xml \ FIC_DTD=carte.dtd) cp ../lille.xml . cp ../carte.dtd . java Sax lille.xml Balise cartes Balise accident Balise id : 0 Balise nombrePersonnes : Nb Pers 6 Balise lieu : VoiePublic Balise localisation : Localisation 0 Balise nuage Balise point attribut de point : x valeur : 2362527 attribut de point : y valeur : 1002280 Balise point attribut de point : x valeur : 2362557 attribut de point : y valeur : 1021707 [...] $ ------------------------------------------------------------------------------- +------------------+ | Version avec DOM | +------------------+ La version avec DOM utilise une interface graphique. Pour avoir une interface graphique (utilisant Swing), taper simplement : ------------------------------------------------------------------------------- $ make interface & [2] 56406 (cd S1A && make dom JAVAC=javac FIC_XML=carte.xml \ FIC_DTD=carte.dtd) ./run $ ------------------------------------------------------------------------------- Cliquer sur le boutton "XML -> TXT" (voir welcome.gif). Il y a alors une interface permettant de visualiser le fichier XML. Pour utilisr le fichier précédemment générer, laisser tel quel le nom du fichier XML (voir xml2txt.gif). Une fois le bouton "Start" appuyé, et si les noms des fichiers sont corrects (auquel cas aucune exception de type java.io.FileNotFoundException n'est générée) s'affiche l'interface graphique. Cliquer alors sur l'onglet "Route", puis sur les autres onglets. Cliquer sur "Sortir" pour revenir à l'interface principale. ************************ * Calcul du barycentre * ************************ Le calcul du barycentre se fait dans la version DOM/Swing. Pour l'utiliser, suivre les instructions précédentes (version avec DOM), et l'affichage du barycentre se fait sur le dernier panneau affiché. ****************************** * Validation du document XML * ****************************** La validation du document XML se fait en tapant : ------------------------------------------------------------------------------- $ make validate (cd S2A && make test JAVAC=javac FIC_XML=carte.xml \ FIC_DTD=carte.dtd) cp ../carte.xml . cp ../carte.dtd . java Validate carte.xml VALID carte.xml ================SUMMARY============================= 1 file is valid. $ ------------------------------------------------------------------------------- et comme toujours on peut specifier le nom du fichier XML à valider : ------------------------------------------------------------------------------- $ make validate FIC_XML=lille.xml (cd S2A && make test JAVAC=javac FIC_XML=lille.xml \ FIC_DTD=carte.dtd) cp ../lille.xml . cp ../carte.dtd . java Validate lille.xml VALID lille.xml ================SUMMARY============================= 1 file is valid. $ ------------------------------------------------------------------------------- La commande xmllint --valid --noout ./carte.xml permet également de valider notre document XML. ************************************************* * Generation de la version HTML du document XML * ************************************************* Une version HTML de notre document XML peut être générée simplement : ------------------------------------------------------------------------------- $ make html java org.apache.xalan.xslt.Process -IN carte.xml -XSL carte.xsl -OUT carte.html $ ------------------------------------------------------------------------------- Le document généré est le fichier carte.html. On peut spécifier le nom du fichier XML à valider : ------------------------------------------------------------------------------- $ make html FIC_XML=lille.xml java org.apache.xalan.xslt.Process -IN lille.xml -XSL carte.xsl -OUT carte.html $ ------------------------------------------------------------------------------- ************************** * Générer un fichier SVG * ************************** Pour générer un document SVG à partir de notre document XML, taper : ------------------------------------------------------------------------------- $ make svg (cd S2C && make test JAVAC=javac FIC_XML=carte.xml \ FIC_DTD=carte.dtd FIC_SVG=carte.svg) javac Svg.java cp ../carte.xml . cp ../carte.dtd . java Svg carte.xml -OUT ../carte.svg $ ------------------------------------------------------------------------------- Le document SVG ainsi généré se nomme carte.svg à la racine du projet. On peut le visualier simplement en tapant : ------------------------------------------------------------------------------- $ make visu java org.csiro.svg.viewer.Viewer carte.svg $ ------------------------------------------------------------------------------- Il s'affiche alors l'interface graphique (si les bons fichiers ".jar" sont dans le CLASSPATH) (cf. svg.gif). Noter qu'un astuce a été utilisée afin de pouvoir visualiser notre fichier : comme les coordonnées sont grandes, chaque coordonné supérieure à 1000 est convertie en son modulo 1000 dans le fichier SVG. Pour désactiver ceci, enlever le commentaire à la ligne suivante dans le fichier S2C/Svg.java : // boolean Mod1000 = false; Une image au format JPEG peut être obtenue en tapant : ------------------------------------------------------------------------------- $ make jpeg java org.csiro.svg.tools.SvgToJpegConverter carte.svg carte.jpeg $ ------------------------------------------------------------------------------- L'image se nomme alors carte.jpeg. ****************** * Utiliser XPath * ****************** Pour utiliser XPath, taper simplement : ------------------------------------------------------------------------------- $ make xpath | less $ ------------------------------------------------------------------------------- Les requettes XPath suivantes sont passées (chercher la chaîne de caractères "-*-" pour passer d'une requette à l'autre) : o -*- Tous le fichier XML -*- Loading classes, parsing carte.xml, and setting up serializer Querying DOM using / 0 Nb Pers 6 VoiePublic Localisation 0 1 Nb Pers 9 Carrefour Localisation 1 o -*- Les id de toutes les routes -*- Loading classes, parsing carte.xml, and setting up serializer Querying DOM using /cartes/route/id 0 1 2 3 4 5 6 7 8 o -*- Les id de toutes les balises -*- Loading classes, parsing carte.xml, and setting up serializer Querying DOM using /cartes/*/id 0 1 2 3 4 5 6 7 8 9 10 11 o -*- Le huitieme accident -*- Loading classes, parsing carte.xml, and setting up serializer Querying DOM using /cartes/accident[8] 7 Nb Pers 2 Trotoire Localisation 7 o -*- Tous les nuages ayant au moins un point avec x=2576590 -*- Loading classes, parsing carte.xml, and setting up serializer Querying DOM using //nuage/point[@x=2576590]