Jean-Vincent Loddo

Un Site Web pour la recherche en sciences humaines

La naissance du World Wide Web au CERN, le Centre EuropŽen de Recherche NuclŽaire, en 1989 sur Internet, peut tre considŽrŽe comme la plus grande rŽvolution dans le domaine de la communication et de l'Ždition de l'information aprs l'apparition de l'imprimerie. Le dŽveloppement simultanŽ du matŽriel et du logiciel informatique de ces dernires annŽes rend aujourd'hui possible ˆ n'importe quel utilisateur, entreprise ou organisme de crŽer son propre site Web sans grandes difficultŽs techniques et pour un investissement Žconomique modeste. DŽsormais, les fournisseurs d'accs Internet (ISP) proposent, pour des prix raisonnables, voire gratuitement, des services d'hŽbergement de site Web avec, le plus souvent, des fonctionnalitŽs trs avancŽes d'un point de vue technique (serveur de bases de donnŽes, langages de scripts CGI, logiciels de maintenance ˆ distance, etc.).

Gr‰ce aux logiciels d'Ždition actuellement disponibles sur le marchŽ, il n'est plus nŽcessaire de conna”tre le langage HTML (Hypertext Markup Language) pour dŽcrire et structurer les diffŽrents objets (textes, liens, tableaux, images, vidŽos ou sons) qui constituent un hypertexte, mais il suffit de quelques clics de souris pour mettre en place ces ŽlŽments de la faon dont ils appara”tront sur l'Žcran des visiteurs du site. Cependant, l'apport des informaticiens ne peut tre facilement remplacŽ par de tels logiciels lorsque l'hypertexte est dynamique, c'est-ˆ-dire lorsque le contenu des pages est en perpŽtuelle mutation et correspond au contenu d'une base de donnŽes en Žvolution. Il y aura alors une sŽrie de problmes qui demandera un niveau de compŽtence supŽrieur, d'une part pour concevoir et gŽrer la base de donnŽes, d'autre part pour intŽgrer les donnŽes dans les pages gŽnŽrŽes dynamiquement. Nous allons donc prendre l'HyperNietzsche comme modle pour discuter et approfondir les problmes et les difficultŽs impliquŽes par un projet de ce genre.

 

Les composants logiciels

Dans le jargon des informaticiens un serveur Žtait, ˆ l'origine, quand les ordinateurs n'Žtaient pas aussi efficaces qu'aujourd'hui, une machine destinŽe ˆ une t‰che spŽciale, par exemple celle de rŽpondre sur l'Internet aux requtes des butineurs http (Netscape, Mosaic, Internet Explorer, etc.), appelŽs clients du serveur. Avec les performances croissantes des couches matŽrielles[1], l'arrivŽe des systmes d'exploitation multit‰ches et des technologies comme le multithreading[2], un seul ordinateur peut aujourd'hui hŽberger plusieurs programmes et remplir ainsi plusieurs fonctions en mme temps. La notion de serveur ne correspond plus ˆ une machine mais plut™t ˆ un logiciel ˆ l'Žcoute des requtes des clients, qui rŽside sur une machine sur laquelle peuvent s'exŽcuter aussi d'autres logiciels remplissant d'autres services, donc d'autres serveurs.

Un systme qui accomplit les fonctions requises ˆ l'HyperNietzsche doit tre au moins constituŽ de deux serveurs Ð le serveur http et le serveur de bases de donnŽes Ð, puis d'un systme d'exploitation multit‰ches capable d'hŽberger les deux serveurs et de gŽrer le matŽriel (processeurs, mŽmoires, disques) d'une faon efficace et fiable.

MalgrŽ les nombreuses possibilitŽs existantes, le choix de l'architecture matŽrielle et logicielle n'a pas ŽtŽ pour nous un problme Žpineux. En effet, il existe dŽsormais une solution optimale d'un point de vue Žconomique et technique, provenant du monde du logiciel libre, et qui est composŽ de Linux comme systme d'exploitation, dÕApache comme serveur http, de MySQL comme serveur de bases de donnŽes et, enfin, de PHP comme module additionnel dÕApache pour la communication entre les deux serveurs et la gŽnŽration de pages dynamiques. Pour une telle couche logicielle, le matŽriel ne doit pas nŽcessairement tre des plus cožteux et et des plus performants : un modeste PC (Personal Computer) ou un rŽseau de PC, ordinateurs dŽsormais de moindre cožt, permettent d'exŽcuter efficacement Linux et les autres logiciels de support.

Le systme d'exploitation GNU Linux

Conu au dŽpart comme un clone Unix pour PC en 1991 par Linus Torvald, un Žtudiant de l'UniversitŽ de Helsinki, en Finlande, et ensuite dŽveloppŽ par de nombreux programmeurs gr‰ce au rŽseau mondial Internet, Linux est rapidement devenu lÕun des systmes d'exploitation les plus populaires au monde. Son succs s'explique facilement par sa structure propre bien conue, sans doute due ˆ la formation acadŽmique de son crŽateur, par son code source accessible et modifiable, en un mot libre (en anglais open), et aussi par une sorte de dŽontologie informatique selon laquelle toutes les normes et les standards (IEEE POSIX.1, System V, BSD, protocoles de l'Internet etc) sont rigoureusement respectŽs. Mais le trait le plus sŽduisant de Linux est certainement sa gratuitŽ. Cet aspect accompagne son haut niveau technique et le rend quasiment imbattable vis-ˆ-vis de ses concurrents commerciaux.

