| 140 | | |
| 141 | | public Path[] getPaths_old(RDFSchemaAnalyzer rdfsa, boolean countLink, String startClass, String endClass){ |
| 142 | | List<List<ClassLink>> paths = null; |
| 143 | | paths = searchPathsbyVisitingNodes(rdfsa, countLink, startClass, endClass); |
| 144 | | NavigableSet<Path> sortedpath = new TreeSet<Path>(); |
| 145 | | ListIterator<List<ClassLink>> pit = paths.listIterator(); |
| 146 | | int j = 0; |
| 147 | | while ( pit.hasNext() ){ |
| 148 | | Path path = new Path(); |
| 149 | | path.setStartClass(startClass); |
| 150 | | List<ClassLink> crrpath = pit.next(); |
| 151 | | path.setClassLinks(crrpath); |
| 152 | | ListIterator<ClassLink> cit = crrpath.listIterator(); |
| 153 | | int min = Integer.MAX_VALUE; |
| 154 | | while ( cit.hasNext() ){ |
| 155 | | ClassLink cl = cit.next(); |
| 156 | | if ( cl.getNumOfLinks() < min ){ |
| 157 | | min = cl.getNumOfLinks(); |
| 158 | | } |
| 159 | | } |
| 160 | | path.setWidth(min); |
| 161 | | sortedpath.add(path); |
| 162 | | j++; |
| 163 | | } |
| 164 | | Path[] patharray = new Path[paths.size()]; |
| 165 | | Iterator<Path> pait = sortedpath.descendingIterator(); |
| 166 | | int i = 0; |
| 167 | | while ( pait.hasNext() ){ |
| 168 | | patharray[i] = pait.next(); |
| 169 | | i++; |
| 170 | | } |
| 171 | | return patharray; |
| 172 | | } |
| | 148 | // tmp |
| | 149 | if ( i >= 1 ){ |
| | 150 | int wn = nodeweight.get(crrnode); |
| | 151 | int in = edgeweight.get(crrpath.get(crrpath.size()-2)).get(crrnode); |
| | 152 | int out = edgeweight.get(nextnode).get(crrnode); |
| | 153 | if ( wn > in + out ){ |
| | 154 | /* |
| | 155 | String key1 = nextnode.toString().concat("-").concat(crrpath.get(crrpath.size()-1).toString()) |
| | 156 | .concat("-").concat(crrpath.get(crrpath.size()-2).toString()); |
| | 157 | String key2 = crrpath.get(crrpath.size()-2).toString().concat("-").concat(crrpath.get(crrpath.size()-1).toString()) |
| | 158 | .concat("-").concat(nextnode.toString()); |
| | 159 | if ( checkedpaths.containsKey(key1) ){ |
| | 160 | if ( checkedpaths.get(key1) == false ){ |
| | 161 | continue; |
| | 162 | } |
| | 163 | }else if ( checkedpaths.containsKey(key2) ){ |
| | 164 | if ( checkedpaths.get(key2) == false ){ |
| | 165 | continue; |
| | 166 | } |
| | 167 | }else{ |
| | 168 | boolean chk = EndpointAccess.check3SimplePathwithJoin(nextnode, crrpath.get(crrpath.size()-1), |
| | 169 | crrpath.get(crrpath.size()-2), this, sparqlEndpoint); |
| | 170 | checkedpaths.put(key1, chk); |
| | 171 | if ( chk == false ){ |
| | 172 | continue; |
| | 173 | } |
| | 174 | } |
| | 175 | */ |
| | 176 | continue; |
| | 177 | } |
| | 178 | } |
| 254 | | private List<List<ClassLink>> searchPaths(RDFSchemaAnalyzer rdfsa, boolean countLinks){ |
| 255 | | List<List<ClassLink>> paths = new ArrayList<>(); |
| 256 | | List<LinkAndPath> lp = new LinkedList<>(); |
| 257 | | lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false), new LinkedList<ClassLink>(), "")); |
| 258 | | try{ |
| 259 | | for ( int i = 0; i < nsteps; i++ ){ |
| 260 | | ListIterator<LinkAndPath> lit = lp.listIterator(); |
| 261 | | List<LinkAndPath> nextlp = new LinkedList<>(); |
| 262 | | while ( lit.hasNext() ){ |
| 263 | | LinkAndPath crrlp = lit.next(); |
| 264 | | ClassLink[] classLinks = rdfsa.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks); |
| 265 | | for ( int j = 0 ; j < classLinks.length; j++ ){ |
| 266 | | List<ClassLink> crrpath = new LinkedList<>(crrlp.path); |
| 267 | | crrpath.add(classLinks[j]); |
| 268 | | if ( classLinks[j].getLinkedClassURI() == null ){ continue; } |
| 269 | | if ( classLinks[j].getLinkedClassURI().equals(endClass) ){ |
| 270 | | paths.add(new LinkedList<>(crrpath)); |
| 271 | | continue; |
| 272 | | } |
| 273 | | if ( countLinks == true && classLinks[j].getNumOfLinks() <= th){ |
| 274 | | continue; |
| 275 | | } |
| 276 | | if ( i >= 2 ){ |
| 277 | | if ( crrlp.classLink.getPropertyURI().equals(classLinks[j].getPropertyURI()) && |
| 278 | | crrlp.classLink.getDirection() != classLinks[j].getDirection() && |
| 279 | | crrlp.originalClassURI.equals( classLinks[j].getLinkedClassURI()) ){ |
| 280 | | continue; |
| 281 | | } |
| 282 | | } |
| 283 | | nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI())); |
| 284 | | } |
| 285 | | } |
| 286 | | lp = nextlp; |
| 287 | | } |
| 288 | | }catch(Exception e){ |
| 289 | | System.err.println(e); |
| 290 | | } |
| 291 | | return paths; |
| 292 | | } |
| 293 | | */ |
| 294 | | |
| 417 | | if ( nn != null ){ |
| 418 | | addEdge(crr, nn, classLinks[j]); |
| 419 | | /* |
| 420 | | }else{ |
| 421 | | nn = labelednodes.get(classLinks[j].getLinkedLiteralDatatypeURI()); |
| 422 | | if ( nn == null ){ |
| 423 | | addNode(classLinks[j].getLinkedLiteralDatatypeURI()); |
| 424 | | n = nodeType.size(); |
| 425 | | nodeType.add("literal"); |
| 426 | | } |
| 427 | | addEdge(i, n, classLinks[j]); |
| 428 | | /* |
| 429 | | ClassLink rev = new ClassLink( classLinks[j].getPropertyURI(), |
| 430 | | //classLinks[j].getLinkedClassURI(), |
| 431 | | classes[i].getClassURI(), |
| 432 | | classLinks[j].getLinkedLiteralDatatypeURI(), |
| 433 | | classLinks[j].getDirection(), classLinks[j].getNumOfLinks(), |
| 434 | | classLinks[j].getNumOfOriginInstances(), classLinks[j].getNumOfLinkedInstances(), |
| 435 | | classLinks[j].getNumOfOriginClassInstances(), classLinks[j].getNumOfLinkedClassInstances(), |
| 436 | | classLinks[j].isDomainClassLimitedQ(), classLinks[j].isRangeClassLimitedQ() ); |
| 437 | | rev.setDirection(Direction.reverse); |
| 438 | | addEdge(n, i, rev); |
| 439 | | */ |
| 440 | | } |
| | 367 | addEdge(crr, nn, classLinks[j]); |
| | 368 | updateWeight(crr, nn, classLinks[j]); |
| | 413 | |
| | 414 | |
| | 415 | private void updateWeight(Integer node1, Integer node2, ClassLink edge){ |
| | 416 | Map<Integer, Integer> weight = edgeweight.get(node1); |
| | 417 | Integer crr = weight.get(node2); |
| | 418 | if (crr == null ){ |
| | 419 | crr = edge.getNumOfLinkedClassInstances(); |
| | 420 | weight.put(node2, crr); |
| | 421 | } |
| | 422 | if ( crr < edge.getNumOfLinkedClassInstances() ){ |
| | 423 | crr = edge.getNumOfLinkedClassInstances(); |
| | 424 | weight.put(node2, crr); |
| | 425 | } |
| | 426 | weight = edgeweight.get(node2); |
| | 427 | crr = weight.get(node1); |
| | 428 | if (crr == null ){ |
| | 429 | crr = edge.getNumOfOriginClassInstances(); |
| | 430 | weight.put(node2, crr); |
| | 431 | } |
| | 432 | if ( crr < edge.getNumOfOriginClassInstances() ){ |
| | 433 | crr = edge.getNumOfOriginInstances(); |
| | 434 | weight.put(node1, crr); |
| | 435 | } |
| | 436 | } |
| | 437 | |
| | 438 | // old codes |
| | 439 | /* |
| | 440 | public Path[] getPaths_old(RDFSchemaAnalyzer rdfsa, boolean countLink, String startClass, String endClass){ |
| | 441 | List<List<ClassLink>> paths = null; |
| | 442 | paths = searchPathsbyVisitingNodes(rdfsa, countLink, startClass, endClass); |
| | 443 | NavigableSet<Path> sortedpath = new TreeSet<Path>(); |
| | 444 | ListIterator<List<ClassLink>> pit = paths.listIterator(); |
| | 445 | int j = 0; |
| | 446 | while ( pit.hasNext() ){ |
| | 447 | Path path = new Path(); |
| | 448 | path.setStartClass(startClass); |
| | 449 | List<ClassLink> crrpath = pit.next(); |
| | 450 | path.setClassLinks(crrpath); |
| | 451 | ListIterator<ClassLink> cit = crrpath.listIterator(); |
| | 452 | int min = Integer.MAX_VALUE; |
| | 453 | while ( cit.hasNext() ){ |
| | 454 | ClassLink cl = cit.next(); |
| | 455 | if ( cl.getNumOfLinks() < min ){ |
| | 456 | min = cl.getNumOfLinks(); |
| | 457 | } |
| | 458 | } |
| | 459 | path.setWidth(min); |
| | 460 | sortedpath.add(path); |
| | 461 | j++; |
| | 462 | } |
| | 463 | Path[] patharray = new Path[paths.size()]; |
| | 464 | Iterator<Path> pait = sortedpath.descendingIterator(); |
| | 465 | int i = 0; |
| | 466 | while ( pait.hasNext() ){ |
| | 467 | patharray[i] = pait.next(); |
| | 468 | i++; |
| | 469 | } |
| | 470 | return patharray; |
| | 471 | } |
| | 472 | |
| | 473 | private List<List<ClassLink>> searchPaths_old(String startClass, String endClass){ |
| | 474 | |
| | 475 | List<List<ClassLink>> paths = new ArrayList<>(); |
| | 476 | List<List<Integer>> simplePaths = new LinkedList<>(); |
| | 477 | Integer snode = labelednodes.get(startClass); |
| | 478 | Integer enode = labelednodes.get(endClass); |
| | 479 | List<List<Integer>> lp = new LinkedList<>(); |
| | 480 | List<Integer> ini = new LinkedList<Integer>(); // initial path |
| | 481 | ini.add(snode); |
| | 482 | lp.add(ini); |
| | 483 | for (int i = 0; i < nsteps; i++ ){ |
| | 484 | ListIterator<List<Integer>> lit = lp.listIterator(); |
| | 485 | List<List<Integer>> nextlp = new LinkedList<>(); |
| | 486 | while ( lit.hasNext() ){ |
| | 487 | List<Integer> crrpath = lit.next(); |
| | 488 | Integer crrnode = crrpath.get(crrpath.size()-1); |
| | 489 | Set<Integer> nexts = gadjlist.get(crrnode).keySet(); |
| | 490 | Iterator<Integer> nit = nexts.iterator(); |
| | 491 | while( nit.hasNext() ){ |
| | 492 | Integer nextnode = nit.next(); |
| | 493 | if ( crrpath.contains(nextnode) ){ continue; } |
| | 494 | List<Integer> nextpath = new LinkedList<Integer>(crrpath); // copy |
| | 495 | nextpath.add(nextnode); |
| | 496 | if ( nextnode.equals(enode) ){ |
| | 497 | simplePaths.add(nextpath); |
| | 498 | continue; |
| | 499 | } |
| | 500 | nextlp.add(nextpath); |
| | 501 | } |
| | 502 | } |
| | 503 | lp = nextlp; |
| | 504 | } |
| | 505 | |
| | 506 | ListIterator<List<Integer>> pit = simplePaths.listIterator(); |
| | 507 | while( pit.hasNext()){ |
| | 508 | List<Integer> spath = pit.next(); |
| | 509 | List<List<ClassLink>> convertedPaths = convertSimplePathToPaths(spath); |
| | 510 | paths.addAll(convertedPaths); |
| | 511 | } |
| | 512 | return paths; |
| | 513 | } |
| | 514 | */ |
| | 515 | /* |
| | 516 | private List<List<ClassLink>> searchPaths(RDFSchemaAnalyzer rdfsa, boolean countLinks){ |
| | 517 | List<List<ClassLink>> paths = new ArrayList<>(); |
| | 518 | List<LinkAndPath> lp = new LinkedList<>(); |
| | 519 | lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false), new LinkedList<ClassLink>(), "")); |
| | 520 | try{ |
| | 521 | for ( int i = 0; i < nsteps; i++ ){ |
| | 522 | ListIterator<LinkAndPath> lit = lp.listIterator(); |
| | 523 | List<LinkAndPath> nextlp = new LinkedList<>(); |
| | 524 | while ( lit.hasNext() ){ |
| | 525 | LinkAndPath crrlp = lit.next(); |
| | 526 | ClassLink[] classLinks = rdfsa.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks); |
| | 527 | for ( int j = 0 ; j < classLinks.length; j++ ){ |
| | 528 | List<ClassLink> crrpath = new LinkedList<>(crrlp.path); |
| | 529 | crrpath.add(classLinks[j]); |
| | 530 | if ( classLinks[j].getLinkedClassURI() == null ){ continue; } |
| | 531 | if ( classLinks[j].getLinkedClassURI().equals(endClass) ){ |
| | 532 | paths.add(new LinkedList<>(crrpath)); |
| | 533 | continue; |
| | 534 | } |
| | 535 | if ( countLinks == true && classLinks[j].getNumOfLinks() <= th){ |
| | 536 | continue; |
| | 537 | } |
| | 538 | if ( i >= 2 ){ |
| | 539 | if ( crrlp.classLink.getPropertyURI().equals(classLinks[j].getPropertyURI()) && |
| | 540 | crrlp.classLink.getDirection() != classLinks[j].getDirection() && |
| | 541 | crrlp.originalClassURI.equals( classLinks[j].getLinkedClassURI()) ){ |
| | 542 | continue; |
| | 543 | } |
| | 544 | } |
| | 545 | nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI())); |
| | 546 | } |
| | 547 | } |
| | 548 | lp = nextlp; |
| | 549 | } |
| | 550 | }catch(Exception e){ |
| | 551 | System.err.println(e); |
| | 552 | } |
| | 553 | return paths; |
| | 554 | } |
| | 555 | */ |
| | 556 | |