aboutsummaryrefslogtreecommitdiff
path: root/test/uk/ac/ox/cs/hermit/HermitQueryReasoner.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/uk/ac/ox/cs/hermit/HermitQueryReasoner.java')
-rw-r--r--test/uk/ac/ox/cs/hermit/HermitQueryReasoner.java199
1 files changed, 0 insertions, 199 deletions
diff --git a/test/uk/ac/ox/cs/hermit/HermitQueryReasoner.java b/test/uk/ac/ox/cs/hermit/HermitQueryReasoner.java
deleted file mode 100644
index 008fcb2..0000000
--- a/test/uk/ac/ox/cs/hermit/HermitQueryReasoner.java
+++ /dev/null
@@ -1,199 +0,0 @@
1package uk.ac.ox.cs.hermit;
2
3import org.semanticweb.HermiT.Reasoner;
4import org.semanticweb.HermiT.model.Atom;
5import org.semanticweb.HermiT.model.AtomicRole;
6import org.semanticweb.owlapi.model.*;
7import org.semanticweb.owlapi.reasoner.Node;
8import uk.ac.ox.cs.pagoda.owl.OWLHelper;
9import uk.ac.ox.cs.pagoda.owl.QueryRoller;
10import uk.ac.ox.cs.pagoda.query.QueryManager;
11import uk.ac.ox.cs.pagoda.query.QueryRecord;
12import uk.ac.ox.cs.pagoda.util.Timer;
13
14import java.io.*;
15import java.util.HashSet;
16import java.util.Set;
17import java.util.concurrent.*;
18
19public class HermitQueryReasoner {
20
21 public static void main(String... args) throws FileNotFoundException, OWLOntologyCreationException, OWLOntologyStorageException {
22 if (args.length == 0) {
23// args = new String[] {"/media/krr-nas-share/Yujiao/ontologies/lubm/lubm1_merged.owl", null, PagodaTester.lubm_query};
24// args = new String[] {"/users/yzhou/ontologies/uobm/uobm1_merged.owl", null, "/users/yzhou/ontologies/uobm/queries/standard.sparql"};
25// args = new String[] {"/users/yzhou/ontologies/fly/fly_anatomy_XP_with_GJ_FC_individuals.owl", null, "/users/yzhou/ontologies/fly/queries/fly.sparql"};
26// args = new String[] {"/media/krr-nas-share/Yujiao/ontologies/npd/npd-all-minus-datatype.owl", "/media/krr-nas-share/Yujiao/ontologies/npd/data/npd-data-dump-minus-datatype-new.ttl", "/users/yzhou/ontologies/npd/queries/atomic.sparql"};
27// args = new String[] {"/media/krr-nas-share/Yujiao/ontologies/npd/npd-all.owl", "/media/krr-nas-share/Yujiao/ontologies/npd/data/npd-data-dump-processed.ttl", "/users/yzhou/ontologies/npd/queries/atomic.sparql"};
28// args = new String[] {PagodaTester.dbpedia_tbox, PagodaTester.dbpedia_abox, PagodaTester.dbpedia_query};
29// args = new String[] {"/users/yzhou/ontologies/answersCorrectness/unsatisfiable.owl", null, "/users/yzhou/ontologies/answersCorrectness/unsatisfiable_queries.sparql"};
30
31// args = new String[] {"/media/krr-nas-share/Yujiao/ontologies/bio2rdf/chembl/cco-processed-noDPR-noDPD.ttl", "/media/krr-nas-share/Yujiao/ontologies/bio2rdf/chembl/graph sampling/sample_100.nt", "/media/krr-nas-share/Yujiao/ontologies/bio2rdf/chembl/queries/atomic_one_filtered.sparql", "../answersCorrectness-share/results/chembl/hermit_1p"};
32 args =
33 new String[]{"/users/yzhou/temp/uniprot_debug/core-processed-noDis.owl", "/users/yzhou/temp/uniprot_debug/sample_1_removed.nt", "/media/krr-nas-share/Yujiao/ontologies/bio2rdf/uniprot/queries/atomic_one.sparql", "../answersCorrectness-share/results/uniprot/hermit_1p"};
34 }
35// args = new String[] {"imported.owl", "", "/media/krr-nas-share/Yujiao/ontologies/bio2rdf/uniprot/queries/atomic_one.sparql", "../answersCorrectness-share/results/uniprot/hermit_1p"}; }
36
37
38 PrintStream ps = args.length < 4 ? null : new PrintStream(new File(args[3]));
39 for (int i = 0; i < args.length; ++i) {
40 if (args[i] == null || args[i].equalsIgnoreCase("null")) args[i] = "";
41 System.out.println("Argument " + i + ": " + args[i]);
42 }
43
44// PrintStream ps = null; // new PrintStream(new File("../answersCorrectness-share/results/reactome/ "));
45 if (ps != null) System.setOut(ps);
46
47 Timer t = new Timer();
48 OWLOntology onto = OWLHelper.loadOntology(args[0]);
49 OWLOntologyManager man = onto.getOWLOntologyManager();
50
51 OWLDatatype date = man.getOWLDataFactory().getOWLDatatype(IRI.create("http://www.w3.org/2001/XMLSchema#date"));
52
53 if (onto.containsEntityInSignature(date)) {
54 for (OWLOntology o: onto.getImportsClosure())
55 for (OWLAxiom axiom: o.getAxioms())
56 if (axiom.getDatatypesInSignature().contains(date)) {
57 System.out.println("The axiom: " + axiom + " is being ingored. ");
58 man.removeAxiom(onto, axiom);
59 }
60 man.saveOntology(onto, new FileOutputStream(args[0] = "tbox_hermit.owl"));
61 man.removeOntology(onto);
62 onto = OWLHelper.loadOntology(man, args[0]);
63 System.out.println("TBox processed in " + t.duration());
64 }
65
66 try {
67 onto = OWLHelper.getImportedOntology(onto, args[1]);
68 } catch (IOException e) {
69 e.printStackTrace();
70 }
71 System.out.println("Ontology loaded in " + t.duration());
72 System.out.println("ABox axioms:" + onto.getABoxAxioms(true).size());
73// for (OWLOntology o: onto.getImportsClosure())
74// for (OWLAxiom axiom: o.getAxioms())
75// System.out.println(axiom);
76
77 Reasoner hermit = new Reasoner(onto);
78 if (!hermit.isConsistent()) {
79 System.out.println("The ontology is inconsistent.");
80 return ;
81 }
82 System.out.println("Preprocessing DONE in " + t.duration());
83
84// System.out.println(hermit.isConsistent());
85
86 QueryManager queryManager = new QueryManager();
87 QueryRoller roller = new QueryRoller(onto.getOWLOntologyManager().getOWLDataFactory());
88 int failedCounter = 0;
89 Timer total = new Timer();
90 for (QueryRecord record: queryManager.collectQueryRecords(args[2])) {
91 if (Integer.parseInt(record.getQueryID()) < 10) continue;
92 if (total.duration() > 18000) {
93 System.out.println("Time out 5h.");
94 return ;
95 }
96 System.out.println("--------------------- Query " + record.getQueryID() + " -----------------------");
97 System.out.println(record.getQueryText());
98 ExecutorService exec = Executors.newSingleThreadExecutor();
99 try {
100 Future<Boolean> succ = exec.submit(new QueryThread(record, onto, hermit, roller));
101 try {
102 try {
103 if (record.getQueryID().equals("1"))
104 System.out.println(succ.get(60, TimeUnit.MINUTES));
105 else
106 System.out.println(succ.get(20, TimeUnit.MINUTES));
107 } catch (InterruptedException e) {
108// e.printStackTrace();
109 } catch (ExecutionException e) {
110// e.printStackTrace();
111 } catch (TimeoutException e) {
112// e.printStackTrace();
113 }
114 } finally {
115 if (succ.cancel(true)) {
116 System.out.println("Trying to cancel the current query thread " + (++failedCounter));
117 }
118 }
119 } finally {
120 exec.shutdownNow();
121 }
122 }
123
124 if (ps != null) ps.close();
125 System.exit(0);
126 }
127
128}
129
130class QueryThread implements Callable<Boolean> {
131
132 QueryRecord record;
133 OWLOntology onto;
134 Reasoner hermit;
135 QueryRoller roller;
136
137 public QueryThread(QueryRecord record2, OWLOntology onto2, Reasoner hermit2, QueryRoller roller2) {
138 record = record2; onto = onto2; hermit = hermit2; roller = roller2;
139 }
140
141 @Override
142 public Boolean call() throws Exception {
143 Set<String> answers = new HashSet<String>();
144 Timer t = new Timer();
145 if (record.getDistinguishedVariables().length > 1) {
146 if (record.getDistinguishedVariables().length == 2 && record.getClause().getBodyLength() == 1) {
147 dealWithAtomicBinaryQuery(record.getClause().getBodyAtom(0), answers);
148 System.out.println("Query " + record.getQueryID() + " The number of answers: " + answers.size());
149 System.out.println("Query " + record.getQueryID() + " Total time: " + t.duration());
150 }
151 else {
152 System.out.println("Query " + record.getQueryID() + " The number of answers: Query cannot be processsed.");
153 System.out.println("Query " + record.getQueryID() + " Total time: Query cannot be processsed.");
154 }
155 return false;
156 }
157
158 OWLClassExpression exp = null;
159
160 try {
161 exp = roller.rollUp(record.getClause(), record.getAnswerVariables()[0]);
162 } catch (Exception e) {
163 System.out.println("Query " + record.getQueryID() + " The number of answers: Query cannot be processsed.");
164 System.out.println("Query " + record.getQueryID() + " Total time: Query cannot be processsed.");
165 return false;
166 }
167 System.out.println(exp);
168 for (Node<OWLNamedIndividual> node: hermit.getInstances(exp, false)) {
169 for (OWLIndividual ind: node.getEntities()) {
170 answers.add(ind.toStringID());
171 }
172 }
173 System.out.println("Query " + record.getQueryID() + " The number of answers: " + answers.size());
174 System.out.println("Query " + record.getQueryID() + " Total time: " + t.duration());
175 return true;
176 }
177
178 private void dealWithAtomicBinaryQuery(Atom bodyAtom, Set<String> answers) {
179 StringBuilder sb = new StringBuilder();
180 OWLDataFactory f = onto.getOWLOntologyManager().getOWLDataFactory();
181 OWLObjectProperty p = f.getOWLObjectProperty(IRI.create(((AtomicRole) bodyAtom.getDLPredicate()).getIRI()));
182 for (Node<OWLNamedIndividual> sub: hermit.getInstances(f.getOWLObjectMinCardinality(1, p), false)) {
183 for (Node<OWLNamedIndividual> obj: hermit.getObjectPropertyValues(sub.getRepresentativeElement(), p)) {
184 for (OWLNamedIndividual subInd: sub.getEntities()) {
185 sb.setLength(0);
186 sb.append(subInd.toString()).append(" ");
187 int len = sb.length();
188 for (OWLNamedIndividual objInd: obj.getEntities()) {
189 sb.setLength(len);
190 sb.append(objInd.toString());
191 answers.add(sb.toString());
192 }
193 }
194 }
195 }
196 }
197
198}
199