juin 30, 2002
Lecture et Formulaire hello
Posted by karl at 01:10 AM
juin 28, 2002
Lecture du fichier et Création d'une page Web

Salut Pascale,

pour continuer un peu les aventures sur le programme Perl en utilisant XML Simple qui posera des problèmes plus tard mais pour l'instant, c'est une brique après l'autre.

#!/usr/bin/perl -w
# chargement des modules necessaires
use strict;
use CGI;
use XML::Simple;
use Data::Dumper;

# Nom du fichier XML a lire

my $file = 'index.xml';

# creation de l'instance

my $xs1 = XML::Simple->new(suppressempty => '');

# Lecture du fichier XML

my $doc = $xs1->XMLin($file);

# Lecture des valeurs dans l'arbre XML

my $nwnomville = $doc->{nwheader}->{nwnomville};
my $nwregion = $doc->{nwheader}->{nwregion};
my $nwhab = $doc->{nwheader}->{nwhabnbr};

# Creation de l'instance qui va permettre 
# la creation de la page Web

my $q = new CGI;                          # create new CGI object
print $q->header,                        # create the HTTP header
    $q->start_html('Script de Lecture pour NW'), 
                                                     # start the HTML
    $q->h1('Lecture NW '),             # level 1 header
    $q->p('Nom : '."$nwnomville"), # paragraphe
    $q->p('Region : '."$nwregion"),
    $q->p('Nbr : '."$nwhab"),
    $q->end_html;                         # end the HTML

Et tout ce simple petit programme créé un document XHTML 1.0 Transitionnel. :) C'est merveilleux et simple. Pour le tester en grandeur nature, Je l'ai rendu accessible : read-index.

Posted by karl at 08:53 PM
Lire du XML en PHP

Dans l'article suivant Parsing XML with PHP, ils donnent quelques exemples simples comment lire le contenu d'un fichier XML avec du PHP. Le code source de leur programme est accessible et semble assez simple.

Pour ce qui est du commentaire précédent, je trouve que MySQL serait l'idéal si on avait plein de données stockées dans une vraie base de données, mais là ce n'est pas le cas. On pourra y penser pour une version future. C'est un peu comme utiliser une Porsche pour aller chercher son pain alors que l'on est à 30s à pied. C'est un peu inadéquat. Mais je comprends ta démarche Pascale. Après il y a le problème de la gestion car cela fait un serveur de plus à gérer, un serveur de plus à entretenir, à vérifier que personne n'essaie d'entrer et de casser, etc, juste pour une simple fonction de validation. C'est là où je parle overload ou surcharge. :)

j'essaie des petits bouts de choses en perl et si cela n'est passez concluant, je reprends ta solution mais je me plonge dedans et tente de modifier ton code pour le faire sans MySQL. Cela te va Pascale ?

Au fait, tu veux l'autorisation d'écriture ici ?

Posted by karl at 06:13 PM
PHP, MySQL et légèreté

Il y a quelques jours, Pascale m'a demandé pourquoi la solution de PHP/MySQL ne me convenait pas.

C'est bien parce-que la base MySQL ne sert qu'à valider que je trouve cela trop consommateurs en ressources et en trou de sécurité. Car même en PHP on peut produire et lire du XML sans forcément passer par MySQL. Il y a une librairie XML en PHP.

Posted by karl at 06:07 AM
juin 20, 2002
Comment tester la présence d'un élément vide.

Dans les fichiers de Normandie Web qui n'ont pas encore de contenu, il existe une balise <nwContrib />. Cette balise vide joue un rôle de switch binaire. Quand cette balise est présente, il faut remplacer la sortie (output) par une invitation à contribuer de la part des visiteurs.

#!/usr/bin/perl 
# chargement des modules necessaires
use strict;
use XML::Simple;
use Data::Dumper;

my $file = 'index.xml';
my $xs1 = XML::Simple->new(suppressempty => '');
my $doc = $xs1->XMLin($file);

my $nwnomville = $doc->{nwheader}->{nwnomville};
print "Nom ville : " . $nwnomville . "\n";
print "Nom Reg   : " . $doc->{nwheader}->{nwregion} . "\n";
print "Nbr hab   : " . $doc->{nwheader}->{nwhabnbr} . "\n";

