チェンジセット 136 : SPARQLBuilderWWW/src/java/org

差分発生行の前後
無視リスト:
更新日時:
2014/08/18 19:01:10 (10 年 前)
更新者:
wu
ログメッセージ:

SPServlet basic functions finished

ファイル:
1 変更

凡例:

変更なし
追加
削除
  • SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java

    r132 r136  
    99import java.io.IOException; 
    1010import java.io.PrintWriter; 
     11import java.util.Iterator; 
     12import java.util.List; 
     13import java.util.logging.Level; 
     14import java.util.logging.Logger; 
    1115import javax.servlet.ServletException; 
    1216import javax.servlet.annotation.WebServlet; 
     
    1519import javax.servlet.http.HttpServletResponse; 
    1620import org.biohackathon.SPARQLBuilder.OWL.*; 
     21import org.json.JSONArray; 
     22import org.json.JSONException; 
     23import org.json.JSONObject; 
     24 
     25//import javax.json.Json; 
    1726 
    1827/** 
     
    6978        PrintWriter out = response.getWriter(); 
    7079        String jpath = request.getParameter("jsonpath"); 
    71         Path path = convertJ2Path(jpath); 
    72         String query = convertPath2SPARQL(path); 
     80        Path path = null; 
     81        try { 
     82            path = convertJ2Path(jpath); 
     83        } catch (JSONException ex) { 
     84            Logger.getLogger(SPServlet.class.getName()).log(Level.SEVERE, null, ex); 
     85        } 
     86        String query = null; 
     87        try { 
     88            query = convertPath2SPARQL(path); 
     89        } catch (Exception ex) { 
     90            Logger.getLogger(SPServlet.class.getName()).log(Level.SEVERE, null, ex); 
     91        } 
    7392        out.print(query); 
    7493    } 
     
    100119    }// </editor-fold> 
    101120 
    102     private Path convertJ2Path(String jpath){ 
    103         return null; 
    104     } 
     121    private Path convertJ2Path(String jpath) throws JSONException{ 
     122   
     123       JSONObject object = new JSONObject(jpath); 
     124       String startClass = object.getJSONObject("startClassURI").toString(); 
     125       int width = Integer.parseInt(object.getJSONObject("width").toString()); 
     126       JSONArray classLinks = object.getJSONArray("classLinks"); 
     127        JSONObject jsonObject; 
     128        List <ClassLink> list = null; 
     129        
     130          for (int i=0;i<classLinks.length();i++)  
     131            { 
     132            jsonObject = classLinks.getJSONObject(i);   
     133            String propertyURI = jsonObject.getJSONObject("propertyURI").toString(); 
     134            String linkedClassURI = jsonObject.getJSONObject("linkedClassURI").toString();  
     135             String linkedLiteralDatatypeURI = jsonObject.getJSONObject("linkedLiteralDatatypeURI").toString();  
     136            int numOfLinks = Integer.parseInt(jsonObject.getJSONObject("numOfLinks").toString()); 
     137            int numOfLinkedInstances = Integer.parseInt(jsonObject.getJSONObject("numOfLinkedInstances").toString());  
     138            int numOfOriginInstances = Integer.parseInt(jsonObject.getJSONObject("numOfOriginInstances").toString()); 
     139            int numOfOriginClassInstances = Integer.parseInt(jsonObject.getJSONObject("numOfOriginInstances").toString());             
     140            int numOfLinkedClassInstances = Integer.parseInt(jsonObject.getJSONObject("numOfLinkedClassInstances").toString());  
     141             
     142            ClassLink classLink =new ClassLink(propertyURI, linkedClassURI, linkedLiteralDatatypeURI, null,  
     143                                 numOfLinks,  numOfOriginInstances,  numOfLinkedInstances, 
     144                                 numOfOriginClassInstances,  numOfLinkedClassInstances, 
     145                                false, false); 
     146           list.add(classLink); 
     147           } 
     148          Path path = new Path(startClass,  list,  width); 
     149          return path; 
     150    } 
     151   
     152    private String convertPath2SPARQL(Path path) throws Exception{ 
     153        if( path == null ){ 
     154                        throw new Exception("Path is null."); 
     155                } 
     156                String startClass = path.getStartClass(); 
     157                List<ClassLink> classLinks = path.getClassLinks(); 
     158                 
     159                StringBuffer queryStr = new StringBuffer(); 
     160                StringBuffer selStr = new StringBuffer(); 
     161                StringBuffer whereStr = new StringBuffer(); 
     162        //      if(num==0){ 
     163                        int num = classLinks.size(); 
     164        //      } 
     165                         
     166                queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"); 
     167                queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"); 
     168                                 
     169                selStr.append("SELECT "); 
     170                whereStr.append("WHERE { \n"); 
     171 
     172                String properties = null; 
     173                String objectClasses = null; 
     174                String subjectClasses = null; 
     175                Direction direction = null; 
     176                int i = 0; 
     177                int k = 0; 
     178                for (ClassLink link :classLinks ) 
     179                { 
     180                        properties = link.getPropertyURI(); 
     181                        objectClasses = link.getLinkedClassURI(); 
     182                        direction = link.getDirection(); 
     183                         
     184                        if (i==0) 
     185                    subjectClasses = startClass; 
     186                         
     187                        selStr.append("?c").append(i).append(" "); 
     188                        selStr.append("?l").append(i).append(" "); 
     189                         
     190                        if(i == classLinks.size()) 
     191                                selStr.append("\n"); 
     192                         
     193                         
     194                        whereStr.append("?c").append(i). 
     195                        append(" rdf:type "). 
     196                        append("<"). 
     197                        append(subjectClasses). 
     198                        append(">"). 
     199                        append(".\n"); 
     200                         
     201                        whereStr.append("OPTIONAL{\n?c"+i+" rdfs:label ?l"+i+".}\n"); 
     202 
     203                                                 
     204                        if(direction == Direction.forward) 
     205                        { 
     206                        whereStr.append("?c").append(i).append(" "); 
     207                        whereStr.append("<").append(properties).append("> ");                    
     208                        whereStr.append("?c").append(i+1).append(".\n");                         
     209                        } 
     210                        else 
     211                        { 
     212                                whereStr.append("?c").append(i+1).append(" "); 
     213                                whereStr.append("<").append(properties).append("> "); 
     214                                whereStr.append("?c").append(i).append(".\n"); 
     215                        } 
     216                         
     217                        subjectClasses = objectClasses; 
     218                        i++; 
     219                        k++; 
     220                        if(k>=num){ 
     221                                break; 
     222                        } 
     223                } 
     224                 
     225                selStr.append("?c").append(i).append(" \n"); 
     226                selStr.append("?l").append(i).append(" \n"); 
     227                whereStr.append("?c").append(i).append(" rdf:type "). 
     228                    append("<"). 
     229                    append(subjectClasses). 
     230                    append(">"). 
     231                        append(".\n"); 
     232                whereStr.append("OPTIONAL{\n?c"+i+" rdfs:label ?l"+i+".}\n"); 
     233         
     234                                         
     235                queryStr.append(selStr).append(whereStr); 
     236                 
     237                queryStr.append("}"); 
     238                //OPTIONAL 
     239                queryStr.append("LIMIT 100\n");; 
     240                 
     241                //System.out.println(queryStr); 
     242                return queryStr.toString(); 
     243         
    105244     
    106     private String convertPath2SPARQL(Path path){ 
    107         return null; 
    108245    } 
    109246}