package org.linkeddatafragments;
import com.google.common.base.Stopwatch;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.*;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.junit.Before;
import org.junit.Test;
import org.linkeddatafragments.model.LinkedDataFragmentGraph;
import org.linkeddatafragments.util.LDFTestUtils;
import java.util.Iterator;
import java.util.List;
import static org.fest.assertions.Assertions.assertThat;
public class LinkedDataFragmentsClientTest {
protected Model model;
@Before
public void setUp() {
LinkedDataFragmentGraph ldfg = new LinkedDataFragmentGraph("http://data.linkeddatafragments.org/dbpedia2014");
model = ModelFactory.createModelForGraph(ldfg);
}
@Test
public void testSize() {
assertThat(model.size()).isEqualTo(377367913);
System.out.println(model.size());
}
@Test
public void testBasicSparql() {
String queryString = "SELECT ?p ?o WHERE { <http://dbpedia.org/resource/Barack_Obama> ?p ?o }";
Query qry = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(qry, model);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
@Test
public void testTypeSparql() {
String queryString = "SELECT ?o WHERE { <http://dbpedia.org/resource/Barack_Obama> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?o }";
Query qry = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(qry, model);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
System.out.println("rs.getRowNumber() = " + rs.getRowNumber());
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
@Test
public void testLiteralSparql() {
String queryString = "SELECT (COUNT(?o) AS ?count) WHERE { ?o <http://www.w3.org/2000/01/rdf-schema#label> \"Belgium\"@en }";
Query qry = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(qry, model);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
@Test
public void testSingleJoinSparql() {
String queryString = "SELECT ?o ?n WHERE { <http://dbpedia.org/resource/Barack_Obama> <http://dbpedia.org/ontology/almaMater> ?o " +
". ?o <http://dbpedia.org/ontology/state> ?n }";
Query qry = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(qry, model);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
@Test
public void testSingleCountPredicateSparql() {
String queryString = "SELECT (COUNT(DISTINCT ?p) AS ?count) where { ?o ?p <http://dbpedia.org/resource/Barack_Obama> }";
Query qry = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(qry, model);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
@Test
public void testSingleCountSubjectSparql() {
String queryString = "SELECT (COUNT(DISTINCT ?o) AS ?count) where { ?o ?p <http://dbpedia.org/resource/Barack_Obama> }";
Query qry = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(qry, model);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
@Test
public void testSingleCountObjectSparql() {
String queryString = "SELECT (COUNT(DISTINCT ?o) AS ?count) where { <http://dbpedia.org/resource/Barack_Obama> ?p ?o }";
Query qry = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(qry, model);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
@Test
public void testSparqlQueries() {
List<String> queries = LDFTestUtils.readFiles(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
String prefixes = "" +
"PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> " +
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
"PREFIX dbpedia: <http://dbpedia.org/resource/> " +
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>";
for(String query : queries) {
String queryString = prefixes + query;
System.out.println(queryString);
Query qry = QueryFactory.create(queryString);
Stopwatch sw = Stopwatch.createStarted();
QueryExecution qe = QueryExecutionFactory.create(qry, model);
if(qe.getQuery().getQueryType() == Query.QueryTypeConstruct) {
Iterator<Triple> rm = qe.execConstructTriples();
assertThat(rm.hasNext()).isTrue();
while(rm.hasNext()) {
System.out.println(rm.next().toString());
}
} else if(qe.getQuery().getQueryType() == Query.QueryTypeSelect) {
ResultSet rs = qe.execSelect();
while (rs.hasNext()) {
System.out.println(rs.nextSolution().toString());
}
assertThat(rs.getRowNumber()).isGreaterThan(0);
}
System.out.println(sw.stop());
}
}
}