XML::Twig pour les Nuls ● FPW::Lyon 2007 - mirod FPW::Lyon 2007mirod.

Slides:



Advertisements
Présentations similaires
XML Plan du cours Introduction au fichier XML
Advertisements

FAIRE SA BIBLIOGRAPHIE DE THESE AVEC ZOTERO Traitements de texte pris en compte: Word et LibreOffice.
GCstar Gestionnaire de collections personnelles Christian Jodar (Tian)
1 Après 3 séances ● Utilisation du système Linux – Il faut maîtriser l'utilisation de la souris (« copy/paste » des textes donnés) – Utilisation de la.
Ghost (Création d'image Système)‏ C.R.I.P.T Informatique (BOYER Jérôme)‏
1 /31 Boîte à outils d'annotations de cartes et de textes dans un contexte d'application Web.
AID - Recherches - Stéphanie Vial & Patrick Johner Page 1 Journée 6 Pour une veille documentaire ou bibliographique.
Toulibre : présentation de... par Rémy Sanchez +.
1 Après 5 séances ● Utilisation du système Linux – Il faut maîtriser l'utilisation de la souris (« copy/paste » des textes donnés) – Utilisation de la.
A trop vouloir se rapprocher de ceux qui sont loin, on s'éloigne ou s'isole ? de ceux qui sont proches Et c'est avec un portable qu'on a pris ces photos.
1- Régles de normalisation 2ème partie : normalisation Modèle Conceptuel des Données 2- Les Formes Normales 3- Dépendances Fonctionnelles 4- Recap - Méthodologie.
1 Rapide introduction à la compilation d'un programme « Use the source, Luke! » David Mentré.
La Filière Médicale. Une guerre nommée PACES -Plus de inscrits chaque année à Marseille -Une année très difficile intellectuellement, moralement,
CUCUMBER Behavior developpement driven tool Théo STEIN Audrey LANCE Quentin SERVEAUX 1.
Le DOM Le Document Object Model (DOM) est une interface de programmation pour les documents HTML et XML Il fournit une représentation structurée du document.
Chainedit 10èmes Rencontres Mondiales du Logiciel Libre Nantes – 10 juillet 2009 Frédéric Hannouche - CIRM.
Et si je fabriquais des jeans… Le Parfémi. Table des matières L’origine du nom… D’où vient.
Cours Initiation aux Bases De Données
Eléments de bases requis
Les étapes de la recherche documentaire. Étape 1 : cerner le sujet  Cerner le sujet par des questionnements = délimitation du sujet  Faire une liste.
Les tables de multiplication au ce1 « Une construction réfléchie des tables favorise-t-elle leur mémorisation et leurs transferts ? » DOUARCHE Vaéa.
Asynchronous Javascript And Xml
L’aventure de Mme Muir  Joseph Mankiewicz 3 C.
Environnement de développement des BD
L’art de dialoguer avec un texte
Environnement du développement de BD ORACLE REPORTS 10g
Créez votre entreprise Partie 4
J’ai un bug, qu’est-ce que je peux faire ? Samuel Thibault 7 Mars 2017
Enseigner la physique-chimie au cycle 4 dans l'objectif de la maîtrise du socle commun par les élèves. Stage du 30 mars /12 1.
Tables référentielles
Javadoc et débogueur Semaine 03 Version A17.
Status logiciel 29 avril 2010.
Les ados aux poches trouées
Trucs pour faire une demande de financement
Principes de programmation (suite)
Montée au bloc .ATTENTION !!!Nous devons d'abord apprendre à tomber..
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
Langages de programmation TP10
Blagues sur le mariage.
CULTURETHEQUE VOTRE BIBLIOTHEQUE NUMERIQUE
Programmation système
Le mouvement indépendantiste de Québec. Québec La Province de Québec C’est à l’est du Canada Une grande partie de l’industrie canadienne se trouve au.
Le site FORUM liste de diffusion DROPBOX GESTAPRC Travail collaboratif
REVUE DE LITTERATURE. Introduction Première partie majeure dans la rédaction du mémoire, la réalisation d’une revue de littérature consiste à effectuer.
le de un être et à il avoir ne je son que se qui ce dans en
AJAX et JQuery
Création Base de données centralisée au Lycée Stendhal
Talent de leader Webinaire 7 : CESSATION D’EMPLOI Par : philippe lévesque-groleau, m.sc., crha 14 NOVEMBRE 2017.
Management.
Frais d’accueil en Foyer d’Hébergement
Catherine Cyrot - bibliothèques numériques - Cours 5
Catherine Cyrot - bibliothèques numériques - Cours 5
Cahier du nageur (2ème année)
20 Données semi-structurées et XML
Logiciel de présentation
DESIGN PATTERN BUILDER KADRI LOUBNA CHARMATI SEWSEN.
Programmation Web : Introduction à XML
Bilan de projet pour [Nom du projet]
Programmation Web : DOM en PHP
PLATE FORME DE GESTION ÉLECTRONIQUE DE DOCUMENTS Présenté par: Amine LARIBI.
Comment la faire ? Quand la faire ?
Réflexion sur les écrans Séquence avec les élèves
Les TICE à l’école élémentaire Contribution à l’étude des compétences et des représentations des élèves de l’école élémentaire concernant les nouvelles.
Formation Dragon NaturallySpeaking
Projet randonnée-escalade 6D
Catherine Cyrot - bibliothèques numériques - Cours 5
Insérer les femmes dans le programme d’Histoire
PRÉSENTATION ANNÉE SECONDES
LINQ. LINQ (Language-Integrated Query) est une nouveauté du.NET Framework 3.5 C’est le nom d’un ensemble de technologies basé sur l’intégration de fonctions.
Site web, Ce qu’il faut savoir ?
Transcription de la présentation:

XML::Twig pour les Nuls ● FPW::Lyon mirod FPW::Lyon 2007mirod

pendant votre sieste au programme: un peu de code pendant que vous êtes encore réveillés un peu d'histoire ou les aventures d'XML::Twig à travers les âges

un peu de XML du XML venu des ressources humaines (c'est trop facile de se moquer du marketing) Structure: db: employé+ employé: état-civil, emploi état-civil: prénom, nom, naissance, nationalité emploi: poste+ poste: nom, durée, paye paye: (salaire|bonus)+ salaire: durée, montant (attributs) bonus: date, montant (attributs), texte

quelques “crochets pointus” Pierre Duteil FR Programmeur – courant menace de départ...

un premier bout de code #!/usr/bin/perl -CSD # sort les nom, intitulés de poste et salaires de tous les employés # utilise un style DOM (charge tout le XML avant de se mettre à bosser) use strict; use warnings; use utf8; use XML::Twig; my $twig= XML::Twig->parse( "hr_data.xml");

le Modèle Objet de XML::Twig 2 types d'objets le document: XML::Twig les éléments: XML::Twig::Elt les textes sont dans des éléments #PCDATA les commentaires et processing instructions sont dans des éléments #COMMENT et #PI les attributs ne sont pas des objets, mais sont accessibles à partir de leur élément (bon, je triche, il y a d'autres classes, mais c'est pour ceux qui utilisent des DTD, il en reste 4 et ils sont pas là)

oh, un arbre documen t db employé état-civil prénom nom naissanc e nationalit é #PCDAT A Pierre #PCDAT A Duteil #PCDAT A #PCDAT A FR id: e0001 emploi id: e0002

revenons au code #!/usr/bin/perl -CSD # sort les nom, intitulés de poste et salaires de tous les employés # utilise un style DOM (charge tout le XML avant de se mettre à bosser) use strct; use warnings; use utf8; use XML::Twig; my $twig= XML::Twig->parse( "hr_data.xml"); foreach my $employé ($twig->root->children( 'employé')) { my $état_civil= $employé->first_child( 'état-civil'); my $poste= $employé->first_child( 'emploi')->first_child( 'poste'); my $salaire= $poste->first_child( 'paye') ->first_child( 'salaire') ->att( 'montant'); printf "%s, %s (%s): €%d\n", $état_civil->field( 'nom'), $état_civil->field( 'prénom'), $poste->field( 'nom'), $salaire ; }

ça marche! $./hr1 Duteil, Pierre (Programmeur): €1500 Forgeron, Jean (Chef de service): €2500 Forgeron, Jules (Chef de département): €3500 Dufour, Jerôme (Programmeur): €1500 Schmoltz, John (Chef Comptable): €4500 Au moins pendant les tests!

DOM - SAX - Twig Traitement en mode arborescent c'est ce quon vient de voir normalisé par le DOM Traitement évènementiel traitement au fur et à mesure du parsing normalisé par SAX Twig accès à l'arbre d'un élément dès qu'il est parsé handler appelé quand le tag fermant est parsé ni DOM ni SAX

ça marche encore mieux! #!/usr/bin/perl -CSD # sort les nom, intitulés de poste et salaires de tous les employés # utilise un handler (chaque employé est traité puis purgé) use strict; use warnings; use utf8; use XML::Twig; my $twig= XML::Twig->new( twig_handlers => { employé => \&employé }) ->parsefile( "hr_data.xml"); sub employé { my( $twig, my $état_civil= $employé->first_child( 'état-civil'); my $poste= $employé->first_child( 'emploi')->first_child( 'poste'); my $salaire= $poste->first_child( 'paye')->first_child( 'salaire') ->att( 'montant'); printf "%s, %s (%s): €%d\n", $état_civil->field( 'nom'), $état_civil->field( 'prénom'), $poste->field( 'nom'), $salaire; $twig->purge; }

Toujours plus de handlers #!/usr/bin/perl -CSD # sort les nom, intitulés de poste et salaires de tous les employés # les salaires sont convertis en KF/ans use strict; use warnings; use utf8; use XML::Twig; my $twig= XML::Twig->new( twig_handlers => { employé => \&employé, salaire => \&salaire, } ) ->parsefile( "hr_data.xml"); sub employé {... } sub salaire { my( $twig, my $montant= $salaire->att( 'montant'); $montant= sprintf( "%d Kf", $montant * 6.65 * 12 / 1000); $salaire->set_att( montant => $montant); }

Ca marche toujours $./hr3 Duteil, Pierre (Programmeur): 119 Kf Forgeron, Jean (Chef de service): 199 Kf Forgeron, Jules (Chef de département): 279 Kf Dufour, Jerôme (Programmeur): 119 Kf Schmoltz, John (Chef Comptable): 359 Kf Bieng sûr ça convertit tous les salaires

déclencheur de handler #!/usr/bin/perl -CSD # sort les nom, intitulés de poste et salaires de tous les employés # les salaires sont convertis en KF/ans # seuls les salaires courants sont convertis use strict; use warnings; use utf8; use XML::Twig; my $twig= XML::Twig->new( twig_handlers => { employé => \&employé, => \&salaire, } ) ->parsefile( "hr_data.xml"); sub employé {... } sub salaire { my( $twig, my $montant_euro= $salaire->att( 'montant'); my $montant_kf= sprintf( "%d Kf", $montant_euro * 6.65 * 12 / 1000); $salaire->set_att( montant => $montant_kf); warn "W salaire converti: €$montant_euro/mois to $montant_kf/an\n"; }

plus efficace! $./hr4 W salaire converti: €1500/mois to 119 Kf/an Duteil, Pierre (Programmeur): 119 Kf W salaire converti: €2500/mois to 199 Kf/an Forgeron, Jean (Chef de service): 199 Kf W salaire converti: €3500/mois to 279 Kf/an Forgeron, Jules (Chef de département): 279 Kf W salaire converti: €1500/mois to 119 Kf/an Dufour, Jerôme (Programmeur): 119 Kf W salaire converti: €4500/mois to 359 Kf/an Schmoltz, John (Chef Comptable): 359 Kf

d'autres méthodes utiles cut, paste, print, flush prefix, suffix, insert_new_element erase, wrap descendants, ancestors, inherit_att finish, finish_now, simplify twig_roots: autre mode de traitement twig_roots => { salaire => \&salaire }, twig_print_outside_roots => 1, imprimer le salaire dans le handler: $salaire->print plein, PLEIN d'autres (certains disent trop)

en vrac, plus de pub Quelques particularités utiles: gestion des blancs non significatifs gestion des commentaires, PI possibilité de rester dans un encodage autre que l'UTF8 moteur Xpath piqué à XML::XPath support des espaces de noms Le but du module est d'être pratique, et de respecter le principe de moindre surprise. Pas forcément de faire toujours plaisir aux extrémistes de l'XML. “XML, The Perl Way”

en prime (et pour le même prix!) XML::Twig est livré avec quelques outils utiles: xml_grep un grep utilisant XPath xml_split / xml_merge découpe, rassemble, de gros fichiers XML en une suite de fichiers plus petits xml_pp pretty print de documents XML

au final XML::Twig fait tout, du sol au plafond! (au moins chez moi!) transformer du XML en XML c'est même fait pour ça extraire des donnèes de XML au cas où vous viendriez de vous réveiller pareil avec du XHTML ou même du HTML il utilise HTML::TreeBuilder pour convertir le HTML en XML convertir divers formats en XML 2 étapes: convertir en XML “grossier”, puis structuration de ce XML à l'aide de méthodes spécialisées

LA ressource xmltwig.com (et perlmonks, la mailing liste perlxml, cpanforum, les newsgroups) Google Alert

si vous n'êtes pas convaincus Il y a d'autres bons modules XML::LibXML D'autres qui plaisent à certains XML::Simple XML::SAX XML::Rules XML::Parser Mais ne touchez pas à XML::XPath XML::DOM

un peu d'histoire l'histoire de XML::Twig en prime, une récap des 10 dernières années du monde Perl Ah oui, et développer un module, qu'est-ce que ça veut dire.

1998 Modules XML: XML::Parser, XML::DOM, XML::Grove, XML::Simple Rieng pour traiter de gros fichiers (la mémoire était chère à l'époque) The Perl Conference 3.0 Réaction générale à mes élucubrations: “Show us some code”

si tôt dit, si tôt fait A l'époque c'était facile peu de tests documentation... légère perl module simple peu de dépendances La vie était belle

depuis 2 versions majeures de Perl (10 sous-versions) (3 traitements d'unicode différents) il faut tout tester (et le prouver) le module se complexifie (beaucoup!) garder la compatibilité devient très compliqué mais de plus en plus d'aides

Perl support unicode: 5.005: rieng 5.6.*: ça commence 5.8.0: bon support (clés de hash,regexps), mais pleins de... idiosyncrasies : mieux pour les reste, curieusement peu d'impacts de mon point de vue l'évolution du langage s'est fait largement à travers ses modules et sa culture

ça me prend les testes! Un changement de culture incroyable The Perl Phalanx Devel::Cover Passage de 50% à 90% de couverture 3 mois, quelques centaines de tests des années à souffrir des conséquences écrire des tests portables, c'est DUR Mais ça PAYE!

CPAN Testers L'évolution marquante de l'année Permet d'avoir les résultats des tests sur des configurations extrémement variées: différents OS différentes versions de Perl divers jeux de modules installés

autres aides RT pas assez utilisé Perlmonks a largement remplacé les newsgroups CPAN ratings pas assez utilisé search.cpan.org liens vers quasiment tout le reste cpan forums, annot cpan, cpants

l'aide la plus utile les UTILISATEURS “normaux” auteurs de modules basés sur XML::Twig donnent des idées servent de cobayes me forcent à rester propre c'est chiant mais ça paye des fois ils me font peur!

est-ce que ça vaut le coup? OUI! un module utilisé c'est sympa ça force à se tenir au courant à bien réfléchir aux interfaces ça fait plaisir c'est du boulot des fois c'est très chiant ça permet de causer dans les conférences