assemblee-virtuelle / semapps

A toolbox to create semantic web applications
https://semapps.org
Apache License 2.0
87 stars 8 forks source link

Utiliser une librairie pour construire les requêtes SparQL #87

Open srosset81 opened 4 years ago

srosset81 commented 4 years ago

Eviter de construire "manuellement" les requêtes SparQL mais utiliser un builder comme ceux-ci :

https://github.com/AtomGraph/sparql-builder https://www.npmjs.com/package/json-rql https://github.com/D2KLab/sparql-transformer https://github.com/GeoKnow/Jassa-Core/tree/master/lib/sparql

Autre possibilité : se baser sur https://github.com/RubenVerborgh/SPARQL.js qui permet de convertir un tableau JSON en requête SparQL et créer un package adapté à nos besoins.

L'avantage c'est qu'il sera plus facile de créer des requêtes flexibles, en fonction des besoins des différents modules. Cela aidera aussi à créer un code plus propre et plus lisible, et on éviterait des choses comme ça.

srosset81 commented 4 years ago

Personellement je pense qu'il serait bien de privilégier une librairie qui se base sur celle de Ruben, car cette dernière est super bien maintenue et testée.

J'aime bien https://github.com/AtomGraph/sparql-builder car c'est une interface très légère et bien pensée. Il ne serait pas difficile de l'améliorer pour qu'elle réponde à nos besoins.

https://github.com/gsvarovsky/json-rql est intéressant aussi mais c'est un autre langage à adapter. Je préfère le principe des objets qu'on peut mettre en chaîne comme c'est fait par sparql-builder.

Peut-être faire un mix entre les deux approches ? ;-)

nikoPLP commented 4 years ago

En effet une interface "fluent" (c'est le nom) comme celle de sparql-builder est ce qui sera de plus pratique. Ces interfaces de type fluent qu'on retrouve aussi dans LDFlex ou gremlin, permettent d'ecrire des requetes en une seule ligne, de composer des requetes avec de la logique conditionnelle, et reste trss lisibles.

Est ce que tu as testé sparql-builder ? est ce que ca convient a tes besoins ? il semblerait que le sparql 1.1 n'y soit pas implémenté.

srosset81 commented 4 years ago

En effet une interface "fluent" (c'est le nom) comme celle de sparql-builder est ce qui sera de plus pratique. Ces interfaces de type fluent qu'on retrouve aussi dans LDFlex ou gremlin, permettent d'ecrire des requetes en une seule ligne, de composer des requetes avec de la logique conditionnelle, et reste trss lisibles.

Bien dit ! :+1: Doctrine, l'ORM utilisé par Symfony, propose aussi ce type d'interface et ça donne beaucoup de liberté.

Est ce que tu as testé sparql-builder ? est ce que ca convient a tes besoins ? il semblerait que le sparql 1.1 n'y soit pas implémenté.

Pas encore, je voulais d'abord avoir vos retours. Mais en effet il ne semble pas y avoir tout dans cette librairie, cela dit on pourrait voir pour l'améliorer.

srosset81 commented 4 years ago

Pour mémoire, la réponse d'AtomGraph:

Hi Sébastien, sorry for the late reply. A contribution would definitely be welcome. Right now we've implemented only what was required for our project. Feel free to make pull requests. The idea of the library is to provide a method for each builder method for each of the terms from SPARQL.js, making it a fluent API. It depends on an older SPARQL.js which does not use the RDF/JS spec. That upgrade would be good to have, and shouldn't be very difficult. Are you set out to build your codebase from scratch? Because we can propose a broader collaboration around LinkedDataHub. It is an open-source Knowledge Graph management system that we will announce shortly. The code and documentation are already available however: https://atomgraph.github.io/LinkedDataHub/ That is the project using sparql-builder. It is completely data-driven by RDF, SPARQL and XSLT; the Java codebase is generic. It does not implement Solid per se (we have developed our own LDT specification, which in our opinion is much better defined), but it is compatible in the distributed read-write Linked Data sense. Let me know what you think. A call also sounds like a good idea; let's find some dates? Martynas atomgraph.com

tfrancart commented 4 years ago

Dans Sparnatural on utilise SPARQL.js, qui m'apparaissait comme un choix évident : https://github.com/sparna-git/Sparnatural/blob/master/src/QueryGenerators.js#L256

Bien faire attention à ce que la librairie choisie n'ai pas de limitations sur le SPARQL qu'elle peut produire pour ne pas se retrouver bloqué.

srosset81 commented 4 years ago

Dans Sparnatural on utilise SPARQL.js, qui m'apparaissait comme un choix évident : https://github.com/sparna-git/Sparnatural/blob/master/src/QueryGenerators.js#L256

Bien faire attention à ce que la librairie choisie n'ai pas de limitations sur le SPARQL qu'elle peut produire pour ne pas se retrouver bloqué.

La librairie sparql-builder se base sur SPARQL.js, qui est effectivement incontournable. C'est une simple interface "fluent" qui est en surcouche. Elle est pour l'instant très basique mais l'idée c'est d'y contribuer, d'où la prise de contact avec les gens d'AtomGraph.