# SPARQL Protocol and RDF Query Language/Travail pratique/Faire un serveur SPARQL

Un contributeur est en ce moment même en train de travailler en profondeur sur cette page ou section de page. Merci de ne pas modifier celle-ci afin de limiter les risques de conflit de versions jusqu’à disparition de cet avertissement .
Enlevez ce modèle dès que le travail est fini ; si le travail doit être continué, utilisez le modèle : {{Pas fini}}.
Dans ce TP, nous allons installer notre propre triplestore, qui possédera un service HTTP pour répondre à des requêtes SPARQL.

## Pourquoi installer 4Store ?

Il existe de nombreux triplestores.
Pour les Unix-like, l'un d'eux se nomme 4Store (pour Windows il existe aussi Virtuoso qui tourne avec Cygwin).
4Store est sous Licence publique générale GNU version 3
L'objectif de la licence GNU GPL, selon ses créateurs est de garantir à l'utilisateur les droits suivants (appelés libertés) sur un programme informatique :
* La liberté d'exécuter le logiciel, pour n’importe quel usage ;
* La liberté d'étudier le fonctionnement d'un programme et de l'adapter à ses besoins, ce qui passe par l'accès aux codes sources ;
* La liberté de redistribuer des copies ;
* La liberté de faire bénéficier à la communauté des versions modifiées.
Cette licence est donc adaptée à l’utilisation de ce logiciel dans les établissements publics et privés.
Ce TP a pour objectif d'installer 4Store. Nous verrons dans un prochain TP comment interroger un serveur SPARQL sans se soucier du logiciel utilisé.

## À savoir avant de commencer

Les logiciels sous licence GPL sont souvent des agglomérats de nombreux logiciels qui ont chacun une installation propre ou même des communautés de développeurs distinctes. La compatibilité entre ces logiciels crée souvent des problèmes qui découragent les jeunes informaticiens.
L'avantage de la licence GNU d’offrir un logiciel gratuit est souvent rattrapé par le coût caché pour maintenir ou débugger ce logiciel. Or, a-t-on les moyens de payer un logiciel ou de rémunérer une société de services ?
4Store ne déroge pas à la règle et les autres triplestores également.
Toutefois, il y a quelques années, alors que MySQL était moins performant qu'Oracle ou que d'autres logiciels, MySQL est arrivé à s'imposer comme la BDD la plus utilisée, en étant une BDD sous licence GPL.
Un jeune informaticien peut donc à juste titre faire l’effort de maîtriser 4Store dès maintenant pour être récompensé à l'avenir.
Ce TP n'a pas pour objectif de former des experts, mais de comprendre l'installation de ce logiciel et de trouver des points d'entrée dans les communautés, qui pourront vous aider en cas de difficultés.

## Installation
### Automatique
#### Fedora 17 x86_64

* Installer les dépots Sparql.pro and Epel :
* Puis installer 4Store :
* La première fois, il faudra créer la base de données par défaut : DefaultKB
** Vous pourrez changer son nom mais il vous faudra alors changer les fichiers /etc/4store.conf et /etc/init.d/4store.
Vous pourrez désinstaller 4Store mais la base de données ne sera pas détruite (en théorie)
* Pour démarrer le service HTTP :
* Le service utilise le port 8181 : http://localhost:8181/status/
** Vous pourrez changer le port 8181 (lire la documentation : man 4store.conf )
* Et vous pouvez lancer au démarrage du serveur le service avec la commande :

#### CentOs 6 x86_64

* Installer les dépots Sparql.pro and Epel :
* Puis installer 4Store :
* La première fois, il faudra créer la base de données par défaut : DefaultKB
** Vous pourrez changer son nom mais il vous faudra alors changer les fichiers /etc/4store.conf et /etc/init.d/4store.
Vous pourrez désinstaller 4Store mais la base de données ne sera pas détruite (en théorie)
* Pour démarrer le service HTTP :
* Le service utilise le port 8181 : http://localhost:8181/status/
** Vous pourrez changer le port 8181 (lire la documentation : man 4store.conf )
* Et vous pouvez lancer au démarrage du serveur le service avec la commande :

#### Ubuntu

Il faut insérer dans le fichier /etc/apt/sources.list le dépôt (en France) qui va contenir le package, par exemple :
Ensuite, il faut mettre à jour apt-get avec ce nouveau dépot :
Vous pouvez maintenant installer 4Store via la commande suivante sur Ubuntu:

### Installation manuelle
#### Dépendances

On nomme dépendances les logiciels nécessaires au fonctionnement ou à la compilation d'un autre logiciel.
Ici, nous allons seulement décrire les dépendances de 4Store pour Fedora et Ubuntu.
Si vous avez un autre système, il vous faudra consulter la documentation de 4Store pour installer les bonnes dépendances.
Ubuntu Voici la commande à exécuter pour installer les premières dépendances :
Fedora Voici la commande à exécuter pour installer les premières dépendances :