Il est nŽcessaire de prŽciser que sous le nom Linux se cache souvent non seulement le cÏur ou noyau (kernel) d'un systme d'exploitation, mais aussi toute une panoplie de logiciels qui constitue une imposante bo”te ˆ outils pour l'exploitation de la machine. Ces logiciels sont issus du mouvement GNU (acronyme rŽcursif Gnu is Not Unix) crŽŽ en 1984 par Richard Stallman, ˆ l'Žpoque chercheur au Laboratoire d'Intelligence Artificielle du MIT. Ils reprŽsentent une partie trs importante du systme, un trousseau sans lequel le noyau Linux lui-mme n'aurait pas pu tre dŽveloppŽ. Comme tous les logiciels GNU, Linux est utilisable sous licence General Public License GNU (GPL) pour laquelle la libre copie, modification et redistribution du programme est permise mais ˆ condition de toujours livrer les sources et de ne pas empcher les autres de faire de mme.

D'un point de vue technique, les caractŽristiques les plus marquantes de Linux sont la portabilitŽ du code, qui fait que le noyau peut s'exŽcuter sur diffŽrentes architectures (PC, Machintosh, SPARC, entre autres), un systme de fichiers (ext2) performant et fiable, la prise en compte de la quasi-totalitŽ des autres systmes de fichiers du marchŽ (DOS, VFAT, Apple Macintosh, NTFS, OS/2 HPFS, etc.), l'implantation complte de la couche rŽseau TCP/IP, la pagination de la mŽmoire vive, la mŽmoire virtuelle (espace de swap), les librairies dynamiques partagŽes et l'optimisation des accs aux disques (cache).

Le serveur http Apache

Disponible en licence GPL pour diffŽrentes plates-formes, Apache est ˆ l'heure actuelle le serveur http (ou serveur web) le plus employŽ au monde et reprŽsente lÕun des chevaux de bataille du mouvement pour le logiciel libre. Le projet Apache a ŽtŽ dŽveloppŽ sur la base d'un des premiers serveur http, le NCSA httpd, construit par le National Center for Supercomputing Applications, un Žtablissement public amŽricain qui rendit disponible le code source du logiciel, ce dernier Žtant dŽveloppŽ gr‰ce ˆ l'argent des contribuables.

Ce logiciel conjugue plusieurs qualitŽs qu'on demande ˆ un serveur http. D'abord, il est capable d'exploiter les caractŽristiques multit‰ches d'un systme d'exploitation comme Linux pour gŽrer plusieurs requtes ˆ la fois et, aussi, pour permettre ˆ un administrateur de maintenir le systme sans interrompre le service. Ensuite, il peut nŽgocier avec le client un style ou une langue pour les rŽponses, un format de fichier pour les images (jpeg, gif, tiff, etc.) ou pour les textes (dvi, Postscript, pdf, etc.). Enfin, en ce qui concerne la sŽcuritŽ, il est capable dÕauthentifier les clients pour permettre certains services spŽciaux. N'importe quel serveur http est le douanier du systme pour les clients provenant d'Internet et, par consŽquent, ouvre une porte qui peut tre exploitŽe par des pirates informatiques. Le code Žcrit par les programmeurs d'Apache envisage, dans les limites du possible, les violations d'un systme hŽbergeant le logiciel. De plus, ces mmes programmeurs, trs sensibles ˆ la question, rŽagissent promptement et proposent les corrections du code (patch) ds quÕun trou de sŽcuritŽ potentiellement exploitable est dŽcouvert et signalŽ aux responsables du projet.

Le serveur de bases de donnŽes MySQL

Il s'avre quÕApache n'a pas de vŽritables concurrents dans le contexte du logiciel libre. En revanche, on ne peut pas en dire autant des systmes de gestion de bases de donnŽes (SGBD) qui sont nombreux et de bonne qualitŽ. Ë l'heure actuelle, les principaux acteurs sont PostgreSQL[3] et MySQL[4], tous deux fondŽs sur le modle relationnel, le premier compltement libre et gratuit, le second libre mais uniquement gratuit pour les systmes d'exploitation non Microsoft, comme Linux, FreeBSD ou OS/2.

Moins puissant que son rival Postgres, MySQL prŽsente toutefois, dans sa simplicitŽ, des atouts intŽressants. On relve son efficacitŽ et son adoption du langage SQL (Structured Query Language) pour exprimer les requtes au serveur. Toutes les opŽrations de crŽation, modification, insertion, Žlimination de la structure des donnŽes (les tables) ou des donnŽes elles-mmes (les enregistrements) se font par le biais de requtes exprimŽes en SQL, un langage de haut niveau, largement standardisŽ depuis sa conception dans les annŽes '70, qui permet dÕindiquer les donnŽes que l'on souhaite extraire sans besoin de spŽcifier comment y accŽder : le systme se charge de les rechercher. L'existence d'un certain nombre de logiciels ˆ interface graphique pour dŽfinir et gŽrer une base de donnŽes MySQL d'une faon trs conviviale, peut voiler ˆ l'utilisateur la technologie sous-jacente. Il s'agit tout simplement de programmes d'interface qui traduisent les clics de souris en requtes SQL expŽdiŽes et traitŽes par le serveur MySQL, que l'utilisateur ne voit pas et dont il nÕa probablement pas conscience. Parmi ces programmes, le prŽcieux PHPMyAdministrator, Žcrit dans le langage PHP que nous allons traiter par la suite, mŽrite une attention toute particulire puisquÕil permet de gŽrer une base de donnŽes MySQL aisŽment et ˆ distance via le rŽseau Internet ˆ lÕaide dÕun simple butineur http.

