aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/rules/EqualityAxiomatiser.java
blob: 81b8a0127ecc23fe43d086e98921ac063ab3a58e (plain) (blame)
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();
	}

}