Initiation au SQL du Projet Ethica

Qu'est-ce que SQL et pourquoi l'utiliser ?

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.

Les tables

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 :

  1. Observez le résultat renvoyé par cette commande, pour vous familiariser avec la structure de la table entitas. Essayez de deviner à quoi correspondent les différentes colonnes.
  2. Affichez maintenant le contenu des deux autres tables, patetex et inest.

Remarques sur cette commande :

  1. La commande SELECT indique ce que SQL doit afficher. Nous avons donné à cette commande l'argument « * », qui signifie « tout ». « SELECT * » veut donc dire « tout afficher ».
  2. La commande FROM précise les tables que SQL doit examiner pour répondre à votre requête. Dans notre exemple, il n'y a qu'une seule table, à savoir entitas. L'ensemble de notre commande, « SELECT * FROM entitas », peut donc être traduit par « afficher toute la table entitas ».
  3. L'usage des majuscules, purement conventionnel (c'est une convention universellement adoptée en SQL), ne sert qu'à rendre le code plus lisible, mais dans la hâte, vous pouvez tout à fait vous permettre de tout taper en minuscules.
  4. Vous observerez également que notre commande est terminée par un point-virgule ; il s'agit d'une exigence du langage SQL, qui toutefois dans notre système est facultative : si vous oubliez ce caractère final, votre requête sera tout de même satisfaite. Mais quitte à apprendre le SQL, il vaut mieux prendre dès maintenant de bonnes habitudes, car dans un autre contexte vous pourriez recevoir un message d'erreur.
  5. Vous pouvez laisser autant d'espaces et de sauts de ligne que vous le souhaitez entre les différents mots de votre commande ; par exemple, vous pouvez aller à la ligne entre « SELECT * » et « FROM entitas ». Nous vous le recommandons vivement, pour des raisons de lisibilité, lorsque vos commandes deviennent un peu longues.

Les entités

La table entitas contient la liste de toutes les entités argumentatives, avec les champs suivants :

entitas
id clavis typus numerus titulus
1p1pars1De Deo
21ddefinitiones
31d1definitio1
41d2definitio2
...............

Les renvois

La deuxième table de la base SQL s'appelle patetex ; elle contient trois champs :

patetex
idexad
11d3101d
21d5101d
31d3102d
41a5103d
.........

Les inclusions

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 :

inest
idcircaintra
1p11d
2p11d1
3p11d2
4p11d3
.........

Sélectionner des champs

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 !

Sélectionner une ligne