Le module PHP pour Apache

Un site Internet est qualifiŽ de dynamique lorsque le contenu, qui est du code HTML, est le rŽsultat d'un calcul effectuŽ ˆ la volŽe par le serveur http. En revanche, quand le site est statique, le contenu est stockŽ une fois pour toutes dans des fichiers. Ë l'heure actuelle, les deux solutions les plus rŽpandues pour construire un site dynamique sont la technologie CGI (Common Gateway Interface) et les langages HTML-embedded dont fait partie PHP. La premire prŽvoit que le serveur http active, pour chaque requte de page dynamique, un autre programme dont la sortie (l'output), au format HTML, sera canalisŽ vers le client. L'avantage de cette approche est que les programmes gŽnŽrateurs du HTML seront indŽpendants du serveur http et pourront tre Žcrits dans le langage prŽfŽrŽ du programmeur. Le choix d'un langage compilŽ (C, Pascal, etc.) et pas celui d'un langage interprŽtŽ (Perl, Python, etc.) favorisera l'efficacitŽ des rŽponses, ce qui peut reprŽsenter un deuxime avantage de cette technique. Mais l'inconvŽnient principal est qu'une partie du code HTML que le programme produit pendant son exŽcution se trouve discrtement cachŽ ˆ l'intŽrieur des sources du programme, ce qui rend souvent dŽlicates les modifications du contenu du site.

Face ˆ cet inconvŽnient, c'est la deuxime solution, celle d'un langage HTML-embedded, qui para”t tre la plus souple et avantageuse. En premier lieu, le r™le d'un serveur http, comme Apache, est celui de traduire une requte provenant d'Internet dans l'adresse du fichier de type HTML correspondant. Ensuite il se doit d'envoyer ce fichier au client en suivant le protocole http. Cette solution consiste donc ˆ rendre le serveur http capable d'interprŽter les fichiers juste avant leur envoi aux clients. Ainsi, il existe un module qui augmente les fonctionnalitŽs du logiciel Apache en lui donnant la possibilitŽ d'interprŽter les fichiers composŽs d'instructions PHP, un langage de programmation impŽratif classique inspirŽ des langages C, Perl et Java. Pour exploiter cette nouvelle fonctionnalitŽ, les fichiers se trouvant sur le serveur pourront alors tre composŽs de parties Žcrites en HTML et d'autres parties Žcrites en PHP. Les parties en PHP, Žventuellement prŽsentes, seront interprŽtŽes par Apache lui-mme pour composer (on dira "dynamiquement") un fichier qui, finalement, sera de type HTML et pourra tre visualisŽ par le logiciel de navigation du client.

Ce principe de fonctionnement facilite la construction du site. Les graphistes s'occuperont des parties HTML en utilisant Žventuellement des logiciels d'Ždition pour soigner le style de prŽsentation des contenus. Par ailleurs, les programmeurs pourront modifier les contenus en intervenant sur les parties PHP des mmes fichiers.

Le module PHP pour Apache est sous licence GPL et il est disponible, avec ses manuels, sur le site Internet de ses crŽateurs[5]. D'un point de vue technique, les traits les plus marquants de ce langage sont sa ressemblance avec le langage C d'un c™tŽ, et sa large bibliothque de fonctions d'un autre. Parmi ces multiples fonctions, on en distingue en particulier, celles liŽes ˆ l'envoi des requtes ˆ un serveur de bases de donnŽes, tel quÕOracle, Sybase, MySQL, ODBC, PostgreSQL, Informix, FilePro.

 


 

L'interaction entre philosophes et informaticiens

La premire phase d'un projet comme l'HyperNietzsche est naturellement celle dans laquelle les philosophes et les informaticiens discutent de la structure du site et, en particulier, de l'ensemble des donnŽes sur lesquelles il s'appuie.

Deux types fondamentaux de donnŽes sont concernŽs dans l'HyperNietzsche : les donnŽes relatives aux matŽriaux et celles relatives aux contributions. Du premier type font partie les Ïuvres et les manuscrits de Nietzsche, les lettres, les livres de la bibliothque de Nietzsche et leur reus, mais aussi des parties (logiques) ou portions (physiques) des prŽcŽdents comme les aphorismes ou chapitres d'une oeuvre, les pages d'une oeuvre, d'une lettre ou d'un livre, les fragments d'une page, etc. Du second type font partie les essais, les commentaires, les chemins (gŽnŽtiques, thŽmatiques ou chronologiques), les transcriptions (linŽarisŽes ou diplomatiques, interactives ou autres), les bibliographies, les traductions et les numŽrisations.

La base de donnŽes des matŽriaux

La base de donnŽes des matŽriaux, dŽnommŽe hn_materiaux, est constituŽe de plusieurs tables. Chaque matŽriau a un code unique, la clef_materiau, qui l'identifie dans l'ensemble de tous les matŽriaux. La table principale, appelŽe materiaux, enregistre la relation entre ce code universel et le type de matŽriau dont il s'agit (oeuvre, manuscrit, lettres, etc) et renvoie ainsi ˆ la table correspondante dans la mme base de donnŽes.

 

CREATE TABLE hn_materiaux.materiaux (

 

clef_materiau INTEGER NOT NULL AUTO_INCREMENT,

 

nom_table ENUM( "materiaux_lettres",

"materiaux_lettres_pages",

"materiaux_livres",

"materiaux_manuscripts",

"materiaux_manuscripts_pages",

"materiaux_oeuvres",

"materiaux_oeuvres_aphorismes",

"materiaux_oeuvres_chapitres",

"materiaux_oeuvres_pages",

"materiaux_recus",

"materiaux_recus_entrees" ),

 

clef_locale INTEGER NOT NULL,

 

PRIMARY KEY ( clef_materiau ),

UNIQUE ( nom_table, clef_locale )

 

);

 

 

Les autres tables de la base hn_materiaux ont donc une structure spŽcifique au type de matŽriau quÕelles reprŽsentent. Par exemple, la table des oeuvres de Nietzsche est constituŽe par des attributs (ou champs) qui enregistrent, pour chaque oeuvre, son sigle, son entrŽe bibliographique (la rŽfŽrence dans l'HyperNietsche), les Archives o elle est conservŽe, sa cote aux Archives et, enfin, si elle a ŽtŽ imprimŽe et diffusŽe (ID), imprimŽe mais non diffusŽ (IND) ou non imprimŽe ni diffusŽe (NIND).

 

CREATE TABLE hn_materiaux.materiaux_oeuvres (

 

oeuvre INTEGER NOT NULL AUTO_INCREMENT, # clef locale

 

sigle VARCHAR(20) NOT NULL,

code_biblio_hn INTEGER NOT NULL,

 

archive INTEGER,

collocation VARCHAR(30),

 

type ENUM("ID","IND","NIND"),

PRIMARY KEY ( oeuvre ),

 

UNIQUE ( code_biblio_hn ),

INDEX ( sigle )

 

);

La table des lettres constitue un autre exemple. Les informations spŽcifiques sont ici la date (autographe) d'Žcriture, l'expŽditeur, le destinataire et, comme pour les oeuvres, les Archives o elle est conservŽe et la cote.

 

CREATE TABLE hn_materiaux.materiaux_lettres (

 

lettre INTEGER NOT NULL AUTO_INCREMENT, # clef locale

 

date_autographe DATE,

 

expediteur INTEGER NOT NULL,

destinataire INTEGER NOT NULL,

 

archive INTEGER,

collocation VARCHAR(30),

 

PRIMARY KEY ( lettre ),

 

INDEX ( expediteur ),

INDEX ( destinataire ),

INDEX ( archive )

 

);

 

Le cas des matŽriaux contenus dans d'autres matŽriaux, comme les chapitres ou les aphorisme d'une oeuvre, est plus dŽlicat. Pour Žtablir le lien entre le matŽriau contenu (le chapitre) et le matŽriau contenant (l'oeuvre), on enregistrera le code de ce dernier dans la table du matŽriau contenu. Dans l'exemple suivant, celui de la table des chapitres des oeuvres, l'attribut oeuvre Žtablit ce lien. Un autre attribut, qu'on appellera numerotation, permet de dŽfinir un ordre parmi les portions contenues dans un mme matŽriau. Ainsi, d'une oeuvre spŽcifique nous pourrons retrouver les donnŽes du premier chapitre, du deuxime et ainsi de suite.

 

CREATE TABLE hn_materiaux.materiaux_oeuvres_chapitres (

 

chapitre INTEGER NOT NULL AUTO_INCREMENT, # clef locale

 

oeuvre INTEGER NOT NULL,

numerotation INTEGER,

 

titre VARCHAR(255),

 

PRIMARY KEY (chapitre),

UNIQUE ( oeuvre, numerotation ),

INDEX ( oeuvre )

 

);

 

Dans cette base de donnŽes, les matŽriaux sont dŽcrits mais n'ont pas de reprŽsentation digitale. La raison en est simple : toute reprŽsentation digitale d'un matŽriau, par exemple un fichier html contenant l'oeuvre Der Wanderer und sein Schatten, est le rŽsultat d'un travail rendu par un ou plusieurs auteurs. Cet apport, qu'on appellera numerisation, sera considŽrŽ comme une contribution au dŽveloppement de l'HyperNietzsche et sera enregistrŽ dans la base de donnŽes correspondante.

La base de donnŽes des contributions

La base de donnŽes des matŽriaux est distribuŽes selon des tables spŽcifiques aux divers types de matŽriaux existants. En revanche, toutes les contributions, malgrŽ leurs diffŽrences, sont enregistrŽes dans une seule table, appelŽe contributions, de la base de donnŽes hn_contributions. Ce choix est dž ˆ la nature rŽcursive du type de donnŽes des contributions. Une traduction, par exemple, est une contribution qui peut avoir comme objet un essai, qui est lui-mme une contribution. Aussi, les numŽrisations des essais, des commentaires, des chemins etc., sont des contributions qui font rŽfŽrence ˆ d'autres contributions. La dŽfinition d'une contribution a donc un caractre rŽcursif qui compliquerait la reconstitution des donnŽes distribuŽes sur plusieurs tables. De lˆ le choix de regrouper toutes les contributions dans une seule table, avec plusieurs attributs, Žventuellement significatifs en fonction du type de contribution concernŽe. Par exemple, l'attribut fichier, qui indique lÕadresse o est stockŽ le fichier correspondant ˆ la contribution concernŽe, sera significatif seulement dans le cas d'une numŽrisation (d'un matŽriau ou d'une autre contribution).

 

CREATE TABLE hn_materiaux.contributions (

 

clef_contribution INTEGER NOT NULL auto_increment,

 

date_presentation DATE,

date_acceptation date,

date_disponibilite_online date,

 

type ENUM('bibliographie',
'chemin genetique',
'chemin thematique',
'chemin chronologique',
'commentaire',
'essai',
'transcription diplomatique',
'transcription linearise',
'traduction contribution',
'traduction matŽriau',
'numerisation matŽriau',
'numerisation contribution')
NOT NULL,

 

contribution_objet INTEGER,

materiau_objet INTEGER,

 

langue INTEGER,

 

titre VARCHAR(255),

abstract text,

long_abstract text,

description text,

presentation text,

commentaire_des_auteurs text,

 

format enum('html','ps','pdf','txt','gif','jpeg'),

couleur enum('couleur','noir et blanc'),

 

dpi INTEGER UNSIGNED,

 

fichier INTEGER,

 

contribution_precedente INTEGER,

contribution_suivante INTEGER,

 

PRIMARY KEY (clef_contribution),

KEY contribution_objet (contribution_objet),

KEY materiau_objet (materiau_objet),

KEY type_langue (type, langue),

KEY contribution_objet_langue (contribution_objet, langue),

KEY materiau_objet_langue (materiau_objet, langue),

KEY format (format),

KEY fichier (fichier),

KEY contribution_precedente
(contribution_precedente, contribution_suivante)

);

 

Un contribution peut avoir un ou plusieurs auteurs. Pour ne pas limiter a priori le nombre d'auteurs possibles et, surtout, pour optimiser les recherches des auteurs d'un certain type de contribution, il est prŽfŽrable de dŽfinir une table ˆ part qu'on appellera contributions_auteurs.

 

CREATE TABLE hn_materiaux.contributions_auteurs (

 

clef_contribution INTEGER NOT NULL,

clef_annuaire INTEGER NOT NULL,

 

PRIMARY KEY (clef_contribution, clef_annuaire),

KEY clef_contribution (clef_contribution),

KEY auteur (clef_annuaire)

);

 

 

Pour gŽrer l'allocation des fichiers, qui pourront tre dŽposŽs sur le disque local ou sur un serveur ftp du rŽseau local ou sur l'Internet, nous aurons une table d'allocation ˆ la mode des FAT (File Allocation Table) des systmes d'exploitation.

 

CREATE TABLE hn_fichiers.fat (

fichier INTEGER NOT NULL AUTO_INCREMENT,

allocation VARCHAR(255) NOT NULL,

 

KEY fichier (fichier),

UNIQUE allocation (allocation)

);

La maquette en html et sa transformation dynamique

Le choix d'un langage HTML-embedded comme PHP est une solution qui prŽsente un avantage peut-tre inattendu dans le dŽveloppement d'un site web. Les philosophes, probablement novices dans l'art de la programmation, pourront toutefois rŽaliser, ˆ l'aide d'un logiciel graphique tel que GoLive, Dreamweaver, PageMill, etc., la partie HTML des pages dynamiques. Le rŽsultat d'un tel travail sera ˆ la fois un prototype du site et, en mme temps, une spŽcification formelle de ce que l'on s'attend du site. Le programmeur devra alors prendre le relais pour ajouter le code PHP gŽnŽrateur des parties dynamiques.

Supposons par exemple que nous visualisons le cadre de mise en contexte hypertextuelle concernant lÕÏuvre Der Wanderer und sein Schatten (Le voyageur et son ombre) et accŽdons ˆ la liste des contributions relatives ˆ cette Ïuvre. Le maquettiste aura dessinŽ une page de ce type :

Le programmeur ira donc fouiller dans le code HTML correspondant (que nous prŽsentons ici sous forme quelque peu abrŽgŽe) pour cerner les parties devant tre gŽnŽrŽes dynamiquement et pour y insŽrer le code PHP adŽquat.

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">

       <title>Liste des contributions</title>

       <base target="_blank">

</head>

<body background="/images/fonds/fond.gif">

       <center><h3><br>Contributions

              <hr width="70%"></h3></center>

<div align="left">

 

<h4>Transcriptions</h4>

 

<table border="0" cellspacing="2" cellpadding="0">

<tr valign=top>

<td><img src=/images/boules/contributions.gif width="14" height="14" naturalsizeflag="0"></td>

<td>

<font size="3">Paolo<a href="/contextes/auteurs/cadre_auteurs.php3?lang=33&auteur=10" target="_blank"> D'iorio</a>, Jean<a href="/contextes/auteurs/cadre_auteurs.php3?lang=33&auteur=20" target="_blank"> Loddo</a>, <a href="/contextes/contributions/cadre_contributions.php3?lang=33&materiau=1&transcription=5"> diplomatique</a></td></font></tr></table>

 

<h4>Chemins g&eacute;n&eacute;tiques</h4>

...

<h4>Chemins th&eacute;matiques</h4>

...

<h4>Commentaires</h4>

...

<h4>Essais</h4>

...

<h4>Traductions</h4>

...

</body> </html>

 

 

Dans cet exemple, les tables qui suivent les titres de niveau 4 (<h4>Transcriptions</h4>, <h4>Chemins g&eacute;n&eacute;tiques</h4> etc.) doivent tre remplacŽes par un code PHP qui interroge la base de donnŽes pour rŽcupŽrer les contributions effectivement associŽes au matŽriau mis en contexte. Le code PHP est reconnaissable par le fait quÕil est dŽlimitŽ par des balises Ç <? È et Ç ?> È.

 

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">

       <title>Liste des contributions</title>

       <base target="_blank">

</head>

<body background="/images/fonds/fond.gif">

              <center><h3><br>Contributions <hr width="70%"></h3></center>

<div align="left">

              <h4>Transcriptions</h4>

<? lister_transcriptions_de_materiau ($clef_materiau); ?>

 

              <h4>Chemins g&eacute;n&eacute;tiques</h4>

<? lister_chemins_de_materiau ($clef_materiau,'genetique'); ?>

 

              <h4>Chemins th&eacute;matiques</h4>

<? lister_chemins_de_materiau ($clef_materiau,'thematique'); ?>

 

              <h4>Chemins chronologiques</h4>

<? lister_chemins_de_materiau ($clef_materiau,'chronologique'); ?>

 

              <h4>Commentaires</h4>

<? lister_commentaires_de_materiau ($clef_materiau); ?>

 

              <h4>Essais</h4>

<? lister_essais_de_materiau ($clef_materiau); ?>

 

              <h4>Traductions</h4>

<? lister_traductions_de_materiau ($clef_materiau); ?>

</body>

</html>

 

Pour expliquer davantage le fonctionnement du code PHP, prenons par exemple la fonction lister_transcriptions_de_materiau() Žcrite expressŽment pour cette t‰che. Elle interroge le serveur MySQL par une requte SQL avec lÕappel de la fonction standard mysql_query().

function lister_transcriptions_de_materiau (

$clef_materiau,

$type = "", // "linearise", "diplomatique" sinon toutes

$src_img = "/images/boules/contributions.gif",

$href_base="/contextes/contributions/cadre_contributions.php3",

$href_base_auteur="/contextes/auteurs/cadre_auteurs.php3"

)

{

$connection = mysql_connect("localhost","httpd","");

if ($type=="linearise")

$suffix = " and type='transcription linearise'";

if ($type=="diplomatique")

$suffix = " and type='transcription diplomatique'";

 

$result = mysql_query("select clef_contribution

from hn_contributions.contributions

where materiau_objet='$clef_materiau'

and ( type='transcription linearise'

or type='transcription diplomatique' )

$suffix

order by date_disponibilite_online", $connection);

 

while ($rec = mysql_fetch_array($result))

{

ref_contribution( $rec['clef_contribution'],

$src_img,

$href_base,

$href_base_auteur

);

}

mysql_close($connection);

}

Expansions multiples

LÕinformatique vit dÕun processus continu et irrŽfrŽnable de crŽation de couches dÕabstraction successives qui, ˆ partir dÕŽlŽments simples, donne naissance ˆ des outils de plus en plus puissants et sophistiquŽs. Notre systme nÕŽchappe pas ˆ cette rgle gŽnŽrale et, en conclusion de notre article, nous en donnerons quelques exemples qui touchent aux langages utilisŽs, ˆ la structure dÕensemble du systme informatique et ˆ lÕenvergure du projet lui-mme et ˆ ses possibilitŽs dÕexpansion.

DŽpasser les limites des outils disponibles

Disposer dÕun langage puissant tel que PHP permet de contourner certaines limitations de notre serveur de base de donnŽes MySQL. Nous avons en effet la possibilitŽ dÕŽtendre le dialecte SQL utilisŽ par le serveur gr‰ce ˆ des fonctions PHP capables dÕinterprŽter le langage Žtendu. Ces fonctions prendront en argument une requte dans le langage Žtendu et lÕinterprŽteront en exŽcutant un certain nombre de requtes SQL standard, en traitant les rŽsultats et en composant finalement la rŽponse ˆ la requte initiale.

Par exemple, la construction syntaxique des selects imbriquŽes nÕest pas possible dans le dialecte de MySQL. Ou encore, le systme ne permet pas de dŽfinir des vues (views), cÕest-ˆ-dire des tables virtuelles calculŽes dynamiquement ˆ partir des tables composant rŽellement la base de donnŽes. Or, cette dernire possibilitŽ est trs utile dans un projet comme le n™tre, o les donnŽes sont forcŽment distribuŽes de faon complexe sur plusieurs tables et sur plusieurs bases. Les vues nous permettraient de dŽfinir une fois pour toute une certaine faon de composer les donnŽes provenant de plusieurs tables, ce qui simplifierait ŽnormŽment l'Žcriture des requtes.

Par exemple, dans le cas o il serait nŽcessaire dÕaccŽder aux informations concernant un essai critique publiŽ dans lÕHyperNietzsche, il faudrait accŽder ˆ la table des auteurs pour rŽcupŽrer le code de lÕauteur, ˆ la table des donnŽes personnelles pour rŽcupŽrer son nom et prŽnom, ˆ la table des entrŽes bibliographiques pour rŽcupŽrer le titre et la date de publication de lÕessai et ˆ la table dÕallocation des fichiers pour rŽcupŽrer lÕadresse du fichier contenant le texte de lÕessai. Si au contraire nous avions dŽfini prŽalablement (avec une instruction select) une vue comportant la rŽfŽrence complte dÕun essai, il nous suffirait dÕaccŽder ˆ une seule table virtuelle (la vue en question) avec une select trs simple au lieu de devoir Žcrire une select complexe accŽdant aux diffŽrentes tables concernŽes.

Un interprŽteur capable de gŽrer les vues et les selects imbriquŽes a pu tre Žcrit sans grand effort en PHP gr‰ce ˆ la riche librairie de fonctions standard pour la manipulation des cha”nes de caractres. Les vues sont mŽmorisŽes dans la table views de la base hn_meta. Une nouvelle fonction d'envoi de requtes au serveur MySQL, mysql_equery() (equery pour extended query), remplace la fonction standard mysql_query(). La syntaxe d'une select de MySQL s'ecrit, d'une faon quelque peu informelle, de la faon suivante :

 

<Select> ::= select <Columns> from <Tables> [ where ... ]

<Tables> ::= <Table> [ as <Id> ] | <Table> , <Tables>

<Table> ::= <Id>

 

Or, dans la syntaxe Žtendue, la table peut tre une vue, identifiŽe par un nom, ou peut tre le rŽsultat d'une sous-select (select imbriquŽes) dŽfinie ˆ l'intŽrieur des doubles crochets.

 

<Table> ::= <Id> | view(<Id>) | [[ <Select> ]]

 

Il faut remarquer le caractre rŽcursif de la syntaxe : la sous-select et la dŽfinition de la vue peuvent appartenir elles aussi au langage Žtendu. Par exemple, nous pourrons inclure dans notre code PHP des appels du genre :

$result = mysql_equery("select clef, titre, auteur

from view(essais), $connection);

La fonction mysql_equery() rŽcuprera la dŽfinition correspondante ˆ l'identificateur essais dans la table hn_meta.views. Il s'agira peut-tre d'une select imbriquŽe, comme par exemple :

 

select clef_contribution as clef, date_publication, titre, auteur

from [[ select *

from hn_contributions.contributions

            where type_contribution = 'essai']]

 

ParallŽlisation du systme

Actuellement le systme HyperNietzsche tourne sur un PC compatible dÕentrŽe de gamme qui nous a servi dans la phase de construction du site et qui devrait gŽrer sans trop de problme le trafic occasionnŽ par son lancement.

Mais, lorsque cette solution se rŽvlera insuffisante pour un nombre plus important dÕaccs simultanŽs, nous nÕaurons pas besoin de changer la structure de la base de donnŽes, ni de rŽŽcrire le code PHP. Gr‰ce, encore une fois, ˆ la disponibilitŽ de logiciels libres dÕexcellente qualitŽ, comme OcamlP3L basŽ sur MPI ou PVM (Parallel Virtual Machine), il ne sera ni cožteux ni compliquŽ de mettre en place un systme distribuŽ de gestion des requtes provenant dÕInternet, en ajoutant autant de machines que nŽcessaire.

Pour augmenter les performances du systme, les bases de donnŽes et les fichiers de lÕHyperNietzsche pourraient tres rŽpliquŽs totalement ou en partie sur chaque ordinateur serveur de requtes, une redondance des donnŽes qui pourrait Žgalement tre utile comme ŽlŽment de tolŽrance aux pannes.

Distribuer les requtes adressŽes ˆ un serveur Web sur plusieurs serveurs est un problme pour lequel sont envisageables diffŽrentes solutions. La question principale est celle de cerner les goulets dÕŽtranglement possibles, du c™tŽ du rŽseau ou alors du point de vue de la rŽpartition de t‰ches ou encore de lÕallocation des fichiers. Nous ne prŽsenterons pas ici une liste des solutions possibles et, dÕailleurs, sur ce point spŽcifique nous nÕavons pas encore tranchŽ en faveur dÕune solution dŽterminŽe car pour lÕinstant nous ne sommes pas en mesure dÕestimer la quantitŽ et la nature des requtes qui afflueront vers le systme.

Mais sans besoin de recourir ˆ des logiciels spŽcifiques, les outils que nous avons choisis, PHP et MySQL, nous permettent dÕenvisager une solution simple et ˆ portŽe de main. Elle consiste ˆ utiliser plusieurs machines comme serveurs de base de donnŽes, chacune avec une copie de la base HyperNietzsche, et ˆ prŽvoir une politique simple (par exemple un choix au hasard) que les fonctions PHP adopteront pour distribuer les requtes SQL sur les serveurs. En effet, le serveur Apache peut, par le biais de la fonction standard de PHP mysql_connect(), se connecter ˆ nÕimporte quel serveur MySQL sur le rŽseau local ou sur l'Internet.

Imaginons que notre serveur Apache tourne sur une machine appelŽe local.net.fr. Voici un exemple de code PHP qui Žtablit une connexion avec un serveur MySQL rŽsident ˆ l'adresse remote.net.fr et lui demande la liste des bases de donnŽes qu'il contient.

<html>

<head>

      <title>Bases de DonnŽes du serveur MySQL@remote.net.fr</title>

</head>

 

<body>

 

<?

$connection = mysql_connect("remote.net.fr","apache","secret");

 

$result = mysql_query("show databases", $connection);

 

while ($rec = mysql_fetch_array($result)) { echo $rec[0],"<BR>"; }

 

mysql_close($connection);

?>

 

</body>

</html>

Pour que le serveur MySQL de remote.net.fr accepte la connexion et rŽponde ˆ la requte "show databases", il devra tre configurŽ pour autoriser les accs de l'utilisateur apache provenant de la machine local.net.fr et ayant le mot de passe "secret".

Revenons sur le schŽma classique de rŽpartition des t‰ches de la figure prŽcŽdente. Les r™les de dispatcher et de collector seraient ici assurŽs par le serveur Apache interprŽtant le code PHP, tandis que les serveurs seraient des serveurs MySQL rŽsidents sur des machines distinctes et les communications seraient basŽes sur le protocole standard TCP/IP.

MetaHyper

Le systme HyperNietzsche que nous prŽsentons ici a l'ambition de valoir en tant que modle utilisable pour d'autres auteurs ou pour des problŽmatiques philosophiques ou littŽraires susceptibles d'tre traitŽes dans un contexte de collaboration internationale entre chercheurs.

Si le systme HyperNietzsche se gŽnŽralisait ˆ d'autres auteurs, nous pourrions envisager encore une autre montŽe dans le processus d'abstraction. L'idŽe serait d'avoir des systmes, que nous appellerons Ç MetaHyper È, qui regroupent les informations provenant de diffŽrents systmes de base suivant le modle HyperNietzsche. Un MetaHyper pourrait interroger les bases de donnŽes des systmes de type Hyper (HyperSchopenhauer, HyperKant, HyperDescartes) et se proposer comme un site de discussion thŽorique, par exemple, sur l'idŽe de sujet de la connaissance.

Mais comment le rŽaliser techniquement ? En ce cas, la philosophie gŽnŽrale qui guide notre dŽmarche, l'Open Source, se rŽvle particulirement prŽcieuse et mme la seule utilisable. En effet, nous avons vu dans le paragraphe prŽcŽdent que le serveur de base de donnŽes peut rŽsider ailleurs que le serveur http, n'importe o sur l'Internet et donc Žgalement sur un autre site Hyper. Nous avons vu qu'il suffit que ce dernier nous donne le droit d'accs pour pouvoir interroger la base ˆ distance. Mais, bien entendu, cela ne n'est pas suffisant. Pour que l'interrogation d'un serveur distant donne les rŽsultats escomptŽs, il nous faudra conna”tre dans les dŽtails la structure des bases de donnŽes distantes. Autrement dit, ces structures devront tres publiques ou Open Source.

<html>

<head>

      <title>Interrogation du serveur postgreSQL@HyperKant.net</title>

</head>

<body>

 

<?

$connection = postgreSQL_connect("HyperKant.net","apache","secret");

 

$result = postgreSQL_query("select * from hk.oeuvres", $connection);

É

mysql_close($connection);

?>

 

</body>

</html>

Dans cet exemple, le serveur Apache de notre MetaHyper interroge ˆ distance un serveur de base de donnŽes postgreSQL rŽsidant sur le systme HyperKant.net. La requte envoyŽe au serveur postgreSQL prŽsuppose l'existence d'une base de donnŽes dŽnommŽe hk contenant une table dŽnommŽe Ïuvres.

Bibliographie

Unix & RŽseau

1)    Craig Hunt. TCP/IP Administration de rŽseau. Deuxime Ždition. ƒditions O'REILLY, 1998.

2)    Christian PŽlissier. Utilisation Administration systme et rŽseau. 2e Ždition. Herms, 1996.

Bases de DonnŽes

3)    Georges Gardarin. Bases de DonnŽes objet & relationnel. ƒditions Eyrolles, 1999.

Linux

4)    RŽmi Card, Eric Dumas, Franck MŽvel. Programmation Linux 2.0, API systme et fonctionnement du noyau. 2e Ždition. ƒditions Eyrolles, 1998.

