private static ImmutableSet<Constant> extractSameAsIRITemplates(Mapping mapping, RDFAtomPredicate rdfAtomPredicate) { Optional<IQ> definition = mapping.getRDFPropertyDefinition(rdfAtomPredicate, OWL.SAME_AS); return definition .map(SameAsTargets::extractIRITemplates) .orElseGet(ImmutableSet::of); }
private Optional<IQ> getDefinition(RDFAtomPredicate predicate, ImmutableList<? extends VariableOrGroundTerm> arguments) { return predicate.getPropertyIRI(arguments) .map(i -> i.equals(RDF.TYPE) ? getRDFClassDefinition(predicate, arguments) : mapping.getRDFPropertyDefinition(predicate, i)) .orElseGet(() -> getStarDefinition(predicate)); }
@Override public Mapping rewrite(Mapping mapping) { if (!enabled) return mapping; ImmutableTable<RDFAtomPredicate, IRI, IQ> mappingUpdate = mapping.getRDFAtomPredicates().stream() .flatMap(p -> mapping.getRDFPropertyDefinition(p, OWL.SAME_AS) .map(sameAsDef -> completeSameAsDefinition(sameAsDef, p)) .map(sameAsDef -> Tables.immutableCell(p, OWL.SAME_AS, sameAsDef)) .map(Stream::of) .orElseGet(Stream::empty)) .collect(ImmutableCollectors.toTable()); return mapping.update(mappingUpdate, ImmutableTable.of()); }
private ImmutableTable<RDFAtomPredicate, IRI, IQ> mergeMappingPropertyTables(ImmutableSet<Mapping> mappings) { ImmutableMap<Map.Entry<RDFAtomPredicate, IRI>, Collection<IQ>> multiTable = mappings.stream() .flatMap(m -> extractCellStream(m, p -> m.getRDFProperties(p).stream(), (p, i) -> m.getRDFPropertyDefinition(p, i).get())) .collect(ImmutableCollectors.toMultimap( c -> Maps.immutableEntry(c.getRowKey(), c.getColumnKey()), Table.Cell::getValue)) .asMap(); return multiTable.entrySet().stream() .map(e -> Tables.immutableCell( e.getKey().getKey(), e.getKey().getValue(), mergeDefinitions(e.getValue()))) .collect(ImmutableCollectors.toTable()); }
private static SameAsTargets extractSameAsTargets(ImmutableSet<Constant> sameAsIriTemplates, Mapping mapping, RDFAtomPredicate rdfAtomPredicate) { if (sameAsIriTemplates.isEmpty()) return new SameAsTargets(ImmutableSet.of(), ImmutableSet.of()); Stream<IRI> classIris = mapping.getRDFClasses(rdfAtomPredicate).stream() .filter(classIri -> classify(sameAsIriTemplates, mapping.getRDFClassDefinition(rdfAtomPredicate, classIri).get(), rdfAtomPredicate, true) == PredicateClassification.SUBJECT_ONLY); ImmutableMultimap<PredicateClassification, IRI> propertyIris = mapping.getRDFProperties(rdfAtomPredicate).stream() .filter(iri -> !iri.equals(OWL.SAME_AS)) .map(iri -> Maps.immutableEntry( classify(sameAsIriTemplates, mapping.getRDFPropertyDefinition(rdfAtomPredicate, iri).get(), rdfAtomPredicate, false), iri )) .collect(ImmutableCollectors.toMultimap()); return new SameAsTargets( Stream.concat( classIris, propertyIris.get(PredicateClassification.SUBJECT_ONLY).stream()) .collect(ImmutableCollectors.toSet()), ImmutableSet.copyOf(propertyIris.get(PredicateClassification.AT_LEAST_OBJECT))); }