チェンジセット 26 : BH13SPARQLBuilder

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

getNextClass で、インスタンス同士のトリプルが存在しないクラスは返り値から除くように変更。

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

凡例:

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

    r2 r26  
    6464                } 
    6565                sb.append(linkedClassURI); 
     66                sb.append(" ["); 
     67                sb.append(numOfLinks); 
     68                sb.append("]"); 
    6669                return sb.toString(); 
    6770        } 
  • BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilder.java

    r20 r26  
    103103                        int limit) throws Exception; 
    104104        public LabelMap[] getLabels(String[] graphURIs, String[] resourceURIs, String language) throws Exception; 
     105        public ClassLink[] countLinks(String[] graphURIs, String startClassURI, 
     106                        ClassLink[] classLinks) throws Exception; 
    105107 
    106108} 
  • BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java

    r23 r26  
    5252         */ 
    5353        public static void main(String[] args) throws Exception { 
    54                 // String sparqlEndpoint = "http://dbpedia.org/sparql"; 
    55                 String sparqlEndpoint = "http://lsd.dbcls.jp/sparql"; 
    56                 // String keyword = "artiste"; 
    57                 String keyword = "Agent"; 
     54                String sparqlEndpoint = "http://dbpedia.org/sparql"; 
     55//              String sparqlEndpoint = "http://lsd.dbcls.jp/sparql"; 
     56                String keyword = "artiste"; 
     57//              String keyword = "Agent"; 
    5858                String[] graphURIs = new String[0]; 
    5959 
     
    6464                } 
    6565 
     66                System.out.println("CLS"); 
     67                ClassLink[] cls = builder.getNextClass(null, clz[1].getClassURI(), 100, 
     68                                false); 
     69                if (cls != null) { 
     70                        for (ClassLink cl : cls) { 
     71                                System.out.println(cl.toString()); 
     72                        } 
     73                        cls = builder.countLinks(null, clz[1].getClassURI(), cls); 
     74                        for (ClassLink cl : cls) { 
     75                                System.out.println(cl.toString()); 
     76                        } 
     77                } 
     78                 
     79                 
    6680                /* 
    67                  * System.out.println("CLS"); ClassLink[] cls = 
    68                  * builder.getNextClass(null, clz[0].getClassURI(), 0, false); if( cls 
    69                  * != null ){ for( ClassLink cl: cls){ 
    70                  * System.out.println(cl.toString()); } } 
    71                  *  
    7281                 * System.out.println("CLS-INS"); cls = 
    7382                 * builder.getNextClassViaInstanceLink(null, clz[0].getClassURI(), 100); 
     
    290299                queryStr.append(originClass); 
    291300                queryStr.append(">.\n    ?p rdfs:range ?c.\n"); 
    292  
    293301                if (countLinks) { 
    294302                        queryStr.append("    ?o ?p ?s."); 
     303                }else{ 
     304                        queryStr.append("    filter(exists{?o ?p ?s}) "); 
    295305                } 
    296306 
     
    303313                if (countLinks) { 
    304314                        queryStr.append("    ?s ?p ?o."); 
     315                }else{ 
     316                        queryStr.append("    filter( exists{?s ?p ?o})"); 
    305317                } 
    306318 
     
    362374                                // System.out.println(direction); 
    363375                                int numOfLinks = 0; 
    364                                 if( countLinks){ 
    365                                   numOfLinks = sol.getLiteral("numOfLinks").getInt(); 
     376                                if (countLinks) { 
     377                                        numOfLinks = sol.getLiteral("numOfLinks").getInt(); 
    366378                                } 
    367379                                ClassLink cl = new ClassLink(proURI, clsURI, direction, 
     
    637649        } 
    638650 
     651        public ClassLink[] countLinks(String[] graphURIs, String startClassURI, 
     652                        ClassLink[] classLinks) throws Exception { 
     653                if (classLinks == null || classLinks.length == 0) { 
     654                        return new ClassLink[0]; 
     655                } 
     656                for (ClassLink classLink : classLinks) { 
     657                        StringBuffer queryStr = new StringBuffer(); 
     658                        queryStr.append("PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"); 
     659                        queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); 
     660                        queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); 
     661 
     662                        queryStr.append("SELECT (COUNT(?os) AS ?numOfLinks) \n"); 
     663                        if (graphURIs != null) { 
     664                                for (String graphURI : graphURIs) { 
     665                                        queryStr.append("FROM <"); 
     666                                        queryStr.append(graphURI); 
     667                                        queryStr.append(">\n"); 
     668                                } 
     669                        } 
     670 
     671                        queryStr.append("WHERE{\n"); 
     672                        if (classLink.getDirection() == Direction.forward) { 
     673                                queryStr.append("?is rdf:type  <"); 
     674                                queryStr.append(startClassURI); 
     675                                queryStr.append(">.\n"); 
     676                                queryStr.append("?os rdf:type  <"); 
     677                                queryStr.append(classLink.getLinkedClassURI()); 
     678                                queryStr.append(">.\n"); 
     679                                queryStr.append("?is ?p ?os.\n"); 
     680                                queryStr.append("}"); 
     681                        } else { 
     682                                if (classLink.getDirection() == Direction.forward) { 
     683                                        queryStr.append("?os rdf:type  <"); 
     684                                        queryStr.append(startClassURI); 
     685                                        queryStr.append(">.\n"); 
     686                                        queryStr.append("?is rdf:type  <"); 
     687                                        queryStr.append(classLink.getLinkedClassURI()); 
     688                                        queryStr.append(">.\n"); 
     689                                        queryStr.append("?is ?p ?os.\n"); 
     690                                        queryStr.append("}"); 
     691                                } else { 
     692                                        queryStr.append("?os rdf:type  <"); 
     693                                        queryStr.append(startClassURI); 
     694                                        queryStr.append(">.\n"); 
     695                                        queryStr.append("?is rdf:type  <"); 
     696                                        queryStr.append(classLink.getLinkedClassURI()); 
     697                                        queryStr.append(">.\n"); 
     698                                        queryStr.append("{?is ?p ?os.}\n"); 
     699                                        queryStr.append("UNION\n"); 
     700                                        queryStr.append("{?os ?p ?is.}\n"); 
     701                                        queryStr.append("}"); 
     702                                } 
     703                        } 
     704                        System.out.println(queryStr.toString()); 
     705 
     706                        Query query = QueryFactory.create(queryStr.toString()); 
     707                        QueryExecution qexec = QueryExecutionFactory.sparqlService( 
     708                                        endpointURI, query); 
     709 
     710                        ResultSet results = qexec.execSelect(); 
     711                        if (results.hasNext()) { 
     712                                QuerySolution sol = results.next(); 
     713                                Literal lit = sol.getLiteral("numOfLinks"); 
     714                                if (lit != null) { 
     715                                        int numOfLinks = lit.getInt(); 
     716                                        classLink.setNumOfLinks(numOfLinks); 
     717                                } 
     718                        } 
     719                        qexec.close(); 
     720                } 
     721                return classLinks; 
     722        } 
     723 
    639724}