Après avoir présenté le modèle Entités-Relations, on présente deux opérations élémentaires sur ces diagrammes ainsi qu'un programme BDD (Base De Données) qui implante ces deux opérations.
Le programme éric
Eric (Entity-Relationship Interactive Calculator) est le petit frère de Georges.
Il est précompilé pour MS-Windows et Linux x86.
La source est écrite en OCaml.
eric.zip 263,52 kB
La jointure
C'est le mécanisme de base d'ajout dans la base de données.
Au lancement du programme la base est totalement vide.
La commande join permet d'ajouter des diagrammes dans la base.
join ([Cat] On [Mat]).
La BDD est irredondante, tout nouveau diagramme est jointuré avec les concepts et les relations nouvelles ou existantes.
Par exemple les deux commandes suivantes :
join ([Woman Sarah] SpouseOf [Man John]). join ([Woman Sarah] ColleagueOf [Man John]).
Sont équivalentes à cette unique commande :
join ([Woman Sarah*w] SpouseOf [Man John*m]) (w ColleagueOf m).
Car les concepts de départ et d'arrivée des relations sont les mêmes.
La jointure s'effectue également sur les relations, il ne peut pas y avoir deux relations de même nom reliant les deux même concepts de départ aux deux même concepts d'arrivée.
La sélection
C'est le mécanisme de base de la requête dans la base de données.
Seuls les concepts peuvent être variables, on reconnaît une variable-concept à ce qu'elle a un marqueur mais pas d'étiquette. La recherche tente d'associer une étiquette-concept à chaque variable-concept de sorte que le (ou les) graphe résultant soit dans la base de données. Les relations ne sont jamais des variables, ce sont toujours des constantes.
join ([Liquid Water] Boil [Celsius +100]). join ([Liquid Azote] Boil [Celsius -196]).
select ([*liquid] Boil [*temp]).
Renvoie toutes les températures d’ébullition connues.
select ([*w] ColleagueOf [*m])(w SpouseOf m).
Renvoie toutes les personnes w et m qui sont à la fois collègues et époux.
select ([Believe *b] Experiencer [*t]) (b Theme [Proposition *p]) (p Statement [Want *w]) (w Experiencer [*e]) (w Theme [Situation *s]) (s Description [Marry *m]) (m Agent e).
Renvoie toutes les personnes t qui pensent qu'une personne e veut se marier (on ne demande ni avec qui, ni où, ni quand).
Renvoie tous les verbes de la contine de la souris verte :
select ([*v0] Then [*v1]) (v1 Then [*v2]) (v2 Then [*v3]) (v3 Then [*v4]) (v4 Then [*v5]) (v5 Then [*v6]) (v6 Then [*v7]) (v7 Then [*v8]) (v8 Then [*v9]).
Où l'on voit que le temps de recherche reste raisonnable malgré l'abondance de concepts variables
Les graphes imprimés par la commande select ont exactement la même syntaxe que les graphes acceptés par la commande join.
Spoiler (Sélectionnez le texte dans le cadre pointillé pour le faire apparaître)
Techniquement, la sélection est le problème dit de Hom(G,H), soit la recherche de tous les homomorphismes du graphe G (le motif) vers le graphe H (la BDD). Ce problème est connu pour être NP-complet.
Sauvegarder
La commande save sauvegarde la base de donnée en cours dans le fichier BDD indiqué.
save "database.eric".
Le chemin d'accès doit toujours avoir le caractère / comme séparateur et ce même sous MS-Windows. Par exemple save "F:/Concept graphs/BDD.eric". est une commande valide tandis que save "F:\Concept graphs\BDD.eric". est une commande invalide.
Charger
La commande load efface la base de données en cours et charge le fichier BDD indiqué.
load "database.eric".
Les fichiers BDD sont portables de Windows 32bits vers Linux 32bits et vice-versa. Pour une portabilité 64bits il faudrait recompiler la source.
Quitter
La fonction la plus importante de tout programme
quit.
Le méta-modèle
Le méta-modèle entités/relations c'est le modèle exprimé dans son propre formalisme. Il est extrêmement compact.
join ([Definition *def] Of [EntityRelationGraph]) ([Set V *setV] RequiredBy def) ([Set E *setE] RequiredBy def) (setV Of [Vertex *v]) (setE Of [Edge *e]) (e Origin v)(e Destination v) (v LabelledWith [Concept]) (e LabelledWith [Relation]).
Accessoirement le méta-modèle est aussi un schéma de conception pour l'implantation de Eric.
Conclusion
On a présenté un langage aussi élémentaire que possible pour la modélisation des connaissances ainsi qu'une implantation simple et efficace de ce langage.
De nombreuses extensions et variantes sont possibles pour ajouter de l'expressivité et/ou du raisonnement (assisté ou automatisé) à notre modèle de base.
Le développement d'Eric continue.
Qu'est ce que mon vieux Georges vient faire ici ?
Ce truc ne fait que ressortir que des réponses toutes cuites à un élément donné, rien de méchant, mais au moins je me demande ce qu'est Éric.
Si j'ai bien compris, Éric est un logiciel qui permet de stocker des diagrammes d'entités-relation, et de façon à ce que chaque élément soit relié aux autres... En bref, le rapport que je vois avec Georges, c'est qu'appliqué de manière analogue, ce système pourrait donner une culture à Georges et lui permettre de composer des phrases simples à partir des relations issues de la base de donnée. En poussant le concept, on pourrait avoir une série de concepts généraux sur lesquels on pourrait venir greffer des relations originales et propres à l'interlocuteur.
Dans le genre, si on identifie que utilisateur -> mère -> vivante et mère -> nom -> diane, on peut cracher "Comment va Diane votre mère ?"...
M'enfin, intéressant, beau travail tout de même !
(*Sbirematqui va renterrer ses vieux trips*)
L'avenir, c'est le Tixel.
Merci pour le compliment
Ce qui me fait envie dans Georges c'est qu'il est totalement en ligne, et ça je ne sais pas comment le faire. C'est la fracture numérique entre les jeunes connectés (Ertaï et les autres) et les vieux crocodiles comme moi
Mais un jour moi aussi j'apprendrai à vivre avec mon époque
Ertaï, tiens toi prêt, New York est trop petit pour nous deux, l'un d'entre nous doit mourir, que le meilleur gagne
En fait, tout dépend... :-°
De toute façon, le PHP est Turing-complet, on peut tout faire avec, et notamment l'affichage en ligne. Je pense qu'au pire, on peut interfacer une console avec un site avec des sockets PHP, donc utiliser ERIC en ligne, mais développer un site en Ocalm est aussi possible avec la CGI...
Faut trouver une interface, une API, un moyen de faire communiquer le A avec le B ou d'utiliser B avec A.
Spiceguid, est il possible de faire un méta-méta modèle ?
Le méta-modèle est déjà son propre méta-méta-modèle. Enfin je crois. À vrai dire il va falloir que je méta-réfléchisse encore un peu pour en être méta-certain