From 9ce65c5a963b03ee97fe9cb6c5aa65a3c04a80a8 Mon Sep 17 00:00:00 2001 From: yzhou Date: Tue, 21 Apr 2015 10:34:27 +0100 Subject: initial version --- .../ac/ox/cs/pagoda/constraints/UnaryBottom.java | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/uk/ac/ox/cs/pagoda/constraints/UnaryBottom.java (limited to 'src/uk/ac/ox/cs/pagoda/constraints/UnaryBottom.java') diff --git a/src/uk/ac/ox/cs/pagoda/constraints/UnaryBottom.java b/src/uk/ac/ox/cs/pagoda/constraints/UnaryBottom.java new file mode 100644 index 0000000..5339c50 --- /dev/null +++ b/src/uk/ac/ox/cs/pagoda/constraints/UnaryBottom.java @@ -0,0 +1,67 @@ +package uk.ac.ox.cs.pagoda.constraints; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Set; + +import org.semanticweb.HermiT.model.Atom; +import org.semanticweb.HermiT.model.AtomicConcept; +import org.semanticweb.HermiT.model.DLClause; +import org.semanticweb.HermiT.model.Individual; +import org.semanticweb.HermiT.model.Term; +import org.semanticweb.HermiT.model.Variable; + +public class UnaryBottom implements BottomStrategy { + + @Override + public Collection process(Collection clauses) { + Collection ret = new LinkedList(); + for (DLClause clause: clauses) + if (clause.getHeadLength() == 0) { + ret.add(DLClause.create(getEmptyHead(pickRepresentative(clause.getBodyAtoms())), clause.getBodyAtoms())); + } + else + ret.add(clause); + return ret; + } + + protected Term pickRepresentative(Atom[] atoms) { + Term rep = null; + Set vars = new HashSet(); + for (Atom atom: atoms) { + atom.getVariables(vars); + for (Variable v: vars) + if (rep == null || ((Variable) rep).getName().compareTo(v.getName()) > 0) + rep = v; + vars.clear(); + } + if (rep != null) return rep; + + Set inds = new HashSet(); + for (Atom atom: atoms) { + atom.getIndividuals(inds); + for (Individual i: inds) + if (rep == null || ((Individual) rep).getIRI().compareTo(i.getIRI()) > 0) + rep = i; + inds.clear(); + } + + return rep; + } + + @Override + public boolean isBottomRule(DLClause clause) { + return clause.getHeadLength() == 1 && clause.getHeadAtom(0).getDLPredicate().equals(AtomicConcept.NOTHING); + } + + public Atom[] getEmptyHead(Term t) { + return new Atom[] {Atom.create(AtomicConcept.NOTHING, t)}; + } + + @Override + public int getBottomNumber() { + return 1; + } + +} -- cgit v1.2.3