/** * Constant-valued term maps can be expressed more concisely using the constant shortcut * properties rr:subject, rr:predicate, rr:object and rr:graph. Occurrances of these properties * must be treated exactly as if the following triples were present in the mapping graph instead. * * @param r2rmlMappingGraph */ private static void replaceShortcuts(SesameDataSet r2rmlMappingGraph) { Map<URI, URI> shortcutPredicates = new HashMap<URI, URI>(); shortcutPredicates.put( vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.SUBJECT), vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.SUBJECT_MAP)); shortcutPredicates.put( vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.PREDICATE), vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.PREDICATE_MAP)); shortcutPredicates.put( vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.OBJECT), vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.OBJECT_MAP)); shortcutPredicates.put( vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.GRAPH), vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.GRAPH_MAP)); for (URI u : shortcutPredicates.keySet()) { List<Statement> shortcutTriples = r2rmlMappingGraph.tuplePattern(null, u, null); log.debug( "[RMLMappingFactory:replaceShortcuts] Number of R2RML shortcuts found " + "for " + u.getLocalName() + " : " + shortcutTriples.size()); for (Statement shortcutTriple : shortcutTriples) { r2rmlMappingGraph.remove( shortcutTriple.getSubject(), shortcutTriple.getPredicate(), shortcutTriple.getObject()); BNode blankMap = vf.createBNode(); URI pMap = vf.createURI(shortcutPredicates.get(u).toString()); URI pConstant = vf.createURI(Vocab.R2RML_NAMESPACE + R2RMLTerm.CONSTANT); r2rmlMappingGraph.add(shortcutTriple.getSubject(), pMap, blankMap); r2rmlMappingGraph.add(blankMap, pConstant, shortcutTriple.getObject()); } } }