Programmation avec PERL

 

 

 

 

 

 

 

 

 

 

Henri Fabiola

&

 Lordonnois Claire

 

 

 

 

 

 

 

 

 

 

Sommaire

 

I / PERL : introduction. 4

1.1 / Programme n°1 : calculette euro - PERL/TK. 4

1.1.1 / Programme PERL : calcEuro.pl 4

1.1.1.1 / Code initial 4

1.1.1.2/ Structure du widget    Frame1. 5

1.1.1.3 / Transformation du fichier initial 6

1.2 / Programme n°2 : manipulation & constitution de nouveaux  corpus 12

1.2.1 / Construire un programme qui lit un état quelconque du corpus Prématurés et compte le nombre de ligne du fichier lu. 13

1.2.2 / Construire un programme qui lit un état quelconque du corpus et compte le nombre de mots du fichier lu : pour obtenir le nombre de mots d’une phrase, il suffit de compter le nombre d’espaces et d’ajouter 1. 16

1.3 / Programme n° 3 : construction de dictionnaires 19

1.3.1 / Construire un (ou plusieurs) programme(s) qui doit lire les corpus bébés et infirmières et construire pour chacun de ces corpus un dictionnaire contenant toutes les formes graphiques de ces corpus. 19

1.3.1.1 / Essai 1. 19

1.3.1.2 / Essai 2. 21

1.4 / Programme n° 4 : constitution de corpus 25

Introduction. 25

1.4.1 / Construire un programme qui prend en entrée le fichier p96.bal et produit une version HTML de ce fichier 25

1.4.2 / Construire un programme qui prend en entrée le fichier p96.bal et produit une version HTML de ce fichier. Les noms des champs devront apparaître dans la version HTMLproduite. 27

II / PERL / XML. 29

2.1 / Programmation objet avec PERL. 29

Rappel sur la programmation objet en PERL. 29

2.1.1 / Test du code patient.pm. 30

2.1.2 / Création d’un «package» word.pm. 33

2.1.3 / On complètera ce modèle par des éléments supplémentaires 35

2.1.4 / Créer un package « Personne » : gestion d ’un carnet d ’adresses 38

2.1.4.1 / Première classe d’objets : person.pm. 38

2.1.4.2 / Deuxième classe d’objets : person2.pm. 41

2.1.4.3 / Troisième classe d’objets : person3.pm. 44

2.2 / XML :: Parser 47

2.2.1 / Tester le code fourni dans le document de travail 47

2.2.1.1 / Programme PERL : useXMLParser-helloWord.pl 47

2.2.1.2 / Programme PERL : useXMLParser0.pl 49

2.2.1.3 / Programme PERL : useXMLParser1.pl 53

2.2.1.4 / Programme PERL : useXMLParser2.pl 57

2.2.1.5 / Programme PERL : useXMLParserHandler-msfaq.pl 60

2.2.1.6 / Programme PERL : useXMLParserWithTk.pl 63

Commentaires : 65

2.2.1.7 / Programme PERL : useXMLParser3.pl 67

2.2.1.8 / Application n°1 : 76

2.2.1.9 / Application n°2: 78

2.2.2.0/ Application n°3 : 80

2.2.2.1 / Application n°4 : 82

III / XML::Parser::PerlSAX. 84

IV / XML::Xpath. 88

4.1 / Programme useXMLXPath.pl 88

4.2 / Programme n°2. 90

4.2.1 / Test du code initial 90

4.2.2 / Tests avec le Petit Prince. 92

4.2.2.1 / Rechercher toutes les traductions en tchèque. 92

4.2.2.2 / Rechercher la traduction en tchèque de la 2ème phrase. 93

4.2.2.3 / Rechercher la traduction en français de la 2ème phrase. 94

4.2.2.4 / Rechercher toutes les traductions en français des phrases dites par le narrateur 95

4.2.2.5 / Même chose en ne gardant que le texte. 98

4.2.2.6 / Rechercher toutes les phrases (traduction en français uniquement) du narrateur qui répondent à des questions du petit prince (phrases précédentes prononcées par le petit prince et comportant un caractère '?') 99

4.2.2.7 / Même chose pour les réponses du Petit Prince au narrateur 100

VIII / XML::DOM. 101

Introduction. 101

IX / PERL/TK & XML : Projet informatique. 103

Introduction. 103

9.1 / Les objectifs 103

9.2 / Les sources 105

9.3 / La réalisation. 108

9.4 / Les perspectives 110

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Table des Illustrations

 

 

 

 

Programme 1 - calcEuro.pl. 7

Programme 2 - calcEuro.pl. 9

Programme 3 - Conversion Dollar/Euro.. 11

Programme 4 - Padx & Pady.. 13

Programme 5 - Compte_ligne1.pl. 15

Programme 6 - Compte_ligne2.pl. 17

Programme 7 - Compte_mot.pl. 19

Programme 8 - dico.pl. 21

