INaLCO - M2 Traductique 2010-2011
Cours Perl (Eglé Ramdani), TI-TAL (Pierre Marchal), XML (J.-F.
Perrot)
Projet
Shakespeare
Petit mais global ! Pour se donner à peu de frais une idée d'ensemble
de la
chaîne de traitement.
-
Thème
À partir des données XML en libre accès sur le site http://www.cafeconleche.org/examples/shakespeare/
constituer un répertoire contenant une collection de fichiers HTML
(pages web) affichant les pièces de Shakespeare.
L'affichage en question sera obtenu par l'application à chaque fichier
XML individuel (un fichier par pièce)
d'une transformation XSLT
concoctée par l'étudiante concernée.
-
Modus operandi
La transformation XSLT est supposée résider dans un fichier la-transfo.xsl
.
- Le contenu du site susdit sera transféré dans un répertoire
(qui
contiendra donc les fichiers XML individuels),
logé dans l'espace de
travail de l'étudiante.
- Un script Perl à base d'
opendir/readdir
appliquera à tous ces
fichiers une commande shell du genre
`xsltproc la-transfo.xsl le-fichier.xml >
le-répertoire-but/le-fichier.html`
- L'aspiration et la transformation seront réunis dans un
script
unique réalisant l'opération de bout en bout,
prenant comme unique
argument le nom du répertoire-but.
-
Réalisation de l'étape 2
- Les fichiers XML des pièces de Shakespeare sont aspirés depuis le
site
cafeconleche
dans un répertoire-source, appelons-le Shak-src
.
Cette aspiration se fait par des techniques vues avec Pierre Marchal.
- La transformation
Shak.xsl
peut s'exécuter en ligne de commande par xsltproc
:
%xsltproc Shak.xsl ma-pièce.xml > ma-pièce.html
(faites-le vous-même !)
- Cette ligne de commande peut être intégrée dans une mécanique
Perl qui permettra
de transformer tous les fichiers XML du répertoire Shak-src
en fichiers HTML
qui seront logés dans un autre répertoire, appelons-le Shak-but
.
Voici une manière d'écrire ce script : fichier transform.pl
#Projet Shakespeare : parcours du répertoire-source,
génération vers le répertoire-but
use strict;
use warnings;
sub transform($$$){ # 3 chemins : la-transfo, le répertoire-source, le
répertoire-but
my ($trsf, $src, $but) = @_;
opendir(SRC, $src);
my @listNoms = grep(/\.xml$/,readdir(SRC)); #
grep indispensable ! index.html, play.dtd...
closedir(SRC);
mkdir($but, 0755);
foreach my $nomFich ( @listNoms ){
my $nomRes = $nomFich;
$nomRes =~ s/xml$/html/;
`xsltproc $trsf $src/$nomFich
> $but/$nomRes`;
}
}#transform
transform($ARGV[0], $ARGV[1], $ARGV[2]);
- Exécution :
%perl transform.pl Shak.xsl Shak-src Shak-but
Attention ! le détail de la commande dépend du contexte où on l'exécute,
à moins d'écrire des chemins absolus pour le fichier XSL et pour les deux répertoires.