+ subjectRight.add(s.getSubject(),s);\r
+ objectRight.add(s.getObject(),s);\r
+ }\r
+ for (Resource ol : objectLeft.getKeys()) {\r
+ Set<Path> pathsLeft = new HashSet<Path>();\r
+ for (Resource rel : traversed) {\r
+ pathsLeft.addAll(Path.create(g.getStatements(ol, rel)));\r
+ }\r
+ while (true) {\r
+ expand(pathsLeft);\r
+ if (pathsLeft.size() == 0)\r
+ break;\r
+ Collection<Path> endPaths = new ArrayList<Path>(1);\r
+ for (Path p : pathsLeft) {\r
+ if (comparableResources.containsLeft(p.getEnd())) {\r
+ endPaths.add(p);\r
+ }\r
+ }\r
+ if (endPaths.size() > 0) {\r
+ pathsLeft.clear();\r
+ pathsLeft.addAll(endPaths);\r
+ break;\r
+ } \r
+ }\r
+ if (pathsLeft.size() > 0) {\r
+ Resource sl = objectLeft.getValues(ol).get(0).getSubject();\r
+ Resource sr = comparableResources.getRight(sl);\r
+ Collection<Resource> possibleOR = new ArrayList<Resource>();\r
+ for (Statement s : subjectRight.getValues(sr)) {\r
+ possibleOR.add(s.getObject());\r
+ }\r
+ Map<Resource,Set<Path>> matchingPaths = new HashMap<Resource, Set<Path>>();\r
+ for (Resource or : possibleOR) {\r
+ Set<Path> possiblePathsRight = new HashSet<Path>();\r
+ for (Path leftPath : pathsLeft) {\r
+ possiblePathsRight.addAll(findComparableRight(leftPath, or));\r
+ }\r
+ if (possiblePathsRight.size() == pathsLeft.size()) {\r
+ matchingPaths.put(or, possiblePathsRight);\r
+ }\r
+ }\r
+ if (matchingPaths.size() > 0) {\r
+ if (matchingPaths.size() == 1) {\r
+ Resource or = matchingPaths.keySet().iterator().next();\r
+ objectsLeft.add(ol);\r
+ objectsRight.add(or);\r
+ Collection<Statement> statementsLeft = objectLeft.getValues(ol);\r
+ Collection<Statement> statementsRight = objectRight.getValues(or);\r
+ unreliableLeft.removeAll(statementsLeft);\r
+ unreliableRight.removeAll(statementsRight);\r
+ System.out.println();\r
+ } else {\r
+ System.out.println();\r
+ }\r
+ }\r
+ }\r
+ \r