Programme 9 - dico3.pl. 23

Programme 10 - sortie_html.pl. 27

Programme 11- essai.pl. 29

Programme 12 - patient.pm.. 32

Programme 13 - usePatient.pl. 33

Programme 14- word.pm.. 35

Programme 15 - useWord1.pl. 36

Programme 16- useWord1.pl. 39

Programme 17 - person.pm.. 40

Programme 18 – usePerson1.pl. 41

Programme 19 - person2.pm.. 43

Programme 20 - usePerson2.pl. 44

Programme 21- person3.pm.. 46

Programme 22 - usePerson3.pl. 47

Programme 23 - useXMLParser0.pl. 51

Programme 24 - useXMLParser0.pl modifié. 53

Programme 25 - useXMLParser1.pl. 55

Programme 26 -  useXMLParser1bis.pl. 57

Programme 27 - useXMLParser2.pl modifié. 60

Programme 28 - useXMLParserHandler-msfaq.pl modifié. 63

Programme 29 - useXMLParserWithTK.pl. 65

Programme 30 - useXMLParserWithTK. pl modifié. 67

Programme 31 - useXMLParser3.pl. 69

Programme 32 - useXMLParser3b.pl. 71

Programme 33 - useXMLParser3ter.pl. 73

Programme 34-useXMLParser4four.pl. 76

Programme 35 - addOneID.pl. 78

Programme 36 - renameTAGNAME.pl. 80

Programme 37- articles2HTML.pl. 82

Programme 38- articles2HTML-2.pl. 84

Programme 39-useXMLXPath.pl. 90

Programme 40 -  ex06_xpath.pl. 92

Programme 41-useXMLDom.pl. 103

Programme 42 - dico_morisyen.xml. 106

Programme 43 - listbox.pl. 107

Programme 44 - Diksyoner-Kreol-Morisyen.pl. 110

 

 

 

 

 

Figure 1- Résultat calcEuro.pl. 9

Figure 2 - Ajout du champ Dollars. 11

Figure 3 - Conversion Dollars/Euro.. 13

Figure 4 - Résultat Padx & Pady.. 15

Figure 5 - Résultat Compte_ligne1.pl. 17

Figure 6- Résultat Compte_ligne2.pl. 19

Figure 7 - Résultat Compte_mot.pl. 21

Figure 8 - Résultat dico.pl. 23

Figure 9 - Résultat dico3.pl. 25

Figure 10 - Résultat dico3.pl - dico.txt. 26

Figure 11 - Résultat dico3.pl - dico2.txt. 27

Figure 12- résultat de sortie_html.pl. 29

Figure 13 - résultat de essai.pl. 31

Figure 14- résultat usePatient.pl. 35

Figure 15- résultat useWord1.pl. 39

Figure 16 - résultat usePerson1.pl. 43

Figure 17 - résultat usePerson2.pl. 46

Figure 18- résultat usePerson3.pl. 49

Figure 19 - résultat useXMLParser-helloWord.pl. 50

Figure 20 - résultat avec erreur.. 51

Figure 21- résultat useXMLParser0.pl. 53

Figure 22 - résultat après modification.. 55

Figure 23 - résultat useXMLParser1.pl. 57

Figure 24 - résultat useXMLParser1bis.pl. 59

Figure 25 - résultat useXMLParser2.pl. 60

Figure 26 - résultat useXMLParser2.pl avec modification.. 62

Figure 27 - résultat useXMLParserHandler-msfaq.pl. 63

Figure 28 - résultat avec modification.. 65

Figure 29 - Résultat useXMLParserWithTK.pl. 67

Figure 30 - Résultat useXMLParserWithTK.pl modifié. 69

Figure 31 - Résultat useParser3.pl. 71

Figure 32- résultat useXMLParser3b.pl. 73

Figure 33- résultat html useXMLParser3ter.pl. 75

Figure 34 - résultat txt useXMLParser3ter.pl. 76

Figure 35-Résultat useXMLParser4four.pl. 78

Figure 36- résultat addOneID.pl. 80

Figure 37 - résultat renameTAGNAME.pl. 82

Figure 38- résultat articles2HTML.pl. 84

Figure 39 - résultat articles2HTML-2.pl. 86

Figure 40-Résultat useXMLXPath.pl. 92

Figure 41- résultat ex06_xpath.pl. 94

Figure 42- Traductions tchèques. 95

Figure 43_Traduction en tchèque de la 2ème phrase. 96

Figure 44-Traduction en français de la 2ème phrase. 97

Figure 45-Traductions en français des phrases dites par le narrateur 1. 98

Figure 46-Traductions en français des phrases dites par le narrateur 2. 99

Figure 47-Traductions en français des phrases dites par le narrateur 3. 100

Figure 48-Traductions en français des phrases dites par le narrateur / texte seulement. 101

Figure 49-Phrases du narrateur qui répondent à des questions du petit prince. 102

