public static TriplesMapGraph mergeGraphs(TriplesMapGraph graphToMerge1, TriplesMapGraph graphToMerge2) { TriplesMapGraph newGraph = new TriplesMapGraph(); for(TriplesMapLink link : graphToMerge1.getLinks()) { newGraph.addLink(link); } for(TriplesMapLink link : graphToMerge2.getLinks()) { newGraph.addLink(link); } return newGraph; } private void updateCache(TriplesMapLink link) {
public TriplesMapGraph copyGraph() { TriplesMapGraph newGraph = new TriplesMapGraph(); for(TriplesMap triplesMap : triplesMapIndex.values()) { newGraph.addTriplesMap(triplesMap); } for(TriplesMapLink link : links) { newGraph.addLink(new TriplesMapLink(link.getSourceMap(), link.getTargetMap(), link.getPredicateObjectMapLink())); } return newGraph; } public TriplesMapGraph shallowCopyGraph() {
public TriplesMapGraph getTriplesMapGraph(String triplesMapId) { for(TriplesMapGraph graph : graphs) { if(graph.getTriplesMapIds().contains(triplesMapId)) { return graph; } } return null; } public void addTriplesMap(TriplesMap triplesMap)
public void addTriplesMap(TriplesMap triplesMap) { TriplesMapGraph graph = new TriplesMapGraph(); graph.addTriplesMap(triplesMap); graphs.add(graph); return; } public void addLink(TriplesMapLink link)
public void killTriplesMap(List<String> tripleMapToKill, RootStrategy strategy) { if (tripleMapToKill.isEmpty()) { return; } List<TriplesMapLink> remainedLinks = new LinkedList<>(); Set<String> visited = new HashSet<>(); killTriplesMap(strategy.findRoot(this), tripleMapToKill, remainedLinks, visited); links.clear(); neighboringTriplesMapCache.clear(); triplesMapIndex.clear(); for (TriplesMapLink link : remainedLinks) { addLink(link); } }
TriplesMapGraph graph = new TriplesMapGraph(); graph.addLink(link); graphs.add(graph); return; TriplesMap source = graph.getTriplesMap(link.getSourceMap().getId()); TriplesMap target = graph.getTriplesMap(link.getTargetMap().getId()); if(source != null || target != null) mergedGraph = TriplesMapGraph.mergeGraphs(mergedGraph, graphToMerge); mergedGraph.addLink(link); graphs.add(mergedGraph);
List<TriplesMapLink> links = newGraph.getAllNeighboringTriplesMap(triplesMapId); TriplesMap tm = newGraph.getTriplesMap(triplesMapId); if(tm == null) newGraph.removeLink(link); List<String> removedTriplesMaps = newGraph.removeTriplesMap(triplesMapId);
for(TriplesMapGraph graph : kr2rmlMapping.getAuxInfo().getTriplesMapGraph().getGraphs()) TriplesMapGraph copyGraph = graph.copyGraph(); if(null == strategy) { strategy = new SteinerTreeRootStrategy(new WorksheetDepthRootStrategy()); copyGraph.killTriplesMap(tripleMapToKill, strategy); copyGraph.stopTriplesMap(tripleMapToStop, strategy); copyGraph.killPredicateObjectMap(POMToKill, strategy); try{ DFSTriplesMapGraphDAGifier dagifier = new DFSTriplesMapGraphDAGifier();
if(graph.getTriplesMapIds().isEmpty()) if(graph.getTriplesMapIds().size() == 1) results.addAll(graph.getTriplesMapIds()); return results; TriplesMapGraph newGraph = graph.copyGraph(triplesMapsIds); String rootTriplesMapId = newGraph.findRoot(rootStrategy);
private Map<TriplesMap, TriplesMapWorker> generatePlan(TriplesMapGraph graph, TriplesMapPlan plan, RootStrategy strategy) { unprocessedTriplesMapsIds.addAll(graph.getTriplesMapIds()); //add strategy Map<TriplesMap, TriplesMapWorker> mapToWorker = new HashMap<>(); if(strategy == null) { strategy = new SteinerTreeRootStrategy(new WorksheetDepthRootStrategy()); } String triplesMapId = graph.findRoot(strategy); do { if(triplesMapId == null) { triplesMapId = unprocessedTriplesMapsIds.iterator().next(); } TriplesMap map = graph.getTriplesMap(triplesMapId); generateTriplesMapWorker(mapToWorker, graph, map, plan); triplesMapId = null; } while(!unprocessedTriplesMapsIds.isEmpty()); return mapToWorker; } private void generateTriplesMapWorker(
@Override public String findRoot(TriplesMapGraph graph) { for(String triplesMapId :graph.getTriplesMapIds()) { if(graph.getTriplesMap(triplesMapId).getSubject().isSteinerTreeRootNode()) { return triplesMapId; } } return this.backupStrategy.findRoot(graph); }
public void stopTriplesMap(List<String> tripleMapToStop, RootStrategy strategy) { if (tripleMapToStop.isEmpty()) { return; } List<TriplesMapLink> remainedLinks = new LinkedList<>(); Set<String> visited = new HashSet<>(); stopTriplesMap(strategy.findRoot(this), tripleMapToStop, remainedLinks, visited); links.clear(); neighboringTriplesMapCache.clear(); triplesMapIndex.clear(); for (TriplesMapLink link : remainedLinks) { addLink(link); } }
public void killPredicateObjectMap(List<String> POMToKill, RootStrategy strategy) { if (POMToKill.isEmpty()) { return; } List<TriplesMapLink> remainedLinks = new LinkedList<>(); Set<String> visited = new HashSet<>(); killPredicateObjectMap(strategy.findRoot(this), POMToKill, remainedLinks, visited); links.clear(); neighboringTriplesMapCache.clear(); triplesMapIndex.clear(); for (TriplesMapLink link : remainedLinks) { addLink(link); } }
public TriplesMapGraph copyGraph(HashSet<String> triplesMapsIds) { TriplesMapGraph newGraph = new TriplesMapGraph(); for(TriplesMapLink link : links) { if (triplesMapsIds != null) { triplesMapsIds.add(link.getSourceMap().getId()); triplesMapsIds.add(link.getTargetMap().getId()); } newGraph.addLink(link); } return newGraph; }
for(TriplesMapGraph graph : graphTriplesMapsProcessingOrder.keySet()) if(graph.getTriplesMapIds().contains(triplesMap.getId())) links = graph.getAllNeighboringTriplesMap(triplesMap.getId()); break;
TriplesMap map = graph.getTriplesMap(triplesMapId); if(!triplesMapToWorkerPlan.containsKey(map))
List<TriplesMapLink> links = graph.getAllNeighboringTriplesMap(triplesMapId); List<String> nodesToVisit = new LinkedList<>(); List<TriplesMapLink> sortedLinks = new LinkedList<>();
public TriplesMapGraph shallowCopyGraph() { TriplesMapGraph newGraph = new TriplesMapGraph(); newGraph.links.addAll(links); for (Entry<String, List<TriplesMapLink>> entry : neighboringTriplesMapCache.entrySet()) { newGraph.neighboringTriplesMapCache.put(entry.getKey(), new LinkedList<>(entry.getValue())); } newGraph.triplesMapIndex.putAll(triplesMapIndex); return newGraph; } public void killTriplesMap(List<String> tripleMapToKill, RootStrategy strategy) {
private void killPredicateObjectMap(String rootId, List<String> POMToKill, List<TriplesMapLink> remainedLinks, Set<String> visited) { visited.add(rootId); Set<String> next = new HashSet<>(); List<TriplesMapLink> links = neighboringTriplesMapCache.get(rootId); if (links != null) { for (TriplesMapLink link : links) { if (link.getSourceMap().getId().equals(rootId) && !POMToKill.contains(link.getPredicateObjectMapLink().getId())) { next.add(link.getTargetMap().getId()); remainedLinks.add(link); } } } for (String n : next) { if (!visited.contains(n)) { killPredicateObjectMap(n, POMToKill, remainedLinks, visited); } } }
@Override public String findRoot(TriplesMapGraph graph) { Set<String> triplesMapIds = graph.getTriplesMapIds(); int minDepth = Integer.MAX_VALUE; String root = null; for(String triplesMapId : triplesMapIds) { TriplesMap map = graph.getTriplesMap(triplesMapId); int depth = ColumnTemplateTerm.calculateMaximumColumnPathLength(map.getSubject().getTemplate().getAllColumnNameTermElements()); if(depth < minDepth) { minDepth = depth; root = triplesMapId; } } if(root == null) { return backupStrategy.findRoot(graph); } return root; }