Skip to content

Commit 0274eb4

Browse files
committed
Corrections and test for JenaTDB data source
1 parent df498a2 commit 0274eb4

File tree

5 files changed

+130
-23
lines changed

5 files changed

+130
-23
lines changed

.gitignore

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
.settings
2-
target
3-
ldf-server.json
4-
/data/
1+
.settings
2+
target
3+
ldf-server.json
4+
/data/
5+
/nbproject/

src/org/linkeddatafragments/datasource/DataSourceFactory.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,15 @@ public class DataSourceFactory {
1515
public final static String HDT = "HdtDatasource";
1616
public final static String JENA_TDB = "JenaTDBDatasource";
1717

18+
/**
19+
* Create a datasource using a JSON config
20+
*
21+
* @param config
22+
* @return datasource interface
23+
* @throws DataSourceException
24+
*/
1825
public static IDataSource create(JsonObject config) throws DataSourceException {
19-
String title = config.getAsJsonPrimitive("type").getAsString();
26+
String title = config.getAsJsonPrimitive("title").getAsString();
2027
String description = config.getAsJsonPrimitive("description").getAsString();
2128
String type = config.getAsJsonPrimitive("type").getAsString();
2229

src/org/linkeddatafragments/datasource/JenaTDBDataSource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525
*/
2626
public class JenaTDBDataSource extends DataSource {
2727
private final Dataset tdb;
28-
private final String sparql = "CONSTRUCT { ?s ?p ?o } " +
29-
"WHERE { ?s ?p ?o } " +
28+
private final String sparql = "CONSTRUCT WHERE { ?s ?p ?o } " +
3029
"ORDER BY ?s ?p ?o";
3130

3231
private final Query query = QueryFactory.create(sparql, Syntax.syntaxSPARQL_11);
@@ -47,8 +46,10 @@ public TriplePatternFragment getFragment(Resource subject, Property predicate, R
4746
query.setLimit(limit);
4847

4948
QueryExecution qexec = QueryExecutionFactory.create(query, model, map);
49+
5050
Model triples = ModelFactory.createDefaultModel();
5151
qexec.execConstruct(triples);
52+
qexec.close();
5253

5354
// Try to get an estimate
5455
long size = triples.size();

src/org/linkeddatafragments/servlet/TriplePatternFragmentServlet.java

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -259,16 +259,6 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
259259
Model output = fragment.getTriples();
260260
output.setNsPrefixes(config.getPrefixes());
261261

262-
// do conneg
263-
String bestMatch = MIMEParse.bestMatch(mimeTypes, request.getHeader("Accept"));
264-
Lang contentType = RDFLanguages.contentTypeToLang(bestMatch);
265-
266-
// serialize the output
267-
response.setHeader("Server", "Linked Data Fragments Server");
268-
response.setContentType(bestMatch);
269-
response.setCharacterEncoding("utf-8");
270-
RDFDataMgr.write(response.getOutputStream(), output, contentType);
271-
272262
// add dataset metadata
273263
String datasetUrl = getDatasetUrl(request);
274264
Resource datasetId = output.createResource(datasetUrl + "#dataset");
@@ -283,12 +273,16 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
283273
addPages(output, fragmentId, fragmentUrl, total, limit, offset, page);
284274
addControls(output, datasetId, datasetUrl);
285275

286-
// serialize the output as Turtle
287-
response.setHeader(HttpHeaders.SERVER, "Linked Data Fragments Server");
288-
response.setContentType("text/turtle");
289-
response.setCharacterEncoding(CharEncoding.UTF_8);
290-
291-
output.write(response.getWriter(), "Turtle", fragmentUrl);
276+
// do conneg
277+
String bestMatch = MIMEParse.bestMatch(mimeTypes, request.getHeader("Accept"));
278+
Lang contentType = RDFLanguages.contentTypeToLang(bestMatch);
279+
280+
// serialize the output
281+
response.setHeader("Server", "Linked Data Fragments Server");
282+
response.setContentType(bestMatch);
283+
response.setCharacterEncoding("utf-8");
284+
RDFDataMgr.write(response.getOutputStream(), output, contentType);
285+
292286
} catch (IOException | URISyntaxException e) {
293287
throw new ServletException(e);
294288
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
package test.java.org.linkeddatafragments.datasource;
7+
8+
import com.google.gson.JsonObject;
9+
import com.hp.hpl.jena.query.Dataset;
10+
import com.hp.hpl.jena.rdf.model.Model;
11+
import com.hp.hpl.jena.rdf.model.ModelFactory;
12+
import com.hp.hpl.jena.rdf.model.Property;
13+
import com.hp.hpl.jena.rdf.model.Resource;
14+
import com.hp.hpl.jena.tdb.TDBFactory;
15+
import java.io.File;
16+
import org.junit.After;
17+
import org.junit.AfterClass;
18+
import org.junit.Before;
19+
import org.junit.BeforeClass;
20+
import org.junit.Test;
21+
import org.linkeddatafragments.datasource.DataSourceFactory;
22+
import org.linkeddatafragments.datasource.IDataSource;
23+
import org.linkeddatafragments.datasource.TriplePatternFragment;
24+
25+
/**
26+
*
27+
* @author Bart Hanssens <[email protected]>
28+
*/
29+
public class JenaTDBDataSource {
30+
private static IDataSource tdb;
31+
private static Dataset dataset;
32+
private static File jena;
33+
34+
@BeforeClass
35+
public static void setUpClass() throws Exception {
36+
String tmpdir = System.getProperty("java.io.tmpdir");
37+
jena = new File(tmpdir, "ldf-jena-test");
38+
jena.mkdir();
39+
40+
dataset = TDBFactory.createDataset(jena.getAbsolutePath());
41+
Model model = ModelFactory.createDefaultModel();
42+
43+
JsonObject config = new JsonObject();
44+
config.addProperty("title", "jena test");
45+
config.addProperty("description", "jena tdb test");
46+
config.addProperty("type", DataSourceFactory.JENA_TDB);
47+
48+
JsonObject settings = new JsonObject();
49+
settings.addProperty("directory", tmpdir);
50+
config.add("settings", settings);
51+
52+
tdb = DataSourceFactory.create(config);
53+
}
54+
55+
@AfterClass
56+
public static void tearDownClass() throws Exception {
57+
dataset.end();
58+
TDBFactory.release(dataset);
59+
}
60+
61+
@Before
62+
public void setUp() throws Exception {
63+
Model model = dataset.getDefaultModel();
64+
65+
// Generate a set of statements
66+
int subjs = 150;
67+
int preds = 20;
68+
int objs = 10;
69+
70+
for (int s = 0; s < subjs; s++) {
71+
Resource subj = model.createResource("http://test.ldf.org/s/" + s);
72+
for (int p = 0; p < preds ; p++) {
73+
Property pred = model.createProperty("http://test.ldf.org/p/" + p);
74+
for (int o = 0; o < objs ; o++) {
75+
Resource obj = model.createResource("http://test.ldf.org/o/" + o);
76+
model.add(subj, pred, obj);
77+
}
78+
}
79+
}
80+
model.commit();
81+
}
82+
83+
@Test
84+
public void testEstimate() {
85+
Model model = dataset.getDefaultModel();
86+
87+
Resource subj = model.createResource("http://test.ldf.org/s/1");
88+
Property pred = null;
89+
Resource obj = null;
90+
91+
long offset = 0;
92+
long limit = 50;
93+
TriplePatternFragment fragment =
94+
tdb.getFragment(subj, pred, obj, offset, limit);
95+
long totalSize = fragment.getTotalSize();
96+
System.out.println(totalSize);
97+
98+
}
99+
100+
@After
101+
public void tearDown() throws Exception {
102+
}
103+
104+
}

0 commit comments

Comments
 (0)