/** * Rule-level variable generator. */ public VariableGenerator(CQIE initialRule) { count = 0; knownVariables = initialRule.getReferencedVariables(); }
private void analyzeCanonicalIRIMappings(List<CQIE> rules) { for (CQIE rule : rules) { Function head = rule.getHead(); Predicate predicate = head.getFunctionSymbol(); if (predicate.isCanonicalIRIProperty()) { // we check for ontop:is_canonical_iri //rename all the variables to avoid conflicts while merging the mappings Set<Variable> variables = rule.getReferencedVariables(); Function headURI = (Function) head.getTerm(0); ValueConstant canonicalIRIName = (ValueConstant) headURI.getTerm(0); Function objectTerm = (Function) head.getTerm(1); ValueConstant objectURIName = (ValueConstant) objectTerm.getTerm(0); //get or assign a suffix for each canonicalIRI String rename = canIriVariablesSuffix.get(canonicalIRIName); if(rename ==null){ rename = "_canonical"+ canIriVariablesSuffix.size(); canIriVariablesSuffix.put(canonicalIRIName, rename); } final String finalRename = rename; Map<Variable, Term> map = variables.stream() .collect(Collectors.toMap( var -> var, var -> TERM_FACTORY.getVariable(var.getName() + finalRename))); //apply substitution for variables renaming Substitution substitution = new SubstitutionImpl(map); CQIE canonicalMapping = SubstitutionUtilities.applySubstitution(rule, substitution, true); //store the renamed mapping uriMappingMap.put(objectURIName, canonicalMapping); } } }