Sommaire
Note: des exemples d'utilisation avec 'curl' sont aussi disponibles sur le site de Lyrasys (vivo)
1) Dépendances maven dans pom.xml
pom dependencies
<dependency> <groupId>org.apache.jena</groupId> <artifactId>apache-jena-libs</artifactId> <version>3.9.0</version> <type>pom</type> </dependency>
2) SELECT pour faire une recherche dans VIVO
JenaVivoTest_SELECT
package ca.uqam.vivoweb.connect; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryExecutionFactory; import org.apache.jena.query.QueryFactory; import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSetFormatter; import org.apache.jena.rdf.model.Model; import org.apache.jena.sparql.engine.http.QueryEngineHTTP ; public class JenaVivoTest_SELECT { static public void main(String...argv) { // L'URL du String sparqlEndpointUrl = "http://[vivo-srv-adresse]:8080/vivo/api/sparqlQuery"; // le libellé de la requête String queryStr = "SELECT ?s ?p ?o WHERE {?s ?p ?o} LIMIT 5"; // la construction de la requête Query query = QueryFactory.create(queryStr); // Construction de l'exécuteur try ( QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpointUrl, query) ) { // L'authentification administrateur de vivo ((QueryEngineHTTP)qexec).addParam("email", "vivo@uqam.ca") ; ((QueryEngineHTTP)qexec).addParam("password", "VOTRE_MOT_DE_PASSE") ; // Lancer l'exécution ResultSet results = qexec.execSelect(); //Imprimer le résultat de la requête ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ResultSetFormatter.out(outputStream, results); // Aussi disponible // ResultSetFormatter.outputAsCSV(outputStream, results); // ResultSetFormatter.outputAsTSV(outputStream, results); // ResultSetFormatter.outputAsJSON(outputStream, results); // ResultSetFormatter.outputAsXML(outputStream, results); String formatedResult = outputStream.toString(); System.out.println(formatedResult); } catch (Exception e) { e.printStackTrace(); } } }
Exemple de résultat
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | s | p | o | ======================================================================================================================================================================================================== | <http://vivoweb.org/ontology/core#FacultyMember> | <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#hiddenFromDisplayBelowRoleLevelAnnot> | <http://vitro.mannlib.cornell.edu/ns/vitro/role#public> | | <http://vivoweb.org/ontology/core#FacultyMember> | <http://www.w3.org/2002/07/owl#equivalentClass> | <http://vivoweb.org/ontology/core#FacultyMember> | | <http://vivoweb.org/ontology/core#FacultyMember> | <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#prohibitedFromUpdateBelowRoleLevelAnnot> | <http://vitro.mannlib.cornell.edu/ns/vitro/role#public> | | <http://vivoweb.org/ontology/core#FacultyMember> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> | <http://www.w3.org/2002/07/owl#Class> | | <http://vivoweb.org/ontology/core#FacultyMember> | <http://www.w3.org/2000/01/rdf-schema#subClassOf> | <http://purl.obolibrary.org/obo/BFO_0000002> | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3) CONSTRUCT pour construire un graphe de connaissance
JenaVivoTest_CONSTRUCT
package ca.uqam.vivoweb.connect; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryExecutionFactory; import org.apache.jena.query.QueryFactory; import org.apache.jena.rdf.model.Model; import org.apache.jena.sparql.engine.http.QueryEngineHTTP ; public class JenaVivoTest_CONSTRUCT { static public void main(String...argv) { // L'URL du String sparqlEndpointUrl = "http://[vivo-srv-adresse]:8080/vivo/api/sparqlQuery"; // le libellé de la requête String queryStr = "CONSTRUCT { <http://test.domain/ns#book1> <http://purl.org/dc/elements/1.1/title> \"Fundamentals of Compiler Design\" } WHERE { <http://test.domain/ns#book1> ?p ?o }" ; // la construction de la requête Query query = QueryFactory.create(queryStr); // Construction de l'exécuteur try ( QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpointUrl, query) ) { // L'authentification administrateur de vivo ((QueryEngineHTTP)qexec).addParam("email", "vivo@uqam.ca") ; ((QueryEngineHTTP)qexec).addParam("password", "MOT-DE-PASSE") ; // Lancer l'exécution Model model = qexec.execConstruct(); //Imprimer le résultat de la requête model.write(System.out, "RDF/JSON"); } catch (Exception e) { e.printStackTrace(); } } }
4) UPDATE INSERT pour ajouter un énoncé à Vivo
JenaVivoTest_INSERT.java
package ca.uqam.vivoweb.connect; import org.apache.jena.sparql.modify.UpdateProcessRemoteBase; import org.apache.jena.update.UpdateExecutionFactory; import org.apache.jena.update.UpdateFactory; import org.apache.jena.update.UpdateProcessor; import org.apache.jena.update.UpdateRequest; public class JenaVivoTest_INSERT { static public void main(String...argv) { // le libellé de la requête ubdate String udateStr = "" + "INSERT DATA {" + " GRAPH <http://vitro.mannlib.cornell.edu/default/vitro-kb-2> {" + " <http://test.domain/ns#book1> <http://purl.org/dc/elements/1.1/title> \"Fundamentals of Compiler Design\" ." + " } }"; // l'adresse du SparqlEndpoint du update de Vivo String sparqlEndpointUrl = "http://[vivo-srv-adresse]:8080/vivo/api/sparqlUpdate"; // la construction de la requête UpdateRequest request = UpdateFactory.create() ; request.add(udateStr); // Construction de l'exécuteur UpdateProcessor processor = UpdateExecutionFactory.createRemoteForm(request, sparqlEndpointUrl); // Les paramètres d"authentification de ViVo ((UpdateProcessRemoteBase)processor).addParam("email", "vivo@uqam.ca"); ((UpdateProcessRemoteBase)processor).addParam("password", "MOT-DE-PASSE") ; //Exécuter la requête processor.execute(); System.out.print("Done!"); } }
5) DESCRIBE pour décrire une ressource
JenaVivoTest_DESCRIBE .java
package ca.uqam.vivoweb.connect.receiver; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryExecutionFactory; import org.apache.jena.query.QueryFactory; import org.apache.jena.rdf.model.Model; import org.apache.jena.sparql.engine.http.QueryEngineHTTP ; public class JenaVivoTest_DESCRIBE{ static public void main(String...argv) { // URL du sparql endpoint String sparqlEndpointUrl = "http://[vivo-srv-adresse]:8080/vivo/api/sparqlQuery"; // le libellé de la requête String queryStr = "DESCRIBE <http://test.domain/ns#book1>"; // la construction de la requête Query query = QueryFactory.create(queryStr); // Construction de l'exécuteur try ( QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpointUrl, query) ) { // L'authentification administrateur de vivo ((QueryEngineHTTP)qexec).addParam("email", "UTILISATEUR") ; ((QueryEngineHTTP)qexec).addParam("password", "MOT-DE-PASSE") ; // Lancer l'exécution Model model = qexec.execDescribe(); //Imprimer le résultat de la requête model.write(System.out, "TTL") ; } catch (Exception e) { e.printStackTrace(); } } }
Résultat
@prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix skos: <http://www.w3.org/2004/02/skos/core#> . @prefix bibo: <http://purl.org/ontology/bibo/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix vivo: <http://vivoweb.org/ontology/core#> . @prefix vcard: <http://www.w3.org/2006/vcard/ns#> . @prefix obo: <http://purl.obolibrary.org/obo/> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> . <http://test.domain/ns#book1> <http://purl.org/dc/elements/1.1/title> "Fundamentals of Compiler Design" .
6) UPDATE DELETE pour supprimer un énoncé
JenaVivoTest_DELETE.java
package ca.uqam.vivoweb.connect.receiver; import org.apache.jena.sparql.modify.UpdateProcessRemoteBase; import org.apache.jena.update.UpdateExecutionFactory; import org.apache.jena.update.UpdateFactory; import org.apache.jena.update.UpdateProcessor; import org.apache.jena.update.UpdateRequest; public class JenaVivoTest_DELETE{ static public void main(String...argv) { // Adresse de l'URI du sparql endpoint de l'update String sparqlEndpointUrl = "http://[vivo-srv-adresse]:8080/vivo/api/sparqlUpdate"; // le libellé de la requête update String udateyStr = "" + "DELETE DATA {" + " GRAPH <http://vitro.mannlib.cornell.edu/default/vitro-kb-2> {" + " <http://test.domain/ns#book1> <http://purl.org/dc/elements/1.1/title> \"Fundamentals of Compiler Design\" ." + " } }"; // l'adresse du SparqlEndpoint du update de Vivo // la construction de la requête UpdateRequest request = UpdateFactory.create() ; request.add(udateyStr); // Construction de l'exécuteur UpdateProcessor processor = UpdateExecutionFactory.createRemoteForm(request, sparqlEndpointUrl); // Les paramètres d"authentification de ViVo ((UpdateProcessRemoteBase)processor).addParam("email", "vivo@uqam.ca"); ((UpdateProcessRemoteBase)processor).addParam("password", "VOTRE_MOT_DE_PASSE") ; //Exécuter la requête processor.execute(); System.out.print("Done!"); } }