Figure 50-Phrases du petit prince  qui répondent à des questions du narrateur.. 103

Figure 51-résultat useXMLDom.pl. 105

Figure 52 - Diksyoner Kreol Morisyen Prototype. 106

Figure 53 - Résultat listbox.pl. 109

Figure 54 - Résultat Diksyoner-Kreol-Morisyen.pl. 112

 

 

 

 

 

 

 

 

 

 

 

I / PERL : introduction

1.1 / Programme n°1 : calculette euro - PERL/TK

1.1.1 / Programme PERL : calcEuro.pl

1.1.1.1 / Code initial

 

Programme 1 - calcEuro.pl

 

 

 

 

 

 

 

 

 

 

1.1.1.2/ Structure du widget   Frame1

 

 

MainWindow

 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


* Résultat de la commande :

 

 

Figure 1- Résultat calcEuro.pl

 

 

1.1.1.3 / Transformation du fichier initial

 

*  Ajout d'un champs Dollars :

 

Code :

 

Attention ! Nous avons juste ajouté des objets. Nous n'avons pas introduit de calcul de conversion.

 

 

Programme 2 - calcEuro.pl

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 2 - Ajout du champ Dollars

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

*  Création de la conversion  $ =>euro correspondante :

 

 

 

Code :

 

 

Programme 3 - Conversion Dollar/Euro

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 3 - Conversion Dollars/Euro

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* Essai sur les "padx" et "pady"

 

Code :

 

Programme 4 - Padx & Pady

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 4 - Résultat Padx & Pady

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.2 / Programme n°2 : manipulation & constitution de nouveaux  corpus

 

 

1.2.1 / Construire un programme qui lit un état quelconque du corpus Prématurés et compte le nombre de ligne du fichier lu

 

 

Suite à quelques problèmes de réinstallation d'EMACS, nous avons commencé ces programmes sous WORDPAD. L'exécution s'est faite sous CYGWIN B20 via la commande : perl programme.pl fichier_travail.txt fichier_resultat.txt

 

Fichiers de travail : p96inf.txt

Programme PERL :  Compte_ligne1.pl

Code :

 

 

Programme 5 - Compte_ligne1.pl

 

 

Fichiers de résultats : ligne.txt

 

Ce programme  numérote toutes les lignes y compris les lignes vides; et ce à cause de la variable $i qui est en dehors de la condition IF.

 

 

Figure 5 - Résultat Compte_ligne1.pl

 

 

 

 

 

 

 

 

 

 

 

 

Fichiers de travail : p96inf.txt

 

Programme PERL : Compte_ligne2.pl

 

Code :

 

Programme 6 - Compte_ligne2.pl

 
 
 
 
 
 
 

 

 

 
Fichiers de résultats : ligne2.txt

 

 

Figure 6- Résultat Compte_ligne2.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.2.2 / Construire un programme qui lit un état quelconque du corpus et compte le nombre de mots du fichier lu : pour obtenir le nombre de mots d’une phrase, il suffit de compter le nombre d’espaces et d’ajouter 1.

 

 

 

Fichiers de travail : p96inf.txt

 

Programme PERL : Compte_mot.pl

 

Code :

 

Programme 7 - Compte_mot.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

Fichiers de résultats : ligne3.txt

 

 

Figure 7 - Résultat Compte_mot.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3 / Programme n° 3 : construction de dictionnaires

1.3.1 / Construire un (ou plusieurs) programme(s) qui doit lire les corpus bébés et infirmières et construire pour chacun de ces corpus un dictionnaire contenant toutes les formes graphiques de ces corpus.

 

1.3.1.1 / Essai 1 

Fichiers de travail : p96inf.txt,  p96bb.txt

 

Programme PERL : dico.pl

 

Code :

 

Programme 8 - dico.pl

 

 

 

 

 

 

 

 

 

 

 

Fichier de résultat : test2.txt

 

Figure 8 - Résultat dico.pl

 

 

 

 

 

Commentaires :

 

On constate que le programme dico.pl effectue bien un classement alphanumérique  ligne par ligne et non sur l’ensemble du fichier. Qui plus est, un même mot peut être compté plusieurs fois. Ce programme travaille également sur un fichier et non sur deux.

Il faut donc un fichier qui puisse travailler sue plusieurs fichiers, afficher les résultats dans un seul fichier de sortie, effectuer un classement sur l’ensemble des fichiers et rendre compte des occurrences d’un mot.

 

 

 

 

 

 

 

 

 

 
1.3.1.2 / Essai 2 

Fichiers de travail : p96inf.txt, p96bb.txt

 

Programme PERL : dico3.pl

 

Code :

 

Programme 9 - dico3.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fichier de résultat : test5.txt

 

 

Figure 9 - Résultat dico3.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fichier de résultat : dico1.txt

 

Figure 10 - Résultat dico3.pl - dico.txt

 

 

 

 

 

 

 

 

 

 

 

 

