/** * TODO: refactor this weak code!!! */ private static ImmutableTerm tryToExtractIRITemplateString(ImmutableTerm term) { if (term instanceof ImmutableFunctionalTerm) { ImmutableFunctionalTerm functionalTerm = (ImmutableFunctionalTerm) term; return functionalTerm.getArity() > 0 ? tryToExtractIRITemplateString(functionalTerm.getTerm(0)) : term; } return term; }
/** * TODO: make it more robust */ protected Optional<IRI> extractIRI(ImmutableTerm term) { if (term instanceof IRIConstant) { return Optional.of(((IRIConstant) term).getIRI()); } // TODO: look for the RDF building function (and check the type is an IRI) else if (term instanceof ImmutableFunctionalTerm) { return ((ImmutableFunctionalTerm) term).getArity() == 1 ? extractIRI(((ImmutableFunctionalTerm) term).getTerms().get(0)) : Optional.empty(); } else if (term instanceof ValueConstant) { return Optional.of(rdfFactory.createIRI( ((ValueConstant) term).getValue())); } return Optional.empty(); } }
/** * check if the term is {@code URI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")} * * TODO: refactor so as to use RDFPredicate.getClassIRI() instead */ private static boolean isURIRDFType(ImmutableTerm term) { if (term instanceof ImmutableFunctionalTerm) { ImmutableFunctionalTerm func = (ImmutableFunctionalTerm) term; if (func.getArity() == 1 && (func.getFunctionSymbol() instanceof URITemplatePredicate)) { ImmutableTerm t0 = func.getTerm(0); if (t0 instanceof ValueConstant) return ((ValueConstant) t0).getValue().equals(RDF.TYPE.getIRIString()); } } return false; }
Variable v = e.getKey(); ImmutableFunctionalTerm def = (ImmutableFunctionalTerm) substitution.get(v); ImmutableList<ImmutableTerm> newArgs = IntStream.range(0, def.getArity()) .boxed() .map(i -> Optional.ofNullable((ImmutableTerm) subTermNames.get(v, i))