# SPARQL Protocol and RDF Query Language/Travail pratique/Système d'implication
## Introduction

Dans ce TP, nous allons installer 4SR, qui est une version temporaire (c'est-à-dire une branche) du projet 4store. 4SR est, selon son auteur, une "Scalable SPARQL query system with RDFS reasoning". Cela signifie que c’est une version d'une base de données SPARQL qui a implémenté le système d'implication pour, au moins, l'ontologie RDFS.
4SR est un outil stable disponible sous licence GNU GPL3 et qui peut être librement utilisé et étendu par la communauté du Web Sémantique.

## À savoir avant de commencer

Il faut déjà avoir utilisé 4Store et avoir lu la leçon sur le système d'implication SPARQL.

## Installation
### Installer d’abord 4Store

4SR a les mêmes dépendances que 4Store. Il vaut mieux installer 4Store au moins une fois avant de se risquer à installer 4SR.

### Téléchargement de 4SR

Vous avez besoin de cloner la branche rdfs-reasoner de 4Store.
Taper les commandes suivantes dans votre console :
Si vous tapez git branch, vous pouvez voir :
Un astérisque figure devant rdfs-reasoner, confirmant que nous avons sélectionné la branche du projet 4SR.

### Compilation & installation

Comme 4Store, voici les commandes pour configurer la compilation du logiciel :
Les dernières lignes de ./configure doivent afficher les lignes suivantes (à quelques versions près) :
Voici les commandes pour compiler et pour tester le logiciel :
Il est probable que les tests ne passent pas à 100% : c’est normal, cela reste un logiciel expérimental.

## Mode d’emploi du serveur
### Créer une base de données

Voici la commande pour créer une base de données test :

### Démarrer le serveur SPARQL

Ici nous exécuterons le service sur le port 8081 (paramètre -p) et nous désirons voir les erreurs en sortie (paramètre -D, mode debug).
Par défaut, les implications appliquées seront rdfs:subClassOf et rdfs:subPropertyOf. Pour spécifier d'autres niveaux de raisonnement, on peut utiliser le paramètre -R . Ce paramètre accepte une chaîne de caractères (C, P, D, R, N) pour indiquer quel constructeur RDFS est utilisé par défaut:
* subClass reasoning : inclut rdfs:subClassOf.
* subProperty reasoning : inclut rdfs:subPropertyOf.
* Domain reasoning : inclut rdfs:domain.
* Range reasoning : inclut rdfs:range.
* None indique de n'appliquer par défaut aucun constructeur RDFS.
Examples: Pour configurer un serveur qui appliquera par défaut les implications subClass, subProperty et Range, il faut paramétrer la commande de cette manière :
Pour configurer un serveur qui n’appliquera aucune implication (None) par défaut, il faut paramétrer la commande de cette manière :
L'ordre de la chaîne de caractères passé au paramètre -R est sans importance. 'PC' et 'CP', par exemple, ajouteront les implications subClass and subProperty.

### Importer des données

4SR semble supporter les requêtes INSERT et DELETE.
Pour importer des fichiers Turtle, vous pouvez utiliser la commande suivante :

### Vérifier l'état de votre serveur SPARQL

Allez sur la page : http://localhost:8081/status
Vous devez voir la page statut du serveur 4Store, où le nom de la version doit contenir le texte v4sr.

### Arrêter le serveur SPARQL

Comme pour 4Store, on utilise ces commandes pour arrêter les processus.

### Supprimer une base de données

Comme pour 4Store, on utilise ces commandes pour supprimer une base de données.

### Requête avec un paramètre d'implication

Vous avez vu qu'avec la commande 4s-httpd, on indique la liste les implications à appliquer par défaut aux requêtes, mais on peut surcharger cette configuration avec le paramètre HTTP reasoning. Exemple de requête HTTP :
Ici, VOTRE_REQUETE_SPARQL est votre requête SPARQL. On précise le système d'implication à lui appliquer avec le paramètre reasoning qui prend la valeur P et C, c'est-à-dire rdfs:subClassOf et rdfs:subPropertyOf.

### Requête SPARQL via la ligne de commande

4s-query est un outil de 4Store pour exécuter des requêtes SPARQL directement via la ligne de commande (quand 4s-httpd est arrêté). 4s-query est sans implication par défaut. Pour lui appliquer des implications, il faut, comme avec 4s-httpd, utiliser le paramètre -R.
Par exemple : avec la requête SELECT * WHERE { ?s a ?o} avec l'implication rdfs:subClassOf.

## Exercice

Nous allons utiliser l'exemple du cours SPARQL Protocol and RDF Query Language/Travail pratique/Système d'implication.
Pour illustrer les différences entre des implications simples, c'est-à-dire uniquement avec RDF et RDFS, examiner les données suivantes :
| En clair | En RDF/turtle | Le graphe RDF |
| Un chien est un animal le chat1 est un chat Les chats sont des animaux les zoos hébergent uniquement des animaux Le zoo1 héberge le chat2 | @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix ex: <http://example.org/> . @prefix zoo: <http://example.org/zoo/> . ex:dog1 rdf:type ex:animal . ex:cat1 rdf:type ex:cat . ex:cat rdfs:subClassOf ex:animal . zoo:host rdfs:range ex:animal . ex:zoo1 zoo:host ex:cat2 . | |
Maintenant, examiner la requête suivante :
Voici le résultat final de la requête, à condition que votre triplestore applique les implications RDF et RDFS :
* animal
* <http://example.org/dog1>
* <http://example.org/cat1>
* <http://example.org/cat2>
Exercice : configurer votre serveur, importer les données via un fichier ttl pour obtenir le même résultat à cette requête sans paramètre reasoning.
Créer le fichier turtle : zoo.ttl
Exécuter les commandes pour redémarrer votre serveur :
Importer les données via curl :
Tester votre requête avec ce lien :