09/06/2018

Quand Spoggy s'attaque à Persée, Retour après la bataille

Bon dans le dernier article ( Quand Spoggy utilise Polymer pour s'attaquer à Persée... ), nous vous avions fait part de la stratégie que Spoggy comptait adopter pour s'attaquer à Persée...

Pour tout vous dire, la vraie attaque a eu lieu le weekend dernier, à la Cuisine du Web  et était organisée par l'équipe de Persée, lors de son premier hackathon : PerséeUP ... A noter également la complicité de l'équipe MuseomixAura et de quelques autres intervenants...

Super accueil, super conditions, super tout tout tout... Un hackathon tellement sympa qu'on aurait presque pu le faire en famille, m'enfin, je me comprend 😜...

Pour ceux qui débarque après la bataille, (et oui, il y en aura toujours, et c'est certainement mieux ainsi), il convient de rappeler ce qu'est Spoggy et en quoi l'assaut de Persée était une phase importante de son développement...

D'abord, Spoggy s'inscrit dans un projet plus vaste et a pour objectif de faciliter l'utilisation des données au format RDF pour tout un chacun, pour mon fils de 7 ans ou ma mère de .... non, restons corrects...

Pour le projet Smag0, il nous est en effet apparu plus judicieux de partir sur le format de données RDF qui permet l'interconnexion de bases de connaissances...



Chaque objet connecté, chaque robot possède une petite base de connaissances au format rdf ou un endpoint sparql...
(Fuseki est un simple fichier Zip à décompresser & ne nécessite que java8).

Spoggy doit être capable de se connecter à plusieurs triplestores ou endpoints, tels qu'un serveur Fuseki personnel, DBPedia, ou d'autres format comme celui par exemple de Semantic Forms

Spoggy correspond à l'interface utilisateur (en vert) vers les triplestore, et le triplestore Persée correspond à ce format, il est l'un des "Autres serveurs et sourtces RDF" (cadre rouge sur le schéma). 
Spoggy permet d'une part de créer des graphes RDF , mais la partie qui nous intéresse ici, c'est la restitution des informations sous forme visuelle... Et l'adaptation à Persée était un peu l'épreuve du feu pour Spoggy...
Lors du hackathon, plusieurs projets ont émergé dont un qui avait pour objectif de faciliter l'exploration des données Persée, par la navigation sous forme de graphe, en représentant les noeuds et les liens qui les unissent... C'était la brèche, je me suis engouffré avec mon Spoggy...

Une équipe au top, avec une Françoise passionnée de RDF, un Max chercheur-utilisateur, une Cécile qui avait déjà réfléchi a la visualisation/ navigation, un Karl et Baptiste développeurs, ça c'est pour les compétences générales, mais bien d'autres cachées... Pour l'occasion, j'avais même invité notre Jean-Marc, garant national de la régularité du RDF, qui ne s'est pas géné pour bousculer un peu l'équipe de Persée... 😏

Avec tout ça, les idées ont fusé, les post-it collés, on décollé, les marqueurs ont chauffé sur les dashboards... Une cohésion s'est installée rapidement entre des personnes qui ne s'étaient jamais rencontrées avant... C'est ça la force des hackathons...


Bon et concrètement qu'est ce que ça donne ?

Grâce aux requêtes de Karl et Cécile, Spoggy permet maintenant de naviguer de trois façons différentes dans les données de Persée : 
(a noter une fonctionnalité développée lors du hackathon n'a pas encore été intégrée dans les vidéos qui suivent, c'est l'affichage de la page correspondante de Persée, Persée semble bloquer l'inclusion de ses pages dans une iframe ? mais l'intégration d'un plugin Spoggy dans les pages Persée pourrait résoudre cet ecueil)

1 En utilisant une url paramétrée pour Spoggy :  


La première idée était d'inclure "un graphe de navigation" dans les pages de Persée, mais ne pouvant évidemment pas intervenir sur ces pages (à voir si un jour on pourra), nous avons fait l'inverse : inclure les données de Persée dans Spoggy. La transition peut être effectuée au moyen d'un bouton dans la page de Persée qui renverrait vers Spoggy avec comme paramètres les informations que l'on veut afficher : 

Attention, pour se brancher sur Persee, vous devez consulter Spoggy en http et non https !

par exemple la page Persée sur Pierre Bourdieu  (http://www.persee.fr/authority/30551 ) aurait un bouton qui renverrait vers Spoggy, ou afficherait le graphe via cette adresse (remplacer 'www' par 'data et 'authority' par 'person' : 


Pour un document tel que http://www.persee.fr/doc/ahess_0395-2649_1977_num_32_3_293828, remplacez simplement 'www' par 'data' : 





2 : Mode Exploration de Spoggy appliqué à Persée : 

En utilisant les "Requêtes prédéfinies de Karl & Cécile "





3: Spoggy en mode recherche textuelle sur les données de Persée : 






Et Maintenant ???

Il y a encore quelques requêtes à revoir, des filtres, et des aménagements...
petit rappel : 
- pour participer au développement de Spoggy, c'est sur le github heroku-spoggy
- pour apporter de nouvelles idées : utilisez le kanban de heroku-spoggy

A l'issue de tout ce travail, il semble important que les fournisseur de données via des triplestore, fournissent à leur utilisateurs, des points d'entrée, des requêtes génériques de : 
- exploration & de recherche ( en jaune dans le code ci-dessous),
- une fonction pour parser les résultats associée aux requêtes précédentes, pour transformer ces résultats en noeuds/liens utilisables par un outil de visualisation. (en vert dans le code ci-dessous),
- et des requêtes complémentaires en fonction du type de noeud sur lesquels on clic (en bleu dans le code ci-dessous)

Ceci devrait être faisable si les fournisseurs de données via triplestore fournissaient également un fichier json de présentation, de requêtes, de fonctions de parsing et de tout outil qui pourrait aider à explorer leur triplestore... 
Un exemple de ce à quoi cela pourrait ressembler est (a l'heure actuelle dans le fichier spoggy-endpoint, mais c'est certainement amené à changer pour généraliser la proicédure ;-) : 

{
name:'Persee',
description: "Le portail Persée\n \
Persée est un programme national de numérisation et de diffusion de collections de documents scientifiques.\
Sur son portail (www.persee.fr) plus de 200 collections de revues publiées de 1820 à nos jours sont disponibles.\
Le portail permet une recherche dans certaines métadonnées et le texte de plus de 700 000 documents et 500 000 illustrations. \
Les interfaces de recherche actuelles permettent d’exploiter trois index (documents, illustrations et auteurs) \
et elles sont dotées de fonctionnalités de tri, de facettes, etc.",
plus: 'http://data.persee.fr/ressources/le-triplestore-de-persee/',
url: 'http://data.persee.fr/sparql', // url: 'http://data.persee.fr',
image: 'https://www.persee.fr/static/persee.png',
actif: true,
selectionnable: true,
type: 'virtuoso',
read:true, write:false,
exploreQuery: {
query: 'SELECT DISTINCT ?s ?t ?sub \
WHERE {\
?s ?p bibo:Document.\
?s dcterms:title ?t.\
?s dcterms:subject ?sub.\
filter (lang(?sub) = "" || langMatches(lang(?sub), "fr"))\
} LIMIT 100' ,
typeResources:{
s: 'bibo:Document',
sub: 'Subjects'
},
parseToVis : function(app, results, endpointUrl,typeResources, group){
// var app = this;
var visRes = {nodes:[], edges:[]};
results.forEach(function(r){
console.log(r);
let node = {
id: app.visId(r.s.value),
type: null,
resourceType: typeResources.s,
uri: r.s.value,
label: app.visLabelSplit(app.visLabel(r.t.value)),
endpointUrl: endpointUrl,
color: "rgb(76,0,74)",
font: {
color: 'rgb(255,255,255)'
},
cid: group,
y: 2*Math.random()
}
var trouveN = visRes.nodes.find(function(element){
return node.id == element.id
});
if (trouveN) {
// console.log("TROUVE ")
// console.log(trouveN)
node = trouveN;
}else{
visRes.nodes.push(node);
}
let nodeSub = {
id: r.sub.value,
type: r.sub.type,
resourceType: typeResources.sub,
label: app.visLabelSplit(r.sub.value),
endpointUrl: endpointUrl,
color: "rgb(107,142,35)",
shape: "box",
cid: group,
y: 2*Math.random()
}
var trouveS = visRes.nodes.find(function(element){
return nodeSub.id == element.id
});
if (trouveS) {
// console.log("TROUVE ")
// console.log(trouveS)
nodeSub = trouveS;
}else{
visRes.nodes.push(nodeSub);
}
let eType = {from : node.id, to: nodeSub.id, label: "subject"}
if (!visRes.edges.includes(eType)){
visRes.edges.push(eType)
}
});
return visRes;
}
},
searchQuery : {
query: ' SELECT distinct * WHERE { ?s rdfs:label ?label . \
?s rdf:type ?type . \
OPTIONAL { ?s dcterms:title ?title .} \
FILTER(bif:contains(?label, "RECHERCHE")) . \
} LIMIT 100',
typeResource:'bibo:Document'
},
clickonNode: [
{type : "Personne",
detecteur: "http://xmlns.com/foaf/0.1/Person",
requete : 'PREFIX dcterms: <http://purl.org/dc/terms/> \
PREFIX foaf: <http://xmlns.com/foaf/0.1/> \
SELECT DISTINCT ?person ?name \
WHERE { \
?doc dcterms:creator <NODEID>. \
?doc dcterms:creator ?person. \
?person foaf:name ?name. \
}',
lienCree : "co-auteur"
},
{type : "Document",
detecteur: " a revoir",
requete : 'a revoir',
lienCree : "a revoir"
}
]
/* exploreQuery: 'select distinct ?Concept where {[] a ?Concept} LIMIT 100'*/
},
  




Vous retrouverez les développements complémentaires effectués lors du hackathon dans la branche Persée du repo github de Spoggy










Aucun commentaire:

Enregistrer un commentaire