差分発生行の前後
無視リスト:
更新日時:
2014/11/18 14:16:47 (10 年 前)
更新者:
atsuko
ログメッセージ:

サーブレット側でクラスをソート&パス検索を少し速く

パス:
SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder
ファイル:
5 変更

凡例:

変更なし
追加
削除
  • SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java

    r205 r206  
    1010 */ 
    1111import java.util.*; 
    12 //import java.util.LinkedList; 
    13 //import java.util.List; 
    14 //import java.util.ListIterator; 
    1512 
    1613public class OWLClassGraph extends LabeledMultiDigraph{ 
     
    2623        ClassLink classLink; 
    2724        List<ClassLink> path; 
     25        Set<String> classURIs; // apearing class URIs in the path 
    2826        //boolean converge; 
    2927         
     
    4038           //this.converge = converge; 
    4139        } 
    42     } 
    43          
     40 
     41        public LinkAndPath(ClassLink classLink, List<ClassLink> path, String originalClassURI, Set<String> classURIs){ 
     42           this.classLink = classLink; 
     43           this.path = path; 
     44           this.originalClassURI = originalClassURI; 
     45           this.classURIs = classURIs; 
     46           //this.converge = converge; 
     47        } 
     48    } 
     49 
    4450    public OWLClassGraph(String startClass, String endClass){ 
    4551        super(); 
     
    5258        nsteps = 3; 
    5359        limit = 1000; 
    54         prunecut = 100;         
     60        prunecut = 100; 
     61        th = 5; 
     62    } 
     63 
     64    public OWLClassGraph(String startClass, String endClass, int th){ 
     65        super(); 
     66         
     67        // start & end 
     68        this.startClass = startClass; 
     69        this.endClass = endClass; 
     70        // th of instances 
     71        this.th = th; 
     72         
     73        // parameters 
     74        nsteps = 3; 
     75        limit = 1000; 
     76        prunecut = 100; 
    5577    } 
    5678 
    5779    public Path[] getPaths(RDFSchemaAnalyzer rdfsa, boolean countLink){ 
    5880        List<List<ClassLink>> paths = null; 
    59         paths = searchPaths(rdfsa, countLink); 
     81        //paths = searchPaths(rdfsa, countLink); 
     82        paths = searchPathsbyVisitingNodes(rdfsa, countLink); 
    6083        NavigableSet<Path> sortedpath = new TreeSet<Path>(); 
    6184        ListIterator<List<ClassLink>> pit = paths.listIterator(); 
     
    114137                           crrlp.classLink.getDirection() != classLinks[j].getDirection() && 
    115138                           crrlp.originalClassURI.equals( classLinks[j].getLinkedClassURI()) ){ 
    116                               //System.out.println("P1"); 
    117                               continue; 
    118                           } 
    119                           if ( checkPruning(crrlp.classLink, classLinks[j]) ){ 
    120                               //System.out.println("P2"); 
    121139                              continue; 
    122140                          } 
     
    133151    } 
    134152 
    135     //private 
    136      
    137 /*     
     153    private List<List<ClassLink>> searchPathsbyVisitingNodes(RDFSchemaAnalyzer rdfsa, boolean countLinks){ 
     154        List<List<ClassLink>> paths = new ArrayList<>(); 
     155        List<LinkAndPath> lp = new LinkedList<>(); 
     156        Set<String> urls = new HashSet<String>(); 
     157        urls.add(startClass); 
     158        lp.add(new LinkAndPath(new ClassLink("",startClass,null,Direction.both,0,0,0,0,0,false,false),  
     159                                 new LinkedList<ClassLink>(), startClass, urls)); 
     160        try{ 
     161          for ( int i = 0; i < nsteps; i++ ){ 
     162              ListIterator<LinkAndPath> lit = lp.listIterator(); 
     163              List<LinkAndPath> nextlp = new LinkedList<>(); 
     164              while ( lit.hasNext() ){ 
     165                  LinkAndPath crrlp = lit.next(); 
     166                  ClassLink[] classLinks = rdfsa.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks); 
     167                  // limit 
     168                  for ( int j = 0 ; j < classLinks.length; j++ ){ 
     169                      if (crrlp.classURIs.contains(classLinks[j].getLinkedClassURI()) ){ 
     170                          continue; // visited 
     171                      } 
     172                      List<ClassLink> crrpath = new LinkedList<>(crrlp.path); 
     173                      crrpath.add(classLinks[j]); 
     174                      Set<String> crrurls = new HashSet<String>(crrlp.classURIs); 
     175                      crrurls.add(classLinks[j].getLinkedClassURI()); 
     176                      if ( classLinks[j].getLinkedClassURI() == null ){ continue; } 
     177                      if ( classLinks[j].getNumOfLinks() <= th){ 
     178                          continue; 
     179                      } 
     180                      if ( classLinks[j].getLinkedClassURI().equals(endClass) ){ 
     181                          paths.add(new LinkedList<>(crrpath)); 
     182                          continue; 
     183                      } 
     184                      //crrlp.classURIs.add() 
     185                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, crrlp.classLink.getLinkedClassURI(),crrurls)); 
     186                  } 
     187              } 
     188              lp = nextlp; 
     189          } 
     190        }catch(Exception e){  
     191            System.err.println(e); 
     192        } 
     193        return paths;   
     194    } 
     195     
     196    /* 
    138197    private List<List<ClassLink>> searchPathsWithCut(OWLQueryBuilderImpl qb){ 
    139198        List<List<ClassLink>> paths = new ArrayList<>(); 
     
    261320   } 
    262321    
    263     
     322   /* 
     323   public Path[] getPathsByWholeGraph(RDFSchemaAnalyzer rdfsa){ 
     324        setWholeGraph(rdfsa); 
     325        List<List<ClassLink>> paths = null; 
     326        //paths = searchPaths(rdfsa, countLink); 
     327        paths = searchPathsbyVisitingNodes(rdfsa, countLink); 
     328        NavigableSet<Path> sortedpath = new TreeSet<Path>(); 
     329        ListIterator<List<ClassLink>> pit = paths.listIterator(); 
     330        int j = 0; 
     331        while ( pit.hasNext() ){ 
     332            Path path = new Path(); 
     333            path.setStartClass(startClass); 
     334            List<ClassLink> crrpath = pit.next(); 
     335            path.setClassLinks(crrpath); 
     336            ListIterator<ClassLink> cit = crrpath.listIterator(); 
     337            int min = Integer.MAX_VALUE; 
     338            while ( cit.hasNext() ){ 
     339                ClassLink cl = cit.next(); 
     340                if ( cl.getNumOfLinks() < min ){ 
     341                    min = cl.getNumOfLinks(); 
     342                } 
     343            } 
     344            path.setWidth(min); 
     345            sortedpath.add(path); 
     346            j++; 
     347        } 
     348        Path[] patharray = new Path[paths.size()]; 
     349        Iterator<Path> pait = sortedpath.descendingIterator(); 
     350        int i = 0; 
     351        while ( pait.hasNext() ){ 
     352            patharray[i] = pait.next(); 
     353            i++; 
     354        } 
     355        return patharray; 
     356    } 
     357    */ 
    264358} 
  • SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/CLServlet.java

    r204 r206  
    1010import java.io.PrintWriter; 
    1111import java.math.BigDecimal; 
    12 //import java.math.BigDecimal; 
     12import java.util.*; 
    1313import javax.json.*; 
    1414import javax.servlet.ServletException; 
     
    8080                   qpg = new QueryPathGenerator(); 
    8181        } 
     82        SortedSet<String> sortedClasses = new TreeSet<String>(); // display + url 
    8283        qpg.setSPARQLendpoint(ep); 
    8384        SClass[] classes = qpg.getClasses(null); 
    84         JsonBuilderFactory jbfactory = Json.createBuilderFactory(null); 
    85         JsonArrayBuilder jab = jbfactory.createArrayBuilder(); 
    8685        for (int i = 0 ; i < classes.length; i++ ){ 
    87             JsonObjectBuilder job = jbfactory.createObjectBuilder(); 
    8886            String uri = classes[i].getClassURI(); 
    89             job.add("uri", uri); 
    9087            Label[] labels = classes[i].getLabels(); 
    9188            String label = null; 
     
    103100                label = tmplabel2[tmplabel2.length-1]; 
    104101            } 
    105              
    106             StringBuilder displaybuilder = new StringBuilder(label); 
    107             displaybuilder.append(" ("); 
    108             displaybuilder.append(classes[i].getNumOfInstances()); 
    109             displaybuilder.append(")"); 
    110             job.add("display", displaybuilder.toString()); 
     102            StringBuilder classbuilder = new StringBuilder(label); 
     103            classbuilder.append(" ("); 
     104            classbuilder.append(classes[i].getNumOfInstances()); 
     105            classbuilder.append(")  "); 
     106            classbuilder.append(uri); 
     107            sortedClasses.add(classbuilder.toString()); 
     108        } 
     109        JsonBuilderFactory jbfactory = Json.createBuilderFactory(null); 
     110        JsonArrayBuilder jab = jbfactory.createArrayBuilder(); 
     111        Iterator<String> cit = sortedClasses.iterator(); 
     112        while( cit.hasNext() ){ 
     113            JsonObjectBuilder job = jbfactory.createObjectBuilder(); 
     114            String classinfo = cit.next(); 
     115            String[] data = classinfo.split("  ");  
     116            if (data.length != 2 ){ 
     117                System.out.println("data is wrong?"); 
     118            } 
     119            job.add("uri", data[1]); 
     120            job.add("display", data[0]); 
    111121            jab.add(job); 
    112122        } 
    113123        JsonArray ja = jab.build(); 
    114124        out.print(ja); 
     125        //  
     126         
    115127    } 
    116128 
  • SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/EPServlet.java

    r205 r206  
    6868            throws ServletException, IOException { 
    6969        HttpSession session = request.getSession(); 
     70        // Initialize the session 
    7071        session.removeAttribute("qpg"); 
     72        session.removeAttribute("graph"); 
    7173        QueryPathGenerator qpg = new QueryPathGenerator(); 
    7274 
  • SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/PLServlet.java

    r205 r206  
    9494        } 
    9595        jsonstr += "]}"; 
    96         System.out.println("JSON:"); 
    97         System.out.println(jsonstr); 
     96        //System.out.println("JSON:"); 
     97        //System.out.println(jsonstr); 
    9898        out.print(jsonstr); 
    99         //List<Path> 
    100         //session.setAttribute("pathlist", pathlist); 
    10199    } 
    102100 
  • SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java

    r204 r206  
    8484        PrintWriter out = response.getWriter(); 
    8585        String jpath = request.getParameter("jsonpath"); 
     86        System.out.println("JsonPath"); 
     87        System.out.println(jpath); 
    8688        Path path = null; 
    8789        try {