Fichier de résultat : dico2.txt

 

Figure 11 - Résultat dico3.pl - dico2.txt

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.4 / Programme n° 4 : constitution de corpus

Introduction

Cette partie vise à la construction de nouveaux états du corpus à partir de données textuelles diverses. Il s’agira en particulier de voir comment a été construit la version HTML du corpus : i.e.comment passer des fichiers au format TXT vers des fichiers au format HTML.

 

1.4.1 / Construire un programme qui prend en entrée le fichier p96.bal et produit une version HTML de ce fichier

 

Programme PERL : sortie_html.pl

 

Code :

 

 

Programme 10 - sortie_html.pl

 

 

Fichier de résultats : sortie2.txt

 

Figure 12- résultat de sortie_html.pl

 

 

 

 

 

 

 

Commentaires :

 

Ce programme rend en sortie un fichier.html. Cependant, les balises telles que  "<FICHE>" ne pourront être interprêtées par le navigateur. Nous proposons donc de transcrire les balises en code HTML : "<" = "&lt;", ">" = "&gt;"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.4.2 / Construire un programme qui prend en entrée le fichier p96.bal et produit une version HTML de ce fichier. Les noms des champs devront apparaître dans la version HTML produite.

 

Programme PERL : essai.pl

 

Code :

 

 

Programme 11- essai.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fichier de résultats : sortie3.txt

 

Figure 13 - résultat de essai.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II / PERL / XML

 

 

 

2.1 / Programmation objet avec PERL

 

 

Rappel sur la programmation objet en PERL

On associe à un objet des données et des méthodes.

* Un objet est un référence

* une méthode est une procédure

* une classe d ’objets est un package

 

On construit un fichier Perl avec l ’extension pm qui contient la classe d ’objet que l ’on veut définir.

Méthodes particulières

* new : constructeur d ’objet

* destroy : destructeur d ’objet

* bless : rendre l ’objet visible de l ’extérieur

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1.1 / Test du code patient.pm

 

* Ajout de la fonction "visite"

 

Code : patient.pm

 

 

Programme 12 - patient.pm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code : usepatient.pl

 

 

 

Programme 13 - usePatient.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fichier de résultat :

 

 

Figure 14- résultat usePatient.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1.2 / Création d’un «package» word.pm     

Code : word.pm

 

Programme 14- word.pm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code : UseWord1.pl

 

Programme 15 - useWord1.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1.3 / On complètera ce modèle par des éléments supplémentaires

* Ajout de la fonction " conjuguefutur"

 

Code : word.pm

 

           

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fichier de résultat :

 

 

Figure 15- résultat useWord1.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code : useWord1.pm

 

 

 

 

Programme 16- useWord1.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1.4 / Créer un package « Personne » : gestion d ’un carnet d ’adresses

2.1.4.1 / Première classe d’objets : person.pm

 

code1 : person.pm

 

Programme 17 - person.pm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code2 : usePerson1.pl

 

Programme 18 – usePerson1.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 16 - résultat usePerson1.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1.4.2 / Deuxième classe d’objets : person2.pm

 

Code1 : person2.pm

 

Programme 19 - person2.pm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code2 : usePerson2.pl

 

Programme 20 - usePerson2.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 17 - résultat usePerson2.pl

 

 

Commentaires :

 

Ce deuxième programme permet d’afficher des éléments non-définis. En fait, on peut avoir des informations partielles comme des informations complètes.

 

 

 

 

 

 

 

 

 

 

 

 

2.1.4.3 / Troisième classe d’objets : person3.pm

 

 

Code1 : person3.pm

 

 

Programme 21- person3.pm

 

 

 

 

 

Commentaires :

 

On note une nouvelle manière de créer des objets dans la méthode, sub new {}. En effet, dans les deux premiers programmes on utilisait la fonction shift pour récupérer les données du programme principal. 

Ex : my $class= shift;

Ici, on place en paramètre les informations qu’on souhaite récupérer : my ($class,$nom,$prenom,$adress,$email)= @_;

 

 

 

 

 

 

 

 

 

 

 

Code2 : usePerson3.pl

 

Programme 22 - usePerson3.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 18- résultat usePerson3.pl

 

 

Commentaires :

 

Ce programme affiche les entrées de l’agenda précédées de leur numéro, le mail de chaque correspondant ainsi que le contenu complet de l’agenda ou Bookmark. Contrairement au programme précédent, toutes les entrées doivent contenir une information.

 

 

 

 

 

 

 

 

 

 

 

2.2 / XML :: Parser

 

2.2.1 / Tester le code fourni dans le document de travail

 

2.2.1.1 / Programme PERL : useXMLParser-helloWord.pl

 

Fichier de travail : articles.xml

 

 

Figure 19 - résultat useXMLParser-helloWord.pl

 

 

 

Commentaires :

 

Le programme vérifie effectivement la bonne formation du document xml. Nous allons donc modifié le document de sorte qu’il soit mal formé et introduire une ligne de commande dans le fichier.pl qui récupère l’erreur.

 

 

 

 

