Semapps est un projet intéressant de bases de connaissances distribué basé sur les spécifications Solid.
Lors de mes premiers test, j’ai été bloqué par Docker nécessitant plus de 4Go de RAM, que je n’ai pas. On va donc retenter une install sans Docker étant donné que celui-ci est utilisé pour créer le serveur Fuseki, mais que ce serveur Fuseki peut être installé en décompressant un simple ZIP.
Selon la doc officielle de Semapps, nous devons d’abord unstaller le serveur LDP.
Donc après avoir installé NodeJs nous pouvons installer Moleculer (un outil permettant de faire communiquer les microservices entre eux) en global avec la commande
npm install -g moleculer-cli
On peut ensuite initialiser le projet semapps avec la commande
moleculer init assemblee-virtuelle/semapps-template-ldp semapps
On répond oui à toutes les interrogations, même s’il est bien entendu que nous ne pourrons pas utiliser Docker, mais c’est ce que j’avais fait la première fois, donc on va repartir sur la même base, et cel permettra de voir ce qui cloche par rapport à une install avec Docker
? Do you need a local instance of Jena Fuseki (with Docker)? Yes
? Do you need a read-only SPARQL endpoint? Yes
Create ‘semapps’ folder…
? Would you like to run ‘npm install’? Yes
Jusque là tout va bien on continue en omettant docker-compose up qui plante de toute façon
cd semapps
npm run dev
Et là… Oh surprise, gros message d’erreur
...
request to http://localhost:3030/$/datasets/localData failed, reason: connect ECONNREFUSED 127.0.0.1:3030 FetchError: request to http://localhost:3030/$/datasets/localData failed, reason: connect ECONNREFUSED 127.0.0.1:3030
...
Logique on n’a pas de serveur Fuseki qui tourne, donc on va l’installer manuellement. Notez au passage que Semapps recherche http://localhost:3030/$/datasets/localData donc il nous faudra un dataset ‘localData’ et le port 3030 est celui part défaut du serveur Fuseki.
Pour installer Fuseki, rien de plus simple, il suffit en fait de télécharger et décompresser l’archive que vous trouverez à cette adresse https://jena.apache.org/download/ (attention prenez bien Apache Jena Fuseki… A chaque que je reviens sur cette page, je me fais avoir & télécharge Apache Jena ;-)) C’est bien Apache Jena Fuseki que l’on veut.
au jour où j’écris ces lignes, c’est la 3.17.0 qui est dispo.
prenons le zip https://miroir.univ-lorraine.fr/apache/jena/binaries/apache-jena-fuseki-3.17.0.zip
décompressez-le et renommer éventuellement le dossier en ‘fuseki’ tout court pour faciliter le lancement plus tard
pour lancer Fuseki, nous aurons également besoin de Java JRE à télécharger ici https://www.java.com/fr/download/
Une fois le zip de Fuseki décompressé, vous pouvez ouvrir une autre fenêtre de commande et lancer Fuseki de la manière suivante, déjà pour voir si ça tourne…
cd fuseki
fuseki-server
Autorisez éventuellement le pare-feu pour les applis Java
si tout va bien, la série de lignes affichée devrait se terminer par un truc du style
17:04:40 INFO Server :: Started 2020/12/28 17:04:40 CET on port 3030
nous devrions donc avoir notre serveur Fuseki qui tourne, allons vérifier à l’adresse http://localhost:3030
Il ne nous reste plus qu’à créer le dataset ‘localData’ que nous avons repéré tout à l’heure, et à croiser les doigts…
Cliquez sur l’onglet ‘manage dataset’ puis sur ‘add new dataset’.
Dans le champ ‘dataset name’, saisissez ‘localData’
et cocher ‘Persistent (TDB2)’
et validez en cliquant sur le bouton ‘Create dataset’
Notre dataset est maintenant créé
Si on relance maintenant la commande
npm run dev
on peut voir que notre serveur Semapps est opérationnel !!! Bravissimo !!!
On peut maintenant passer au test du serveur https://semapps.org/docs/guides/ldp-server#testing-your-ldp-server
Test de Semapps
on va utiliser https://addons.mozilla.org/fr/firefox/addon/restclient/ qu’il faut installer dans un navigateur Firefox ça vous rajoute une petite icone carrée rouge avec un engrenage dans la barre juste à côté du menu du navigateur.
L’idée est ici d’utiliser la méthode POST pour envoyer des données à notre serveur Semapps tout frais.
L’exemple de données proposé fait référence à une ancienne implementation avec un container /resources, mais celui-ci n’esiste plus:
POST /resources HTTP/1.1Host: localhost:3000Content-Type: application/jsonAccept: */*Content-Length: 97{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Note",
"name": "Hello World"
}
Ce qui veut dire en gros que l’on va envoyer une ‘Note’ avec le nom ‘Hello World’ à l’adresse http://localhost:3000/resources
NB : oui c’est bien le port 3000 (celui du serveur Semapps) et c’est lui qui se chargera d’envoyer ça au serveur Fuseki (port 3030)
Nous allons utiliser le container /persons car comme évoqué plus haut, /resources n’esiste plus
Donc avec Rest-Client (l’icone carrée rouge), choisissez la méthode POST, l’url http://localhost:3000/persons et dans Body, collez le json suivant en se basant sur les specifications ActivityStreams :
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"name": "Guillaume Cousin"
}
Dans la réponse, on voit sur la ligne l’adresse de la personne qui vient d’être créée
et si on se rend sur notre instance Semapps à l’adresse http://localhost:3000/persons
on la retrouve à l’adresse http://localhost:3000/persons/5fea10811332c894ceb28250
Et si on clique dessus, on a bien notre personne
Pour terminer, si maintenant vous utilisez Rest-Client pour effectuer une requête GET à l’adresse http://localhost:3000/persons, vous retrouverez vos données au format turtle :
En modifiant le Content-Type en application/json, lors du POST, nous n’avons pas vraiment le même résultat et on post vraiment du json ce qui est some toute préférable (“text/plain” ou “application/json” ??? a vous de voir selon votre besoin…)