aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithGap.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithGap.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithGap.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithGap.java b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithGap.java
new file mode 100644
index 0000000..e7bd188
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithGap.java
@@ -0,0 +1,111 @@
1package uk.ac.ox.cs.pagoda.tracking;
2
3import java.util.Collection;
4import java.util.LinkedList;
5
6import org.semanticweb.HermiT.model.Atom;
7import org.semanticweb.HermiT.model.AtomicConcept;
8import org.semanticweb.HermiT.model.AtomicRole;
9import org.semanticweb.HermiT.model.DLClause;
10import org.semanticweb.HermiT.model.Variable;
11import org.semanticweb.owlapi.model.OWLClass;
12import org.semanticweb.owlapi.model.OWLObjectProperty;
13import org.semanticweb.owlapi.model.OWLOntology;
14
15import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
16import uk.ac.ox.cs.pagoda.query.*;
17import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine;
18import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram;
19import uk.ac.ox.cs.pagoda.util.Namespace;
20
21public class TrackingRuleEncoderWithGap extends TrackingRuleEncoder {
22
23 public TrackingRuleEncoderWithGap(UpperDatalogProgram program, BasicQueryEngine store) {
24 super(program, store);
25 }
26
27 @Override
28 protected String getEqualityRelatedRuleText() {
29 if (equalityRelatedRuleText != null) return equalityRelatedRuleText.replace("_tn", getTrackingPredicate(""));
30
31 Collection<DLClause> equalityRelatedClauses = new LinkedList<DLClause>();
32 Variable X = Variable.create("X");
33 AtomicRole trackingSameAs = AtomicRole.create(Namespace.EQUALITY + "_tn");
34 OWLOntology onto = program.getOntology();
35 Atom[] headAtom = new Atom[] {Atom.create(trackingSameAs, X, X)}, bodyAtom;
36 for (OWLClass cls: onto.getClassesInSignature(true)) {
37 String clsIRI = cls.getIRI().toString();
38 unaryPredicates.add(clsIRI);
39 bodyAtom = new Atom[] {
40 Atom.create(AtomicConcept.create(clsIRI + "_tn"), X),
41 Atom.create(AtomicConcept.create(GapTupleIterator.getGapPredicate(clsIRI)), X)};
42 equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom));
43 }
44
45 Variable Y = Variable.create("Y");
46 for (OWLObjectProperty prop: onto.getObjectPropertiesInSignature(true)) {
47 String propIRI = prop.getIRI().toString();
48 binaryPredicates.add(propIRI);
49 AtomicRole trackingRole = AtomicRole.create(propIRI + "_tn");
50 AtomicRole gapRole = AtomicRole.create(GapTupleIterator.getGapPredicate(propIRI));
51// AtomicRole role = AtomicRole.create(propIRI);
52 bodyAtom = new Atom[] {
53 Atom.create(trackingRole, X, Y),
54 Atom.create(gapRole, X, Y)};
55 equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom));
56
57 bodyAtom = new Atom[] {
58 Atom.create(trackingRole, Y, X),
59 Atom.create(gapRole, Y, X)};
60 equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom));
61 }
62
63 equalityRelatedClauses.add(
64 DLClause.create(
65 new Atom[] {Atom.create(trackingSameAs, Y, X)},
66 new Atom[] {Atom.create(trackingSameAs, X, Y)}));
67
68 equalityRelatedRuleText = DLClauseHelper.toString(equalityRelatedClauses).toString();
69 return equalityRelatedRuleText.replace("_tn", getTrackingPredicate(""));
70 }
71
72 @Override
73 protected void encodingRule(DLClause clause) {
74 LinkedList<Atom> newHeadAtoms = new LinkedList<Atom>();
75 newHeadAtoms.add(Atom.create(selected, getIndividual4GeneralRule(clause)));
76
77 Atom headAtom;
78 for (Atom atom: clause.getBodyAtoms()) {
79 headAtom = Atom.create(
80 getTrackingDLPredicate(atom.getDLPredicate()),
81 DLClauseHelper.getArguments(atom));
82 newHeadAtoms.add(headAtom);
83 }
84
85 DLClause newClause;
86
87 int offset = (clause.getBodyLength() == 1 && clause.getBodyAtom(0).getDLPredicate().toString().contains("owl:Nothing")) ? 1 : 2;
88
89 Atom[] newBodyAtoms = new Atom[clause.getBodyLength() + offset];
90 headAtom = clause.getHeadAtom(0);
91 newBodyAtoms[0] = Atom.create(
92 getTrackingDLPredicate(headAtom.getDLPredicate()),
93 DLClauseHelper.getArguments(headAtom));
94
95 if (offset == 2)
96 newBodyAtoms[1] = Atom.create(
97 getGapDLPredicate(headAtom.getDLPredicate()),
98 DLClauseHelper.getArguments(headAtom));
99
100 for (int i = 0; i < clause.getBodyLength(); ++i)
101 newBodyAtoms[i + offset] = clause.getBodyAtom(i);
102
103 for (Atom atom: newHeadAtoms) {
104 newClause = DLClause.create(new Atom[] {atom}, newBodyAtoms);
105 trackingClauses.add(newClause);
106 }
107
108 }
109
110
111}