-
Notifications
You must be signed in to change notification settings - Fork 4
/
SparqlEndpointDatasetExplorerModule.java
83 lines (74 loc) · 3.76 KB
/
SparqlEndpointDatasetExplorerModule.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package cz.cvut.spipes.modules;
import cz.cvut.spipes.constants.KBSS_MODULE;
import cz.cvut.spipes.engine.ExecutionContext;
import cz.cvut.spipes.engine.ExecutionContextFactory;
import java.time.Instant;
import java.util.Calendar;
import cz.cvut.spipes.modules.annotations.SPipesModule;
import org.apache.commons.io.IOUtils;
import org.apache.jena.query.ParameterizedSparqlString;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.Property;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.ResourceFactory;
import org.apache.jena.vocabulary.RDF;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SPipesModule(label = "sparqlEndpointDatasetExplorer-v1", comment = "TODO")
public class SparqlEndpointDatasetExplorerModule extends AnnotatedAbstractModule {
public static final String TYPE_URI = KBSS_MODULE.uri + "sparqlEndpointDatasetExplorer-v1";
private static final Logger LOG =
LoggerFactory.getLogger(SparqlEndpointDatasetExplorerModule.class);
private final String nsHttp = "http://onto.fel.cvut.cz/ontologies/http/";
@Parameter(urlPrefix = TYPE_URI + "/", name = "p-sparql-endpoint-url", comment = "URL of the SPARQL endpoint.")
private String propSparqlEndpointUrl;
@Parameter(urlPrefix = TYPE_URI + "/", name = "p-connection-timeout", comment = "Connection Timeout in ms. Default 3000.")
private long propConnectionTimeout = 3000;
@Parameter(urlPrefix = TYPE_URI + "/", name = "p-query-timeout", comment = "Query Timeout. Default 60000")
private long propQueryTimeout = 60000;
@Override
public String getTypeURI() {
return TYPE_URI;
}
@Override
ExecutionContext executeSelf() {
outputContext = ExecutionContextFactory.createEmptyContext();
final Model model = outputContext.getDefaultModel();
try {
final String clsHttpAccessIri = nsHttp + "http-access";
final Resource iAccess = ResourceFactory.createResource(
clsHttpAccessIri + Instant.now().toString());
final String queryString = IOUtils.toString(
getClass().getResourceAsStream("/find-datasets.rq"), "UTF-8");
final ParameterizedSparqlString strSparql = new ParameterizedSparqlString(queryString);
strSparql.setIri("event", iAccess.getURI());
final Resource cAccess = ResourceFactory.createResource(clsHttpAccessIri);
final Property pHasUrl = ResourceFactory.createProperty(nsHttp + "has-url");
final Property pHasTime = ResourceFactory.createProperty(nsHttp + "has-time");
model.add(iAccess, RDF.type, cAccess);
model.add(iAccess, pHasUrl, ResourceFactory.createResource(propSparqlEndpointUrl));
model.add(iAccess, pHasTime, ResourceFactory.createTypedLiteral(
Calendar.getInstance()));
try {
final Query query = strSparql.asQuery();
final QueryExecution qexec =
QueryExecutionFactory.sparqlService(propSparqlEndpointUrl, query);
qexec.setTimeout(propConnectionTimeout, propQueryTimeout);
model.add(qexec.execConstruct());
} catch (Exception e) {
model.add(iAccess,
ResourceFactory.createProperty(nsHttp + "has-error"),
ResourceFactory.createPlainLiteral(e.getMessage()));
}
} catch (Exception e) {
model.add(
ResourceFactory.createResource(propSparqlEndpointUrl),
RDF.type,
ResourceFactory.createResource(nsHttp + "url"));
}
return outputContext;
}
}