From 9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8 Mon Sep 17 00:00:00 2001 From: yzhou Date: Tue, 21 Apr 2015 10:34:27 +0100 Subject: initial version --- .../tracking/TrackingRuleEncoderWithoutGap.java | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java (limited to 'src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderWithoutGap.java') 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 @@ +package uk.ac.ox.cs.pagoda.tracking; + +import java.util.Collection; +import java.util.LinkedList; + +import org.semanticweb.HermiT.model.Atom; +import org.semanticweb.HermiT.model.AtomicConcept; +import org.semanticweb.HermiT.model.AtomicRole; +import org.semanticweb.HermiT.model.DLClause; +import org.semanticweb.HermiT.model.Variable; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.semanticweb.owlapi.model.OWLOntology; + +import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; +import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; +import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram; +import uk.ac.ox.cs.pagoda.util.Namespace; + +public class TrackingRuleEncoderWithoutGap extends TrackingRuleEncoder { + + public TrackingRuleEncoderWithoutGap(UpperDatalogProgram program, BasicQueryEngine store) { + super(program, store); + } + + @Override + protected String getEqualityRelatedRuleText() { + if (equalityRelatedRuleText != null) return equalityRelatedRuleText.replace("_tn", getTrackingPredicate("")); + + Collection equalityRelatedClauses = new LinkedList(); + Variable X = Variable.create("X"); + AtomicRole trackingSameAs = AtomicRole.create(Namespace.EQUALITY + "_tn"); + OWLOntology onto = program.getOntology(); + Atom[] headAtom, bodyAtom; + for (OWLClass cls: onto.getClassesInSignature(true)) { + String clsIRI = cls.getIRI().toString(); + unaryPredicates.add(clsIRI); + headAtom = new Atom[] {Atom.create(trackingSameAs, X, X)}; + bodyAtom = new Atom[] { + Atom.create(AtomicConcept.create(clsIRI + "_tn"), X), +// Atom.create(AtomicConcept.create(GapTupleIterator.getGapPredicate(clsIRI)), X1), + Atom.create(AtomicConcept.create(clsIRI), X)}; + equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom)); + } + Variable Y = Variable.create("Y"); + for (OWLObjectProperty prop: onto.getObjectPropertiesInSignature(true)) { + String propIRI = prop.getIRI().toString(); + binaryPredicates.add(propIRI); + AtomicRole trackingRole = AtomicRole.create(propIRI + "_tn"); +// AtomicRole gapRole = AtomicRole.create(GapTupleIterator.getGapPredicate(propIRI)); + AtomicRole role = AtomicRole.create(propIRI); + headAtom = new Atom[] {Atom.create(trackingSameAs, X, X)}; + bodyAtom = new Atom[] { + Atom.create(trackingRole, X, Y), +// Atom.create(gapRole, X1, Y), + Atom.create(role, X, Y)}; + equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom)); + + bodyAtom = new Atom[] { + Atom.create(trackingRole, Y, X), +// Atom.create(gapRole, Y, X1), + Atom.create(role, Y, X)}; + equalityRelatedClauses.add(DLClause.create(headAtom, bodyAtom)); + } + + equalityRelatedClauses.add( + DLClause.create( + new Atom[] {Atom.create(trackingSameAs, Y, X)}, + new Atom[] {Atom.create(trackingSameAs, X, Y)})); + + equalityRelatedRuleText = DLClauseHelper.toString(equalityRelatedClauses).toString(); + return equalityRelatedRuleText.replace("_tn", getTrackingPredicate("")); + } + + @Override + protected void encodingRule(DLClause clause) { + LinkedList newHeadAtoms = new LinkedList(); + newHeadAtoms.add(Atom.create(selected, getIndividual4GeneralRule(clause))); + + Atom headAtom; + for (Atom atom: clause.getBodyAtoms()) { + headAtom = Atom.create( + getTrackingDLPredicate(atom.getDLPredicate()), + DLClauseHelper.getArguments(atom)); + newHeadAtoms.add(headAtom); + } + + DLClause newClause; + Atom[] newBodyAtoms = new Atom[clause.getBodyLength() + 1]; + headAtom = clause.getHeadAtom(0); + newBodyAtoms[0] = Atom.create( + getTrackingDLPredicate(headAtom.getDLPredicate()), + DLClauseHelper.getArguments(headAtom)); + +// newBodyAtoms[1] = Atom.create( +// getGapDLPredicate(headAtom.getDLPredicate()), +// DLClauseHelper.getArguments(headAtom)); + + for (int i = 0; i < clause.getBodyLength(); ++i) + newBodyAtoms[i + 1] = clause.getBodyAtom(i); + + for (Atom atom: newHeadAtoms) { + newClause = DLClause.create(new Atom[] {atom}, newBodyAtoms); + trackingClauses.add(newClause); + } + + } + +} -- cgit v1.2.3