aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/uk/ac/ox/cs/pagoda/summary
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/uk/ac/ox/cs/pagoda/summary')
-rw-r--r--src/test/java/uk/ac/ox/cs/pagoda/summary/SummaryTester.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/test/java/uk/ac/ox/cs/pagoda/summary/SummaryTester.java b/src/test/java/uk/ac/ox/cs/pagoda/summary/SummaryTester.java
new file mode 100644
index 0000000..60c8ed4
--- /dev/null
+++ b/src/test/java/uk/ac/ox/cs/pagoda/summary/SummaryTester.java
@@ -0,0 +1,140 @@
1package uk.ac.ox.cs.pagoda.summary;
2
3import java.io.File;
4import java.io.FileNotFoundException;
5import java.io.FileOutputStream;
6import java.io.IOException;
7import java.util.Scanner;
8
9import org.semanticweb.HermiT.Reasoner;
10import org.semanticweb.owlapi.model.AxiomType;
11import org.semanticweb.owlapi.model.IRI;
12import org.semanticweb.owlapi.model.OWLClassExpression;
13import org.semanticweb.owlapi.model.OWLDataFactory;
14import org.semanticweb.owlapi.model.OWLOntology;
15import org.semanticweb.owlapi.model.OWLOntologyCreationException;
16import org.semanticweb.owlapi.model.OWLOntologyStorageException;
17import org.semanticweb.owlapi.model.parameters.Imports;
18
19import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
20import uk.ac.ox.cs.pagoda.owl.OWLHelper;
21import uk.ac.ox.cs.pagoda.owl.QueryRoller;
22import uk.ac.ox.cs.pagoda.query.QueryManager;
23import uk.ac.ox.cs.pagoda.query.QueryRecord;
24import uk.ac.ox.cs.pagoda.summary.Summary;
25
26public class SummaryTester {
27
28 static String FILE_BREAK = System.getProperty("file.separator");
29 static String LINE_BREAK = System.getProperty("line.separator");
30
31 public static void main(String[] args) throws Exception {
32// String arg = "ontologies/claros/all-in-one-manually.owl";
33// String arg = "ontologies/claros/Claros.owl ontologies/claros/data";
34 String arg = "../uobmGenerator/univ-bench-dl.owl " +
35 "../uobmGenerator/uobm1 " + //"a " +
36 "ontologies/uobm/queries/uobm_standard_less.sparql";
37
38 testSummarisedUpperBound(arg.split("\\ "));
39 }
40
41 /**
42 * args[0] ontology file location
43 * args[1] data directory
44 * args[2] sparql query file location
45 *
46 * @param args
47 * @throws OWLOntologyCreationException
48 * @throws FileNotFoundException
49 * @throws OWLOntologyStorageException
50 */
51 public static void testSummarisedUpperBound(String[] args) throws OWLOntologyCreationException, FileNotFoundException, OWLOntologyStorageException {
52 OWLOntology onto = OWLHelper.loadOntology(args[0]);
53 try {
54 onto = OWLHelper.getImportedOntology(onto, args[1]);
55 } catch (IOException e) {
56 e.printStackTrace();
57 }
58
59 Summary sum = testSummary(onto);
60 System.out.println("Summarisation Done.");
61
62 System.out.println(args[2]);
63 Scanner scanner = new Scanner(new File(args[2]));
64 OWLOntology summary = sum.getSummary();
65 OWLDataFactory factory = summary.getOWLOntologyManager().getOWLDataFactory();
66 QueryRoller r = new QueryRoller(factory);
67 OWLClassExpression summarisedQueryExp;
68 Reasoner reasoner = new Reasoner(summary);
69 QueryManager queryManager = new QueryManager();
70 int upperBoundCounter, queryID = 0;
71 StringBuilder queryText = new StringBuilder();
72 String[] vars;
73
74 for (String line; ; ) {
75 queryText.setLength(0);
76 while (scanner.hasNextLine() && (line = scanner.nextLine()) != null && !line.startsWith("^[query"));
77 if (!scanner.hasNextLine()) break;
78
79 while (scanner.hasNextLine() && (line = scanner.nextLine()) != null && !line.isEmpty())
80 queryText.append(line).append(LINE_BREAK);
81 if (!scanner.hasNextLine()) break;
82
83 System.out.println("------------ starting computing for Query " + ++queryID + "------------");
84
85 System.out.println(queryText);
86
87 QueryRecord record = queryManager.create(queryText.toString(), queryID);
88 vars = record.getAnswerVariables();
89 if (vars.length > 1) {
90 System.out.println("The query cannot be processed by HermiT ... More than one answer variable");
91 continue;
92 }
93
94 summarisedQueryExp = r.rollUp(DLClauseHelper.getQuery(sum.getSummary(record), null), vars[0]);
95
96 upperBoundCounter = 0;
97 for (String representative: sum.getRepresentatives())
98 if (reasoner.isEntailed(factory.getOWLClassAssertionAxiom(summarisedQueryExp, factory.getOWLNamedIndividual(IRI.create(representative))))) {
99 upperBoundCounter += sum.getGroup(representative).size();
100 }
101
102 System.out.println("There are " + upperBoundCounter + " individual(s) in the upper bound computed by summary.");
103 }
104 scanner.close();
105 }
106
107 public static Summary testSummary(OWLOntology ontology) throws OWLOntologyCreationException, FileNotFoundException {
108 Summary sum = new Summary(ontology);
109
110 System.out.println("original ontology data: ");
111 outputStatistics(ontology);
112
113 OWLOntology summary = sum.getSummary();
114
115 System.out.println("summarised ontology data: ");
116 outputStatistics(summary);
117
118 try {
119 FileOutputStream out = new FileOutputStream("summary.owl");
120 summary.getOWLOntologyManager().saveOntology(summary, out);
121 out.close();
122 } catch (OWLOntologyStorageException e) {
123 e.printStackTrace();
124 } catch (IOException e) {
125 // TODO Auto-generated catch block
126 e.printStackTrace();
127 }
128
129 return sum;
130 }
131
132 private static void outputStatistics(OWLOntology onto) {
133 System.out.println("TBox: " + onto.getTBoxAxioms(Imports.INCLUDED).size() +
134 "\tRBox: " + onto.getRBoxAxioms(Imports.INCLUDED).size() +
135 "\tABox: " + onto.getABoxAxioms(Imports.INCLUDED).size());
136 System.out.println("Class Assertions: " + onto.getAxiomCount(AxiomType.CLASS_ASSERTION, Imports.INCLUDED) +
137 "\tObject Property Assertions: " + onto.getAxiomCount(AxiomType.OBJECT_PROPERTY_ASSERTION, Imports.INCLUDED));
138 }
139
140}