From 17bd9beaf7f358a44e5bf36a5855fe6727d506dc Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Tue, 10 May 2022 18:17:06 +0100 Subject: [pagoda] Move project to Scala This commit includes a few changes: - The repository still uses Maven to manage dependency but it is now a Scala project. - The code has been ported from OWLAPI 3.4.10 to 5.1.20 - A proof of concept program using both RSAComb and PAGOdA has been added. --- .../java/uk/ac/ox/cs/pagoda/tester/OWLTester.java | 30 ++ .../uk/ac/ox/cs/pagoda/tester/PagodaTester.java | 318 +++++++++++++++++++++ .../java/uk/ac/ox/cs/pagoda/tester/Statistics.java | 60 ++++ 3 files changed, 408 insertions(+) create mode 100644 src/test/java/uk/ac/ox/cs/pagoda/tester/OWLTester.java create mode 100644 src/test/java/uk/ac/ox/cs/pagoda/tester/PagodaTester.java create mode 100644 src/test/java/uk/ac/ox/cs/pagoda/tester/Statistics.java (limited to 'src/test/java/uk/ac/ox/cs/pagoda/tester') diff --git a/src/test/java/uk/ac/ox/cs/pagoda/tester/OWLTester.java b/src/test/java/uk/ac/ox/cs/pagoda/tester/OWLTester.java new file mode 100644 index 0000000..25162c8 --- /dev/null +++ b/src/test/java/uk/ac/ox/cs/pagoda/tester/OWLTester.java @@ -0,0 +1,30 @@ +package uk.ac.ox.cs.pagoda.tester; + +import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.owlapi.model.OWLOntologyCreationException; +import org.semanticweb.owlapi.model.OWLOntologyManager; +import org.semanticweb.owlapi.model.parameters.Imports; + +import uk.ac.ox.cs.pagoda.owl.OWLHelper; + +public class OWLTester { + + public static void main(String[] args) throws OWLOntologyCreationException { +// OWLOntology onto = OWLHelper.loadOntology("dbpedia_imported.owl"); + OWLOntology onto = OWLHelper.loadOntology("reactome_imported.owl"); + OWLOntologyManager manager = onto.getOWLOntologyManager(); +// OWLOntology data = manager.loadOntology(IRI.create("file:/media/krr-nas-share/Yujiao/ontologies/bio2rdf/reactome/graph\ sampling/sample_1_new.ttl")); +// System.out.println("data: " + data.getAxiomCount() + " " + data.getABoxAxioms(true).size()); + for (OWLOntology t: manager.getOntologies()) { + System.out.println(t.getOntologyID()); + System.out.println(t.getAxiomCount() + " " + onto.getABoxAxioms(Imports.INCLUDED).size()); + } + System.out.println("In closure: " + onto.getImportsClosure().size()); + for (OWLOntology t: onto.getImportsClosure()) + System.out.println(t.getOntologyID()); + + System.out.println(onto.getAxiomCount() + " " + onto.getABoxAxioms(Imports.INCLUDED).size()); + } + +} + diff --git a/src/test/java/uk/ac/ox/cs/pagoda/tester/PagodaTester.java b/src/test/java/uk/ac/ox/cs/pagoda/tester/PagodaTester.java new file mode 100644 index 0000000..d741d3b --- /dev/null +++ b/src/test/java/uk/ac/ox/cs/pagoda/tester/PagodaTester.java @@ -0,0 +1,318 @@ +package uk.ac.ox.cs.pagoda.tester; + +import uk.ac.ox.cs.pagoda.query.AnswerTuple; +import uk.ac.ox.cs.pagoda.query.AnswerTuples; +import uk.ac.ox.cs.pagoda.reasoner.QueryReasoner; +import uk.ac.ox.cs.pagoda.util.PagodaProperties; +import uk.ac.ox.cs.pagoda.util.Timer; +import uk.ac.ox.cs.pagoda.util.Utility; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.Scanner; + +@Deprecated +public class PagodaTester { + + // public static final String onto_dir = "/media/RDFData/yzhou/"; +// public static final String onto_dir = "/users/yzhou/ontologies/"; +// public static final String onto_dir = "/home/scratch/yzhou/ontologies/"; + public static final String onto_dir = "/home/alessandro/Big_files/Ontologies/"; + + public static final String fly = onto_dir + "fly/fly_anatomy_XP_with_GJ_FC_individuals.owl"; + public static final String fly_query = onto_dir + "fly/queries/fly.sparql"; + + public static final String test_tbox = onto_dir + "smallExampleFromAna/dummy.owl"; + public static final String test_abox = onto_dir + "smallExampleFromAna/initialABox.ttl"; + public static final String test_query = onto_dir + "smallExampleFromAna/queries.dlog"; + + public static final int lubm_number = 1; + public static final String lubm_tbox = onto_dir + "lubm/univ-bench.owl"; + public static final String lubm_abox = onto_dir + "lubm/data/lubm" + lubm_number + ".ttl"; + public static final String lubm_abox_copy = onto_dir + "lubm/data/lubm" + lubm_number + " (copy).ttl"; + public static final String lubm_query = onto_dir + "lubm/queries/test.sparql"; + public static final String lubm_query6 = onto_dir + "lubm/queries/test_q6.sparql"; + public static final String lubm_query20 = onto_dir + "lubm/queries/test_q16.sparql"; + + public static final int uobm_number = 1; + public static final String uobm_tbox = onto_dir + "uobm/univ-bench-dl.owl"; + public static final String uobm_abox = onto_dir + "uobm/data/uobm" + uobm_number + ".ttl"; + public static final String uobm_query = onto_dir + "uobm/queries/test.sparql"; + public static final String uobm_query_temp = onto_dir + "uobm/queries/temp.sparql"; + public static final String uobm_query2 = onto_dir + "uobm/queries/standard_q2.sparql"; + public static final String uobm_query9 = onto_dir + "uobm/queries/standard_q9.sparql"; + public static final String uobm_query11 = onto_dir + "uobm/queries/standard_q11.sparql"; + public static final String uobm_query12 = onto_dir + "uobm/queries/standard_q12.sparql"; + public static final String uobm_query14 = onto_dir + "uobm/queries/standard_q14.sparql"; + public static final String uobm_query15 = onto_dir + "uobm/queries/standard_q15.sparql"; + public static final String uobm_query_multi = onto_dir + "uobm/queries/standard_multi.sparql"; + public static final String uobm_generated_query1 = onto_dir + "uobm/queries/generated_q1.sparql"; + public static final String uobm_query_group3 = onto_dir + "uobm/queries/standard_group3.sparql"; + + public static final String npd_tbox = onto_dir + "npd/npd-all-minus-datatype.owl"; + // "npd/npd-all.owl"; + // "npd-all-minus-datatype.owl"; + public static final String npd_abox = onto_dir + "npd/data/npd-data-dump-minus-datatype-new.ttl"; + // "npd/data/npd-data-dump-processed.ttl"; + // "npd-data-dump-minus-datatype-old.ttl"; + public static final String npd_query = onto_dir + "npd/queries/atomic.sparql"; + + public static final String npd_bench_tbox = onto_dir + "npd-benchmark/npd-v2-ql_a.owl"; + // npd-all-minus-datatype.owl"; + public static final String npd_bench_abox = onto_dir + "npd-benchmark/npd-v2-ql_a.ttl"; + // npd-data-dump-minus-datatype-old.ttl"; + public static final String npd_bench_query = onto_dir + "npd-benchmark/queries/all.sparql"; + + public static final String dbpedia_tbox = onto_dir + "dbpedia/integratedOntology-all-in-one-minus-datatype.owl"; + public static final String dbpedia_abox = onto_dir + "dbpedia/data/dbpedia-minus-datatype-new.ttl"; + public static final String dbpedia_query = onto_dir + "dbpedia/queries/atomic_ground.sparql"; + public static final String dbpedia_query274 = onto_dir + "dbpedia/atomic_q274.sparql"; + + public static final String dbpedia_latest_tbox = onto_dir + "dbpedia/dbpedia_2014.owl"; + public static final String travel_tbox = onto_dir + "dbpedia/travel.owl"; + public static final String dbpedia_tbox_simple = onto_dir + "dbpedia/dbpedia_simple.owl"; + + public static final String bioModels_tbox = onto_dir + "biomodels/biomodels-21.owl"; + public static final String bioModels_abox = onto_dir + "biomodels/data_processed_1.ttl"; + public static final String bioModels_queries = onto_dir + "biomodels/queries/queries.sparql"; + + public static final String chembl_tbox = onto_dir + "bio2rdf/chembl/cco-processed-noDPR-noDPD.ttl"; + public static final String chembl_abox = onto_dir + "bio2rdf/chembl/graph sampling old/sample_100.nt"; + public static final String chembl_queries = onto_dir + "bio2rdf/chembl/queries/problematic.sparql"; + //"bio2rdf/chembl/queries/atomic_one_filtered.sparql"; // + + public static final String reactome_tbox = onto_dir + "bio2rdf/reactome/biopax-level3-processed.owl"; + public static final String reactome_abox = onto_dir + "bio2rdf/reactome/graph sampling old/sample.ttl"; + //data/data.ttl"; //graph sampling old/reactome_sample_10.ttl"; // + public static final String reactome_queries = onto_dir + "bio2rdf/reactome/queries/atomic.sparql"; + + public static final String uniprot_tbox = onto_dir + "bio2rdf/uniprot/core-processed.owl"; + public static final String uniprot_abox = onto_dir + "bio2rdf/uniprot/graph sampling/sample_1.nt"; + public static final String uniprot_queries = onto_dir + "bio2rdf/uniprot/queries/atomic_one.sparql"; + + public static final String atlas_tbox = onto_dir + "bio2rdf/atlas/gxaterms.owl"; + public static final String atlas_abox = onto_dir + "bio2rdf/atlas/graph sampling/sample_1.nt"; + public static final String atlas_queries = onto_dir + "bio2rdf/atlas/queries/atomic_one.sparql"; + QueryReasoner pagoda; + + // private void printPredicatesWithGap() { +// for (String p: ((MyQueryReasoner) pagoda).getPredicatesWithGap()) { +// System.out.println(p); +// } +// } + Timer timer = new Timer(); + + public PagodaTester(QueryReasoner reasoner) { + pagoda = reasoner; + } + + public static void main(String... args) { + if(args.length == 0) { +// args = new String[] {test_tbox, test_abox, test_query}; +// args = new String[] {lubm_tbox, lubm_abox, lubm_query}; +// args = new String[] {uobm_tbox, uobm_abox, uobm_query}; +// args = new String[] {fly, "null", fly_query}; +// args = new String[] {dbpedia_tbox, dbpedia_abox, dbpedia_query}; +// args = new String[] {travel_tbox, null, dbpedia_query274}; + args = new String[]{fly, fly_query}; +// args = new String[] {npd_tbox, npd_abox, npd_query}; +// args = new String[] {npd_bench_tbox, npd_bench_abox, npd_bench_query}; +// args = new String[] {"../SemFacet/WebContent/WEB-INF/data/dbpedia.owl", "../SemFacet/WebContent/WEB-INF/data/dbpediaA.nt", null}; +// args = new String[] {"../core/WebContent/WEB-INF/data/fly.owl", "../core/WebContent/WEB-INF/data/fly-data.nt", null}; +// args = new String[] {"data/lubm/univ-bench.owl", "data/lubm/lubm1.ttl", "data/lubm/lubm.sparql", "lubm.ans"}; +// args = new String[] {"data/uobm/univ-bench-dl.owl", "data/uobm/uobm1.ttl", "data/uobm/uobm.sparql", "uobm.ans"}; +// args = new String[] {"data/fly/fly_anatomy_XP_with_GJ_FC_individuals.owl", "data/fly/fly.sparql", "fly.ans"}; +// args = new String[] {bioModels_tbox, bioModels_abox, bioModels_queries}; +// args = new String[] {chembl_tbox, chembl_abox, chembl_queries}; +// args = new String[] {reactome_tbox, reactome_abox, reactome_queries}; +// args = new String[] {reactome_tbox, "/users/yzhou/temp/reactome_debug.ttl", onto_dir +"bio2rdf/reactome/queries/atomic_one_q65.sparql"}; +// args = new String[] {uniprot_tbox.replace(".owl", "-noDis.owl"), "/users/yzhou/temp/uniprot_debug/sample_1_string.nt", uniprot_queries}; +// args = new String[] {uniprot_tbox.replace(".owl", "-noDis.owl"), uniprot_abox, uniprot_queries}; +// args = new String[] {atlas_tbox, atlas_abox, atlas_queries}; +// args = new String[] {onto_dir + "test/unsatisfiable.owl", null, onto_dir + "test/unsatisfiable_queries.sparql"}; +// args = new String[] {onto_dir + "test/jair-example.owl", null, onto_dir + "test/jair-example_query.sparql"}; +// args[2] = args[2].replace(".sparql", "_all_pagoda.sparql"); +// args[2] = args[2].replace(".sparql", "_pellet.sparql"); + } + + PagodaProperties properties = new PagodaProperties("config/uobm.properties"); + + int index = 0; + if(args.length > index) properties.setOntologyPath(args[index++]); + if(args.length > index && (args[index].endsWith(".ttl") || args[index].endsWith(".nt"))) + properties.setDataPath(args[index++]); + if(args.length > index && args[index].endsWith(".sparql")) properties.setQueryPath(args[index++]); + if(args.length > index && !args[index].startsWith("-")) properties.setAnswerPath(args[index++]); + if(args.length > index) properties.setToClassify(Boolean.parseBoolean(args[index++].substring(1))); + if(args.length > index) properties.setToCallHermiT(Boolean.parseBoolean(args[index++].substring(1))); + + Utility.logInfo("Ontology file: " + properties.getOntologyPath()); + Utility.logInfo("Data files: " + properties.getDataPath()); + Utility.logInfo("Query files: " + properties.getQueryPath()); + Utility.logInfo("Answer file: " + properties.getAnswerPath()); + + QueryReasoner pagoda = null; + + try { + Timer t = new Timer(); + pagoda = QueryReasoner.getInstance(properties); + if (pagoda == null) return; + + Utility.logInfo("Preprocessing Done in " + t.duration() + " seconds."); + + if (properties.getQueryPath() != null) + for (String queryFile: properties.getQueryPath().split(";")) + pagoda.evaluate(pagoda.getQueryManager().collectQueryRecords(queryFile)); + + if(properties.getShellMode()) + try { + evaluateConsoleQuery(pagoda); + } catch(IOException e) { + e.printStackTrace(); + } + } finally { + if (pagoda != null) pagoda.dispose(); + } + +// Utility.closeCurrentOut(); + + if(properties.getShellMode()) System.exit(0); + } + + private static void evaluateConsoleQuery(QueryReasoner pagoda) throws IOException { + int ending = (int) '$', symbol; + while(true) { + Utility.logInfo("Input your query ending with $"); + StringBuilder queryBuilder = new StringBuilder(); + while((symbol = System.in.read()) != ending) { + queryBuilder.append((char) symbol); + } + System.in.read(); + if(queryBuilder.length() == 0) return; + pagoda.evaluate_shell(queryBuilder.toString()); + } + } + + void testReactomeQueries() { + evaluate("select ?x where { ?x . }"); + evaluate("select ?y ?z where { ?y ?z . }"); + evaluate("select ?y where { ?y . }", true); + + } + + void testSemFacetQueries() { +// try { +// BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("query.line"))); +// for (String line; (line = reader.readLine()) != null && !line.isEmpty(); ) +// evaluate(line, true); +// reader.close(); +// } catch (FileNotFoundException e) { +// e.printStackTrace(); +// } catch (IOException e) { +// e.printStackTrace(); +// } + evaluate("select ?x ?z where { ?x ?z }", true); + evaluate("select distinct ?y where { ?x ?y ?z }", true); + evaluate("select distinct ?z where { ?x ?z }", true); + evaluate("select ?y ?z where { ?y ?z .}", true); + } + + void testISGQueries() { + evaluate("select ?z where { ?z .}", false); + evaluate("select ?x where {?x .}", false); + } + + void testSomeTravelQueries() { + evaluate("select ?y ?z where { ?y ?z. }", true); + evaluate("select ?x where {?x . }"); + evaluate("select ?x where {?x . }"); + } + + void testSomeFlyQueries() { + evaluate("select ?x where { ?x . }", false); + + evaluate("select DISTINCT ?z where { ?x ?any . ?any ?z . ?x . } ", true); + + evaluate("Select ?x where { ?x " + + ". ?x " + + " ?any . ?any " + + " " + + " . }", true); + + evaluate("Select ?x where {?x " + + " . ?x " + + " ?any . ?any " + + " " + + " . }", true); + +// evaluate("Select ?x where { " +// + "?x . " +// + "?x ?any . " +// + "?any . }", true); + + evaluate("select DISTINCT ?z where { ?x ?any . " + + "?any ?z . " + + "?x . } ", true); + + evaluate("Select * where {" + + " . " + + " ?z }", true); + + evaluate("SELECT DISTINCT ?x ?z WHERE {?x ?z}", true); + evaluate("SELECT DISTINCT ?x ?z WHERE {?x ?z}", true); + + evaluate("select DISTINCT ?y where { ?x ?y ?z . " + + "?x }", true); + + evaluateQueriesFromFile("/users/yzhou/Downloads/logs(1).log"); + evaluateQueriesFromFile("/users/yzhou/Downloads/logs.log"); + + evaluate("SELECT DISTINCT ?x ?z WHERE {?x ?z}", true); + evaluate("SELECT DISTINCT ?x ?z WHERE {?x ?z}", true); + + evaluate("select ?x ?z where { ?x ?z } ", true); + evaluate("select ?x ?z where { ?x ?z } ", true); + } + + public void evaluateQueriesFromFile(String fileName) { + Scanner scanner = null; + try { + scanner = new Scanner(new File(fileName)); + String line; + while(scanner.hasNextLine()) { + line = scanner.nextLine(); + if(line.startsWith("select")) + evaluate(line, true); + } + } catch(FileNotFoundException e) { + e.printStackTrace(); + } finally { + if(scanner != null) + scanner.close(); + } + } + + private void evaluate(String query) { + evaluate(query, false); + } + + private void evaluate(String query, boolean tag) { + timer.reset(); + AnswerTuples tuples = pagoda.evaluate(query, tag); + int arity = tuples.getArity(); + int count = 0; + for(AnswerTuple tuple; tuples.isValid(); tuples.moveNext()) { + tuple = tuples.getTuple(); + for(int i = 0; i < arity; ++i) + tuple.getGroundTerm(i).toString(); +// System.out.print(tuple.getGroundTerm(i).toString() + "\t"); +// System.out.println(); + ++count; + } + tuples.dispose(); + Utility.logInfo("The number of answers for this SemFacet query: " + count); + Utility.logInfo("Total time for this SemFacet query: " + timer.duration()); + } + +} diff --git a/src/test/java/uk/ac/ox/cs/pagoda/tester/Statistics.java b/src/test/java/uk/ac/ox/cs/pagoda/tester/Statistics.java new file mode 100644 index 0000000..13d7f90 --- /dev/null +++ b/src/test/java/uk/ac/ox/cs/pagoda/tester/Statistics.java @@ -0,0 +1,60 @@ +package uk.ac.ox.cs.pagoda.tester; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Scanner; + +@Deprecated +public class Statistics { + + double satCheckTime; + double preprocessTime; + LinkedList number = new LinkedList(); + LinkedList time = new LinkedList(); + + public Statistics(String file) { + Scanner scanner = null; + try { + scanner = new Scanner(new File(file)); + for (String line; scanner.hasNextLine(); ) { + line = scanner.nextLine(); + if (line.contains("time for satisfiability checking")) + satCheckTime = Double.parseDouble(line.substring(line.indexOf(": ") + 2)); + else if (line.contains("Preprocessing Done in")) + preprocessTime = Double.parseDouble(line.substring(line.indexOf("in ") + 3, line.indexOf(" second"))); + else if (line.contains("The number of answer tuples:")) + number.add(Integer.parseInt(line.substring(line.indexOf(": ") + 2))); + else if (line.contains("Total time to answer this query:")) + time.add(Double.parseDouble(line.substring(line.indexOf(": ") + 2))); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } finally { + if (scanner != null) + scanner.close(); + } + } + + public String diff(String other) { + return diff(new Statistics(other)); + } + + public String diff(Statistics other) { + if (other.number.size() != number.size()) + return "The number of query is different! " + this.number.size() + " v.s. " + other.number.size(); + int i = 0; + Iterator iter1 = number.iterator(), iter2 = other.number.iterator(); + StringBuilder diff = new StringBuilder(); + int a, b; + while (iter1.hasNext()) { + ++i; + if ((a = iter1.next()) != (b = iter2.next())) { + diff.append("Query ").append(i).append(": ").append(a).append(", reference ").append(b).append("\n"); + } + } + return diff.toString(); + } + +} -- cgit v1.2.3