Les opérations Entités-Relations

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 smile

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 smile

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.

Laissez un commentaire

2 Commentaires

  • Qu'est ce que mon vieux Georges vient faire ici ? sourire
    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. razz

    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 ?"... razz

    M'enfin, intéressant, beau travail tout de même ! smile
    (*Sbirematqui va renterrer ses vieux trips*)

    L'avenir, c'est le Tixel.

    • Merci pour le compliment smile

      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 confused

      Mais un jour moi aussi j'apprendrai à vivre avec mon époque razz

      Ertaï, tiens toi prêt, New York est trop petit pour nous deux, l'un d'entre nous doit mourir, que le meilleur gagne duel

    • 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. smile

  • Spiceguid, est il possible de faire un méta-méta modèle ? razz

    • 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 tape mur

Laissez un commentaire

Vous devez être connecté pour commenter sur le Refuge. Identifiez-vous maintenant ou inscrivez-vous !