root/BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLClassGraph.java @ 45

リビジョン 45, 6.0 KB (コミッタ: atsuko, 11 年 前)

searchPathsWithCut 追加

  • 属性 svn:mime-type の設定値 text/plain
Rev行番号 
[2]1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package org.biohackathon.SPARQLBuilder.OWL;
6
7/**
8 *
9 * @author atsuko
10 */
11import java.util.*;
12
13public class OWLClassGraph extends LabeledMultiDigraph{
14    String startClass;
15    String endClass;
16    int nsteps;
17    int limit;
[34]18    int th;
[45]19    double cut;
[2]20       
21    public class LinkAndPath{
22        ClassLink classLink;
23        List<ClassLink> path;
[45]24        boolean converge;
[2]25        public LinkAndPath(ClassLink classLink, List<ClassLink> path){
26           this.classLink = classLink;
27           this.path = path;
[45]28           this.converge = false;
[2]29        }
[45]30       
31        public LinkAndPath(ClassLink classLink, List<ClassLink> path, boolean converge){
32           this.classLink = classLink;
33           this.path = path;
34           this.converge = converge;
35        }
[2]36    }
37   
[3]38    public OWLClassGraph(String startClass, String endClass){
[2]39        super();
[3]40        this.startClass = startClass;
41        addNode(startClass);
42        this.endClass = endClass;
43        addNode(endClass);
[41]44        nsteps = 3;
[3]45        limit = 1000;
[34]46        th = 0;
[45]47        cut = 2.0;
[2]48    }
49   
[3]50    public void generateGraph(List<List<ClassLink>> paths){
[15]51        ListIterator<List<ClassLink>> pit = paths.listIterator();
52        while( pit.hasNext() ){
[21]53            List<ClassLink> cls = pit.next();
54            String start = startClass;
55            ListIterator<ClassLink> cit = cls.listIterator();
56            while ( cit.hasNext() ){
57                // KOKO
58            }
[15]59        }
[2]60    }
61   
[29]62    public Path[] getPaths(OWLQueryBuilderImpl qb, int mode, boolean countLink){
63        List<List<ClassLink>> paths = searchPaths(qb, mode, countLink);
[2]64        Path[] patharray = new Path[paths.size()];
65        ListIterator<List<ClassLink>> pit = paths.listIterator();
66        int i = 0;
67        while ( pit.hasNext() ){
[3]68            patharray[i] = new Path();
[2]69            patharray[i].setStartClass(startClass);
70            List<ClassLink> path = pit.next();
71            patharray[i].setClassLinks(path);
[8]72            ListIterator<ClassLink> cit = path.listIterator();
73            int min = Integer.MAX_VALUE;
74            while ( cit.hasNext() ){
75                ClassLink cl = cit.next();
76                if ( cl.getNumOfLinks() < min ){
77                    min = cl.getNumOfLinks();
78                }
79            }
80            patharray[i].setWidth(min);
[2]81            i++;
82        }
83        return patharray;
84    }
[45]85       
[32]86    private List<List<ClassLink>> searchPaths(OWLQueryBuilderImpl qb, int mode, boolean countLinks){
[15]87        List<List<ClassLink>> paths = new ArrayList<>();
[8]88        ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0);
[15]89        List<LinkAndPath> lp = new LinkedList<>();
[2]90        lp.add(new LinkAndPath(crrLink, new LinkedList<ClassLink>()));
91        try{
92          for ( int i = 0; i < nsteps; i++ ){
93              ListIterator<LinkAndPath> lit = lp.listIterator();
[15]94              List<LinkAndPath> nextlp = new LinkedList<>();
[2]95              while ( lit.hasNext() ){
96                  LinkAndPath crrlp = lit.next();
[3]97                  ClassLink[] classLinks = null;
98                  // Mode
99                  if ( mode == 0 ){
[32]100                      classLinks = qb.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit, countLinks);
[3]101                  }else if ( mode == 1 ){
[41]102                      classLinks = qb.getNextClassViaInstanceLink(null, crrlp.classLink.getLinkedClassURI(), limit);
[3]103                  }else{ System.err.println("Mode is not correct."); }
[2]104                  for ( int j = 0 ; j < classLinks.length; j++ ){
[15]105                      List<ClassLink> crrpath = new LinkedList<>(crrlp.path);
[2]106                      crrpath.add(classLinks[j]);
107                      if ( classLinks[j].getLinkedClassURI().equals(endClass) ){
[15]108                          paths.add(new LinkedList<>(crrpath));
[34]109                          continue;
[2]110                      }
[34]111                      if ( countLinks == true && classLinks[j].getNumOfLinks() <= th){
112                          continue;
113                      }
[2]114                      nextlp.add(new LinkAndPath(classLinks[j],crrpath));
115                  }
116              }
[3]117              lp = nextlp;
[2]118          }
[15]119        }catch(Exception e){
120            System.err.println(e);
121        }
[21]122        return paths; 
[2]123    }
[45]124   
125    private List<List<ClassLink>> searchPathsWithCut(OWLQueryBuilderImpl qb){
126        List<List<ClassLink>> paths = new ArrayList<>();
127        ClassLink crrLink = new ClassLink(null,startClass,Direction.both,0);
128        List<LinkAndPath> lp = new LinkedList<>();
129        lp.add(new LinkAndPath(crrLink, new LinkedList<ClassLink>()));
130        try{
131          for ( int i = 0; i < nsteps; i++ ){
132              ListIterator<LinkAndPath> lit = lp.listIterator();
133              List<LinkAndPath> nextlp = new LinkedList<>();
134              while ( lit.hasNext() ){
135                  LinkAndPath crrlp = lit.next();
136                  ClassLink[] classLinks = null;
137                  classLinks = qb.getNextClassViaInstanceLink(null, crrlp.classLink.getLinkedClassURI(), limit);
138                  for ( int j = 0 ; j < classLinks.length; j++ ){
139                      List<ClassLink> crrpath = new LinkedList<>(crrlp.path);
140                      crrpath.add(classLinks[j]);
141                      if ( classLinks[j].getLinkedClassURI().equals(endClass) ){
142                          paths.add(new LinkedList<>(crrpath));
143                          continue;
144                      }
145                      boolean con = false;
146                      double cont = 1.0;
147                      if ( cont > th ){ // shrink
148                          con = true;
149                      }
150                      if ( crrlp.converge == true && con == false ){ // converge & 縲€diverge
151                          continue; // cut
152                      }
153                      nextlp.add(new LinkAndPath(classLinks[j], crrpath, con));
154                  }
155              }
156              lp = nextlp;
157          }
158        }catch(Exception e){
159            System.err.println(e);
160        }
161        return paths; 
162    }
163
[2]164}
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。