Figure 20 - résultat avec erreur

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
2.2.1.2 / Programme PERL : useXMLParser0.pl

 

 

Code :

 

 

 

Programme 23 - useXMLParser0.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Fichier de travail : articles.xml

 

 

Résultat

 

 

Figure 21- résultat useXMLParser0.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Après modification de la fonction  « sub end_handler » au niveau de l’impression, on obtient les balises ouvrantes et le contenu textuel.

 

 

Code :

 

Programme 24 - useXMLParser0.pl modifié

 
 
 
 
 

 

 
 
 

Résultat :

 

 

Figure 22 - résultat après modification

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.1.3 / Programme PERL : useXMLParser1.pl

 

Fichier de travail : articles.xml

 

Code :

 

Programme 25 - useXMLParser1.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 23 - résultat useXMLParser1.pl

 

 

Commentaire :

 

Ce programme affiche également des lignes vides. Le travail consiste à les supprimer. On note aussi qu’il existe deux manières de procéder pour récupérer l’information du programme principal ; soit on fait appel à une fonction du parser qui contient le nom de l’élément rencontré : $this->original_string, soit on utilise la fonction shift.

 

 

 

 

 

 

 

 

 

 

 

 

Code :

 

 

Programme 26 -  useXMLParser1bis.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Visualisation :

 

Figure 24 - résultat useXMLParser1bis.pl

 
 
 
 
 
 
 
 
 
2.2.1.4 / Programme PERL : useXMLParser2.pl

 

 

 

 

Fichier de travail : articles.xml

 

Figure 25 - résultat useXMLParser2.pl

 

Commentaires :

 

Ce programme affiche l’arborescence du fichier articles.xml ainsi que le contenu textuel précédé de l’annotation « Text :[ ] ». Nous avons modifié le fichier de sorte qu’il construise une sortie HTML dans laquelle chaque niveau correspond  à un titre ( H1, H2 etc.)

 
 
 
 

 

 

Code :

 

 

 

Programme 27 - useXMLParser2.pl modifié

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                  

 

Résultat :

 

Figure 26 - résultat useXMLParser2.pl avec modification

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.1.5 / Programme PERL : useXMLParserHandler-msfaq.pl

 

Fichier de travail : msfaq.xml

Code initial :

 

 

 

 

Figure 27 - résultat useXMLParserHandler-msfaq.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code après modifications :

 

Nous avons créé un fichier de sortie test_msfaq.html.

 

 

Programme 28 - useXMLParserHandler-msfaq.pl modifié

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 28 - résultat avec modification

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2.1.6 / Programme PERL : useXMLParserWithTk.pl

 

Fichier de travail : articles.xml et dico_morisyen.xml

Code :

 

Programme 29 - useXMLParserWithTK.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 29 - Résultat useXMLParserWithTK.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 

 

 

 

 

 

 

 

Code après modification :

 

Programme 30 - useXMLParserWithTK. pl modifié

 
 
Commentaires :

Le programme affiche désormais uniquement les valeurs pleines.

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 30 - Résultat useXMLParserWithTK.pl modifié

 
 
 
 
 
 
 
 
 
 
2.2.1.7 / Programme PERL : useXMLParser3.pl

 

 

 

 

Fichier de travail : articles.xml

 

Code initial :

 

Programme 31 - useXMLParser3.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

       

 

Figure 31 - Résultat useParser3.pl

 

 

 

Commentaire :

 

Ce programme conserve l’arborescence du document xml. Le style "Subs" permet d'effectuer des actions sur une balise donnée. Son inconvénient c’est qu’il est spécifique à un document donné : le fichier.pl doit être réadapté en fonction du fichier.xml

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code après modification1 :

 

Programme 32 - useXMLParser3b.pl

 

Commentaire :

 

Nous avons ajusté le programme au fichier dico_morisyen.xml.

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

 

Figure 32- résultat useXMLParser3b.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code après modification2 :

 

Programme 33 - useXMLParser3ter.pl

 

 

 

Commentaire :

 

Nous avons créé une sortie html.  Cependant, l’arborescence n’apparaît pas. En revanche, en regardant le code source, elle apparaît.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat dico.html :

 

Figure 33- résultat html useXMLParser3ter.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat dico.txt :

 

Figure 34 - résultat txt useXMLParser3ter.pl

 

 

 

 

 

 

 

 

 

 

Code après modification3  :

 

 

Programme 34-useXMLParser4four.pl

 

 

 

 

 

 

Commentaire :

 

Dans la sortie HTML, l'arborescence ne pouvant être conservée, il vaut mieux placer les informations dans un tableau. Le style "Subs" est adapté à la construction de page HTML et à l'utilisation de document XML car elle présente une structure qui introduit des balises de début, DICTIONNAIRE, et de fin, DICTIONNAIRE_.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 35-Résultat useXMLParser4four.pl

 
 
 
 
 
 
 
 
 
2.2.1.8 / Application n°1 :

 