5)    Matt Welsh. Linux Installation & Getting Started. Linux Documentation Project (LDP), 1998. Original et traductions disponibles ˆ l'adresse http://www.linuxdoc.org.

6)    Kurt Seifried. Linux Administrator's Security Guide. Linux Documentation Project (LDP), 2000. Original et traductions disponibles ˆ l'adresse http://www.linuxdoc.org.

7)    Lars Wirzenius, Joanna Oja. The Linux System Administrators' Guide. Linux Documentation Project (LDP), 1999. Original et traductions disponibles ˆ l'adresse http://www.linuxdoc.org.

8)    Olaf Kirch. The Linux Network Administrators' Guide. Linux Documentation Project (LDP), 1996. Original et traductions disponibles ˆ l'adresse http://www.linuxdoc.org.

9)    Larry Greenfield. The Linux Users' Guide. Linux Documentation Project (LDP), 1996. Original et traductions disponibles ˆ l'adresse http://www.linuxdoc.org.

Apache et PHP

10)         Ben Laurie, Peter Laurie. Apache. Installation et mise en oeuvre. ƒditions O'REILLY, 1998.

11)         Leon Atkinson. Core PHP Programming. Prentice Hall PTR, 1999.

12)         Bakken, Aulbach, Schmid, Winstead, Wilson, Lerdof, Suraski. PHP3 Manual. Stig Saether Bakken, 1998. Disponible ˆ l'adresse http://www.php.com.

13)         Philippe ChalŽat, Daniel Charnay. Programmation HTML et Javascript. ƒditions Eyrolles, 1998.

14)         Christian Neuss, Johan Vromans. Applications CGI en Perl pour les Webmasters. International Thomson Publishing France, 1996.



[1] Autrement dit, des ŽlŽments constituant lÕarchitecture hardware (processeurs, mŽmoires, disques durs).

[2] CÕest-ˆ-dire la capacitŽ pour un processus ˆ sÕaccomplir en se divisant en plusieurs ÒfilsÓ dÕexŽcution indŽpendants.

[3] http://www.postgresql.net

[4] http://www.mysql.com

[5] http://www.php.com