Mise en place d'un SPARQL EndPoint Servir du RDF via HTTP avec Jena & Fuseki Julien Barde & Wilfried Heintz jRBDD_2015 (http://creativecommons.org/licenses/by-nc-sa/3.0/) 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 ! 2/34 › HIE DES CONTRÔLES CNIL EN 2014 (/FR/… REATED) graphiques) (/fr/reuses/carte­des­nouvelles­regions­ 4/34 Présentation de Jena Un Framework pour le Web sémantique Source : http://jena.apache.org (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 OWLdans Jena · API Store pour stocker les données · Serveur Fuseki pour représenter du RDF et exécuter des requêtes SPARQLvia HTTP 6/34 Présentation de Jena 7/34 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 8/34 Pré-requis indispensables Machine connectée + Java + Tomcat · Exemple avec un serveur Linux Ubuntu · Port 8080 ouvert · Droits d'administration 9/34 Préparation de la machine Installation de Java Source : https://wolfpaulus.com/journal/software/tomcat-jessie (https://wolfpaulus.com/journal/software/tomcat-jessie) # java -version # su root # 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-javax-installer 10/34 Préparation de la machine Installation de Java Pour changer la version de java : # update-alternatives --config java 11/34 Préparation de la machine Installation de Tomcat Création d'un utilisateur Tomcat : # sudo adduser \ --system \ --shell /bin/bash \ --gecos 'Tomcat Java Servlet and JSP engine' \ --group \ --disabled-password \ --home /home/tomcat \ tomcat 12/34 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 # sudo mkdir -p /usr/share/tomcat8 # sudo mv ~/tmp/apache-tomcat-8.0.28 /usr/share/tomcat8 13/34 Préparation de la machine Installation de Tomcat Paramétrages : # sudo rm -f /usr/share/tomcat # sudo ln -s /usr/share/tomcat8/apache-tomcat-8.0.28 /usr/share/tomcat # sudo chown -R tomcat:tomcat /usr/share/tomcat8 # sudo chmod +x /usr/share/tomcat/bin/*.sh 14/34 Préparation de la machine Installation de Tomcat Changer le port d'écoute (si nécessaire) : # sudo nano /usr/share/tomcat8/apache-tomcat-8.0.28/conf/server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 15/34 Préparation de la machine Installation de Tomcat Modifier la taille autorisée pour les fichiers WAR : # sudo 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> 16/34 Préparation de la machine Installation de Tomcat Créer un rôle manager : # sudo nano /usr/share/tomcat8/apache-tomcat-8.0.28/conf/tomcat-users.xml <role rolename="tomcat"/> <role rolename="manager-gui"/> <user username="user" password="mdp" roles="tomcat,manager-gui"/> 17/34 Préparation de la machine Installation de Tomcat Démarrer/arrêter le service : # sudo /bin/su - tomcat -c /usr/share/tomcat/bin/startup.sh # sudo /bin/su - tomcat -c /usr/share/tomcat/bin/shutdown.sh 18/34 Préparation de la machine Installation de Tomcat Optimiser le démarrage : # 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" 19/34 Tomcat est opérationnel 20/34 Démarrage de Fuseki Déploiement du chier WAR # cd ~/tmp # tar xvzf apache-tomcat-8.0.28.tar.gz # rm apache-tomcat-8.0.28.tar.gz # sudo cp fuseki.war /usr/share/tomcat8/apache-tomcat-8.0.28/webapps/fuseki.war Puis démarrer Tomcat : # sudo /bin/su - tomcat -c /usr/share/tomcat/bin/startup.sh 21/34 Générer du RDF RDFization / Tripli cation (Agents et bibliographies) · 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 (https://github.com/juldebar/RDFization_Foaf_Biblio) 22/34 Installation de Fuseki Préparation Arrêter Tomcat : # sudo /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 23/34 Installation de Fuseki Préparation Créer un répertoire pour Fuseki : # sudo mkdir /etc/fuseki # sudo chown tomcat:tomcat /etc/fuseki Puis pour le stockage des données : # sudo mkdir /data/fuseki # sudo chown tomcat:tomcat /data/fuseki 24/34 Installation de Fuseki Copie des données Créer un répertoire pour Fuseki : # sudo cp ~/tmp/xxx /data/fuseki 25/34 Installation de Fuseki Con guration 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: @prefix rdf: @prefix rdfs: @prefix tdb: @prefix ja: <#> . <http://jena.apache.org/fuseki#> . <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . <http://www.w3.org/2000/01/rdf-schema#> . <http://jena.hpl.hp.com/2008/tdb#> . <http://jena.hpl.hp.com/2005/11/Assembler#> . [] rdf:type fuseki:Server ; 26/34 Installation de Fuseki Con guration Déclaration d'un service, après la ligne # End triples. : # Déclaration d'un service fuseki:services ( <#nom_du_service> ). 27/34 Installation de Fuseki Con guration 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> ; . 28/34 Installation de Fuseki Con guration 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 29/34 Installation de Fuseki Con guration [ rdfs:label "label_du_graph" ; a ja:MemoryModel ; ja:content [ja:externalContent <file:/data/fuseki/Agents_ext.rdf> ] ; ja:content [ja:externalContent <file:/data/fuseki/Biblio_ext.rdf> ] ; ja:content [ja:externalContent <file:/data/fuseki/Mes_agents.rdf> ] ; ]; . 30/34 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] 31/34 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] 32/34 Démonstration en ligne http://localhost:8080/fuseki Toggle navigation Apache Jena Fuseki dataset manage datasets help Server status: Dataset: /dynaserv /datatdb /dynaserv query upload files edit info Please select a dataset. 33/34 Inspire et RDF Inspire ? Open Data ! Votre organisation gère des données géographiques avec des outils compatibles Inspire (http://fr.wikipedia.org/wiki/Infrastructure_d%27information_g%C3%A9ographique_dans_la_Communaut%C3%A9_europ%C3%A et souhaite les rendre disponibles sans effort sur data.gouv.fr (https://www.data.gouv.fr). Je me connecte ! (/login) Catalogues de données La passerelle Inspire moissonne plusieurs dizaines de catalogues de données issus d'inf rastructures 34/34