diff options
| author | yzhou <yzhou@krr-linux.cs.ox.ac.uk> | 2015-05-01 21:04:30 +0100 |
|---|---|---|
| committer | yzhou <yzhou@krr-linux.cs.ox.ac.uk> | 2015-05-01 21:04:30 +0100 |
| commit | d71035e6f10b3775191ad134d92f897044a592d8 (patch) | |
| tree | 41076d7e079b6c6c46ffa946683343e3a80a0013 /src/uk | |
| parent | 2d007839a1e0f9775097f5f7cff14521d2afd021 (diff) | |
| download | ACQuA-d71035e6f10b3775191ad134d92f897044a592d8.tar.gz ACQuA-d71035e6f10b3775191ad134d92f897044a592d8.zip | |
fixed some bugs
Diffstat (limited to 'src/uk')
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; | |||
| 3 | import java.util.Collection; | 3 | import java.util.Collection; |
| 4 | import java.util.HashMap; | 4 | import java.util.HashMap; |
| 5 | import java.util.HashSet; | 5 | import java.util.HashSet; |
| 6 | import java.util.Iterator; | ||
| 6 | import java.util.LinkedList; | 7 | import java.util.LinkedList; |
| 7 | import java.util.Map; | 8 | import java.util.Map; |
| 8 | import java.util.Set; | 9 | import java.util.Set; |
| @@ -15,6 +16,7 @@ import org.semanticweb.HermiT.model.AtomicConcept; | |||
| 15 | import org.semanticweb.HermiT.model.AtomicNegationConcept; | 16 | import org.semanticweb.HermiT.model.AtomicNegationConcept; |
| 16 | import org.semanticweb.HermiT.model.AtomicRole; | 17 | import org.semanticweb.HermiT.model.AtomicRole; |
| 17 | import org.semanticweb.HermiT.model.Constant; | 18 | import org.semanticweb.HermiT.model.Constant; |
| 19 | import org.semanticweb.HermiT.model.ConstantEnumeration; | ||
| 18 | import org.semanticweb.HermiT.model.DLClause; | 20 | import org.semanticweb.HermiT.model.DLClause; |
| 19 | import org.semanticweb.HermiT.model.Individual; | 21 | import org.semanticweb.HermiT.model.Individual; |
| 20 | import org.semanticweb.HermiT.model.Inequality; | 22 | import 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; | |||
| 14 | import org.semanticweb.HermiT.model.AtomicRole; | 14 | import org.semanticweb.HermiT.model.AtomicRole; |
| 15 | import org.semanticweb.HermiT.model.DLClause; | 15 | import org.semanticweb.HermiT.model.DLClause; |
| 16 | import org.semanticweb.HermiT.model.DLPredicate; | 16 | import org.semanticweb.HermiT.model.DLPredicate; |
| 17 | import org.semanticweb.HermiT.model.DatatypeRestriction; | ||
| 17 | import org.semanticweb.HermiT.model.Equality; | 18 | import org.semanticweb.HermiT.model.Equality; |
| 18 | import org.semanticweb.HermiT.model.Inequality; | 19 | import org.semanticweb.HermiT.model.Inequality; |
| 19 | import org.semanticweb.HermiT.model.InverseRole; | 20 | import org.semanticweb.HermiT.model.InverseRole; |
| @@ -26,6 +27,7 @@ import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; | |||
| 26 | import uk.ac.ox.cs.pagoda.rules.OverApproxExist; | 27 | import uk.ac.ox.cs.pagoda.rules.OverApproxExist; |
| 27 | import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram; | 28 | import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram; |
| 28 | import uk.ac.ox.cs.pagoda.util.Namespace; | 29 | import uk.ac.ox.cs.pagoda.util.Namespace; |
| 30 | import uk.ac.ox.cs.pagoda.util.Utility; | ||
| 29 | 31 | ||
| 30 | public class TrackingRuleEncoderDisjVar1 extends TrackingRuleEncoderWithGap { | 32 | public 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); |
