1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
package uk.ac.ox.cs.pagoda.approx;
import java.io.IOException;
import org.semanticweb.owlapi.model.OWLOntology;
import uk.ac.ox.cs.pagoda.approx.KnowledgeBase;
import uk.ac.ox.cs.pagoda.approx.RLOntology;
import uk.ac.ox.cs.pagoda.approx.RLPlusOntology;
import uk.ac.ox.cs.pagoda.constraints.NullaryBottom;
import uk.ac.ox.cs.pagoda.owl.OWLHelper;
import uk.ac.ox.cs.pagoda.rules.DisjunctiveProgram;
import uk.ac.ox.cs.pagoda.rules.ExistentialProgram;
import uk.ac.ox.cs.pagoda.rules.ExistentialToDisjunctive;
import uk.ac.ox.cs.pagoda.rules.GeneralProgram;
import uk.ac.ox.cs.pagoda.rules.LowerDatalogProgram;
import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram;
import uk.ac.ox.cs.pagoda.util.Utility;
public class ApproxTester {
private static ApproxType description = ApproxType.DATALOGPMOR;
private static String ontoFile = null;
public static void main(String[] args) throws IOException
{
args = new String[] {
"-tbox",
// "/home/yzhou/krr-nas-share/Yujiao/ontologies/bio2rdf/chembl/cco-noDPR.ttl",
// "/home/yzhou/krr-nas-share/Yujiao/ontologies/bio2rdf/reactome/biopax-level3-processed.owl",
// "/media/krr-nas-share/Yujiao/ontologies/bio2rdf/atlas/gxaterms.owl",
// "/media/krr-nas-share/Yujiao/ontologies/bio2rdf/uniprot/core-sat-processed.owl",
// PagodaTester.npd_tbox,
// "/users/yzhou/temp/ontologies/core.RLor.rdf",
"datatype.owl",
"-dest", ApproxType.DATALOGPMOR.toString()
};
long startTime = System.currentTimeMillis();
if (args.length > 0) {
if (args.length % 2 != 0) {
System.out.println("arguments error...");
return ;
}
for (int i = 0; i < args.length ; i = i + 2)
if (!setArgument(args[i], args[i + 1])) {
System.out.println("arguments error...");
return ;
}
}
// Utility.redirectSystemOut();
System.setProperty("entityExpansionLimit", String.valueOf(Integer.MAX_VALUE));
String directory = ontoFile.substring(0, ontoFile.lastIndexOf(Utility.FILE_SEPARATOR) + 1);
KnowledgeBase program = null;
switch (description) {
case OWL2RLPLUS: program = new RLPlusOntology(); break;
case OWL2RL: program = new RLOntology(); break;
case DATALOG_UPPER: program = new UpperDatalogProgram(); break;
case DATALOG_LOWER: program = new LowerDatalogProgram(); break;
case EXISTENTIAL: program = new ExistentialProgram(); break;
case DISJUNCTIVE: program = new DisjunctiveProgram(); break;
case DATALOGPMOR: program = new GeneralProgram(); break;
case EXIST2DISJ: program = new ExistentialToDisjunctive(); break;
default:
System.exit(0);
}
if (program instanceof RLPlusOntology)
((RLPlusOntology) program).setCorrespondenceFileLoc(directory + "correspondence");
OWLOntology ontology = OWLHelper.loadOntology(ontoFile);
program.load(ontology, new NullaryBottom());
program.transform();
program.save();
System.out.println("Time to transform the rules: " + (System.currentTimeMillis() - startTime) / 1000.);
Utility.closeCurrentOut();
}
private static boolean setArgument(String key, String value) {
if (key.equalsIgnoreCase("-dest"))
if (value.equalsIgnoreCase("OWL2RL+")) description = ApproxType.OWL2RLPLUS;
else if (value.equalsIgnoreCase("OWL2RL")) description = ApproxType.OWL2RL;
else if (value.equalsIgnoreCase("UPPERDATALOG")) description = ApproxType.DATALOG_UPPER;
else if (value.equalsIgnoreCase("LOWERDATALOG")) description = ApproxType.DATALOG_LOWER;
else if (value.equalsIgnoreCase("DATALOGPMOR")) description = ApproxType.DATALOGPMOR;
else if (value.equalsIgnoreCase("EXISTENTIALRULES")) description = ApproxType.EXISTENTIAL;
else if (value.equalsIgnoreCase("DISJUNCTIVE")) description = ApproxType.DISJUNCTIVE;
else if (value.equalsIgnoreCase("EXIST2DISJ")) description = ApproxType.EXIST2DISJ;
else {
System.out.println("illegal destination argument...");
return false;
}
else if (key.equalsIgnoreCase("-tbox"))
ontoFile = value;
else {
System.out.println("unrecognisable type of argument...");
return false;
}
return true;
}
public enum ApproxType {
/**
* approx to (RL + self + top being the subClassExp)
*/
OWL2RLPLUS,
/**
* approx to RL
*/
OWL2RL,
/**
* approx to datalog by replacing existential quantified variables
* by fresh constants and replacing disjunctions by conjunctions
*/
DATALOG_UPPER,
/**
* approx to datalog by ignoring existential and disjunctive axiom
*/
DATALOG_LOWER,
/**
* approx to existential rules by replacing disjunctions by
* conjunctions
*/
EXISTENTIAL,
/**
* approx to disjunctive datalog program by replacing existential
* quantified variables by fresh constants (DNF)
*/
DISJUNCTIVE,
/**
* transform into rules, no approximation at all
*/
DATALOGPMOR,
/**
* approx existential quantifiers by disjunctions
*/
EXIST2DISJ
};
}
|