#### Installation des librairies Redland : Raptor, Rasqal

La librairie Redland est aussi une des dépendances de 4Store, mais certaines librairies ne sont pas mises à jour régulièrement.
Installation :
Ubuntu
Fedora
Un outil bien pratique est contenu dans le logiciel Raptor de Redland. C'est l'outil Rapper, qui permet de voir si un fichier contient des erreurs ou de convertir un fichier dans un autre format.
Afficher le nombre de triplets et les erreurs s’il y en a.
Convertir le fichier "ontology.owl" en entrée (format automatiquement détecté) dans le format NTriples pour être enregistré dans le fichier "ontology.n3".
Voir les formats possibles en entrée et en sortie.

#### Configuration réseau

En principe, on donne à 4Store un port comme 9000, car il est rarement ouvert sur le réseau dans la configuration réseau par défaut. Ce paramètre est indiqué à 4Store au moment de son exécution.
Cependant pour Fedora uniquement, il faut ajouter une ligne dans le fichier /etc/sysconfig/iptables (attention : il faut ajouter cette ligne juste après la dernière ligne qui commence par "-A INPUT") :
Cette ligne est nécessaire au logiciel Avahi qu'utilise 4Store.
Pour prendre en compte cette modification sous Fedora :

#### Compilation & installation

4Store est encore un jeune logiciel et ne peut pas encore être installé via des packages. Le plus simple est encore de le compiler à partir des dernières sources avec la méthode suivante :
Ubuntu
Fedora
Pour tester (attention : seule la première série de tests doit passer au vert, les autres tests concernent la partie en cours de développement) :

## Mode d’emploi du serveur
### 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).

### Vérifier l'état du serveur SPARQL

Allez sur la page : http://localhost:8081/status
Vous devez voir la page statut du serveur 4Store.

### Supprimer une base de données
## Service automatique

4Store ne se lance pas automatiquement au démarrage de votre ordinateur. Or, cela est indispensable si l’on veut avoir un service robuste qui redémarre en même temps que son serveur (et cela évitera de le redémarrer manuellement durant les prochains TP).

### Installation (niveau expert)

On commence par créer notre base de données, ou silo de données, qui contiendra nos graphes. On va l'appeler "DefaultKB" (KB pour KnowledgeBase).
On va maintenant fabriquer rapidement un service 4Store pour démarrer et arrêter le service SPARQL avec la base de données "DefaultKB".

#### Debian/Ubuntu

On fabrique le script pour lancer le service automatiquement au démarrage du serveur :
Copier dans ce fichier le code suivant pour un système débian:
On autorise l'exécution de ce script :
On teste le service :
On vérifie que les processus 4s-httpd et 4s-backend ont démarré (il peut y avoir plusieurs processus 4s-httpd ou backend) avec la commande suivante :
On vérifie que le serveur fonctionne avec le lien : http://localhost:8081/status
On vérifie que le serveur s'est arrêté avec le même lien, qui doit afficher "serveur inconnu" ou "incapable de se connecter".
On déclare le service 4s-httpd au système et on le lance pour la dernière fois manuellement.

#### RHEL/CentOS

Exemple de code pour un système Archlinux:
On autorise l'exécution de ce script :
On teste le service :
On vérifie que les processus 4s-httpd et 4s-backend ont démarré (il peut y avoir plusieurs processus 4s-httpd ou backend) avec la commande suivante :
On vérifie que le serveur fonctionne avec le lien : http://localhost:8081/status
On vérifie que le serveur s'est arrêté avec le même lien, qui doit afficher "serveur inconnu" ou "incapable de se connecter".
On déclare le service 4s-httpd au système et on le lance pour la dernière fois manuellement.

### Désinstallation

Pour désinstaller ce service voici la commande :

### Mode d’emploi

Vous pouvez stopper et redémarrer le service manuellement quand vous le souhaitez. Vous pouvez également suivre les logs et ainsi débugger vos requêtes SPARQL.

#### Voir les logs du service

Cette commande va vous permettre de suivre en temps réel les logs de votre service et ainsi voir les requêtes SPARQL.

## Tests du service avec PHP

Nous allons tester le serveur avec un programme PHP. On commence par installer la librairie PHP pour 4Store.

### Installation

Pour installer la dernière version de PHP4store :

### Tests

On va créer un petit programme PHP pour tester notre serveur.
On va créer un projet test4store et ouvrir un nouveau fichier query.php :
On copie dans le fichier query.php le code suivant :
Ce code est un des exemples de la documentation de PHP4Store.
On exécute notre exemple :
Si tout fonctionne, la dernière ligne devrait ressembler à ceci :
Vous pouvez également voir les logs du serveur et ainsi voir toutes les requêtes SPARQL envoyées par votre programme PHP :
Maintenant, tout est en place pour apprendre à utiliser SPARQL !