チェンジセット 31 : BH13SPARQLBuilder/src

差分発生行の前後
無視リスト:
更新日時:
2014/01/31 09:59:11 (11 年 前)
更新者:
nori
ログメッセージ:

クラス取得後、あとからインスタンス数をとってこれるようにcountInstancesメソッドを追加

パス:
BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL
ファイル:
2 変更

凡例:

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

    r28 r31  
    107107                        ClassLink[] classLinks) throws Exception; 
    108108 
     109        public SClass[] countInstances(String[] graphURIs, SClass[] classes) throws Exception; 
    109110} 
  • BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java

    r30 r31  
    6363                        System.out.println(cls); 
    6464                } 
    65  
    66                 System.out.println("CLS"); 
     65                clz = builder.countInstances(null, clz); 
     66                for (SClass cls : clz) { 
     67                        System.out.println(cls); 
     68                } 
     69                 
     70 
     71/* 
     72                System.out.println("CLS"); 
     73  
    6774                ClassLink[] cls = builder.getNextClass(null, clz[1].getClassURI(), 100, 
    6875                                false); 
     
    7683                        } 
    7784                } 
    78  
     85*/ 
    7986                /* 
    8087                 * System.out.println("CLS-INS"); cls = 
     
    169176                        if (res != null) { 
    170177                                String uri = res.getURI(); 
    171                                 int numOfInstances = sol.getLiteral("numOfInstances").getInt(); 
     178                                int numOfInstances = 0; 
     179                                if( countInstances ){ 
     180                                        numOfInstances = sol.getLiteral("numOfInstances").getInt(); 
     181                                } 
    172182                                // System.out.println(numOfInstances); 
    173183                                Literal labelLiteral = sol.getLiteral("pLabel"); 
     
    738748        } 
    739749 
     750        public SClass[] countInstances(String[] graphURIs, SClass[] classes) throws Exception{ 
     751                if( classes == null || classes.length == 0 ){ 
     752                        return new SClass[0]; 
     753                } 
     754                HashMap<String, SClass> classMap = new HashMap<String, SClass>(); 
     755                for(SClass sc: classes){ 
     756                        classMap.put(sc.getClassURI(), sc); 
     757                } 
     758                StringBuffer queryStr = new StringBuffer(); 
     759                queryStr.append("PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"); 
     760                queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); 
     761                queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); 
     762                queryStr.append("SELECT DISTINCT ?cls  (COUNT(?is) AS ?numOfInstances)\n"); 
     763                if (graphURIs != null) { 
     764                        for (String graphURI : graphURIs) { 
     765                                queryStr.append("FROM <"); 
     766                                queryStr.append(graphURI); 
     767                                queryStr.append(">\n"); 
     768                        } 
     769                } 
     770                queryStr.append("WHERE{\n"); 
     771                queryStr.append("  ?is rdf:type ?cls.\n"); 
     772                queryStr.append("  FILTER(?cls IN ("); 
     773                boolean f = false; 
     774                Set<String> clsSet = classMap.keySet(); 
     775                for (String clsURI : clsSet) { 
     776                        if (f) { 
     777                                queryStr.append(", "); 
     778                        } 
     779                        f = true; 
     780                        queryStr.append("<"); 
     781                        queryStr.append(clsURI); 
     782                        queryStr.append(">"); 
     783                } 
     784                queryStr.append("))\n"); 
     785                queryStr.append("} GROUP BY ?cls"); 
     786 
     787                System.out.println(queryStr.toString()); 
     788 
     789                Query query = QueryFactory.create(queryStr.toString()); 
     790                QueryExecution qexec = QueryExecutionFactory.sparqlService(endpointURI, 
     791                                query); 
     792 
     793                ResultSet results = qexec.execSelect(); 
     794                for (; results.hasNext();) { 
     795                        QuerySolution sol = results.next(); 
     796                        String uri = sol.getResource("cls").getURI(); 
     797                        SClass sc = classMap.get(uri); 
     798                        Literal lit = sol.getLiteral("numOfInstances"); 
     799                        if (lit != null) { 
     800                                int numOfInstances = lit.getInt(); 
     801                                sc.setNumOfInstances(numOfInstances); 
     802                        } 
     803                } 
     804                qexec.close(); 
     805         
     806                return classes; 
     807        } 
     808 
    740809}