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

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

クラスのキーワード検索で、言語Languageを指定できるようにした

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

凡例:

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

    r55 r59  
    2525         * @since 28.01.2014 
    2626         */ 
    27         public SClass[] getOWLClasses(String[] graphURIs, String[] keyword, boolean countInstances) throws Exception; 
     27        public SClass[] getOWLClasses(String[] graphURIs, String[] keyword, String language, boolean countInstances) throws Exception; 
    2828 
    2929        public SClass[] listClasses(String[] graphURIs, boolean countInstances) throws Exception; 
  • BH13SPARQLBuilder/src/org/biohackathon/SPARQLBuilder/OWL/OWLQueryBuilderImpl.java

    r58 r59  
    5555                String sparqlEndpoint = "http://lsd.dbcls.jp/sparql"; 
    5656                // String keyword = "artiste"; 
    57                 String[] keyword = {"Player","Soccer"}; 
     57                String[] keyword = { "Player", "Soccer" }; 
    5858                String[] graphURIs = new String[0]; 
    5959 
    60                 //keyword = null; 
     60                // keyword = null; 
    6161 
    6262                OWLQueryBuilder builder = new OWLQueryBuilderImpl(sparqlEndpoint); 
    63        
    64                 builder.getOWLClasses(null,keyword,false); 
    65 /* 
    66                 SClass[] clz = builder.getOWLClasses(graphURIs, keyword, false); 
    67                 for (SClass cls : clz) { 
    68                         System.out.println(cls); 
    69                 } 
    70                 clz = builder.countInstances(null, clz); 
    71                 for (SClass cls : clz) { 
    72                         System.out.println(cls); 
    73                 } 
    74 */ 
    75  
    76  
    77         /*      System.out.println("CLS"); 
    78  
    79                 String uri = "http://purl.jp/bio/10/lsd/ontology/201209#EnglishEntry"; 
    80                  
    81                 ClassLink[] cls = null; 
    82                 try{ 
    83                         cls = builder.getNextClass(null, uri, 100, false); 
    84                 }catch(Exception ex) { 
    85                         ex.printStackTrace(); 
    86                 } 
    87  
    88                 System.out.println("Solutions: "); 
    89                 if (cls != null) { 
    90                         for (ClassLink cl : cls) { 
    91                                 System.out.println(cl.toString()); 
    92                         } 
    93                         cls = builder.countLinks(null, uri, cls); 
    94                         for (ClassLink cl : cls) { 
    95                                 System.out.println(cl.toString()); 
    96                         } 
    97                 } 
    98 */ 
    99 /* 
    100                  
    101                 String uri = "http://purl.jp/bio/10/lsd/ontology/201209#EnglishEntry"; 
    102                  
    103                 ClassLink[] cls = null; 
    104                  
    105                 System.out.println("CLS-INS"); 
    106                 cls = null; 
    107                 try{  
    108                         cls = builder.getNextClassViaInstanceLink(null, uri, 100); 
    109                 }catch(Exception ex){ 
    110                         ex.printStackTrace(); 
    111                 } 
    112                 if (cls != null) { 
    113                         for (ClassLink cl : cls) { 
    114                                 System.out.println(cl.toString()); 
    115                         } 
    116                 } 
    117 */ 
     63 
     64                builder.getOWLClasses(null, keyword, false); 
    11865                /* 
    119                 System.out.println("Instances"); 
    120                 Instance[] ins = builder.getInstances(null, "\"A.C. Reed\"@en"); 
    121                 if (ins != null) { 
    122                         for (Instance in : ins) { 
    123                                 System.out.println(in.toString()); 
    124                         } 
    125                 } 
    126 */ 
     66                 * SClass[] clz = builder.getOWLClasses(graphURIs, keyword, false); for 
     67                 * (SClass cls : clz) { System.out.println(cls); } clz = 
     68                 * builder.countInstances(null, clz); for (SClass cls : clz) { 
     69                 * System.out.println(cls); } 
     70                 */ 
     71 
     72                /* 
     73                 * System.out.println("CLS"); 
     74                 *  
     75                 * String uri = 
     76                 * "http://purl.jp/bio/10/lsd/ontology/201209#EnglishEntry"; 
     77                 *  
     78                 * ClassLink[] cls = null; try{ cls = builder.getNextClass(null, uri, 
     79                 * 100, false); }catch(Exception ex) { ex.printStackTrace(); } 
     80                 *  
     81                 * System.out.println("Solutions: "); if (cls != null) { for (ClassLink 
     82                 * cl : cls) { System.out.println(cl.toString()); } cls = 
     83                 * builder.countLinks(null, uri, cls); for (ClassLink cl : cls) { 
     84                 * System.out.println(cl.toString()); } } 
     85                 */ 
     86                /* 
     87                 *  
     88                 * String uri = 
     89                 * "http://purl.jp/bio/10/lsd/ontology/201209#EnglishEntry"; 
     90                 *  
     91                 * ClassLink[] cls = null; 
     92                 *  
     93                 * System.out.println("CLS-INS"); cls = null; try{ cls = 
     94                 * builder.getNextClassViaInstanceLink(null, uri, 100); }catch(Exception 
     95                 * ex){ ex.printStackTrace(); } if (cls != null) { for (ClassLink cl : 
     96                 * cls) { System.out.println(cl.toString()); } } 
     97                 */ 
     98                /* 
     99                 * System.out.println("Instances"); Instance[] ins = 
     100                 * builder.getInstances(null, "\"A.C. Reed\"@en"); if (ins != null) { 
     101                 * for (Instance in : ins) { System.out.println(in.toString()); } } 
     102                 */ 
    127103                /* 
    128104                 * System.out.println("INS-INS"); ins = builder.getInstances(null, 
     
    136112        } 
    137113 
    138          
    139          
    140          
    141114        /** 
    142115         * 譏守、コ逧�↓RDF縺ァ譖ク縺九l縺ヲ縺�k繧ッ繝ゥ繧ケ繧貞叙蠕励☆繧� 
     
    153126         * @since 28.01.2014 
    154127         */ 
    155         public SClass[] getOWLClasses(String[] graphURIs, String[] keywords, 
     128        public SClass[] getOWLClasses(String[] graphURIs, String[] keywords,縲€String language,  
    156129                        boolean countInstances) throws Exception { 
    157130                StringBuffer queryStr = new StringBuffer(); 
     
    173146                queryStr.append("WHERE{\n"); 
    174147 
    175                 //  
     148                // 
    176149                queryStr.append(" {?c rdf:type rdfs:Class} UNION {?c rdf:type owl:Class}\n"); 
    177 //              queryStr.append("  ?i rdf:type ?c.\n"); 
    178  
    179          
     150                // queryStr.append("  ?i rdf:type ?c.\n"); 
     151 
    180152                if (countInstances) { 
    181153                        queryStr.append("  ?c rdfs:label ?label.\n"); 
     
    188160                // queryStr.append(keyword); 
    189161                // queryStr.append("."); 
    190                  
    191                 // TODO  OR relationship between keywords 
     162 
     163                // TODO OR relationship between keywords 
    192164                if (keywords != null && keywords.length != 0) { 
    193                                                                           
    194165                        queryStr.append(" ?c rdfs:label "); 
    195                     queryStr.append("?keywords") 
    196                                  .append(".\n"); 
    197                         queryStr.append("  filter(");  
    198                          
    199                           for (int i=0;i<keywords.length;i++) 
    200                           { 
    201                         if (i>0) queryStr.append(" or \n "); 
    202                          
    203                           queryStr.append("regex(str(") 
    204                                  .append("?keywords") 
    205                                  .append("),\""); 
    206                           queryStr.append(keywords[i]); 
    207                           queryStr.append("\", \"i\" )"); 
    208                            
    209                           } 
    210                           queryStr.append(")\n");  
    211          
    212                 } 
    213                  
     166                        queryStr.append("?keywords").append(".\n"); 
     167                        queryStr.append("  filter("); 
     168 
     169                        for (int i = 0; i < keywords.length; i++) { 
     170                                if (i > 0) 
     171                                        queryStr.append(" or \n "); 
     172 
     173                                queryStr.append("regex(str(").append("?keywords") 
     174                                                .append("),\""); 
     175                                queryStr.append(keywords[i]); 
     176                                queryStr.append("\", \"i\" )"); 
     177                        } 
     178                        queryStr.append(")\n"); 
     179 
     180                } 
     181 
    214182                if (countInstances) { 
    215183                        queryStr.append("}  GROUP BY ?c ?pLabel"); 
     
    218186                } 
    219187                System.out.println(queryStr.toString()); 
    220                  
    221                  
    222         /*      Query query = QueryFactory.create(queryStr.toString()); 
    223  
    224                  
    225                 QueryExecution qexec = null; 
    226                 try{ 
    227                         long start = System.currentTimeMillis(); 
    228                         qexec = QueryExecutionFactory.sparqlService(endpointURI, 
    229                                         query); 
    230                         long end = System.currentTimeMillis(); 
    231                         System.out.println("EXEC TIME: " + (end-start)); 
    232                 }catch(Exception ex){ 
    233                         ex.printStackTrace(); 
    234                         throw ex; 
    235                 } 
    236  
    237                 ResultSet results = qexec.execSelect(); 
    238                 HashMap<String, SClass> classMap = new HashMap<String, SClass>(); 
    239                 for (; results.hasNext();) { 
    240                         QuerySolution sol = results.next(); 
    241                         Resource res = sol.getResource("c"); 
    242                         if (res != null) { 
    243                                 String uri = res.getURI(); 
    244                                 int numOfInstances = 0; 
    245                                 if (countInstances) { 
    246                                         numOfInstances = sol.getLiteral("numOfInstances").getInt(); 
    247                                 } 
    248                                 // System.out.println(numOfInstances); 
    249                                 Literal labelLiteral = sol.getLiteral("pLabel"); 
    250                                 SClass sClass = null; 
    251                                 if (classMap.containsKey(uri)) { 
    252                                         sClass = classMap.get(uri); 
    253                                 } else { 
    254                                         sClass = new SClass(uri, null, numOfInstances); 
    255                                         classMap.put(uri, sClass); 
    256                                 } 
    257                                 if (labelLiteral != null) { 
    258                                         String label = labelLiteral.getString(); 
    259                                         String lang = labelLiteral.getLanguage(); 
    260                                         sClass.addLabel(new Label(label, lang)); 
    261                                 } 
    262                         } 
    263                 } 
    264                 qexec.close(); 
    265                 return classMap.values().toArray(new SClass[0]);*/ 
     188 
     189                /* 
     190                 * Query query = QueryFactory.create(queryStr.toString()); 
     191                 *  
     192                 *  
     193                 * QueryExecution qexec = null; try{ long start = 
     194                 * System.currentTimeMillis(); qexec = 
     195                 * QueryExecutionFactory.sparqlService(endpointURI, query); long end = 
     196                 * System.currentTimeMillis(); System.out.println("EXEC TIME: " + 
     197                 * (end-start)); }catch(Exception ex){ ex.printStackTrace(); throw ex; } 
     198                 *  
     199                 * ResultSet results = qexec.execSelect(); HashMap<String, SClass> 
     200                 * classMap = new HashMap<String, SClass>(); for (; results.hasNext();) 
     201                 * { QuerySolution sol = results.next(); Resource res = 
     202                 * sol.getResource("c"); if (res != null) { String uri = res.getURI(); 
     203                 * int numOfInstances = 0; if (countInstances) { numOfInstances = 
     204                 * sol.getLiteral("numOfInstances").getInt(); } // 
     205                 * System.out.println(numOfInstances); Literal labelLiteral = 
     206                 * sol.getLiteral("pLabel"); SClass sClass = null; if 
     207                 * (classMap.containsKey(uri)) { sClass = classMap.get(uri); } else { 
     208                 * sClass = new SClass(uri, null, numOfInstances); classMap.put(uri, 
     209                 * sClass); } if (labelLiteral != null) { String label = 
     210                 * labelLiteral.getString(); String lang = labelLiteral.getLanguage(); 
     211                 * sClass.addLabel(new Label(label, lang)); } } } qexec.close(); return 
     212                 * classMap.values().toArray(new SClass[0]); 
     213                 */ 
    266214                return null; 
    267215        } 
    268216 
    269         public SClass[] listClasses(String[] graphURIs, boolean countInstances) throws Exception{ 
    270  
    271                 //TODO  
     217        public SClass[] listClasses(String[] graphURIs, boolean countInstances) 
     218                        throws Exception { 
     219 
     220                // TODO 
    272221                return null; 
    273222        } 
    274223 
    275          
    276          
    277224        /** 
    278225         * 縲€繧、繝ウ繧ケ繧ソ繝ウ繧ケ繧貞叙蠕励☆繧� 
     
    368315        public ClassLink[] getNextClass(String[] graphURIs, String originClass, 
    369316                        int limit, boolean countLinks) throws Exception { 
    370                 ClassLink[] cLinks = getNextClassSub(graphURIs, originClass, limit, false); 
    371                 if( countLinks ){ 
     317                ClassLink[] cLinks = getNextClassSub(graphURIs, originClass, limit, 
     318                                false); 
     319                if (countLinks) { 
    372320                        cLinks = countLinks(graphURIs, originClass, cLinks); 
    373321                } 
     
    375323        } 
    376324 
    377         private ClassLink[] getNextClassSub(String[] graphURIs, String originClass,  
     325        private ClassLink[] getNextClassSub(String[] graphURIs, String originClass, 
    378326                        int limit, boolean countLinks) throws Exception { 
    379                                 StringBuffer queryStr = new StringBuffer(); 
     327                StringBuffer queryStr = new StringBuffer(); 
    380328                queryStr.append("PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"); 
    381329                queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); 
     
    434382                queryStr.append("    ?p ?pDirection ?c.\n"); 
    435383 
    436 //              queryStr.append("  ?s rdf:type ?c.\n"); 
     384                // queryStr.append("  ?s rdf:type ?c.\n"); 
    437385 
    438386                if (countLinks) { 
     
    452400                Query query = QueryFactory.create(queryStr.toString()); 
    453401                QueryExecution qexec = null; 
    454                 try{ 
    455                         qexec = QueryExecutionFactory.sparqlService(endpointURI, 
    456                                 query); 
    457                 }catch(Exception ex){ 
     402                try { 
     403                        qexec = QueryExecutionFactory.sparqlService(endpointURI, query); 
     404                } catch (Exception ex) { 
    458405                        ex.printStackTrace(); 
    459406                        throw ex; 
    460407                } 
    461                          
     408 
    462409                ResultSet results = null; 
    463                 try{ 
     410                try { 
    464411                        long start = System.currentTimeMillis(); 
    465412                        results = qexec.execSelect(); 
    466413                        long end = System.currentTimeMillis(); 
    467                         System.out.println("EXEC TIME: " + (end-start)); 
    468                 }catch(Exception ex){ 
     414                        System.out.println("EXEC TIME: " + (end - start)); 
     415                } catch (Exception ex) { 
    469416                        ex.printStackTrace(); 
    470417                        throw ex; 
    471418                } 
    472                          
     419 
    473420                ArrayList<ClassLink> solCLs = new ArrayList<ClassLink>(); 
    474421                for (; results.hasNext();) { 
     
    505452                                } 
    506453                                ClassLink cl = new ClassLink(proURI, clsURI, direction, 
    507                                                 numOfLinks, 0, 0, 0, 0 ); 
     454                                                numOfLinks, 0, 0, 0, 0); 
    508455                                solCLs.add(cl); 
    509456                        } 
     
    559506                } 
    560507 
    561 System.out.println(queryStr.toString()); 
     508                System.out.println(queryStr.toString()); 
    562509 
    563510                Query query = QueryFactory.create(queryStr.toString()); 
     
    566513 
    567514                ResultSet results = null; 
    568                 try{ 
     515                try { 
    569516                        long start = System.currentTimeMillis(); 
    570517                        results = qexec.execSelect(); 
    571518                        long end = System.currentTimeMillis(); 
    572                         System.out.println("EXEC TIME: " + (end-start)); 
    573                 }catch(Exception ex){ 
     519                        System.out.println("EXEC TIME: " + (end - start)); 
     520                } catch (Exception ex) { 
    574521                        ex.printStackTrace(); 
    575522                        throw ex; 
     
    591538                                        numOfLinks = sol.getLiteral("numOfForwardLinks").getInt(); 
    592539                                        numOfLinks += sol.getLiteral("numOfReverseLinks").getInt(); 
    593                                         numOfLinkedInstances = sol.getLiteral("numOfLinkedInstances").getInt(); 
    594                                         numOfOriginInstances = sol.getLiteral("numOfOriginInstances").getInt(); 
     540                                        numOfLinkedInstances = sol.getLiteral( 
     541                                                        "numOfLinkedInstances").getInt(); 
     542                                        numOfOriginInstances = sol.getLiteral( 
     543                                                        "numOfOriginInstances").getInt(); 
    595544                                        direction = Direction.both; 
    596545                                } else { 
    597                                         numOfLinkedInstances = sol.getLiteral("numOfLinkedInstances").getInt(); 
    598                                         numOfOriginInstances = sol.getLiteral("numOfOriginInstances").getInt(); 
     546                                        numOfLinkedInstances = sol.getLiteral( 
     547                                                        "numOfLinkedInstances").getInt(); 
     548                                        numOfOriginInstances = sol.getLiteral( 
     549                                                        "numOfOriginInstances").getInt(); 
    599550                                        numOfLinks = sol.getLiteral("numOfForwardLinks").getInt(); 
    600551                                        direction = Direction.forward; 
     
    604555                                direction = Direction.reverse; 
    605556                                propURI = proReverse.getURI(); 
    606                                 numOfLinkedInstances = sol.getLiteral("numOfOriginInstances").getInt(); 
    607                                 numOfOriginInstances = sol.getLiteral("numOfLinkedInstances").getInt(); 
     557                                numOfLinkedInstances = sol.getLiteral("numOfOriginInstances") 
     558                                                .getInt(); 
     559                                numOfOriginInstances = sol.getLiteral("numOfLinkedInstances") 
     560                                                .getInt(); 
    608561                                numOfLinks = sol.getLiteral("numOfReverseLinks").getInt(); 
    609562                        } 
     
    611564                        // System.out.println(propURI + " " + clsURI + " " + direction); 
    612565 
    613                         ClassLink cl = new ClassLink(propURI, clsURI, direction, numOfLinks, numOfOriginInstances, numOfLinkedInstances, 0, 0); 
     566                        ClassLink cl = new ClassLink(propURI, clsURI, direction, 
     567                                        numOfLinks, numOfOriginInstances, numOfLinkedInstances, 0, 
     568                                        0); 
    614569                        solCLs.add(cl); 
    615570                } 
     
    889844                                if (lit != null) { 
    890845                                        int numOfOriginClassInstances = lit.getInt(); 
    891                                         classLink.setNumOfOriginClassInstances(numOfOriginClassInstances); 
     846                                        classLink 
     847                                                        .setNumOfOriginClassInstances(numOfOriginClassInstances); 
    892848                                } 
    893849                                lit = sol.getLiteral("numOfLinkedClassInstances"); 
    894850                                if (lit != null) { 
    895851                                        int numOfLinkedClassInstances = lit.getInt(); 
    896                                         classLink.setNumOfLinkedClassInstances(numOfLinkedClassInstances); 
     852                                        classLink 
     853                                                        .setNumOfLinkedClassInstances(numOfLinkedClassInstances); 
    897854                                } 
    898855                        } 
     
    933890                                } 
    934891                        } 
    935          
     892 
    936893                        System.out.println(queryStr.toString()); 
    937894 
    938895                        query = QueryFactory.create(queryStr.toString()); 
    939                         qexec = QueryExecutionFactory.sparqlService( 
    940                                         endpointURI, query); 
     896                        qexec = QueryExecutionFactory.sparqlService(endpointURI, query); 
    941897 
    942898                        results = qexec.execSelect(); 
     
    947903                                if (lit != null) { 
    948904                                        int numOfOriginClassInstances = lit.getInt(); 
    949                                         classLink.setNumOfOriginClassInstances(numOfOriginClassInstances); 
     905                                        classLink 
     906                                                        .setNumOfOriginClassInstances(numOfOriginClassInstances); 
    950907                                } 
    951908                        } 
     
    986943                                } 
    987944                        } 
    988          
     945 
    989946                        System.out.println(queryStr.toString()); 
    990947 
    991948                        query = QueryFactory.create(queryStr.toString()); 
    992                         qexec = QueryExecutionFactory.sparqlService( 
    993                                         endpointURI, query); 
     949                        qexec = QueryExecutionFactory.sparqlService(endpointURI, query); 
    994950 
    995951                        results = qexec.execSelect(); 
     
    1000956                                if (lit != null) { 
    1001957                                        int numOfLinkedClassInstances = lit.getInt(); 
    1002                                         classLink.setNumOfLinkedClassInstances(numOfLinkedClassInstances); 
     958                                        classLink 
     959                                                        .setNumOfLinkedClassInstances(numOfLinkedClassInstances); 
    1003960                                } 
    1004961                        } 
    1005962                        qexec.close(); 
    1006                          
     963 
    1007964                } 
    1008965                return classLinks; 
    1009966        } 
    1010967 
    1011          
    1012968        public SClass[] countInstances(String[] graphURIs, SClass[] classes) 
    1013969                        throws Exception {