# test de la presence des elements nwContrib et nwContribFalse
# dans le fichier. Plus tard, cela permettra de remplacer le contenu
# par un autre :)
#
print "nwContrib existe \n" 
    if exists $doc->{nwtexte}->{texte}->{nwContrib} ;
print "nwContribFalse ne doit pas s'afficher \n" 
    if exists $doc->{nwtexte}->{texte}->{nwContribFalse} ;

# Sortie brut du fichier de hash pour verifier que l'on teste
# bien ce qu'il faut tester :)
#
print Dumper $doc ;
Ce qui donne en sortie une fois le programme exécuté :
Nom ville : Aunay-sur-Odon
Nom Reg   : Basse-Normandie
Nbr hab   : 2889
nwContrib existe 
$VAR1 = {
          'nwheader' => {
                          'nwhabnbr' => '2889',
                          'nwcanton' => 'Aunay-sur-Odon',
                          'nwdpt' => 'Calvados',
                          'nwregion' => 'Basse-Normandie',
                          'nwvoir' => {
                                        'content' => 'Eglise moderne',
                                        'br' => ''
                                      },
                          'nwnomville' => 'Aunay-sur-Odon'
                        },
          'nwtexte' => {
                         'nwemail' => 'webmaster@normandieweb.org',
                         'nwurl' => 'http://www.normandieweb.org/14/aunaysurodon/aunaysurodon/index.xml',
                         'nwcreadate' => '1997-03-23',
                         'nwTitle' => 'Aunay-sur-Odon',
                         'nwlogo' => 'icotit',
                         'nwauteur' => 'Karl Dubost',
                         'nwmetaDesc' => 'Cette commune est à compléter, aidez-nous',
                         'nwKeywords' => 'Normandie, Tourisme, Normandie Web',
                         'nwmoddate' => '2001-08-13',
                         'texte' => {
                                      'nwContrib' => ''
                                    }
                       }
        };
Posted by karl at 03:03 AM
Utiliser XML::Simple pour vérifier si les fichiers sont bien formés.

Il est possible d'utiliser XML::Simple pour vérifier que les fichiers sont bien formés, cela peut permettre de faire un script qui traverse les répertoires et identifie les fichiers à corriger avant de pouvoir traiter toutes les données.

#!/usr/bin/perl
use Strict;
use XML::Simple;

my $file ='index.xml';
my $ref = eval {XMLin($file)};

if($@) {
  print "Une erreur possible : $@";
}
else {
  print "Aucun probleme";
}
Posted by karl at 02:19 AM
XML::Simple, un parseur XML

j'ai testé le parseur XML::Simple qui est très facile à utiliser. Cela pose un petit problème pour les éléments vides. Il ne faut pas oublier la syntaxe suivante my $xs1 = XML::Simple->new(suppressempty => ''); . Ainsi la valeur de sortie n'est pas une valeur barbare de référence du hash comme HASH(0x1877dc).

Un petit bout de code appliqué à index.xml contenant les informations de village.

#!/usr/bin/perl 
use strict;
use XML::Simple;

my $file = 'index.xml';
my $xs1 = XML::Simple->new(suppressempty => undef);
my $doc = $xs1->XMLin($file);

my $nwnomville = $doc->{nwheader}->{nwnomville};
print "Nom ville : " . $nwnomville . "\n";
print "Nom Reg   : " . $doc->{nwheader}->{nwregion} . "\n";
print "Nbr hab   : " . $doc->{nwheader}->{nwhabnbr} . "\n";
print "Empty Elt : " . $doc->{nwtexte}->{texte}->{nwContrib} . "\n";

qui donne le résultat suivant

Nom ville : Aunay-sur-Odon
Nom Reg   : Basse-Normandie
Nbr hab   : 2889
Empty Elt : 

Une autre bonne référence est Perl-XML sur SourceForge.

XML and Content Management : Un excellent article qui utilise également XML::Simple et qui donne des exemples de gabarits templates) dans le cadre de la gestion de contenu. (Must to read)

Posted by karl at 01:52 AM
juin 16, 2002
Solution PHP et MySQL

Pascale a proposé une solution PHP et MySQL que je n'ai pas encore testé intensivement car il faut que je lance une base de données MySQL pour cela sur le serveur, ce qui me dérange un peu bien que ce soit possible. Je pense que je vais quand même tenter de l'installer.
Elle a créé un formulaire sur le fichier de Aunay-sur-Odon pour faire fonctionner l'ensemble mais ne l'essayez pas cela ne marchera pas pour l'instant.

