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

リビジョン 2, 3.2 KB (コミッタ: nori, 11 年 前)

Initial

  • 属性 svn:mime-type の設定値 text/plain
行番号 
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 startNode;
17    int endNode;
18    int nsteps;
19    int limit;
20   
21    List<OWLEdge> allOWLEdge;
22       
23    public class OWLEdge{
24        String startClass;
25        ClassLink classLink;
26        public OWLEdge(String startClass, ClassLink classLink){
27           this.startClass = startClass;
28           this.classLink = classLink;
29        }
30    }
31   
32    public class LinkAndPath{
33        ClassLink classLink;
34        List<ClassLink> path;
35        public LinkAndPath(ClassLink classLink, List<ClassLink> path){
36           this.classLink = classLink;
37           this.path = path;
38        }
39    }
40   
41    public OWLClassGraph(String p_startClass, String p_endClass){
42        super();
43        startClass = p_startClass;
44        adjlist.add(new LinkedList<LabeledEdge>());
45        labels.add(startClass);
46        endClass = p_endClass;
47        labels.add(endClass);
48        nsteps = 3;
49        limit = 100;
50        allOWLEdge= new LinkedList<OWLEdge>();
51    }
52   
53    public void generateGraph(){
54        // atode
55    }
56   
57    public Path[] getPaths(OWLQueryBuilderImpl qb){
58        List<List<ClassLink>> paths = searchPathsFromOWL(qb);
59        Path[] patharray = new Path[paths.size()];
60        ListIterator<List<ClassLink>> pit = paths.listIterator();
61        int i = 0;
62        while ( pit.hasNext() ){
63            patharray[i].setStartClass(startClass);
64            List<ClassLink> path = pit.next();
65            path.remove(0);
66            patharray[i].setClassLinks(path);
67            i++;
68        }
69        return patharray;
70    }
71   
72    private List<List<ClassLink>> searchPathsFromOWL(OWLQueryBuilderImpl qb){
73        List<List<ClassLink>> paths = new ArrayList<List<ClassLink>>();
74        ClassLink crrLink = new ClassLink(null,startClass,Direction.both);
75        List<LinkAndPath> lp = new LinkedList<LinkAndPath>();
76        lp.add(new LinkAndPath(crrLink, new LinkedList<ClassLink>()));
77        try{
78          for ( int i = 0; i < nsteps; i++ ){
79              ListIterator<LinkAndPath> lit = lp.listIterator();
80              List<LinkAndPath> nextlp = new LinkedList<LinkAndPath>();
81              while ( lit.hasNext() ){
82                  LinkAndPath crrlp = lit.next();
83                  if ( crrlp.classLink.getLinkedClassURI().equals(endClass) ){ continue; }
84                  ClassLink[] classLinks = qb.getNextClass(null, crrlp.classLink.getLinkedClassURI(), limit);
85                  for ( int j = 0 ; j < classLinks.length; j++ ){
86                      List<ClassLink> crrpath = new LinkedList<ClassLink>(crrlp.path);
87                      crrpath.add(classLinks[j]);
88                      if ( classLinks[j].getLinkedClassURI().equals(endClass) ){
89                          paths.add(new LinkedList<ClassLink>(crrpath));
90                      }
91                      nextlp.add(new LinkAndPath(classLinks[j],crrpath));
92                  }
93              }
94          }
95        }catch(Exception e){ System.err.println(e);}
96        return paths;
97    }
98}
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。