@Override public Mapping saturate(Mapping mapping, DBMetadata dbMetadata, ClassifiedTBox saturatedTBox) { ImmutableList<CQIE> initialMappingRules = mapping2DatalogConverter.convert(mapping) .collect(ImmutableCollectors.toList()); LinearInclusionDependencies foreignKeyRules = new LinearInclusionDependencies(dbMetadata.generateFKRules()); CQContainmentCheckUnderLIDs foreignKeyCQC = new CQContainmentCheckUnderLIDs(foreignKeyRules); ImmutableSet<CQIE> saturatedMappingRules = TMappingProcessor.getTMappings(initialMappingRules, saturatedTBox, foreignKeyCQC, tMappingExclusionConfig).stream() .collect(ImmutableCollectors.toSet()); List<CQIE> allMappingRules = new ArrayList<>(saturatedMappingRules); allMappingRules.addAll(generateTripleMappings(saturatedMappingRules)); return datalog2MappingConverter.convertMappingRules(ImmutableList.copyOf(allMappingRules), dbMetadata, mapping.getExecutorRegistry(), mapping.getMetadata()); }
@Override public Mapping rewrite(Mapping mapping, DBMetadata dbMetadata) { ImmutableList<CQIE> inputMappingRules = mapping2DatalogConverter.convert(mapping).collect(ImmutableCollectors.toList()); List<CQIE> canonicalRules = new CanonicalIRIRewriter().buildCanonicalIRIMappings(inputMappingRules); return datalog2MappingConverter.convertMappingRules(ImmutableList.copyOf(canonicalRules), dbMetadata, mapping.getExecutorRegistry(), mapping.getMetadata()); } }
@Override public Mapping rewrite(Mapping mapping, DBMetadata dbMetadata) { if(enabled){ ImmutableList<CQIE> rules = mapping2DatalogConverter.convert(mapping) .collect(ImmutableCollectors.toList()); ImmutableList<CQIE> updatedRules = MappingSameAs.addSameAsInverse(rules); return datalog2MappingConverter.convertMappingRules(updatedRules, dbMetadata, mapping.getExecutorRegistry(), mapping.getMetadata()); } return mapping; } }
@Override public Mapping normalize(Mapping mapping) { Stream<IntermediateQuery> queryStream = mapping.getPredicates().stream() .map(mapping::getDefinition) .filter(Optional::isPresent) .map(Optional::get); ImmutableMap<AtomPredicate, IntermediateQuery> normalizedMappingMap = renameQueries(queryStream) .collect(ImmutableCollectors.toMap( q -> q.getProjectionAtom().getPredicate(), q -> q )); return specificationFactory.createMapping(mapping.getMetadata(), normalizedMappingMap, mapping.getExecutorRegistry()); }
@Override public Mapping merge(ImmutableSet<Mapping> mappings) { if (mappings.isEmpty()) { throw new IllegalArgumentException("The set of mappings is assumed to be nonempty"); } MappingMetadata metadata = mergeMetadata(mappings); ImmutableMap<AtomPredicate, IntermediateQuery> mappingMap = mergeMappingMaps(mappings); // TODO: check that the ExecutorRegistry is identical for all mappings ? return specificationFactory.createMapping( metadata, mappingMap, mappings.iterator().next().getExecutorRegistry() ); }
@Override public OBDASpecification transform(Mapping mapping, DBMetadata dbMetadata, Optional<Ontology> ontology) { if (ontology.isPresent()) { Mapping factsAsMapping = factConverter.convert(ontology.get().abox(), mapping.getExecutorRegistry(), settings.isOntologyAnnotationQueryingEnabled(), mapping.getMetadata().getUriTemplateMatcher()); Mapping mappingWithFacts = mappingMerger.merge(mapping, factsAsMapping); return createSpecification(mappingWithFacts, dbMetadata, ontology.get().tbox()); } else { ClassifiedTBox emptyTBox = OntologyBuilderImpl.builder().build().tbox(); return createSpecification(mapping, dbMetadata, emptyTBox); } }