Fichier de travail : articles.xml

 

Code : addOneID.pl

 

 

Programme 35 - addOneID.pl

 

 

 

 

Commentaires :

 

Ce programme accepte tout document XML. Il présente l’arborescence du document xml et introduit un identifiant, ID, pour balise rencontrée.

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 36- résultat addOneID.pl

 
 
 
 
 
 
 
 
2.2.1.9 / Application n°2:

 

Fichier de travail : articles.xml

 

Code : renameTAGNAME.pl

 

 

Programme 36 - renameTAGNAME.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 37 - résultat renameTAGNAME.pl

 

 
 
 
 
 
 
 
 
2.2.2.0/ Application n°3 :

 

Fichier de travail : articles.xml

 

 

Code : articles2HTML.pl

 

 

Programme 37- articles2HTML.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

Figure 38- résultat articles2HTML.pl

 

 

Commentaires :

 

 

Ce programme créé une structure HTML respectant l’arborescence du document XML. En revanche, il est spécifique à un document xml.

 
 

 

 

 

 

 

 

 

 

 

 

 

2.2.2.1 / Application n°4 :

 

 

Fichier de travail : articles.xml

 

Code : articles2HTML-2.pl

 

 

Programme 38- articles2HTML-2.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 39 - résultat articles2HTML-2.pl

 

 

 

Commentaires :

 

Ce programme créé une structure HTML en tableau. Il est spécifique à un document XML.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

III / XML::Parser::PerlSAX

 

 

*  XML ::Parser ::PerlSAX est un module dont le parser génère des événements SAX. XML::Parser::PerlSAX est distribué dans le bundle libxml, qui rassemble un ensemble de modules XML, dont XML::Grove, XML::Twig etc...

 

Fichier de travail : dico_morisyen.xml

 

Code : unTagHandler.pm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Code : usexmlparserperlsax.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Commentaire :

 

Ce programme prend en argument un fichier.xml  et vérifie la bonne formation du document. Nous allons donc modifié le document de sorte qu’il soit mal formé.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

 

Commentaire :

 

Le programme récupère effectivement l’erreur en indiquant la ligne où elle se situe.

 

 

 

 

 

 

 

 

 

 

 

IV / XML::Xpath

 

*  XML::Path est basé sur XML::Parser et offre une interface SAX.

 

 

 

4.1 / Programme useXMLXPath.pl

 

Code initial :

 

 

Programme 39-useXMLXPath.pl

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 40-Résultat useXMLXPath.pl

 

 

 

 

 

Commentaires :

 

Ce programme extrait les noeuds entré en argument lors du lancement de la commande.

Exemple : perl useXMLXPath.pl articles.xml 'DICTIONNAIRE/ARTICLE/FORME'

Ici, le programme extrait tous les noeuds <FORME>. Les messages d'erreur sont dûs à la version de la bibliothèque xpath pour perl.

 

 

 

4.2 / Programme n°2

Le programme est issu du livre : XML & PERL, E.T.RAY.

 

          4.2.1 / Test du code initial

 

Code initial : ex06_xpath.pl

 

 

 

Programme 40 -  ex06_xpath.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 41- résultat ex06_xpath.pl

 

 

 

 

Commentaires :

 

Ce programme donne le même résultat que le précédent. On sélectionne des noeuds entrés en argument. Seulement, le code est plus économique.

 

 

 

 

 

 

          4.2.2 / Tests avec le Petit Prince

 

4.2.2.1 / Rechercher toutes les traductions en tchèque
 Fichiers de travail : newsaintex2.xml

 

Commande : perl ex06_xpath newsaintex2.xml  ".//traduction[@lang=’tcheque’]"

 

Résultat :

 

 

Figure 42- Traductions tchèques

 
 
 
 
4.2.2.2 / Rechercher la traduction en tchèque de la 2ème phrase

 

 

Fichiers de travail : newsaintex2.xml

 

Commande : perl ex06_xpath newsaintex2.xml  "//texte/descendant ::traduction[@lang=’tcheque’][2]"

 

Résultat :

 

 

Figure 43_Traduction en tchèque de la 2ème phrase

 
 
 
 
 
 
4.2.2.3 / Rechercher la traduction en français de la 2ème phrase

 

Fichiers de travail : newsaintex2.xml

 

Commande : perl ex06_xpath newsaintex2.xml  "/descendant ::traduction[@lang=’francais’][2]"

 

Résultat :

 

 

Figure 44-Traduction en français de la 2ème phrase

 
 
 
 
 
 
4.2.2.4 / Rechercher toutes les traductions en français des phrases dites par le narrateur

 

Fichiers de travail : newsaintex2.xml

 Commande 1: Perl ex06_xpath newsaintex2.xml 

