チェンジセット 58 : BH13SPARQLBuilder/src/org/biohackathon

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

keywords のOR relationship 実装しました

ファイル:
1 変更

凡例:

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

    r57 r58  
    5555                String sparqlEndpoint = "http://lsd.dbcls.jp/sparql"; 
    5656                // String keyword = "artiste"; 
    57                 String keyword = "EnglishCode"; 
     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  
     63       
     64                builder.getOWLClasses(null,keyword,false); 
    6465/* 
    6566                SClass[] clz = builder.getOWLClasses(graphURIs, keyword, false); 
     
    7475 
    7576 
    76                 System.out.println("CLS"); 
     77        /*      System.out.println("CLS"); 
    7778 
    7879                String uri = "http://purl.jp/bio/10/lsd/ontology/201209#EnglishEntry"; 
     
    9596                        } 
    9697                } 
    97  
     98*/ 
    9899/* 
    99100                 
     
    176177//              queryStr.append("  ?i rdf:type ?c.\n"); 
    177178 
    178  
    179                  
     179         
    180180                if (countInstances) { 
    181181                        queryStr.append("  ?c rdfs:label ?label.\n"); 
     
    188188                // queryStr.append(keyword); 
    189189                // queryStr.append("."); 
     190                 
     191                // TODO  OR relationship between keywords 
    190192                if (keywords != null && keywords.length != 0) { 
     193                                                                          
     194                        queryStr.append(" ?c rdfs:label "); 
     195                    queryStr.append("?keywords") 
     196                                 .append(".\n"); 
     197                        queryStr.append("  filter(");  
    191198                         
    192                         // TODO 
    193  
     199                          for (int i=0;i<keywords.length;i++) 
     200                          { 
     201                        if (i>0) queryStr.append(" or \n "); 
    194202                         
    195 //                      queryStr.append("  FILTER (\n"); 
    196 //                      queryStr.append("    REGEX( ?label , \""); 
    197 //                      queryStr.append(keyword); 
    198 //                      queryStr.append("\" , \"i\" )\n"); 
    199 //                      queryStr.append("  )\n"); 
    200  
     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                } 
    201213                 
    202                 } 
    203214                if (countInstances) { 
    204215                        queryStr.append("}  GROUP BY ?c ?pLabel"); 
     
    207218                } 
    208219                System.out.println(queryStr.toString()); 
    209  
    210                 Query query = QueryFactory.create(queryStr.toString()); 
     220                 
     221                 
     222        /*      Query query = QueryFactory.create(queryStr.toString()); 
    211223 
    212224                 
     
    251263                } 
    252264                qexec.close(); 
    253                 return classMap.values().toArray(new SClass[0]); 
     265                return classMap.values().toArray(new SClass[0]);*/ 
     266                return null; 
    254267        } 
    255268 
    256269        public SClass[] listClasses(String[] graphURIs, boolean countInstances) throws Exception{ 
    257                 StringBuffer queryStr = new StringBuffer(); 
    258                 queryStr.append("PREFIX owl: <http://www.w3.org/2002/07/owl#>\n"); 
    259                 queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); 
    260                 queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); 
    261                 if (countInstances) { 
    262                         queryStr.append("SELECT DISTINCT ?cls ?pLabel (COUNT(?i) AS ?numOfInstances)\n"); 
    263                 } else { 
    264                         queryStr.append("SELECT DISTINCT ?cls ?pLabel \n"); 
    265                 } 
    266  
    267                 if (graphURIs != null) { 
    268                         for (String graphURI : graphURIs) { 
    269                                 queryStr.append("FROM <"); 
    270                                 queryStr.append(graphURI); 
    271                                 queryStr.append(">\n"); 
    272                         } 
    273                 } 
    274                 queryStr.append("WHERE{\n"); 
    275                 queryStr.append("\t{ ?cls rdf:type rdfs:Class. }\n"); 
    276                 queryStr.append("\tUNION\n"); 
    277                 queryStr.append("\t{ ?cls rdf:type owl:Class. }\n"); 
    278                 queryStr.append("\tUNION\n"); 
    279                 queryStr.append("\t{ [] rdfs:type ?cls. }\n"); 
    280                 queryStr.append("\tUNION\n"); 
    281                 queryStr.append("\t{ [] rdfs:domain ?cls. }\n"); 
    282                 queryStr.append("\tUNION\n"); 
    283                 queryStr.append("\t{ [] rdfs:range ?cls. }\n"); 
    284                 queryStr.append("\tUNION\n"); 
    285                 queryStr.append("\t{ ?cls rdfs:subclassOf []. }\n"); 
    286                 queryStr.append("\t?cls rdfs:label ?pLabel.\n"); 
    287                 if (countInstances) { 
    288                         queryStr.append("\t?i rdf:type ?c.\n"); 
    289                 } 
    290                 if (countInstances) { 
    291                         queryStr.append("}  GROUP BY ?c ?pLabel"); 
    292                 } else { 
    293                         queryStr.append("}"); 
    294                 } 
    295                 System.out.println(queryStr.toString()); 
    296  
    297                 Query query = QueryFactory.create(queryStr.toString()); 
    298  
    299                  
    300                 QueryExecution qexec = null; 
    301                 try{ 
    302                         long start = System.currentTimeMillis(); 
    303                         qexec = QueryExecutionFactory.sparqlService(endpointURI, 
    304                                         query); 
    305                         long end = System.currentTimeMillis(); 
    306                         System.out.println("EXEC TIME: " + (end-start)); 
    307                 }catch(Exception ex){ 
    308                         ex.printStackTrace(); 
    309                         throw ex; 
    310                 } 
    311  
    312                 ResultSet results = qexec.execSelect(); 
    313                 HashMap<String, SClass> classMap = new HashMap<String, SClass>(); 
    314                 for (; results.hasNext();) { 
    315                         QuerySolution sol = results.next(); 
    316                         Resource res = sol.getResource("c"); 
    317                         if (res != null) { 
    318                                 String uri = res.getURI(); 
    319                                 int numOfInstances = 0; 
    320                                 if (countInstances) { 
    321                                         numOfInstances = sol.getLiteral("numOfInstances").getInt(); 
    322                                 } 
    323                                 // System.out.println(numOfInstances); 
    324                                 Literal labelLiteral = sol.getLiteral("pLabel"); 
    325                                 SClass sClass = null; 
    326                                 if (classMap.containsKey(uri)) { 
    327                                         sClass = classMap.get(uri); 
    328                                 } else { 
    329                                         sClass = new SClass(uri, null, numOfInstances); 
    330                                         classMap.put(uri, sClass); 
    331                                 } 
    332                                 if (labelLiteral != null) { 
    333                                         String label = labelLiteral.getString(); 
    334                                         String lang = labelLiteral.getLanguage(); 
    335                                         sClass.addLabel(new Label(label, lang)); 
    336                                 } 
    337                         } 
    338                 } 
    339                 qexec.close(); 
    340                 return classMap.values().toArray(new SClass[0]); 
     270 
     271                //TODO  
     272                return null; 
    341273        } 
    342274