import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import org.rdfhdt.hdt.hdt.HDT; import org.rdfhdt.hdt.hdt.HDTManager; import org.rdfhdt.hdt.triples.IteratorTripleString; import org.rdfhdt.hdt.triples.TripleString; import org.rdfhdt.hdt.util.StopWatch; import org.rdfhdt.hdt.util.io.DummyOutputStream; import org.rdfhdt.hdtjena.HDTGraph; 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.rdf.model.NodeIterator; import org.apache.jena.rdf.model.Property; import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.rdf.model.ResIterator; import org.apache.jena.rdf.model.Resource; import org.apache.jena.rdf.model.Statement; import org.apache.jena.rdf.model.StmtIterator; import org.apache.jena.rdf.model.impl.ModelCom; /** * */ /** * @author mario.arias * */ public class JenaHDTTest { public static void iterateSubjects(Model model, String label) throws IOException { PrintWriter out = new PrintWriter(new FileOutputStream("subjects.txt")); StopWatch st = new StopWatch(); ResIterator iter = model.listSubjects(); while(iter.hasNext()) { Resource subject = iter.next(); out.println(subject); } System.out.println(label+st.stopAndShow()); out.close(); } public static void iterateObjects(Model model, String label) throws IOException { PrintWriter out = new PrintWriter(new FileOutputStream("objects.txt")); StopWatch st = new StopWatch(); NodeIterator iter = model.listObjects(); while(iter.hasNext()) { RDFNode object = iter.next(); out.println(object); } System.out.println(label+st.stopAndShow()); out.close(); } public static void findObjects(Model model, String label) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(new File("objects2.txt"))); PrintWriter out = new PrintWriter(DummyOutputStream.getInstance()); StopWatch st = new StopWatch(); String line; while((line = reader.readLine())!=null) { StmtIterator iter = model.listStatements((Resource)null, (Property)null, line); while (iter.hasNext()) { Statement stmt = iter.nextStatement(); // get next statement // Resource subject = stmt.getSubject(); // get the subject // Property predicate = stmt.getPredicate(); // get the predicate // RDFNode object = stmt.getObject(); // get the object out.println(stmt); } } System.out.println(label+st.stopAndShow()); } public static void findSubjects(Model model, String label) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(new File("subjects2.txt"))); PrintWriter out = new PrintWriter(DummyOutputStream.getInstance()); StopWatch st = new StopWatch(); String line; while((line = reader.readLine())!=null) { StmtIterator iter = model.listStatements((Resource)model.getResource(line), (Property)null, (RDFNode)null); while (iter.hasNext()) { Statement stmt = iter.nextStatement(); // get next statement // Resource subject = stmt.getSubject(); // get the subject // Property predicate = stmt.getPredicate(); // get the predicate // RDFNode object = stmt.getObject(); // get the object out.println(stmt); } } System.out.println(label+st.stopAndShow()); } public static void iterateTriples(Model model, String label) { PrintWriter out = new PrintWriter(DummyOutputStream.getInstance()); // list the statements in the Model StopWatch st = new StopWatch(); StmtIterator iter = model.listStatements();//(Resource)null, model.getProperty("http://www.geonames.org/ontology#alternateName"), (RDFNode)null); while (iter.hasNext()) { Statement stmt = iter.nextStatement(); // get next statement // Resource subject = stmt.getSubject(); // get the subject // Property predicate = stmt.getPredicate(); // get the predicate // RDFNode object = stmt.getObject(); // get the object // out.println(stmt); } System.out.println(label+st.stopAndShow()); } public static void iterateHDT(HDT hdt, String label) throws Exception { PrintWriter out = new PrintWriter(DummyOutputStream.getInstance()); StopWatch st = new StopWatch(); IteratorTripleString it = hdt.search("", "", ""); while(it.hasNext()) { TripleString triple = it.next(); out.write(triple.toString()); } System.out.println(label+st.stopAndShow()); } public static void sparql(Model model, String sparql) { StopWatch st = new StopWatch(); Query query = QueryFactory.create(sparql); // Execute the query and obtain results QueryExecution qe = QueryExecutionFactory.create(query, model); ResultSet results = qe.execSelect(); // Output query results ResultSetFormatter.out(System.out, results, query); // Important - free up resources used running the query qe.close(); System.out.println("SPARQL time: "+st.stopAndShow()); } public static void measureTriples(Model model) { PrintWriter out = new PrintWriter(DummyOutputStream.getInstance()); // list the statements in the Model StopWatch st = new StopWatch(); for(int i=0;i<5;i++) { StmtIterator iter = model.listStatements();//(Resource)null, model.getProperty("http://www.geonames.org/ontology#alternateName"), (RDFNode)null); while (iter.hasNext()) { Statement stmt = iter.nextStatement(); // get next statement // Resource subject = stmt.getSubject(); // get the subject // Property predicate = stmt.getPredicate(); // get the predicate // RDFNode object = stmt.getObject(); // get the object out.println(stmt); } } System.out.println("Total time: "+st.stopAndGet()); } public static void main(String[] args) throws Exception { StopWatch st = new StopWatch(); String fileHDT = "data/univ10.hdt"; String fileRDF = "file:///Users/mck/rdf/dataset/universities10.nt"; String fileTDB = "data/jenatdbuniv10"; // String fileHDT = "/Users/mck/workspace-deri/hdt-java-test/data/nytimes.hdt"; // String fileRDF = "file:///Users/mck/rdf/dataset/nytimes"; // String fileTDB = "data/jenatdbnytimes"; System.out.println("HDT"); HDT hdt = HDTManager.loadIndexedHDT(fileHDT, null); HDTGraph graph = new HDTGraph(hdt); Model model = new ModelCom(graph); // System.out.println("Jena MEM"); // Model model = ModelFactory.createDefaultModel(); // model.read(fileRDF, "N-TRIPLE"); // System.out.println("Jena TDB"); // Dataset dataset = TDBFactory.createDataset(fileTDB); // Model model = dataset.getDefaultModel(); // //FileManager.get().readModel( model, fileRDF, "N-TRIPLES" ); System.out.println("Loaded in "+st.stopAndShow()); // JenaHDTTest.iterateTriples(model, "Warming time "); // JenaHDTTest.measureTriples(model); // JenaHDTTest.iterateTriples(model, "First time "); // JenaHDTTest.iterateTriples(model, "Second time "); // JenaHDTTest.iterateTriples(model, "Third time "); // JenaHDTTest.iterateTriples(model, "Fourth time "); // JenaHDTTest.iterateTriples(model, "Fifth time "); // JenaHDTTest.iterateSubjects(model, "Subjects "); // JenaHDTTest.findSubjects(model, "Subjects First "); // JenaHDTTest.findSubjects(model, "Subjects Second "); // JenaHDTTest.findObjects(model, "Objects "); // JenaHDTTest.iterateHDT(hdt, "HDT Iterate first "); // JenaHDTTest.iterateHDT(hdt, "HDT Iterate second "); // JenaHDTTest.iterateHDT(hdt, "HDT Iterate third "); // Create a new query String query1 = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ub: <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#> SELECT ?X WHERE {?X rdf:type ub:GraduateStudent . ?X ub:takesCourse <http://www.Department0.University0.edu/GraduateCourse0>}"; String query2 = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX ub: <http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#>"+ "SELECT ?X WHERE {?X rdf:type ub:Publication . ?X ub:publicationAuthor <http://www.Department0.University0.edu/AssistantProfessor0>}"; JenaHDTTest.sparql(model, query1); JenaHDTTest.sparql(model, query2); // System.out.println("Num searches: "+graph.getNumSearches()); } }