"*//paragraphe[@loc=’narrateur’]/phrase|dialogue/phrase[@loc=’narrateur’]/modalite/traduction[@lang=’francais’]"

 

Résultat :

 

 

Figure 45-Traductions en français des phrases dites par le narrateur 1

 

 

 

Commentaires :

On remarque que les traductions en tcheque sont aussi prises en compte. La commande n'a donc pas abouti à un résultat satisfaisant. On procèdera donc en deux étapes : une recherche dans la partie dialogue et une autre dans la partie paragraphe.

 

 

 

 

 

Commande 2 :

perl ex06_xpath newsaintex2.xml  "*//paragraphe[@loc=’narrateur’]//traduction[@lang=’francais’]"

 

Résultat :

 

 

Figure 46-Traductions en français des phrases dites par le narrateur 2

 

 

 

 

 

 

 

 

 

Commande 3 :

perl ex06_xpath newsaintex2.xml  "*//dialogue/phrase[@loc=’narrateur’]//traduction[@lang=’francais’]"

Résultat :

 

Figure 47-Traductions en français des phrases dites par le narrateur 3

 
 
 
 
 
 
 
 
 
 
4.2.2.5 / Même chose en ne gardant que le texte

 

Fichiers de travail : newsaintex2.xml

 

Commande :perl ex06_xpath "newsaintex2.xml  *//dialogue/phrase[@loc=’narrateur’]//traduction[@lang=’francais’]/mot/text()"

 

 

Résultat :

 

 

Figure 48-Traductions en français des phrases dites par le narrateur / texte seulement

 
 
 
4.2.2.6 / Rechercher toutes les phrases (traduction en français uniquement) du narrateur qui répondent à des questions du petit prince (phrases précédentes prononcées par le petit prince et comportant un caractère '?')

 

Fichiers de travail : newsaintex2.xml

 

Commande :perl ex06_xpath newsaintex2.xml  ".//dialogue/phrase[@loc='LePetitPrince']/ following-sibling ::phrase[@loc=’narrateur’]/modalite[@type='interrogative']/traduction[@lang='francais']"

 

 

Résultat :

 

Figure 49-Phrases du narrateur qui répondent à des questions du petit prince

 
 
 
 
 
 
4.2.2.7 / Même chose pour les réponses du Petit Prince au narrateur

 

Fichiers de travail : newsaintex2.xml

 

Commande: perl ex06_xpath newsaintex2.xml  .//dialogue/phrase[@loc='narrateur']/following::phrase[@loc=’LePetitPrince’]/modalite[@type='interrogative']/traduction[@lang='francais']

 

Résultat :

 

 

Figure 50-Phrases du petit prince  qui répondent à des questions du narrateur

 

 

 

 

 

 

 

 

 

 

VIII / XML::DOM

Introduction

" Le Modèle Objet de Documents fournit un ensemble standard d'objets pour représenter des documents HTML et XML, un modèle standard décrivant comment ces objets peuvent être combinés et une interface standard pour y accéder et les manipuler (...) Le but de la spécification DOM est de définir une interface programmable pour XML et HTML.

En tant que spécification du W3C, un objectif important du Modèle Objet de Document est de fournir une interface de programmation standard qui puisse être utilisée dans une grande variété d'environnements et d'applications.

DOM est conçu pour être utilisé avec n'importe quel langage de programmation. ", Modèle Objet de Documents, Spécification Niveau 1, W3C.

La particularité de DOM par rapport à SAX est qu'il conserve, en permanence, en mémoire l'arbre XML, correspondant au document XML.

 

Les librairies PERL contiennent désormais un module XML::DOM.

 

 

 

 

Fichiers de travail : articles.xml

 

Code : useXMLDom.pl

 

 

Programme 41-useXMLDom.pl

 

 

Résultat :

 

 

Figure 51-résultat useXMLDom.pl

 

 

 

Commentaires :

 

Une instruction de la fonction print permet d'afficher les "Node Type".

 

 

 

 

 

 

 

 

 

 

 

 

IX / PERL/TK & XML : Projet informatique

Introduction

 

Notre projet est un prototype de dictionnaire du Mauricien, ou diksyoner Kreol Morisyen, dont le but est d'allier une interface graphique PERL/TK à des librairies XML de PERL.

 

Nous nous sommes inspirées du dictionnaire électronique "Hachette 99" pour notre interface. Nous n'avons pas souhaité construire un dictionnaire bilingue ; la rubrique "Correspondances" a une valeur indicative  et est

destinée aux locuteurs  mauriciens.

 

Nous nous sommes appuyées sur les travaux de Hookoomsing & Baker pour construire notre prototype présentant une liste fermée d'entrées lexicales aux intérêts linguistiques (syntaxe, sémantique etc) et étymologiques.

 

 

 

9.1 / Les objectifs

 

Au départ, nous souhaitions obtenir l'interface suivante qui prenait en entrée les informations contenues dans un document XML extérieur.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Figure 52 - Diksyoner Kreol Morisyen Prototype

