private Function createJoinWithSameAsOnLeft(Function leftAtom, DatalogProgram pr, String newHeadName) { //create left atom of the join between the data property and same as //given a data property as hasProperty (x, y) //create the left atom hasProperty (anon-x, y) Function leftAtomJoin = termFactory.getFunction(leftAtom.getFunctionSymbol()); leftAtomJoin.updateTerms(leftAtom.getTerms()); leftAtomJoin.setTerm(0, termFactory.getVariable("anon-" +bnode +leftAtom.getTerm(0))); //given a data property ex hasProperty (x, y) //create statement pattern for same as create owl:sameAs( anon-x, y) //it will be the right atom of the join Term sTerm = leftAtom.getTerm(0); Term oTerm = termFactory.getVariable("anon-"+ bnode +leftAtom.getTerm(0)); Function rightAtomJoin = atomFactory.getMutableTripleBodyAtom(sTerm, OWL.SAME_AS, oTerm); //create join rule List<Term> varListJoin = getUnion(getVariables(leftAtomJoin), getVariables(rightAtomJoin)); CQIE joinRule = createRule(pr, newHeadName , varListJoin, leftAtomJoin, rightAtomJoin); bnode++; return joinRule.getHead(); }
private Function createJoinWithSameAsOnRight(Function leftAtom, DatalogProgram pr, String newHeadName) { //create right atom of the join between the data property and same as //given a data property as hasProperty (x, y) //create the left atom hasProperty (x, anon-y) Function leftAtomJoin2 = termFactory.getFunction(leftAtom.getFunctionSymbol()); leftAtomJoin2.updateTerms(leftAtom.getTerms()); leftAtomJoin2.setTerm(2, termFactory.getVariable("anon-"+bnode +leftAtom.getTerm(2))); //create statement pattern for same as create owl:sameAs(anon-y, y) //it will be the right atom of the join Term sTerm2 = termFactory.getVariable("anon-"+ bnode +leftAtom.getTerm(2)); Term oTerm2 = leftAtom.getTerm(2); Function rightAtomJoin2 = atomFactory.getMutableTripleBodyAtom(sTerm2, OWL.SAME_AS, oTerm2); //create join rule List<Term> varListJoin2 = getUnion(getVariables(leftAtomJoin2), getVariables(rightAtomJoin2)); CQIE joinRule2 = createRule(pr, newHeadName , varListJoin2, leftAtomJoin2, rightAtomJoin2); bnode++; return joinRule2.getHead(); } }
private Function createJoinWithSameAsOnLeftAndRight(Function leftAtom, DatalogProgram pr, String newHeadName) { //ON THE RIGHT //create right atom of the join between the data property and same as //given a data property as hasProperty (x, y) //create an unbound hasProperty (anon-x1, anon-y1) Function unboundleftAtom = termFactory.getFunction(leftAtom.getFunctionSymbol()); unboundleftAtom.updateTerms(leftAtom.getTerms()); unboundleftAtom.setTerm(0, termFactory.getVariable("anon-"+bnode+ leftAtom.getTerm(0))); unboundleftAtom.setTerm(2, termFactory.getVariable("anon-"+bnode +leftAtom.getTerm(2))); //create statement pattern for same as create owl:sameAs(anon-y1, y) //it will be the right atom of the join Term sTerm2 = unboundleftAtom.getTerm(2); Term oTerm2 = leftAtom.getTerm(2); Function rightAtomJoin2 = atomFactory.getMutableTripleBodyAtom(sTerm2, OWL.SAME_AS, oTerm2); //create join rule List<Term> varListJoin2 = getUnion(getVariables(unboundleftAtom), getVariables(rightAtomJoin2)); CQIE joinRule2 = createRule(pr, newHeadName + "0" , varListJoin2, unboundleftAtom, rightAtomJoin2); Function joinRight = joinRule2.getHead(); //ON THE LEFT //given a data property ex hasProperty (x, y) //create statement pattern for same as create owl:sameAs( x, anon-x1) //it will be the left atom of the join Term sTerm = leftAtom.getTerm(0); Term oTerm = unboundleftAtom.getTerm(0); Function leftAtomJoin = atomFactory.getMutableTripleBodyAtom(sTerm, OWL.SAME_AS, oTerm); //create join rule List<Term> varListJoin = getUnion(getVariables(leftAtomJoin), getVariables(joinRight)); CQIE joinRule = createRule(pr, newHeadName , varListJoin, leftAtomJoin, joinRight); return joinRule.getHead(); }