Attention : Cette page aride et austère traite essentiellement d'informatique, à peine de philosophie ; elle présuppose un certain nombre de connaissances techniques. Pour une utilisation standard de notre système, vous pouvez donc allègrement vous dispenser de sa lecture.
Une page plus accessible, destinée aux utilisateurs débutants, est en cours de rédaction.
La « langue maternelle » de la SpinozaBase est le langage XML. C'est de ce puissant langage que sont dérivés tous les outils rassemblés ici. La matrice du projet est en effet le fichier ethicadb.xml, qui contient l'intégralité du texte latin de Spinoza, enrichi de balises spécifiques. Par souci de cohérence avec le contenu, l'ensemble du code a été écrit en latin.
Le texte de Spinoza a d'abord été morcelé en entités
argumentatives (entitas
) : parties
(pars
), définitions (definitio
), axiomes
(axioma
), lemmes, etc. Chaque entité est encadrée par des
balises XML nommées <entitas>, dont voici quelques exemples
typiques :
Comme vous pouvez le constater, la balise contient déjà certaines informations :
numerus
) de partie, de proposition, de scolie,
etc. ; typus
) : partie, proposition, définition, axiome,
etc. ; id
) ; titulus
), notamment pour les
parties (De Deo, etc.). Chaque entité argumentative est identifiée par un code tel que 101, 104d, 213l5, 244sc2, etc. Sous leur aspect mystérieux, ces identifiants sont régis par un petit nombre de règles simples, et sont la clef du système logiciel adopté par notre projet. La nomenclature adoptée pour les identifiants est la suivante.
L'Éthique contient de nombreux renvois entre les entités argumentatives ; notamment — mais non exclusivement — les propositions renvoient à des définitions, axiomes, ou autres propositions. Dans la syntaxe de notre fichier XML, chaque renvoi est identifié par une balise nommée <patet-ex>, en référence à la démonstration de la proposition 1 de la première partie de l'Éthique : patet ex definitione 3 et 5. La structure de cette balise est relativement simple, comme le montrent les exemples suivants :
C'est donc sous cette forme qu'a été structuré en XML le texte latin de Spinoza. Cette syntaxe permet par la suite d'automatiser certaines opérations, comme nous allons le voir.
La moindre des choses que nous pouvions proposer était une version en HTML du texte latin. Il aurait été fastidieux de retaper tout le texte, sans compter les erreurs qui auraient pu s'y ajouter à notre insu. Aussi fallait-il un moyen de convertir automatiquement notre fichier XML en HTML. Par chance, le langage XSLT, dialecte du XML, a été conçu pour cela — entre autres choses, comme nous le constaterons par la suite.
C'est pourquoi nous avons écrit la feuille de style ethicadb.xsl. Appliquée au fichier XML réalisé précédemment, elle a généré une page web : ethica.html. Cette édition latine de Spinoza utilise les ressources de l'hypertexte pour relier chaque entité argumentative, d'une part aux entités auxquelles elle renvoie supra, de l'autre à celles qui s'y réfèrent infra. Cela peut faciliter la lecture du livre, en montrant par exemple concrètement ce que telle ou telle définition sert véritablement à démontrer. L'on peut aussi s'apercevoir avec surprise que certaines définitions, comme la troisième du deuxième livre, ne sont pas utilisées explicitement une seule fois dans l'ouvrage.
Pour être plus précis, il ne s'agit pas véritablement de HTML mais de XHTML ; comme son nom l'indique, il s'agit une fois encore d'un dialecte XML.
Tous les langages utilisés jusqu'ici — XML, XSLT, XHTML — étaient en dernière instance du XML. Langage puissant et souple, vous aurez déjà pu le remarquer. Mais qui connaît également certaines limites, et notamment la difficulté d'effectuer des recherches complexes. Il existe un langage d'une grande efficacité pour ceci, mais il n'a strictement aucun lien de parenté avec XML ; il s'agit de SQL.
Il fallait donc pouvoir traduire notre fichier XML en SQL ; ce qui a pu être réalisé au moyen d'une nouvelle feuille de style XSLT nommée xml2sql.xsl. Celle-ci a généré le programme SQL ethicadb.sql, qui à son tour a créé la base SQLite ethicadb.db (ce dernier fichier, binaire, n'est pas lisible par des humains).
La base SQL est composée de trois tables. La
première, entitas
, contient la liste de toutes les entités
argumentatives, avec les champs suivants :
id
: un identifiant numérique, par ordre croissant :
1, 2, 3, ... clavis
: une clef correspondant à l'identifiant
attribué à l'entité dans notre fichier XML (115, 213l3,
244sc2...). Attention : l'identifiant XML n'est
jamais identique à l'identifiant SQL ! typus
: le type de
l'entité : definitio
, propositio
, appendix
... numerus
: le numéro de l'entité : scolie 2,
lemme 3... titulus
: le titre de l'entité, notamment pour les
cinq parties du livre. id | clavis | typus | numerus | titulus |
---|---|---|---|---|
1 | p1 | pars | 1 | De Deo |
2 | 1d | definitiones | ||
3 | 1d1 | definitio | 1 | |
4 | 1d2 | definitio | 2 | |
... | ... | ... | ... | ... |
La deuxième table de la base SQL s'appelle patetex
;
elle contient trois champs :
id
: un identifiant de renvoi : 1, 2, 3... ex
: l'entité vers laquelle un renvoi est
effectué ; ad
: l'entité contenant ledit renvoi. id | ex | ad |
---|---|---|
1 | 1d3 | 101d |
2 | 1d5 | 101d |
3 | 1d3 | 102d |
4 | 1a5 | 103d |
... | ... | ... |
La troisième et dernière table, inest
(« est dans » en
latin), désigne l'inclusion d'une entité dans une autre. Par exemple,
la démonstration de la première proposition de la première partie
(101d) est incluse dans la première proposition (101), elle-même
comprise dans la première partie (p1). La table inest
contient trois champs :
id
;circa
, qui désigne le contenant ;intra
, qui désigne le contenu.id | circa | intra |
---|---|---|
1 | p1 | 1d |
2 | p1 | 1d1 |
3 | p1 | 1d2 |
4 | p1 | 1d3 |
... | ... | ... |
Pour utiliser la base SQL, il faut soit connaître ce langage, soit utiliser une interface qui vous en dispense ; simplifier l'utilisation de cette base est notre principal défi. Voici à titre d'exemples quelques requêtes possibles :
afficher la totalité de la
table entitas | SELECT * FROM
entitas; |
afficher la totalité de la
table patetex | SELECT * FROM
patetex; |
le palmarès, dans l'ordre, des entités les plus référencées, avec le nombre de citations de chacune | SELECT ex, count(ex) AS cnt FROM patetex GROUP BY ex ORDER BY cnt DESC; |
Tous les fichiers et programmes mentionnés ci-dessus fournissent la structure technique du projet, sans toutefois donner véritablement les moyens de les utiliser, sauf à ceux qui connaîtraient déjà les langages XML et SQL.
Comme l'on ne saurait attendre de tout historien de la philosophie qu'il ait été initié à SQL, langage relativement peu intuitif, nous créerons progressivement des interfaces facilitant l'utilisation de ces ressources. Le meilleur candidat pour réaliser des interfaces interactives est le langage PHP, et c'est pourquoi nous aurons recours à ses services.
Tous les fichiers et programmes du projet sont des documents et logiciels libres, sous licence GPL et en téléchargement libre. Vous pouvez, sans même avoir à solliciter mon accord, les copier, les modifier et les redistribuer.