+
+ // Filter out incompatible literal types.
+ // TODO: Show warning in UI
+ Resource object = stm.getObject();
+ Resource replacementRange = graph.getPossibleObject(replacement, L0.HasRange);
+ if (replacementRange != null && !graph.isInstanceOf(object, replacementRange)) {
+ String instanceName = graph.getPossibleRelatedValue(instanceToMigrate, L0.HasName);
+ if (instanceName == null) instanceName = "<unknown>";
+
+ String rangeName = graph.getPossibleRelatedValue(replacementRange, L0.HasName);
+ if (rangeName == null) rangeName = "<unknown>";
+
+ Resource literalType= graph.getPossibleType(object, L0.Value);
+ String literalTypeName = literalType != null ? graph.getPossibleRelatedValue(literalType, L0.HasName) : null;
+ if (literalTypeName == null) literalTypeName = "<unknown>";
+
+ String replacementName = graph.getRelatedValue(replacement, L0.HasName);
+ LOGGER.warn("{}: Ignored incompatible value of type {} for predicate {} with range {}", instanceName, literalTypeName, replacementName, rangeName);
+
+ continue;
+ }
+
+ graph.claim(stm.getSubject(), replacement, object);