Le graphe de "Fictions" de Borges

Omeka et Vis.js

Lors du dévelopepment des différents projets pour l'ITEM, le besoin est apparu de donner à voir des structures de documents sous forme graphique.

Sous Omeka, les items (l'élément de contenu le plus simple) peuvent être reliés entre eux grâce au module Item Relations, de toutes les façons recensées par les normes les plus connues : Dublin Core, FRBR, FOAF et BIBO. On peut aussi définir ses propres jeux de relations. Ce sont ces relations qu'il s'agit d'utiliser pour construire le graphe.

Pour gérer la partie graphique elle-même, j'ai choisi la bibliothèque Vis.js, qui est très riche et relativement facile d'utilisation. Surtout, sa façon de gérer les différents éléments (nodes, relations entre les nodes, etc.) est assez aisée à superposer à la structure proposée par Omeka : les items deviennent des "nodes", les relations des "edges".

Elle présente aussi l'avantage de ne demander que le minimum de paramétrage nécessaire à la personnalisation. On peut très bien créer un graphe simplement en indiquant une liste d'items et de relations. Le graphe sera alors produit avec des options par défaut tout à fait honorables. Si on veut personnaliser une option, disons l'icône qui doit être utilisé pour tel type de contenu, on passe une options à Vis.js, et uniquement celle-ci.

La principale famille de fonctions utilisée, en terminologie Vis.js, est le network, une organisation des éléments en réseau, qui peut être hiérarchique ou non. Nous avons aussi utilisé timeline, qui permet d'afficher des frises temporelles, avec le même degré d'interactivité et de richesses que les networks.

Pour produire automatiquement des graphes représentant des corpus Omeka, il s'est donc agi de développer des fonctions prenant en entrée des listes d'items (inculant leurs relations) et proposant en sortie des listes de nodes et de edges. Cette opération est codée en PHP.

C'est aussi lors de cette étape qu'on définit les options qui ne doivent pas être gérées automatiquement par Vis.js, le plus souvent : les couleurs, les polices, l'aspect des relations, la façon de répartir les nodes sur le graphique, les polices utilisées, etc. Cela peut aller jusqu'au paramétrage des propriétés physiques du graphe : attraction, répulsion, gravité, etc.

L'ensemble est ensuite passé à un script Javascript / JQuery qui lance les différentes opérations requises par Vis.js : création d'un Dataset, initialisation des options (très riches et très nombreuses si nécessaire, absentes si inutiles, donc), préparations diverses de données complémentaires (par exemple, certains graphes nécessitent de maintenir une liste de liens correspondant aux nodes quand l'utilisateur les clique).

Le point délicat est la façon d'organiser le graphe. Vis.js propose divers types d'organisations automatiques grâce à des algorithmes plus ou moins complexes, mais choisir celle qui est adaptée au besoin fonctionnel du projet demande une réflexion sérieuse et un dialogue constructif entre le développeur et les chercheurs.