Suivant le schéma ci-dessus, à un clic sur une entrée lexicale, correspond l'affichage de toutes les informations associées.

 

 

 

 

Document XML attaché au programme PERL :

 

 

Programme 42 - dico_morisyen.xml

 

 

 

 

 

 

 

 

 

 

 

 

9.2 / Les sources

 

Nous avons repris le programme, listbox.pl, qui présente les caractéristiques attendues, c.a.d qu'il permet d'afficher les informations relatives à une entrée sélectionnée.

 

Code : listbox.pl

 

 

Programme 43 - listbox.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 53 - Résultat listbox.pl

 

Commentaires :

Ce programme travaille à partir de listes associées à des variables utilisées pour l'affichage des données.

 

Ex :

 

 

*  Déclaration d'une liste :

my @alist = ('an item','another','and another','yet another','and so on');

 

 

 

*  Création d'un tableau de hashage à partir des listes :

my %listlist = (

                 ' alist' => \@alist,

                 ' blist' => \@blist,

                 ' clist' => \@clist,

               );

 

 

 

 

 

 

 

*  Affichage des données via TK :

my $ladd_button = $leftframe->Button(-text => "OK",

# Here we wish to dereference the [a|b|c]list-th element of our hashes

# of list refs:

   -command => [

                sub{

                 $mid_list->SetList(@{$listlist{$left_list->get('active')}});

                 $right_list->SetList(@{$addlist{$left_list->get('active')}});

                   }

               ],

                                    )->pack();

 

 

Ce programme ne prend pas en compte un document XML en entrée. En effet, les listes sont déclarées manuellement. Il faudrait donc faire appel à une librairie de PERL utilisant XML.

 

Pour cela, nous avions retenu trois solutions : utiliser XML::Xpath, XML::DOM ou reprendre le programme useXMLParserWithTK.pl qu'il faudrait combiner avec le programme listbox.pl.

 

Le but étant à la fois de vérifier la validité du document XML, en fonction de l'entrée lexicale sélectionnée,  d'extraire les informations relatives à cette entrée (= extraire les fils du noeud sélectionné) ainsi que d'afficher le tout via une intreface TK.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9.3 / La réalisation

Nous avons déjà commencé par reprendre le programme, listbox.pl, afin de l'adapter à nos besoins.

 

 

 

 

Code : Diksyoner-Kreol-Morisyen.pl

 

 

Programme 44 - Diksyoner-Kreol-Morisyen.pl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Résultat :

 

 

Figure 54 - Résultat Diksyoner-Kreol-Morisyen.pl

 

 

 

 

Commentaires :

 

Pour pouvoir visualiser l'ensemble des phrases qui dépassent le cadre, il suffit de sélectionner la phrase et de glisser à l'aide de la souris.

 

 

 

 

 

 

 

 

9.4 / Les perspectives

 

Le prototype actuel ne prend pas en compte les entrées du document XML. Nous avons retenu XML::DOM pour pallier à cet déficience car il permet de stocker un arbre XML quelque soit sa taille.

 

En fait, chaque entrée <LEXIQUE> doit être stockée dans des variables distinctes.

 

 

Ex : reprise du programme useXMLDom.pl

 

 

Le programme devrait :

 

*   parser le document XML :

 

my $p = XML::DOM::Parser->new;

my $doc = $p->parsefile(shift);

 

 

*  Agir sur les fils du noeud sélectionné :

 

process_node($doc->getFirstChild);

 

*  Sélectionner les noeuds et stocker leur valeur :

 

sub process_node {

  my ($node) = @_;

  my $ind = ' ' x $level;

  my $nodeType = $node->getNodeType;

  print "Node Type => ", $nodeType,"\n";

  if ($nodeType == ELEMENT_NODE) {

    my $type = $node->getTagName;

 

    }

   

 

 

 

*    Extraire les fils du noeud sélectionné ainsi que leur valeur : 

 

my $nodelist = $node->getChildNodes;

    ++$level;

    for (0 .. $nodelist->getLength - 1) {

      process_node($nodelist->item($_));

    } --$level;

  } elsif ($nodeType == TEXT_NODE) {

    my $content = $node->getData;

    $content =~ s/\n/ /g;

    $content =~ s/^\s+//;

    $content =~ s/\s+$//;

    print $ind, $content, "\n" if $content =~ /\S/;

  }

 

 

Il faudrait stocker la valeur des noeuds dans des variables en leur attribuant un id de sorte de les utiliser plus facilement dans le code TK, c.a.d dans les listes.

 

Pour combiner la librairie XML::DOM et l'interface TK, on peut s'inspirer du modèle proposé dans le programme useXMLParserWithTK.pl. En effet, le programme présente les différentes procédures  XML dont la méthode " create_ui();" qui comporte l'interface TK.

 

De cette manière, le dictionnaire peut prendre un nombre infini de données inscrites automatiquement.