Mise en place d'un SPARQL EndPoint

Servir du RDF via HTTP avec Jena & Fuseki

Wilfried Heintz & Julien Barde
jRBDD_2015

Introduction

Des outils génériques pour servir et partager ses données

Réutilisation des travaux de Julien Barde, UMR IRD Marbec

  • Décrire toutes les ressources d'une unité de Recherche :

    • agents, publications, bases de données, images ...
  • S'appuyer sur des standards pour diffuser ce patrimoine

    • OGC ? EML ? Open-data !

Introduction

Introduction

Points abordés

  • Présentation de l'outil Jena
  • Pré-requis et préparation du serveur
  • RDFizer les métadonnées ou les données
  • Installation de Fuseki
  • Exemples d'exploitation du Sparql Endpoint

Présentation de Jena

Un Framework pour le Web sémantique

Source : http://jena.apache.org

Composé de différentes APIs pour implémenter et servir du RDF :

  • API RDF : noyau du framework
    • API Sparql : interroger et mettre à jour du RDF avec SPARQL
    • API Ontology : intégrer des modèles OWL dans Jena
  • API Store pour stocker les données
  • Serveur Fuseki pour représenter du RDF et exécuter des requêtes SPARQL via HTTP

Présentation de Jena

Pourquoi Fuseki ?

  • Projet de la fondation Apache
    • Open-source
    • Communauté importante de développeurs (HP)
    • Expérience reconnue
  • Déploiement dans Tomcat
  • Persistance des données
  • 3e génération du logiciel

Pré-requis indispensables

  • Exemple avec un serveur Linux Ubuntu
  • Port 8080 ouvert (et libre)
  • Droits d'administration

Pré-requis indispensables

Quelques notions de Shell Linux

  • Edition avec nano :
    • modifications dans le terminal
    • Ctrl + x pour fermer
    • o pour enregistrer les changements
  • sudo pour exécuter une commande en tant qu'administrateur
  • su pour ouvrir une session administrateur
  • cd /... pour se déplacer dans les répertoires
  • ls pour lister le contenu d'un répertoire

Préparation de la machine

Installation de Java (>=8)

Source : https://wolfpaulus.com/journal/software/tomcat-jessie

Dans un terminal :

  java -version
  <b>su root</b>
  echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" 
   > /etc/apt/sources.list.d/webupd8team-java.list
  echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" 
   > /etc/apt/sources.list.d/webupd8team-java.list
  apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
  apt-get update
  apt-get install oracle-java8-installer

Préparation de la machine

Installation de Java

Pour changer la version de java (si nécessaire) :

  update-alternatives --config java

Préparation de la machine

Installation de Tomcat (>=8)

Création d'un utilisateur Tomcat :

  adduser \
    --system \
    --shell /bin/bash \
    --gecos 'Tomcat Java Servlet and JSP engine' \
    --group \
    --disabled-password \
    --home /home/tomcat \
    tomcat

Préparation de la machine

Installation de Tomcat

Installation des paquets :

  mkdir -p ~/tmp
  cd ~/tmp
  wget http://www.us.apache.org/dist/tomcat/tomcat-8/v8.0.28/bin/apache-tomcat-8.0.28.tar.gz
  tar xvzf ./apache-tomcat-8.0.28.tar.gz
  rm ./apache-tomcat-8.0.28.tar.gz

  mkdir -p /usr/share/tomcat8
  mv ~/tmp/apache-tomcat-8.0.28 /usr/share/tomcat8

Préparation de la machine

Installation de Tomcat

