public CanonicalIRIMapping(CQIE mapping, Function uriTerm, Position termPosition) { this.mapping = mapping; this.uriTerm = uriTerm; this.templateURI = uriTerm.getTerm(0); this.termPosition = termPosition; }
private Term evalDatatype(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return getDatatype(function); } return term; }
private Term evalIfElseNull(Function term) { Term formerCondition = term.getTerm(0); Term newCondition = eval(formerCondition); if (newCondition.equals(formerCondition)) return term; else if (newCondition.equals(valueFalse)) return valueNull; else if (newCondition.equals(valueTrue)) return term.getTerm(1); else return termFactory.getFunction(term.getFunctionSymbol(), newCondition, term.getTerm(1)); }
private Term evalIfElseNull(Function term) { Term formerCondition = term.getTerm(0); Term newCondition = eval(formerCondition); if (newCondition.equals(formerCondition)) return term; else if (newCondition.equals(TermConstants.FALSE)) return TermConstants.NULL; else if (newCondition.equals(TermConstants.TRUE)) return term.getTerm(1); else return TERM_FACTORY.getFunction(term.getFunctionSymbol(), newCondition, term.getTerm(1)); }
private Term evalDatatype(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return getDatatype(function); } return term; }
private void deleteExplicitTypes(Term term, Function atom, int position) { if(term instanceof Function){ Function castTerm = (Function) term; IntStream.range(0, castTerm.getArity()) .forEach(i -> deleteExplicitTypes( castTerm.getTerm(i), castTerm, i )); if(castTerm.isDataTypeFunction()){ atom.setTerm(position, castTerm.getTerm(0)); } } }
private void deleteExplicitTypes(Term term, Function atom, int position) { if(term instanceof Function){ Function castTerm = (Function) term; IntStream.range(0, castTerm.getArity()) .forEach(i -> deleteExplicitTypes( castTerm.getTerm(i), castTerm, i )); if(castTerm.isDataTypeFunction()){ atom.setTerm(position, castTerm.getTerm(0)); } } }
private Term evalIsLiteral(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return termFactory.getBooleanConstant(function.isDataTypeFunction()); } else { return term; } }
private Function negation(Function arg) { return (arg.getFunctionSymbol() == ExpressionOperation.NOT) ? (Function) arg.getTerm(0) : termFactory.getFunctionNOT(arg); }
private Function negation(Function arg) { return (arg.getFunctionSymbol() == ExpressionOperation.NOT) ? (Function) arg.getTerm(0) : TERM_FACTORY.getFunctionNOT(arg); }
private Term evalIsLiteral(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return TERM_FACTORY.getBooleanConstant(function.isDataTypeFunction()); } else { return term; } }
private Term evalIsBlank(Function term) { Term teval = eval(term.getTerm(0)); if (teval instanceof Function) { Function function = (Function) teval; Predicate predicate = function.getFunctionSymbol(); return termFactory.getBooleanConstant(predicate instanceof BNodePredicate); } return term; }
private Term evalIsBlank(Function term) { Term teval = eval(term.getTerm(0)); if (teval instanceof Function) { Function function = (Function) teval; Predicate predicate = function.getFunctionSymbol(); return TERM_FACTORY.getBooleanConstant(predicate instanceof BNodePredicate); } return term; }
public void insertDataTyping(CQIE rule) throws UnknownDatatypeException { Function atom = rule.getHead(); //case of data and object property if(!Datalog2QueryTools.isURIRDFType(atom.getTerm(1))){ Term object = atom.getTerm(2); // the object, third argument only Map<String, List<IndexedPosition>> termOccurenceIndex = createIndex(rule.getBody()); // Infer variable datatypes insertVariableDataTyping(object, atom, 2, termOccurenceIndex); // Infer operation datatypes from variable datatypes insertOperationDatatyping(object, atom, 2); } }
private Term evalIsIri(Function term) { Term teval = eval(term.getTerm(0)); if (teval instanceof Function) { Function function = (Function) teval; Predicate predicate = function.getFunctionSymbol(); return termFactory.getBooleanConstant(predicate instanceof URITemplatePredicate); } return term; }
private Term evalIsIri(Function term) { Term teval = eval(term.getTerm(0)); if (teval instanceof Function) { Function function = (Function) teval; Predicate predicate = function.getFunctionSymbol(); return TERM_FACTORY.getBooleanConstant(predicate instanceof URITemplatePredicate); } return term; }
private Term evalIsNumeric(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return termFactory.getBooleanConstant(function.isDataTypeFunction() && isNumeric(function.getFunctionSymbol())); } else { return term; } }
private Term evalIsNumeric(Function term) { Term innerTerm = term.getTerm(0); if (innerTerm instanceof Function) { Function function = (Function) innerTerm; return TERM_FACTORY.getBooleanConstant(function.isDataTypeFunction() && isNumeric(function.getFunctionSymbol())); } else { return term; } }
public void insertDataTyping(CQIE rule) throws UnknownDatatypeException { Function atom = rule.getHead(); Predicate predicate = atom.getFunctionSymbol(); if (predicate.getArity() == 2) { // we check both for data and object property Term term = atom.getTerm(1); // the second argument only Map<String, List<IndexedPosition>> termOccurenceIndex = createIndex(rule.getBody()); // Infer variable datatypes insertVariableDataTyping(term, atom, 1, termOccurenceIndex); // Infer operation datatypes from variable datatypes insertOperationDatatyping(term, atom, 1); } }