Quelle est l'axiome le plus souvent cité dans l'Éthique de Spinoza ? Y a-t-il des définitions qui ne soient jamais citées ? Que permet de démontrer telle ou telle proposition ? Dans quelle mesure la cinquième partie utilise-t-elle les résultats de la première ? Combien y a-t-il en tout de propositions dans l'ouvrage ? Quelles sont, dans l'ordre, les dix propositions « cardinales » du livre, c'est-à-dire les plus souvent citées ?
Autant de questions que l'on ne peut manquer de se poser, occasionnellement, en étudiant l'Éthique. Questions frustrantes en ceci que simples à décider, leurs réponses sont fastidieuses à élaborer : la procédure en est mécanique et répétitive. Aussi peut-on espérer gagner du temps en les déléguant à des ordinateurs : c'est l'objectif de notre projet.
Nous vous proposons d'abord un nombre fini, et relativement petit, de statistiques typiques. Par exemple, si vous voulez savoir quelles sont les définitions, axiomes etc. auxquels renvoie la proposition 26 de la première partie — ce que nous appelons son ascendance — il vous suffit de remplir le formulaire adéquat. De même si vous souhaitez connaître l'ensemble des propositions qui s'appuieront sur la proposition 26 dans la suite de l'ouvrage — sa « descendance ». Ces questions, fréquentes dans les études spinozistes, recevront facilement une réponse grâce à l'interface que nous vous proposons.
Mais parfois, vous aimeriez élaborer des statistiques plus fines, plus personnelles, partant moins prévisibles. Notre projet vous autorise à concevoir vous-mêmes les requêtes qui vous intéressent, et ce au moyen d'un langage informatique appelé SQL. En parcourant les pages du Projet Ethica, vous avez peut-être douloureusement fait connaissance avec lui. Langage barbare s'il en est, dans lequel pour connaître le nombre de propositions contenues dans chacune des parties de l'Éthique — question intuitivement triviale — il faut taper l'indigeste commande suivante :
SELECT p1.clavis, count(p2.clavis)
FROM entitas p1, entitas p2, inest
WHERE p1.typus='pars' AND p2.typus='propositio' AND circa=p1.clavis AND intra=p2.clavis
GROUP BY p1.clavis
ORDER BY p1.id ASC;
Mais comme il arrive souvent avec des langages formels, la complexité et la contre-intuitivité sont le prix de la rigueur. SQL est un langage informatique extrêmement puissant et précis dont la fonction est de manipuler des bases de données ; c'est la raison pour laquelle il a été choisi pour le Projet Ethica.
Toutes les personnes potentiellement intéressées par le Projet Ethica ne connaissent pas le langage SQL ; aussi nous efforcerons-nous dans ce document de présenter quelques notions de ce langage, appliquées à la base de données qui nous intéresse. Ceci n'est donc pas une présentation générale du langage SQL, auquel vous trouverez, en ligne ou en livre, des initiations plus générales, souvent très bien conçues ; vous pourrez vous y référer si vous voulez accéder à des fonctions plus avancées du langage, ou avoir une utilisation plus fine et plus libre de la base de données.
Précision importante, le logiciel que nous utilisons pour gérer le SQL s'appelle SQLite ; toutes les fonctions proposées par d'autres systèmes, comme MySQL ou PostgreSQL, ne sont pas disponibles sous SQLite, mais il existe généralement de rigoureux équivalents. La différence n'est pour ainsi dire que de dialecte, non de langue.
La base de données est composée de plusieurs tables,
une table étant la mise en relation de plusieurs champs. L'une de ces
tables, nommée entitas
, contient la
liste de toutes les entités argumentatives qui composent
l'Éthique : définitions, axiomes, propositions, lemmes,
scolies, appendices, préfaces, chapitres, etc. Une deuxième
table, patetex
(du latin patet
ex, « c'est évident à partir de » ; voir la démonstration de la
proposition 1 de la première partie), contient tous les renvois entre
entités argumentatives qui constituent la base même de la méthode
géométrique de Spinoza. Enfin, une dernière
table, inest
, contient toutes les
relations d'inclusion entre entités argumentatives ; par exemple, la
démonstration de la proposition 1 est comprise dans la proposition 1,
qui est elle-même située dans la première partie de l'ouvrage.
Sachant ceci, vous êtes déjà en mesure de taper votre première commande
SQL. La commande suivante vous permet en effet d'afficher l'intégralité
du contenu de la table entitas
:
SELECT * FROM entitas;
Exercices :
entitas
. Essayez de deviner à quoi correspondent
les différentes colonnes. patetex
et inest
.Remarques sur cette commande :
entitas
. L'ensemble de notre
commande, « SELECT * FROM entitas », peut donc être traduit par
« afficher toute la table entitas
». La table 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 |
... | ... | ... |
On n'a pas toujours besoin de tous les champs d'une table en même temps : il est généralement utile d'en isoler seulement quelques-uns. Il suffit dans ces cas-là d'indiquer avec SELECT quels champs l'on souhaite privilégier :
SELECT ex FROM patetex;
Exercice : isoler le champ circa
de la
table inest
, puis le champ typus
de la
table entitas
.
Maintenant, il ne sera pas difficile d'isoler plusieurs champs ; il vous faut pour cela les séparer par des virgules.
SELECT intra, circa FROM patetex;
Exercice : isoler les champs ex
et ad
de la table entitas
; vous obtiendrez
ainsi la liste de tous les renvois de l'Éthique.
Vous êtes désormais à même d'isoler une, plusieurs ou toutes les colonnes d'une table déterminée. Félicitations !