Le bouton "contribuer" lance l'édition.

Posted by karl at 06:19 PM
Exemple de fichier XML de Normandie Web

Un exemple de fichiers XML contenus dans Normandie Web : version XML pour la ville d'Elbeuf (attention, le fichier n'est pas bien formé).

L'entête ressemble à cela :

<?xml version="1.0" encoding="iso-8859-1"?>
<nwcity>
	<nwheader>
		<nwnomville>Elbeuf-sur-Seine</nwnomville>
		<nwregion>Haute-Normandie</nwregion>
		<nwdpt>Seine-Maritime</nwdpt>
		<nwcanton>Elbeuf-sur-Seine</nwcanton>
		<nwhabnbr>16750</nwhabnbr>
		<nwvoir>Anciennes usines textile reconverties, 
Blin et Blin, 
Eglise Saint-Jean, 
Eglise Saint-Etienne, 
Musée d'Elbeuf, 
Foire Saint-Gilles, 
Promenades des roches d'Orival, 
Chemin de fer touristique,
Usine Fraenckel-Herzog
<br/>
<strong>Célébrités</strong> : 
"André Maurois" (Emile Herzog)</nwvoir>
		</nwheader>
	<nwtexte>
		<nwTitle>Elbeuf-sur-Seine</nwTitle>
		<nwlogo>icotit</nwlogo>
		<nwmetaDesc>Elbeuf prend racine dans  son histoire 
                et sa culture dans le domaine du textile.</nwmetaDesc>
		<nwKeywords>Normandie, Tourisme, Normandie Web, 
                textile, ville ouvrière, histoire, 
                marché</nwKeywords>
		<nwurl>
http://www.normandieweb.org/76/elbeufsurseine/elbeufsurseine/index.xml
                </nwurl>
		<nwcreadate>1997-03-23</nwcreadate>
		<nwmoddate>1999-08-24</nwmoddate>
		<nwauteur>Karl Dubost</nwauteur>
		<nwemail>webmaster@normandieweb.org</nwemail>
		<texte>
... contenu mal formé
		</texte>
	</nwtexte>
</nwcity>
Posted by karl at 06:09 PM
Perl et XML pour les données

Il semble que la combinaison Perl, XML pourrait-être une excellente solution afin de traiter les données qui sont stockées dans les fichiers XML. Il n'ya plus qu'à.

Le module XML::Parser est peut-être une solution. J'ai discuté avec Aaron Straup Cope des possibilités hier pour gérer Normandie Web, une des solutions les plus souples pour permettre à tout un chacun de gérer le contenu est de pouvoir déclarer une API. Il m'a parlé d'un système avec PythonCard. Je pense que l'application est TextRouter.

Avec Olivier et Dominique, nous avons discuté également que le système idéal devrait permettre de télécharger les données localement à la manière d'un mini-proxy et de synchroniser quand la mise à jour est prête. On parle relation client-serveur, pas forcément XML-RPC ou SOAP, mais tout à fait Web Services.

Posted by karl at 05:48 PM
Lancement du Weblog de Normandie Web

Le weblog est là pour aider à la reconstruction du site et de tenter de créer une technologie qui permette de gérer le site de façon souple.

Le site est un système de fichiers individuels qui comporte environ 3700 fichiers HTML. Le contenu proprement dit était précédemment stocké dans une base de données Frontier, mais dont je pouvais être le seul à éditer et à mettre à jour. J'ai donc décidé d'exporter toutes les données dans des gabarits XML (qui ne sont pas bien formés pour certains). Ces gabarits sont dans le répertoire http://www.normandieweb.org/nwxml/. Si vous désirez accéder à un fichier spécifique il vous suffit donc de remplacer le chemin classique d'un fichier par sa valeur précédée de nxwml et de remplacer le .html en .xml.

La nouvelle version du site se fera au fur et à mesure. Le weblog est là pour aider les autres à s'inspirer ou à participer.
Mais il peut bien sûr permettre à d'autres de fournir de l'information à propos des événements dans la région. Donc vous pouvez proposez des nouvelles.

Posted by karl at 05:17 PM