Ac Ro . d i  Co
 de l'XML
tendance XSLT & XSL-FO
mise à jour le 15 juillet 2002
    

Que peut-on espérer des dernières technologies du domaine de XML pour une application comme acro.dico ?

Rien de plus que la faculté de produire des sorties aux formats PDF, CHM, RTF..., tout ceci à partir du contenu de la base MySQL.

Le texte qui suit n'est pas destiné à décrire XML et sa suite, cela est très bien fait sur internet et il existe maintenant de très bons bouquins en librairie, pour tous les niveaux de lecture. Cette page décrira plutôt un problème prècis et les solutions à base d'XSL pour le résoudre d'une façon particulièrement élégante, à savoir, comment produire une version PDF par exemple, du contenu du site acro.ecole.free.fr

La démarche se déroulera en deux temps. D'abord, il faudra produire un fichier au format XML.
Plusieurs méthodes existent maintenant pour préciser les structures d'un fichier XML bien formé, entre autre les schémas XML. On en restera dans un premier temps à la bonne DTD, pour "data type definition", qui permet de caractériser un fichier XML de façon très simple.

{1} création d'un fichier au format XML grâce à un script PHP

Nous sommes coté serveur, le langage approprié sera donc encore PHP.

php2xml.php3

<?
// ========================================
// php2xml.php3
// produit une liste des acronymes à un format XML
$version = "1.03";
// debut 8/10/2001
// jln@iut.univ-lehavre.fr
// 14/11/2001 version 1.0

// 21/03/2002 version 1.03
// ========================================

function nettoielemot($chaine) {
$chaine = ereg_replace( "&agrave;", "à", $chaine);
$chaine = ereg_replace( "&acirc;", "â", $chaine);

$chaine = ereg_replace( "&eacute;", "é", $chaine);
$chaine = ereg_replace( "&egrave;", "è", $chaine);
$chaine = ereg_replace( "&ecirc;", "ê", $chaine);

$chaine = ereg_replace( "&ocirc;", "ô", $chaine);

$chaine = ereg_replace( "&ucirc;", "û", $chaine);

$chaine = ereg_replace( "’", "'", $chaine);

$chaine = ereg_replace( "&", "", $chaine);
$chaine = ereg_replace( "&nbsp;", " ", $chaine);

// retrait des espaces de fin de ligne
$chaine = ereg_replace( " +$", "", $chaine);

return $chaine;
}
require("./config.php3");

// connexion mysql
// ============
$mylink = @mysql_connect($host, $user, $passwd)
    or die ("<br>Pas de connexion MySQL<br>");
@mysql_select_db($database)
    or die ("<br>La base de donn&eacute;e n'est pas disponible. Bye!<br>");

print "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";

// creation de la DTD
// =============

$xml = "<!DOCTYPE acronymes [\n";
$xml .= "<!ELEMENT acronymes (m)+>\n";
$xml .= "<!ELEMENT m (a,d)>\n";
$xml .= "<!ELEMENT a (#PCDATA)>\n";
$xml .= "<!ELEMENT d (#PCDATA)>\n";
$xml .= "]>\n";


print $xml;

print "<acronymes>\n";
// LE CORPS
// ========

$result = mysql_query("SELECT acro,valeur FROM acronymes order by acro");
while ($ligneacro = @mysql_fetch_array($result)) {
 $mot = $ligneacro[0];
 $detail = $ligneacro[1];
 $detail = nettoielemot($detail);

 print "<m>\n";
 print "<a>" . $mot . "</a>\n";
 print "<d>" . $detail . "</d>\n";
 print "</m>\n";
}
print "</acronymes>\n";
@mysql_close($mylink);

?>

Ce petit script PHP, on ne peut plus simple, parcourt la base MySQL et en extrait la substantifique moelle. Question codage des lettres accentuées, on supprimera toutes les séquences du type &xacute; et autres, propres au domaine de l'HTML pour utiliser le jeu de caractère ISO-8859-1 adapté à l'XML et à l'Europe.
Suit un échantillon du fichier XML produit par le script PHP et sauvegardé sur une station cliente.

dico.xml 

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE acronymes [
<!ELEMENT acronymes (m)+>
<!ELEMENT m (a,d)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT d (#PCDATA)>
]>
<acronymes>
<m>
<a>3IL</a>
<d>institut d'ingénierie informatique de Limoges - site http://www.3il.fr/</d>
</m>
<m>
<a>A3IE</a>
<d>institut d'informatique d'entreprise, Evry, France - site http://www.iie.cnam.fr/</d>
</m>

.../...

<m>
<a>ZSC</a>
<d>zone spéciale de conversion</d>
</m>
<m>
<a>ZUS</a>
<d>zone urbaine sensible</d>
</m>
</acronymes>

{2} préparation d'une station aux techniques XSLT et XSL-FO

Une fois le fichier XML produit et sauvegardé sur une station de travail, le reste du traitement consistera à lancer des fichiers batch, soit manuellement, soit de façon automatique quand ils seront bien réglés.
De nombreuses solutions sont possibles pour utiliser XSLT, certaines commerciales, d'autres ouvertes et gratuites. Notre choix portera sur les secondes.

Par contre une batterie d'ustensiles va être nécessaire. Chaque outil doit être téléchargé chez son auteur. Tous seront essentiellement à base de JAVA donc indépendants du système d'exploitation de la machine.

Donc première chose, taper "java" dans une console de votre machine. Un message d'erreur signifie que vous ne disposez pas de JAVA, ce sera le cas de WinXP. Qu'à cela ne tienne, vous disposerez d'une machine virtuelle JAVA gratuite selon votre préférence chez Microsoft 5.5 méga-octets ou bien chez SUN - choisir le run-time JAVA2 standard edition - 12 méga-octets.

La version PDF sera obtenue avec Apache Project's FOP tools, la version RTF avec XMLmind FO Converter XFC-09, le tout provenant d'un passage par DocBook et ses feuilles de style. Les versions HTML, XHTML et HTML Hepl sont issues directement des DocBook XSL Stylesheets de Norman Walsh.

Si ce code vous a intéressé, si vous l'améliorez et surtout si vous l'utilisez, faites-le moi savoir.

Le webmestre de acro.dico.free.fr
Jean-Luc NAIL