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
|
package uk.ac.ox.cs.pagoda.rules;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import org.semanticweb.owlapi.model.OWLOntology;
import uk.ac.ox.cs.pagoda.owl.OWLHelper;
import uk.ac.ox.cs.pagoda.util.Namespace;
import uk.ac.ox.cs.pagoda.util.Utility;
public class EqualityAxiomatiser {
OWLOntology ontology;
public EqualityAxiomatiser(String fileName) {
ontology = OWLHelper.loadOntology(OWLManager.createOWLOntologyManager(), fileName);
}
public EqualityAxiomatiser(OWLOntology ontology) {
this.ontology = ontology;
}
public static void main(String[] args) throws IOException {
if (args.length == 0) {
args = new String[1];
args[0] = "../uobmGenerator/ontologies/2rl/univ-bench-dl-TBox.owl";
}
EqualityAxiomatiser axiomatiser;
for (String fileName: args) {
axiomatiser = new EqualityAxiomatiser(fileName);
String outputFileName = fileName.replace(".owl", "-axiomatised.rule");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFileName)));
writer.write(axiomatiser.getRuleTexts());
writer.close();
}
}
public String getRuleTexts() {
StringBuffer buf = new StringBuffer();
// buf.append(reflexivity()).append(Utility.LINE_SEPARATOR);
buf.append(symmetry()).append(Utility.LINE_SEPARATOR);
buf.append(transitivity()).append(Utility.LINE_SEPARATOR);
for (OWLObjectProperty p: ontology.getObjectPropertiesInSignature(true))
buf.append(addingEqualities4Properties(OWLHelper.addAngles(p.getIRI().toString()))).append(Utility.LINE_SEPARATOR);
for (OWLClass c: ontology.getClassesInSignature(true))
buf.append(addingEqualities4Class(OWLHelper.addAngles(c.getIRI().toString()))).append(Utility.LINE_SEPARATOR);
return buf.toString();
}
private static String transitivity() {
StringBuffer buffer = new StringBuffer();
buffer.append(Namespace.EQUALITY_QUOTED).append("(?Y0,?Y2) :- ").append(Namespace.EQUALITY_QUOTED ).append("(?Y0,?Y1), ").append(Namespace.EQUALITY_QUOTED ).append("(?Y1,?Y2) .");
return buffer.toString();
}
private static String symmetry() {
StringBuffer buffer = new StringBuffer();
buffer.append(Namespace.EQUALITY_QUOTED ).append("(?Y1,?Y0) :- ").append(Namespace.EQUALITY_QUOTED ).append("(?Y0,?Y1) .");
return buffer.toString();
}
@SuppressWarnings("unused")
private static String reflexivity() {
StringBuffer buffer = new StringBuffer();
buffer.append(Namespace.EQUALITY_QUOTED ).append("(?Y0,?Y0) :- .");
return buffer.toString();
}
private static String addingEqualities4Properties(String property) {
StringBuffer buffer = new StringBuffer();
buffer.append(property).append("(?Y2,?Y1) :- ").append(property).append("(?Y0,?Y1), ").append(Namespace.EQUALITY_QUOTED ).append("(?Y0,?Y2) .\n");
buffer.append(property).append("(?Y0,?Y2) :- ").append(property).append("(?Y0,?Y1), ").append(Namespace.EQUALITY_QUOTED ).append("(?Y1,?Y2) .");
return buffer.toString();
}
private static String addingEqualities4Class(String clazz) {
StringBuffer buffer = new StringBuffer();
buffer.append(clazz).append("(?Y1) :- ").append(clazz).append("(?Y0), ").append(Namespace.EQUALITY_QUOTED ).append("(?Y0,?Y1) .");
return buffer.toString();
}
}
|