aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.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/TrackingRuleEncoderDisj2.java
parentb1ac207612ee8b045244253fb94b866104bc34f2 (diff)
downloadACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.tar.gz
ACQuA-9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8.zip
initial version
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java
new file mode 100644
index 0000000..6cf239f
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java
@@ -0,0 +1,124 @@
1package uk.ac.ox.cs.pagoda.tracking;
2
3import org.semanticweb.HermiT.model.AtLeastConcept;
4import org.semanticweb.HermiT.model.Atom;
5import org.semanticweb.HermiT.model.AtomicConcept;
6import org.semanticweb.HermiT.model.AtomicNegationConcept;
7import org.semanticweb.HermiT.model.AtomicRole;
8import org.semanticweb.HermiT.model.DLClause;
9import org.semanticweb.HermiT.model.DLPredicate;
10import org.semanticweb.HermiT.model.Individual;
11import org.semanticweb.HermiT.model.Inequality;
12import org.semanticweb.HermiT.model.InverseRole;
13import org.semanticweb.HermiT.model.Term;
14import org.semanticweb.HermiT.model.Variable;
15
16import uk.ac.ox.cs.pagoda.MyPrefixes;
17import uk.ac.ox.cs.pagoda.multistage.Normalisation;
18import uk.ac.ox.cs.pagoda.query.QueryRecord;
19import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine;
20import uk.ac.ox.cs.pagoda.rules.OverApproxExist;
21import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram;
22
23public class TrackingRuleEncoderDisj2 extends TrackingRuleEncoderDisj {
24
25 public TrackingRuleEncoderDisj2(UpperDatalogProgram program, BasicQueryEngine store) {
26 super(program, store);
27 }
28
29 @Override
30 public boolean encodingRules() {
31 if (ruleEncoded) return false;
32 ruleEncoded = true;
33
34 for (DLClause clause: program.getClauses()) {
35 encodingRule(clause);
36 }
37
38 if (disjunctiveRules.isEmpty())
39 return true;
40
41 processDisjunctiveRules();
42 return false;
43 }
44
45 @Override
46 protected DLPredicate generateAuxiliaryRule(AtomicConcept p) {
47 return getTrackingDLPredicate(p);
48 }
49
50 @Override
51 protected DLPredicate generateAuxiliaryRule(AtomicRole p) {
52 return getTrackingDLPredicate(p);
53 }
54
55 private Variable X = Variable.create("X");
56
57 @Override
58 protected DLPredicate generateAuxiliaryRule(AtLeastConcept p, DLClause original, Individual[] individuals) {
59 DLPredicate ret = AtomicConcept.create(getTrackingPredicate(Normalisation.getAuxiliaryConcept4Disjunct((AtLeastConcept) p, individuals)));
60 Atom[] headAtom = new Atom[] {Atom.create(ret, X)};
61
62 AtomicRole role = p.getOnRole() instanceof AtomicRole ?
63 (AtomicRole) p.getOnRole():
64 ((InverseRole) p.getOnRole()).getInverseOf();
65
66 AtomicConcept concept = p.getToConcept() instanceof AtomicConcept ?
67 (AtomicConcept) p.getToConcept() :
68 OverApproxExist.getNegationConcept(((AtomicNegationConcept) p.getToConcept()).getNegatedAtomicConcept());
69
70 Term[] roleArgs, conceptArg;
71 for (Individual i: individuals) {
72// Variable i = Variable.create("Y");
73 if (p.getOnRole() instanceof AtomicRole) {
74 roleArgs = new Term[] {X, i};
75 conceptArg = new Term[] {i};
76 }
77 else {
78 roleArgs = new Term[] {i, X};
79 conceptArg = new Term[] {i};
80 }
81
82 addTrackingClause(
83 DLClause.create(headAtom,
84 new Atom[] {Atom.create(getTrackingDLPredicate(role), roleArgs)}));
85
86 Atom guard = Atom.create(role, roleArgs);
87
88 if (!concept.equals(AtomicConcept.THING)) {
89 addTrackingClause(
90 DLClause.create(headAtom,
91 new Atom[] {guard, Atom.create(getTrackingDLPredicate(concept), conceptArg)}));
92 }
93 }
94
95 return ret;
96 }
97
98 @Override
99 protected void encodingRule(DLClause clause) {
100 DLClause original = program.getCorrespondingClause(clause);
101 if (original.getHeadLength() <= 1) {
102 super.encodingRule(clause);
103 }
104 else addDisjunctiveRule(original, clause);
105 }
106
107 @Override
108 public String getTrackingProgram() {
109 StringBuilder sb = getTrackingProgramBody();
110 sb.insert(0, MyPrefixes.PAGOdAPrefixes.prefixesText());
111 return sb.toString();
112 }
113
114 @Override
115 protected void encodingAtomicQuery(QueryRecord[] botQuerRecords) {
116 super.encodingAtomicQuery(botQuerRecords, true);
117 }
118
119 @Override
120 protected DLPredicate generateAuxiliaryRule(Inequality instance) {
121 // TODO Auto-generated method stub
122 return null;
123 }
124}