Francis Lapique et Gil Regev, DI-ICA
-
Tout d'abord, situons le contexte dans lequel ce développement technique a vu le jour. Les sites Web coopératifs qui ont été développés ou qui sont en cours de développement à l'ICA offrent aux utilisateurs une fonction de soumission de documents et d'URL. Dans le cas du projet Oxymoron ce sont, entre autres, des notes de lecture sous la forme de tableau MS-Word.
Ouvrons une parenthèse sur Oxymoron, projet développé en collaboration avec l'Université coopérative sans distance du Roannais, qui offre la possibilité à des adultes qui souhaitent valider leurs acquis ou/et développer leurs compétences, d'avoir accès au savoir sans distance. Oxymoron est un outil qui leur permet de mutualiser des fiches de lecture, créer un capital de connaissance et établir des relations entre personnes qui doivent produire des études et des recherches.
L'idée fondatrice est de constituer des ressources documentaires accessibles aisément et sans distance. L'outil se compose de quatre modules principaux:
Le coeur d'Oxymoron est constitué par un moteur de base de données
relationnelle Informix (IUS) et ses extensions dans un environnement
Unix. Nous avons alors rencontré le
problème bien connu de récupérer des
fichiers Word sur un serveur Web, que nous avons résolu par l'outil de
conversion automatique en HTML décrit dans
le paragraphe suivant. Deuxième
problème rencontré: l'alimentation de la base
à partir de données contenues au
départ dans des tableaux Word. Dans les premières versions
d'Oxymoron, nous
avions chosi l'approche standard qui consiste à offrir à l'utilisateur
des TEXTAREA dans lesquels par copier/coller, il alimentait les différents
champs de la base. Les premiers utilisateurs nous ont vite fait savoir qu'ils ne
pouvaient pas continuer à travailler de cette
manière vu la masse d'informations et le
peu de temps qu'ils pouvaient y consacrer. Il nous fallait plus considérer la
manière de travailler des utilisateurs. Nous devions simplifier au
maximum et leur permettre un chargement automatique des
différents champs déja présents dans un tableau Word,
format imposé aux étudiants lors de la rédaction des fiches de
lecture.
Exemple de note de lecture sur Le nouvel esprit scientifique, G. Bachelard
Le contenu des différentes cellules du tableau Word iront automatiquement alimenter les champs de la base de données grâce à la méthode décrite plus loin.
Le problème du transfert des données du client vers le serveur est résolu par le type FILE de la marque INPUT. Le fichier Word est acheminé par le serveur HTTP vers le programme de traitement (CGI ou autre) défini par la valeur du paramètre ACTION de FORM. Dans notre cas le fichier est enregistré dans une base de données via des pages HTML comportant des extensions pour Informix. Le fichier doit être converti en format texte afin d'être accessible aux différents outils de recherche de la base.
Nous avons donc cherché une librairie de conversion. Une réponse à la question que nous avions posée dans les Newsgroups de Microsoft Office bien que ne donnant pas la bonne solution, nous a mis la puce à l'oreille. Pourquoi ne pas utiliser Microsoft Word lui même pour convertir ces documents en HTML. Pour cela, rien de plus simple, il vous faut une machine Windows (95, 98 ou NT) et Word. A l'aide de l'éditeur de Macro de Word (Visual Basic for Applications, VBA) il existe une méthode pour sauver un document en HTML. Il suffit d'appeler la méthode SaveAs de l'objet document avec le nom de fichier désiré et le numéro d'index du filtre de conversion à utiliser. Dans notre cas 14 pour le filtre HTML.
ActiveDocument.SaveAs FileName:=»doc3.html», FileFormat:=14
La preuve était donc faite que nous pouvions utiliser Word pour faire cette conversion. Mais c'est une chose d'écrire une macro Word et une autre d'offrir un service de conversion. Nous avons procédé de la manière suivante:
Un composant ActiveX, en Visual Basic, nommé Convert exporte une interface appelée WordConversions qui contient une méthode Doc2HTML. Cette méthode reçoit en paramètre un nom de fichier et crée un objet de type WordApplication, ouvre le fichier passé en paramètre et le sauve dans le format HTML en prenant soin de changer l'extension du fichier en .html. Le code est donné ci-après:
Public Function Doc2HTML(fileName As String) As String
Dim wordAppObj As Word.Application
Dim wordDocsObj As Word.Documents
Dim wordDocObj As Word.Document
Set wordAppObj = New Word.Application
Set wordDocsObj = wordAppObj.Documents
Set wordDocObj = wordDocsObj.Open(fileName)
htmlFormatIndex = 14
For Each fc In wordAppObj.FileConverters
If fc.CanSave = True Then
If fc.FormatName = «HTML Document» Then
htmlFormatIndex = fc.SaveFormat
End If
End If
Next fc
dotPos = InStr(fileName, «.»)
newFileName = Mid(fileName, 1, dotPos) & «html»
wordDocObj.SaveAs newFileName, htmlFormatIndex
wordDocsObj.Close
wordAppObj.Quit
Set wordDocObj = Nothing
Set wordDocsObj = Nothing
Set wordAppObj = Nothing
Doc2HTML = newFileName
End Function
Pour rendre ce composant ActiveX visible du monde Unix un fichier ASP reçoit un nom de fichier en paramètre (cette fois ci au format HTML), qui crée un objet de type Convert.WordConversions et invoque la méthode Doc2HTML. L'architecture globale est donnée dans la fig.1.
Fig. 1 - architecture globaleVoici le code ASP:
<%@ LANGUAGE=VBSCRIPT%>
<HTML>
<HEAD><TITLE>Doc to HTML Conversion</TITLE></HEAD>
<BODY>
<%
sourceFileName = Request.querystring
(«txtSourceFileName»)
set convertor = Server.CreateObject
(«Convert.WordConversions»)
newFileName = convertor.Doc2HTML
(sourceFileName)
Set convertor = Nothing
%>
Saved:<% = newFileName %>
</BODY>
</HTML>
Voici une requête typique qui invoque ce fichier ASP:
http://....epfl.ch/doc2html.asp?txtSourceFileName=toto.doc
Restait à résoudre un dernier problème: le partage des ressources entre le monde UNIX et le monde Windows. Nous avons choisi la solution Samba qui nous permet de passer du monde des // à celui des \\.
A travers un formulaire Web le fichier Word est chargé dans la base de données dans un élément de type blob (Binary Large Object) puis au moyen de la fonction lotofile on dépose le fichier dans un espace partagé avec Windows. Un script PERL fait appel au service ASP.
http://....epfl.ch/doc2html.asp?txtSourceFileName=\\doc\toto.doc
Le résultat de l'opération, un fichier toto.html est enregistré dans \\doc. Dernière étape, on charge ce fichier dans la base de données.
La séquence d'évènement complète est illustrée dans le diagramme de séquence de la figure 2.
Notez que cette solution ne fait aucune hypothèse sur l'équipement du côté de l'utilisateur. Un simple browser suffit étant donné que toute les conversions de formats se font sur les serveurs.
Fig. 2 - diagramme de séquence de la conversion HTML
Le document original est stocké dans la base. Si l'utilisateur veut le modifier le serveur lui renvoit donc le format WORD (avec le MIMETYPE msword). Ceci déclenche l'ouverture de Word si on travaille avec Netscape; avec IE, Word est intégré dans une frame du browser, ce comportement peut paraître élégant mais est troublant pour l'utilisateur qui ne sait plus à quelle application correspondent les menus, un clic dans une autre frame, et le Save As change de contexte.
Le fait d'avoir choisi d'utiliser MS-Word comme convertisseur de format semble nous condamner à ne supporter que le format MS-Word de Windows. En réalité nous pouvons convertir en HTML tout document que Word est capable d'ouvrir. La liste est assez longue. Mentionnons les formats suivants: Word Mac, RTF, Word Perfect etc. Nous avons testé notre application avec des documents Word Mac 5.1 et 98 chargés directement depuis le Mac et cela fonctionne à merveille.
En plus, s'il devient nécessaire de supporter d'autres formats, il suffit que les applications concernées proposent une interface ActiveX et la conversion en HTML pour que l'on puisse réaliser une conversion automatique.
Fig. 3 - diagramme de séquence de la conversion de tables
La figure 4 montre la première interface utilisateur que nous avons imaginée pour Oxymoron. Une fiche contient 3champs décrits plus haut. Tout naturellement nous avons construit un formulaire HTML pour recevoir ces champs. Cette interface a beaucoup plu aux utilisateurs tant qu'ils ne devaient pas vraiment l'utiliser. Comme les données étaient déjà stockées dans des tableaux WORD, ils devaient donc faire de multiples opérations de copier/coller de Word dans les formulaires d'Oxymoron. Inutile de dire qu'ils n'aimaient pas du tout cette expérience. Il nous fallait automatiser le processus et établir une correspondance directe entre les cellules du tableau et les champs de la base de données.
Nous avons donc utilisé un mécanisme semblable à celui décrit plus haut pour la conversion HTML. Mais à présent nous construisons des requêtes HTTP qui transportent le contenu des cellules vers la base de données. Chaque requête correspond à une ligne du tableau et transporte donc les 3 champs de la ligne. C'est un nouveau fichier ASP (ConvertTable.asp) qui reçoit les requêtes de conversion en provenance du serveur Unix. Il utilise une méthode Table2Array que nous avons ajoutée à l'interface WordConversions du composant ActiveX déjà utilisé pour la conversion HTML. Table2Array extrait le texte de toutes les cellules du premier tableau qu'il trouve dans le fichier et les met dans une variable VisualBasic de type ARRAY de taille dynamique. Ensuite une requête HTTP est construite pour chaque ligne.
Fig. 4 - version 1 de la forme HTML
Fig. 5 - version 2 de la forme HTML
Voici un exemple de l'URL utilisé:
http://...www.epfl.ch:/web332webdriver? MIval=oxy_notelec2& MItab=v2_oxyapp&count= documentId&signature=login&type=documentType& item1= valueCell1&item2=valueCell2&item3= valueCell3"
La séquence d'évènement complète est illustrée dans le diagramme de séquence de la figure 3.
Ici, le document original est sauvé sur le serveur sous forme texte. Quand l'utilisateur veut modifier une note, le serveur lui renvoit le texte de la cellule correspondante avec le MIMETYPE msword. La mise à jour dans la base se fait à travers l'outil de conversion HTML décrit précédemment.
Pourquoi ne pas soumettre directement le document WORD depuis MS Word sans passer par un browser? Nous sommes donc en train de développer une macro WORD sous forme de bouton Oxymoron dans la barre d'outils. Un simple clic dans Word suffira pour soumettre le document.
| retour au sommaire du Flash informatique du mois d'octobre 98 |
| retour à la page principale des Flash informatique |
| Vos commentaires |
| © FI-8-98 du 20 octobre 1998 |