package org.aksw.jena_sparql_api.concept_cache.main; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import org.aksw.commons.util.StreamUtils; import org.aksw.jena_sparql_api.compare.QueryExecutionFactoryCompare; import org.aksw.jena_sparql_api.concept_cache.core.JenaExtensionViewMatcher; import org.aksw.jena_sparql_api.concept_cache.core.OpExecutorFactoryViewMatcher; import org.aksw.jena_sparql_api.concept_cache.core.QueryExecutionFactoryViewCacheMaster; import org.aksw.jena_sparql_api.concept_cache.dirty.CombinatoricsVector; import org.aksw.jena_sparql_api.concept_cache.dirty.SparqlViewMatcherQfpc; import org.aksw.jena_sparql_api.concepts.Concept; import org.aksw.jena_sparql_api.core.FluentQueryExecutionFactory; import org.aksw.jena_sparql_api.core.QueryExecutionFactory; import org.aksw.jena_sparql_api.model.QueryExecutionFactoryModel; import org.aksw.jena_sparql_api.stmt.SparqlQueryParserImpl; import org.aksw.jena_sparql_api.utils.transform.F_QueryTransformDatasetDescription; import org.apache.jena.query.ARQ; import org.apache.jena.query.Dataset; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.QueryFactory; import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSetFactory; import org.apache.jena.query.ResultSetFormatter; import org.apache.jena.query.Syntax; import org.apache.jena.riot.RDFDataMgr; import org.apache.jena.sparql.algebra.Algebra; import org.apache.jena.sparql.algebra.Op; import org.apache.jena.sparql.algebra.OpAsQuery; import org.apache.jena.sparql.core.Var; import org.apache.jena.sparql.engine.QueryIterator; import org.apache.jena.sparql.engine.binding.Binding; import org.apache.jena.sparql.engine.binding.BindingHashMap; import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper; import org.apache.jena.sparql.engine.main.QC; import org.apache.jena.vocabulary.RDF; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import com.google.common.base.Stopwatch; public class MainTestSparqlViewCache { private static final Logger logger = LoggerFactory.getLogger(MainTestSparqlViewCache.class); // public void index(Query query) { // // String varName = "a"; // Var v = Var.alloc(varName); // List<String> varList = Arrays.asList(varName); // List<Binding> bindings = new ArrayList<Binding>(); // // BindingHashMap binding = new BindingHashMap(); // binding.add(v, RDF.type.asNode()); // // bindings.add(binding); // // QueryIterator queryIter = new QueryIterPlainWrapper(bindings.iterator()); // // ResultSet rs = ResultSetFactory.create(queryIter, varList); // rs = ResultSetFactory.copyResults(rs); // // // // //VarUtils. // // //Set<Var> v // // conceptMap.index(query, rs); // } public ResultSet execSelect(Query query) { //conceptMap.lookup(query); //RestrictionManagerI //OpQopFilter.getSubOp(); //System.out.println(op); //System.out.println(quads); //System.out.println(rm); return null; } public static void main(String[] args) throws IOException { //AnnotationConfigApplicationContext //OpExecutorFactoryViewCache.registerGlobally(); JenaExtensionViewMatcher.register(); //QC.setFactory(ARQ.getContext(), OpExecutorFactoryViewCache.get()); String data = "simple"; PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource resource = resolver.getResource("data-" + data + ".nt"); String fileName = resource.getFilename(); System.out.println("Trying to load data from " + fileName); Dataset model = RDFDataMgr.loadDataset(fileName); QueryExecutionFactory rawQef = FluentQueryExecutionFactory .from(model) //.http("http://akswnc3.informatik.uni-leipzig.de/data/dbpedia/sparql", "http://dbpedia.org") //.http("http://localhost:8890/sparql", "http://dbpedia.org") .config() .withParser(SparqlQueryParserImpl.create(Syntax.syntaxARQ)) .withQueryTransform(F_QueryTransformDatasetDescription.fn) .withPagination(100000) .end() .create(); // System.out.println(ResultSetFormatter.asText(rawQef.createQueryExecution( // "SELECT * { GRAPH ?g { ?s <http://ex.org/p1> ?o1 ; <http://ex.org/p2> ?o2 } }").execSelect())); // System.out.println("End of test query"); // QueryExecutionFactory sparqlService = SparqlServiceBuilder // .http("http://akswnc3.informatik.uni-leipzig.de:8860/sparql", "http://dbpedia.org") // .withPagination(100000) // .create(); QueryExecutionFactory cachedQef = new QueryExecutionFactoryViewCacheMaster(rawQef, new HashMap<>()); //OpExecutorFactoryViewMatcher.get().getServiceMap()); QueryExecutionFactory mainQef = new QueryExecutionFactoryCompare(rawQef, cachedQef); if(false) { CombinatoricsVector it = new CombinatoricsVector(5, 3); //CartesianVector it = new CartesianVector(5, 3); //it.inc(0); //it.inc(0); //it.inc(1); while(it.getVector() != null) { System.out.println(Arrays.toString(it.getVector())); it.inc(); } System.exit(0); } // if(false) { // Query query = QueryFactory.create("Prefix ex: <http://example.com/> Select * { ?s a ex:Airport . Filter(regex(str(?s), 'dbpedia')) .}"); // cache.index(query); // // query = QueryFactory.create("Prefix ex: <http://example.com/> Select * { ?s a ex:Airport ; ex:foo ex:bar ; ?s ?s . Filter(regex(str(?s), 'dbpedia')) .}"); // cache.index(query); // // query = QueryFactory.create("Prefix ex: <http://example.com/> Select * { ?s a ex:Airport ; ex:foo ?o .}"); // cache.index(query); // // // //query = QueryFactory.create("Prefix ex: <http://example.com/> Select * { ?s a ex:Airport . Filter(regex(str(?s), 'dbpedia')) .}"); // query = QueryFactory.create("Prefix ex: <http://example.com/> Select * { ?s a ex:Airport ; ex:foo ?o; ex:bar ?z . }"); // cache.execSelect(query); // } // // // // Ambiguous case: // if(false) { // //Query query = QueryFactory.create("Select * { ?a ?b ?c . ?c ?d ?e }"); // Query query = QueryFactory.create("Select * { ?a ?b ?c . ?a ?d ?e }"); // cache.index(query); // //// query = QueryFactory.create("Select * { ?a ?b ?c . ?d ?e ?f }"); //// cache.index(query); // // //query = QueryFactory.create("Prefix ex: <http://example.com/> Select * { ?s a ex:Airport . Filter(regex(str(?s), 'dbpedia')) .}"); // query = QueryFactory.create("Select * { ?a ?b ?c . ?a ?d ?e . ?a ?f ?g . ?g ?h ?i . ?k ?l ?m . ?m ?n ?o }"); // cache.execSelect(query); // } if(false) { Query query; QueryExecution qe; ResultSet rs; //Query query = QueryFactory.create("Select * { ?a ?b ?c . ?c ?d ?e }"); query = QueryFactory.create("Select * { ?a a <http://dbpedia.org/ontology/Airport> }"); qe = mainQef.createQueryExecution(query); rs = qe.execSelect(); ResultSetFormatter.consume(rs); //Query query = QueryFactory.create("Select * { ?a ?b ?c . ?c ?d ?e }"); query = QueryFactory.create("Select * { ?a a <http://dbpedia.org/ontology/Airport> }"); qe = mainQef.createQueryExecution(query); rs = qe.execSelect(); ResultSetFormatter.consume(rs); //cache.index(query); // query = QueryFactory.create("Select * { ?a ?b ?c . ?d ?e ?f }"); // cache.index(query); //query = QueryFactory.create("Prefix ex: <http://example.com/> Select * { ?s a ex:Airport . Filter(regex(str(?s), 'dbpedia')) .}"); query = QueryFactory.create("Select * { ?x a <http://dbpedia.org/ontology/Airport> . ?x a <http://dbpedia.org/ontology/Place> }"); qe = mainQef.createQueryExecution(query); rs = qe.execSelect(); ResultSetFormatter.consume(rs); //cache.execSelect(query); } if(false) { String queryString = "Select ?s ?name { ?s a <Person> . Optional { ?s <label> ?name . } }"; Query query = QueryFactory.create(queryString); Op op = Algebra.compile(query); op = Algebra.toQuadForm(op); System.out.println(op); //query.setV //op = ReplaceConstants.replace(op); //TableData td = new TableData(variables, rows); //query.setValuesDataBlock(variables, values); } if(true) { QueryExecutionFactory ss = new QueryExecutionFactoryModel(); Query query = QueryFactory.create("Select * { VALUES (?x) { ('foo') ('bar') } }"); ResultSet rs = ss.createQueryExecution(query).execSelect(); String str = ResultSetFormatter.asText(rs); System.out.println(str); Op op = Algebra.compile(query); op = Algebra.toQuadForm(op); System.out.println(op); query = OpAsQuery.asQuery(op); System.out.println(query); } //PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //TestBundleReader.class.getClass().getClassLoader()); if(true) { Resource r = resolver.getResource("query-" + data + "-1a.sparql"); String queryString = StreamUtils.toString(r.getInputStream()); Query query = QueryFactory.create(queryString); Op op = Algebra.compile(query); op = Algebra.toQuadForm(op); System.out.println(op); } if(true) { for(int i = 0; i < 100; ++i) { Resource r; String queryString; Query query; QueryExecution qe; ResultSet rs; Stopwatch sw = Stopwatch.createStarted(); long a = sw.elapsed(TimeUnit.MILLISECONDS); r = resolver.getResource("query-" + data + "-1a.sparql"); queryString = StreamUtils.toString(r.getInputStream()); query = QueryFactory.create(queryString); qe = mainQef.createQueryExecution(query); rs = qe.execSelect(); ResultSetFormatter.consume(rs); long b = sw.elapsed(TimeUnit.MILLISECONDS); logger.info("Time taken: " + (b - a)); r = resolver.getResource("query-" + data + "-1b.sparql"); queryString = StreamUtils.toString(r.getInputStream()); query = QueryFactory.create(queryString); qe = mainQef.createQueryExecution(query); rs = qe.execSelect(); ResultSetFormatter.consume(rs); long c = sw.elapsed(TimeUnit.MILLISECONDS); logger.info("Time taken: " + (c - b)); } } // We could use the projection to hack in some caching options on sub-queries... // Select (?cacheOptions = "?s") { ... } } }