aboutsummaryrefslogtreecommitdiff
path: root/src/uk
diff options
context:
space:
mode:
authoryzhou <yzhou@krr-linux.cs.ox.ac.uk>2015-05-01 21:04:30 +0100
committeryzhou <yzhou@krr-linux.cs.ox.ac.uk>2015-05-01 21:04:30 +0100
commitd71035e6f10b3775191ad134d92f897044a592d8 (patch)
tree41076d7e079b6c6c46ffa946683343e3a80a0013 /src/uk
parent2d007839a1e0f9775097f5f7cff14521d2afd021 (diff)
downloadACQuA-d71035e6f10b3775191ad134d92f897044a592d8.tar.gz
ACQuA-d71035e6f10b3775191ad134d92f897044a592d8.zip
fixed some bugs
Diffstat (limited to 'src/uk')
-rw-r--r--src/uk/ac/ox/cs/pagoda/multistage/Normalisation.java45
-rw-r--r--src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoder.java2
-rw-r--r--src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisjVar1.java12
3 files changed, 51 insertions, 8 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/multistage/Normalisation.java b/src/uk/ac/ox/cs/pagoda/multistage/Normalisation.java
index 316e6c2..d68d28e 100644
--- a/src/uk/ac/ox/cs/pagoda/multistage/Normalisation.java
+++ b/src/uk/ac/ox/cs/pagoda/multistage/Normalisation.java
@@ -3,6 +3,7 @@ package uk.ac.ox.cs.pagoda.multistage;
3import java.util.Collection; 3import java.util.Collection;
4import java.util.HashMap; 4import java.util.HashMap;
5import java.util.HashSet; 5import java.util.HashSet;
6import java.util.Iterator;
6import java.util.LinkedList; 7import java.util.LinkedList;
7import java.util.Map; 8import java.util.Map;
8import java.util.Set; 9import java.util.Set;
@@ -15,6 +16,7 @@ import org.semanticweb.HermiT.model.AtomicConcept;
15import org.semanticweb.HermiT.model.AtomicNegationConcept; 16import org.semanticweb.HermiT.model.AtomicNegationConcept;
16import org.semanticweb.HermiT.model.AtomicRole; 17import org.semanticweb.HermiT.model.AtomicRole;
17import org.semanticweb.HermiT.model.Constant; 18import org.semanticweb.HermiT.model.Constant;
19import org.semanticweb.HermiT.model.ConstantEnumeration;
18import org.semanticweb.HermiT.model.DLClause; 20import org.semanticweb.HermiT.model.DLClause;
19import org.semanticweb.HermiT.model.Individual; 21import org.semanticweb.HermiT.model.Individual;
20import org.semanticweb.HermiT.model.Inequality; 22import org.semanticweb.HermiT.model.Inequality;
@@ -85,6 +87,10 @@ public class Normalisation {
85 } 87 }
86 88
87 Atom headAtom = clause.getHeadAtom(0); 89 Atom headAtom = clause.getHeadAtom(0);
90 if (headAtom.getDLPredicate() instanceof AtLeastDataRange) {
91 m_normClauses.add(clause);
92 return ;
93 }
88 AtLeastConcept alc = (AtLeastConcept) headAtom.getDLPredicate(); 94 AtLeastConcept alc = (AtLeastConcept) headAtom.getDLPredicate();
89 AtomicConcept ac = getRightAuxiliaryConcept(alc, OverApproxExist.getNewIndividual(clause, 0)); 95 AtomicConcept ac = getRightAuxiliaryConcept(alc, OverApproxExist.getNewIndividual(clause, 0));
90 DLClause newClause; 96 DLClause newClause;
@@ -113,20 +119,44 @@ public class Normalisation {
113 } 119 }
114 120
115 Atom[] newHeadAtoms = new Atom[clause.getHeadLength()]; 121 Atom[] newHeadAtoms = new Atom[clause.getHeadLength()];
122 Set<Atom> additionalAtoms = new HashSet<Atom>();
116 int index = 0; 123 int index = 0;
117 DLClause newClause; 124 DLClause newClause;
118 for (Atom headAtom: clause.getHeadAtoms()) { 125 for (Atom headAtom: clause.getHeadAtoms()) {
119 if (headAtom.getDLPredicate() instanceof AtLeast) { 126 if (headAtom.getDLPredicate() instanceof AtLeast) {
120 AtLeastConcept alc = toAtLeastConcept((AtLeast) headAtom.getDLPredicate()); 127 AtLeast al = (AtLeast) headAtom.getDLPredicate();
121 AtomicConcept ac = getRightAuxiliaryConcept(alc, OverApproxExist.getNewIndividual(clause, 0)); 128 if (al instanceof AtLeastDataRange && ((AtLeastDataRange) al).getToDataRange() instanceof ConstantEnumeration) {
122 newHeadAtoms[index] = Atom.create(ac, headAtom.getArgument(0)); 129 ConstantEnumeration ldr = (ConstantEnumeration) ((AtLeastDataRange) al).getToDataRange();
123 m_normClauses.add(newClause = DLClause.create(new Atom[] {Atom.create(alc, headAtom.getArgument(0))}, new Atom[] {newHeadAtoms[index]})); 130 newHeadAtoms[index] = null;
124 exist2original.put(newClause, clause); 131 Atom newHeadAtom;
132 for (int i = 0; i < ldr.getNumberOfConstants(); ++i) {
133 newHeadAtom = Atom.create(AtomicRole.create(((AtomicRole) ((AtLeastDataRange) al).getOnRole()).getIRI()), headAtom.getArgument(0), ldr.getConstant(i));
134 if (newHeadAtoms[index] == null) newHeadAtoms[index] = newHeadAtom;
135 else additionalAtoms.add(newHeadAtom);
136 }
137 } else {
138 AtLeastConcept alc = toAtLeastConcept((AtLeast) headAtom.getDLPredicate());
139 AtomicConcept ac = getRightAuxiliaryConcept(alc, OverApproxExist.getNewIndividual(clause, 0));
140 newHeadAtoms[index] = Atom.create(ac, headAtom.getArgument(0));
141 m_normClauses.add(newClause = DLClause.create(new Atom[] {Atom.create(alc, headAtom.getArgument(0))}, new Atom[] {newHeadAtoms[index]}));
142 exist2original.put(newClause, clause);
143 }
125 } 144 }
126 else 145 else
127 newHeadAtoms[index] = headAtom; 146 newHeadAtoms[index] = headAtom;
128 ++index; 147 ++index;
129 } 148 }
149
150 if (!additionalAtoms.isEmpty()) {
151 Atom[] tempHeadAtoms = newHeadAtoms;
152 newHeadAtoms = new Atom[newHeadAtoms.length + additionalAtoms.size()];
153 for (int i = 0; i < tempHeadAtoms.length; ++i)
154 newHeadAtoms[i] = tempHeadAtoms[i];
155 int tempI = tempHeadAtoms.length;
156 for (Iterator<Atom> iter = additionalAtoms.iterator(); iter.hasNext(); )
157 newHeadAtoms[tempI++] = iter.next();
158 additionalAtoms.clear();
159 }
130 160
131 m_normClauses.add(newClause = DLClause.create(newHeadAtoms, clause.getBodyAtoms())); 161 m_normClauses.add(newClause = DLClause.create(newHeadAtoms, clause.getBodyAtoms()));
132 } 162 }
@@ -313,7 +343,10 @@ public class Normalisation {
313 if (individuals.length > 1) 343 if (individuals.length > 1)
314 builder.append("_").append(getName(individuals[0].getIRI())); 344 builder.append("_").append(getName(individuals[0].getIRI()));
315 345
316 builder.append("_exist"); 346 builder.append("_exist");
347
348 if (builder.toString().contains("Lens_mount_"))
349 System.out.println(builder.toString());
317 350
318 return builder.toString(); 351 return builder.toString();
319 } 352 }
diff --git a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoder.java b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoder.java
index 3a01e19..f3cc937 100644
--- a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoder.java
+++ b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoder.java
@@ -239,6 +239,8 @@ public abstract class TrackingRuleEncoder {
239 return AtomicRole.create(Namespace.EQUALITY + suffix); 239 return AtomicRole.create(Namespace.EQUALITY + suffix);
240 else if (p instanceof Inequality) 240 else if (p instanceof Inequality)
241 return AtomicRole.create(Namespace.INEQUALITY + suffix); 241 return AtomicRole.create(Namespace.INEQUALITY + suffix);
242 else if (p instanceof DatatypeRestriction)
243 return AtomicConcept.create(((DatatypeRestriction) p).getDatatypeURI() + suffix);
242 else { 244 else {
243 Utility.logDebug("strange DL predicate appeared ... " + p, 245 Utility.logDebug("strange DL predicate appeared ... " + p,
244 "the program paused here in TrackingRuleEncoderDisj.java"); 246 "the program paused here in TrackingRuleEncoderDisj.java");
diff --git a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisjVar1.java b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisjVar1.java
index 8998051..0d6b0c6 100644
--- a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisjVar1.java
+++ b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisjVar1.java
@@ -14,6 +14,7 @@ import org.semanticweb.HermiT.model.AtomicNegationConcept;
14import org.semanticweb.HermiT.model.AtomicRole; 14import org.semanticweb.HermiT.model.AtomicRole;
15import org.semanticweb.HermiT.model.DLClause; 15import org.semanticweb.HermiT.model.DLClause;
16import org.semanticweb.HermiT.model.DLPredicate; 16import org.semanticweb.HermiT.model.DLPredicate;
17import org.semanticweb.HermiT.model.DatatypeRestriction;
17import org.semanticweb.HermiT.model.Equality; 18import org.semanticweb.HermiT.model.Equality;
18import org.semanticweb.HermiT.model.Inequality; 19import org.semanticweb.HermiT.model.Inequality;
19import org.semanticweb.HermiT.model.InverseRole; 20import org.semanticweb.HermiT.model.InverseRole;
@@ -26,6 +27,7 @@ import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine;
26import uk.ac.ox.cs.pagoda.rules.OverApproxExist; 27import uk.ac.ox.cs.pagoda.rules.OverApproxExist;
27import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram; 28import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram;
28import uk.ac.ox.cs.pagoda.util.Namespace; 29import uk.ac.ox.cs.pagoda.util.Namespace;
30import uk.ac.ox.cs.pagoda.util.Utility;
29 31
30public class TrackingRuleEncoderDisjVar1 extends TrackingRuleEncoderWithGap { 32public class TrackingRuleEncoderDisjVar1 extends TrackingRuleEncoderWithGap {
31 33
@@ -119,7 +121,9 @@ public class TrackingRuleEncoderDisjVar1 extends TrackingRuleEncoderWithGap {
119 return Atom.create(getGapDLPredicate(Equality.INSTANCE), headAtom.getArgument(0), headAtom.getArgument(1)); 121 return Atom.create(getGapDLPredicate(Equality.INSTANCE), headAtom.getArgument(0), headAtom.getArgument(1));
120 if (p instanceof Inequality) 122 if (p instanceof Inequality)
121 return Atom.create(getGapDLPredicate((Inequality) p), headAtom.getArgument(0), headAtom.getArgument(1)); 123 return Atom.create(getGapDLPredicate((Inequality) p), headAtom.getArgument(0), headAtom.getArgument(1));
122 124 if (p instanceof DatatypeRestriction)
125 return Atom.create(getGapDLPredicate((DatatypeRestriction) p), headAtom.getArgument(0));
126 Utility.logError(p + " is not recognised.");
123 return null; 127 return null;
124 } 128 }
125 129
@@ -423,7 +427,11 @@ public class TrackingRuleEncoderDisjVar1 extends TrackingRuleEncoderWithGap {
423 427
424 for (int i = 0; i < clause.getBodyLength(); ++i) 428 for (int i = 0; i < clause.getBodyLength(); ++i)
425 newBodyAtoms[index++] = selectBodyAtoms[selectIndex++] = clause.getBodyAtom(i); 429 newBodyAtoms[index++] = selectBodyAtoms[selectIndex++] = clause.getBodyAtom(i);
426 430
431 for (int i = 0; i < newBodyAtoms.length; ++i)
432 if (newBodyAtoms[i] == null) {
433 System.out.println(clause);
434 }
427 for (Atom atom: newHeadAtoms) { 435 for (Atom atom: newHeadAtoms) {
428 newClause = DLClause.create(new Atom[] {atom}, newBodyAtoms); 436 newClause = DLClause.create(new Atom[] {atom}, newBodyAtoms);
429 trackingClauses.add(newClause); 437 trackingClauses.add(newClause);