aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java
diff options
context:
space:
mode:
authoryzhou <yujiao.zhou@gmail.com>2015-04-21 10:34:27 +0100
committeryzhou <yujiao.zhou@gmail.com>2015-04-21 10:34:27 +0100
commit9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8 (patch)
tree47511c0fb89dccff0db4b5990522e04f294d795b /src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java
parentb1ac207612ee8b045244253fb94b866104bc34f2 (diff)
downloadACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.tar.gz
ACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.zip
initial version
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java
new file mode 100644
index 0000000..be9e45c
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java
@@ -0,0 +1,109 @@
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.reasoner.light.BasicQueryEngine;
17import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram;
18import uk.ac.ox.cs.pagoda.util.Namespace;
19
20public class TrackingRuleEncoderWithoutGap extends TrackingRuleEncoder {
21
22 public TrackingRuleEncoderWithoutGap(UpperDatalogProgram program, BasicQueryEngine store) {
23 super(program, store);
24 }
25
26 @Override
27 protected String getEqualityRelatedRuleText() {
28 if (equalityRelatedRuleText != null) return equalityRelatedRuleText.replace("_tn", getTrackingPredicate(""));
29
30 Collection<DLClause> equalityRelatedClauses = new LinkedList<DLClause>();
31 Variable X = Variable.create("X");
32 AtomicRole trackingSameAs = AtomicRole.create(Namespace.EQUALITY + "_tn");
33 OWLOntology onto = program.getOntology();
34 Atom[] headAtom, bodyAtom;
35 for (OWLClass cls: onto.getClassesInSignature(true)) {
36 String clsIRI = cls.getIRI().toString();
37 unaryPredicates.add(clsIRI);
38 headAtom = new Atom[] {Atom.create(trackingSameAs, X, X)};
39 bodyAtom = new Atom[] {
40 Atom.create(AtomicConcept.create(clsIRI + "_tn"), X),
41// Atom.create(AtomicConcept.create(GapTupleIterator.getGapPredicate(clsIRI)), X1),
42 Atom.create(AtomicConcept.create(clsIRI), X)};
43 equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom));
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 headAtom = new Atom[] {Atom.create(trackingSameAs, X, X)};
53 bodyAtom = new Atom[] {
54 Atom.create(trackingRole, X, Y),
55// Atom.create(gapRole, X1, Y),
56 Atom.create(role, X, Y)};
57 equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom));
58
59 bodyAtom = new Atom[] {
60 Atom.create(trackingRole, Y, X),
61// Atom.create(gapRole, Y, X1),
62 Atom.create(role, Y, X)};
63 equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom));
64 }
65
66 equalityRelatedClauses.add(
67 DLClause.create(
68 new Atom[] {Atom.create(trackingSameAs, Y, X)},
69 new Atom[] {Atom.create(trackingSameAs, X, Y)}));
70
71 equalityRelatedRuleText = DLClauseHelper.toString(equalityRelatedClauses).toString();
72 return equalityRelatedRuleText.replace("_tn", getTrackingPredicate(""));
73 }
74
75 @Override
76 protected void encodingRule(DLClause clause) {
77 LinkedList<Atom> newHeadAtoms = new LinkedList<Atom>();
78 newHeadAtoms.add(Atom.create(selected, getIndividual4GeneralRule(clause)));
79
80 Atom headAtom;
81 for (Atom atom: clause.getBodyAtoms()) {
82 headAtom = Atom.create(
83 getTrackingDLPredicate(atom.getDLPredicate()),
84 DLClauseHelper.getArguments(atom));
85 newHeadAtoms.add(headAtom);
86 }
87
88 DLClause newClause;
89 Atom[] newBodyAtoms = new Atom[clause.getBodyLength() + 1];
90 headAtom = clause.getHeadAtom(0);
91 newBodyAtoms[0] = Atom.create(
92 getTrackingDLPredicate(headAtom.getDLPredicate()),
93 DLClauseHelper.getArguments(headAtom));
94
95// newBodyAtoms[1] = Atom.create(
96// getGapDLPredicate(headAtom.getDLPredicate()),
97// DLClauseHelper.getArguments(headAtom));
98
99 for (int i = 0; i < clause.getBodyLength(); ++i)
100 newBodyAtoms[i + 1] = clause.getBodyAtom(i);
101
102 for (Atom atom: newHeadAtoms) {
103 newClause = DLClause.create(new Atom[] {atom}, newBodyAtoms);
104 trackingClauses.add(newClause);
105 }
106
107 }
108
109}