Paramétrages :

  rm -f /usr/share/tomcat
  ln -s /usr/share/tomcat8/apache-tomcat-8.0.28 /usr/share/tomcat

  chown -R tomcat:tomcat /usr/share/tomcat8
  chmod +x /usr/share/tomcat/bin/*.sh

Préparation de la machine

Installation de Tomcat

Changer le port d'écoute si nécessaire (remplacer 8080 par 8180 par exemple) :

  nano /usr/share/tomcat8/apache-tomcat-8.0.28/conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

Préparation de la machine

Installation de Tomcat

Modifier la taille autorisée pour les fichiers WAR :

  nano /usr/share/tomcat8/apache-tomcat-8.0.28/webapps/manager/WEB-INF/web.xml

  <multipart-config>
    <!-- 50MB max -->
    <max-file-size>52428800</max-file-size>
    <max-request-size>52428800</max-request-size>
    <file-size-threshold>0</file-size-threshold>
  </multipart-config>

Préparation de la machine

Installation de Tomcat

Créer un rôle manager :

  nano /usr/share/tomcat8/apache-tomcat-8.0.28/conf/tomcat-users.xml

Décommenter les lignes :

<!--
-->

Préparation de la machine

Installation de Tomcat

Les remplacer par :

  <role rolename="tomcat"/>
  <role rolename="manager-gui"/>
  <user username="user" password="mdp" roles="tomcat,manager-gui"/>

Préparation de la machine

Installation de Tomcat

Démarrer/arrêter le service :

  /bin/su - tomcat -c /usr/share/tomcat/bin/startup.sh
  /bin/su - tomcat -c /usr/share/tomcat/bin/shutdown.sh

Préparation de la machine

Installation de Tomcat

Optimiser le démarrage (facultatif) :

  nano /usr/share/tomcat8/apache-tomcat-8.0.28/bin/catalina.sh

Ajouter au début du fichier la ligne :

JAVA_OPTS="-Djava.security.egd=file:/dev/urandom"

Tomcat est opérationnel

Générer du RDF

RDFization / Triplification (Agents et bibliographie)

  • Transformer sa bibliographie en RDF (avec Zotero)

  • Convertir une liste d'agents stockée dans un tableau CSV en triplets RDF

  • Créer un lien entre ces agents et leur productions scientifiques

-> https://github.com/juldebar/RDFization_Foaf_Biblio

Installation de Fuseki

Préparation

Arrêter Tomcat :

  /bin/su - tomcat -c /usr/share/tomcat/bin/shutdown.sh

Puis télécharger Fuseki :

  cd ~/tmp
  wget http://archive.apache.org/dist/jena/binaries/apache-jena-fuseki-2.3.0.tar.gz

Installation de Fuseki

Déploiement du fichier WAR

  cd ~/tmp
  tar xvzf apache-jena-fuseki-2.3.0.tar.gz
  rm apache-jena-fuseki-2.3.0.tar.gz
  cp apache-jena-fuseki-2.3.0/fuseki.war /usr/share/tomcat8/apache-tomcat-8.0.28/webapps/fuseki.war

Installation de Fuseki

Préparation

Créer un répertoire pour Fuseki :

  mkdir /etc/fuseki
  chown tomcat:tomcat /etc/fuseki

Puis pour le stockage des données :

  mkdir /home/fuseki
  chown tomcat:tomcat  /home/fuseki

Installation de Fuseki

Copie des données

Déplacer les données RDF dans le répertoire de stockage :

  cp ~/tmp/xxx /data/fuseki

Puis redémarrer Tomcat pour déployer Fuseki :

  /bin/su - tomcat -c /usr/share/tomcat/bin/startup.sh

Stopper Tomcat à nouveau.

Installation de Fuseki

Configuration

Editer le fichier etc/fuseki/config.ttl :

# Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0

## Fuseki Server configuration file.

@prefix :        <#> .
@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .

[] rdf:type fuseki:Server ;

Installation de Fuseki

Configuration

Déclaration d'un service, après la ligne # End triples. :

# Déclaration d'un service
 fuseki:services (
  <#<b>nom_du_service</b>>
 ).

Installation de Fuseki

Configuration

Description du service :

# Description du service déclaré prédédemment
 <#nom_du_service> rdf:type fuseki:Service ;
 fuseki:name                       "nom_du_service" ;       # http://host:port/ds
 fuseki:serviceQuery               "sparql" ;   # SPARQL query service
 fuseki:serviceQuery               "query" ;    # SPARQL query service (alt name)
 fuseki:serviceUpdate              "update" ;   # SPARQL update service
 fuseki:serviceUpload              "upload" ;   # Non-SPARQL upload service
 fuseki:serviceReadWriteGraphStore "data" ;     # SPARQL Graph store protocol (read and write)
# A separate read-only graph store endpoint:
 fuseki:serviceReadGraphStore      "get" ;      # SPARQL Graph store protocol (read only)
 fuseki:dataset                   <#nom_du_dataset> ;
 .

Installation de Fuseki

Configuration

Description du dataset (mode "mémoire") :

# Description du dataset déclaré dans le service ci-dessus

 <#nom_du_dataset>   rdf:type ja:RDFDataset ;
 rdfs:label "label_du_dataset" ;
 ja:defaultGraph

Installation de Fuseki

Configuration

  [ rdfs:label "label_du_graph" ;
    a ja:MemoryModel ;
 ja:content [ja:externalContent <file:/home/fuseki/Agents_ext.rdf> ] ;
 ja:content [ja:externalContent <file:/home/fuseki/Biblio_ext.rdf> ] ;
 ja:content [ja:externalContent <file:/home/fuseki/Mes_agents.rdf> ] ;
   ] ;
 .

Installation de Fuseki

Sécurité

Affichage des datasets dans un serveur en ligne (non localhost)

Editer le fichier etc/fuseki/shiro.ini :

 [users]
  # Implicitly adds "iniRealm =  org.apache.shiro.realm.text.IniRealm"
  admin=pw

 [roles]

Installation de Fuseki

Sécurité

 [urls]
  ## Control functions open to anyone
  /$/status = anon
  /$/ping   = anon

  ## and the rest are restricted to localhost.
  ## /$/** = localhost
  /$/** = authcBasic,user[admin]

Inspire et RDF