root/SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/www/SPServlet.java @ 162

リビジョン 153, 11.7 KB (コミッタ: wu, 10 年 前)

merge version 144 and 136

行番号 
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6
7package org.biohackathon.SPARQLBuilder.www;
8
9import java.io.IOException;
10import java.io.PrintWriter;
11import java.util.Arrays;
12import java.util.Iterator;
13import java.util.List;
14import java.util.logging.Level;
15import java.util.logging.Logger;
16import javax.servlet.ServletException;
17import javax.servlet.annotation.WebServlet;
18import javax.servlet.http.HttpServlet;
19import javax.servlet.http.HttpServletRequest;
20import javax.servlet.http.HttpServletResponse;
21import org.biohackathon.SPARQLBuilder.OWL.*;
22import org.json.JSONArray;
23import org.json.JSONException;
24import org.json.JSONObject;
25
26//import javax.json.Json;
27
28/**
29 *
30 * @author atsuko
31 */
32@WebServlet(name = "SPServlet", urlPatterns = {"/sparql"})
33public class SPServlet extends HttpServlet {
34
35    /**
36     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
37     * methods.
38     *
39     * @param request servlet request
40     * @param response servlet response
41     * @throws ServletException if a servlet-specific error occurs
42     * @throws IOException if an I/O error occurs
43     */
44    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
45            throws ServletException, IOException {
46        response.setContentType("text/html;charset=UTF-8");
47        try (PrintWriter out = response.getWriter()) {
48            /* TODO output your page here. You may use following sample code. */
49            out.println("<!DOCTYPE html>");
50            out.println("<html>");
51            out.println("<head>");
52            out.println("<title>Servlet SPServlet</title>");           
53            out.println("</head>");
54            out.println("<body>");
55            out.println("<h1>Servlet SPServlet at " + request.getContextPath() + "</h1>");
56            out.println("</body>");
57            out.println("</html>");
58        }
59    }
60
61    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
62    /**
63     * Handles the HTTP <code>GET</code> method.
64     *
65     * @param request servlet request
66     * @param response servlet response
67     * @throws ServletException if a servlet-specific error occurs
68     * @throws IOException if an I/O error occurs
69     */
70    @Override
71/*    protected void doGet(HttpServletRequest request, HttpServletResponse response)
72            throws ServletException, IOException {
73        processRequest(request, response);
74    }*/
75        protected void doGet(HttpServletRequest request, HttpServletResponse response)
76            throws ServletException, IOException {
77        //processRequest(request, response);
78        response.setContentType("application/json;charset=UTF-8");
79        PrintWriter out = response.getWriter();
80        String jpath = request.getParameter("jsonpath");
81        Path path = null;
82        try {
83            path = convertJ2Path(jpath);
84        } catch (JSONException ex) {
85            Logger.getLogger(SPServlet.class.getName()).log(Level.SEVERE, null, ex);
86        }
87        String query = null;
88        try {
89           query = convertPath2SPARQL(path);
90        } catch (Exception ex) {
91            Logger.getLogger(SPServlet.class.getName()).log(Level.SEVERE, null, ex);
92        }
93        out.print(query);
94    }
95
96   
97
98    /**
99     * Handles the HTTP <code>POST</code> method.
100     *
101     * @param request servlet request
102     * @param response servlet response
103     * @throws ServletException if a servlet-specific error occurs
104     * @throws IOException if an I/O error occurs
105     */
106    @Override
107    protected void doPost(HttpServletRequest request, HttpServletResponse response)
108            throws ServletException, IOException {
109        processRequest(request, response);
110    }
111
112    /**
113     * Returns a short description of the servlet.
114     *
115     * @return a String containing servlet description
116     */
117    @Override
118    public String getServletInfo() {
119        return "Short description";
120    }// </editor-fold>
121
122    private Path convertJ2Path(String jpath) throws JSONException{
123 
124       JSONObject object = new JSONObject(jpath);
125       String startClass = object.getJSONObject("startClassURI").toString();
126       int width = Integer.parseInt(object.getJSONObject("width").toString());
127       JSONArray classLinks = object.getJSONArray("classLinks");
128        JSONObject jsonObject;
129        List <ClassLink> list = null;
130       
131       for (int i=0;i<classLinks.length();i++)
132       {
133            jsonObject = classLinks.getJSONObject(i); 
134            String propertyURI = jsonObject.getJSONObject("propertyURI").toString();
135            String linkedClassURI = jsonObject.getJSONObject("linkedClassURI").toString();
136             String linkedLiteralDatatypeURI = jsonObject.getJSONObject("linkedLiteralDatatypeURI").toString();
137            int numOfLinks = Integer.parseInt(jsonObject.getJSONObject("numOfLinks").toString());
138            int numOfLinkedInstances = Integer.parseInt(jsonObject.getJSONObject("numOfLinkedInstances").toString());
139            int numOfOriginInstances = Integer.parseInt(jsonObject.getJSONObject("numOfOriginInstances").toString());
140            int numOfOriginClassInstances = Integer.parseInt(jsonObject.getJSONObject("numOfOriginInstances").toString());           
141            int numOfLinkedClassInstances = Integer.parseInt(jsonObject.getJSONObject("numOfLinkedClassInstances").toString());
142             
143            ClassLink classLink =new ClassLink(propertyURI, linkedClassURI, linkedLiteralDatatypeURI, null,
144                                 numOfLinks,  numOfOriginInstances,  numOfLinkedInstances,
145                                 numOfOriginClassInstances,  numOfLinkedClassInstances,
146                                false, false);
147           list.add(classLink);
148    }
149          Path path = new Path(startClass,  list,  width);
150          return path;
151    }
152   
153    private String convertPath2SPARQL(Path path) throws Exception{
154        if( path == null ){
155                        throw new Exception("Path is null.");
156                }
157                String startClass = path.getStartClass();
158                List<ClassLink> classLinks = path.getClassLinks();
159       
160                StringBuffer queryStr = new StringBuffer();
161                StringBuffer selStr = new StringBuffer();
162                StringBuffer whereStr = new StringBuffer();
163        //      if(num==0){
164                        int num = classLinks.size();
165        //      }
166                       
167                queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n");
168                queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
169                               
170                selStr.append("SELECT ");
171                whereStr.append("WHERE { \n");
172
173                String properties = null;
174                String objectClasses = null;
175                String subjectClasses = null;
176                Direction direction = null;
177                int i = 0;
178                int k = 0;
179                for (ClassLink link :classLinks )
180                {
181                        properties = link.getPropertyURI();
182                        objectClasses = link.getLinkedClassURI();
183                        direction = link.getDirection();
184                       
185                        if (i==0)
186                    subjectClasses = startClass;
187                       
188                        selStr.append("?c").append(i).append(" ");
189                        selStr.append("?l").append(i).append(" ");
190                       
191                        if(i == classLinks.size())
192                                selStr.append("\n");
193                       
194                       
195                        whereStr.append("?c").append(i).
196                        append(" rdf:type ").
197                        append("<").
198                        append(subjectClasses).
199                        append(">").
200                        append(".\n");
201                       
202                        whereStr.append("OPTIONAL{\n?c"+i+" rdfs:label ?l"+i+".}\n");
203
204                                               
205                        if(direction == Direction.forward)
206                        {
207                        whereStr.append("?c").append(i).append(" ");
208                        whereStr.append("<").append(properties).append("> ");                   
209                        whereStr.append("?c").append(i+1).append(".\n");                       
210                        }
211                        else
212                        {
213                                whereStr.append("?c").append(i+1).append(" ");
214                                whereStr.append("<").append(properties).append("> ");
215                                whereStr.append("?c").append(i).append(".\n");
216                        }
217                       
218                        subjectClasses = objectClasses;
219                        i++;
220                        k++;
221                        if(k>=num){
222                                break;
223                        }
224                }
225               
226                selStr.append("?c").append(i).append(" \n");
227                selStr.append("?l").append(i).append(" \n");
228                whereStr.append("?c").append(i).append(" rdf:type ").
229                    append("<").
230                    append(subjectClasses).
231                    append(">").
232                        append(".\n");
233                whereStr.append("OPTIONAL{\n?c"+i+" rdfs:label ?l"+i+".}\n");
234       
235                                       
236                queryStr.append(selStr).append(whereStr);
237               
238                queryStr.append("}");
239                //OPTIONAL
240                queryStr.append("LIMIT 100\n");;
241               
242                //System.out.println(queryStr);
243                return queryStr.toString();
244       
245   
246    }
247        private static List<String> convertJ2Path2(String jpath) throws JSONException{
248         List <String> list = null;
249           String temp =(String) jpath.subSequence(2, jpath.length()-2);
250      //  if (temp.contains(",""))
251             list =Arrays.asList(temp.split("\",\""));
252             return list;
253 
254     /*  JSONArray classLinks=new JSONArray(jpath);
255       String string;
256       
257       for (int i=0;i<classLinks.length();i++)
258       {
259            string = classLinks.getJSONObject(i).toString();
260            if (string.contains(",")) {
261             list =Arrays.asList(string.split(","));
262             
263       } else
264          throw new IllegalArgumentException("path error");
265               
266         }*/
267       
268       //   return list;   
269    }
270   
271    private static String convertPath2SPARQL2(List<String> path) throws Exception{
272        if( path == null ){
273                        throw new Exception("Path is null.");
274                }
275       
276                             
277                //List<String> classLinks = path.getClassLinks();
278               
279                StringBuffer queryStr = new StringBuffer();
280                StringBuffer selStr = new StringBuffer();
281                StringBuffer whereStr = new StringBuffer();
282        //      if(num==0){
283                //      int num = classLinks.size();
284        //      }
285                       
286                queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n");
287                queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
288                               
289                selStr.append("SELECT ");
290                whereStr.append("WHERE { \n");
291
292                String properties = null;
293                String objectClasses = null;
294                String subjectClasses = null;
295                Direction direction = null;
296                int i = 0;
297                int k = 0;
298               
299                String startClass = path.get(path.size()-1);
300                List<String> classLinks = null;
301         //      ArrayList<String> array= (String[])path.toArray();
302             
303            //    classLinks.add(path.get(i));
304               
305                int num =(path.size()-1)/2;
306               
307                 for(int j=path.size()-2;j>0;j=j-2)
308                {
309                //      properties = link.getPropertyURI();
310                //      objectClasses = link.getLinkedClassURI();
311                //      direction = link.getDirection();
312                   properties =  path.get(j);
313                   objectClasses = path.get(j-1);
314                   direction = Direction.forward;
315                       
316                        if (i==0)
317                    subjectClasses = startClass;
318                       
319                        selStr.append("?c").append(i).append(" ");
320                        selStr.append("?l").append(i).append(" ");
321                       
322                //      if(i == path.size())
323                //              selStr.append("\n");
324                       
325                       
326                        whereStr.append("?c").append(i).
327                        append(" rdf:type ").
328                        append("<").
329                        append(subjectClasses).
330                        append(">").
331                        append(".\n");
332                       
333                        whereStr.append("OPTIONAL{\n?c"+i+" rdfs:label ?l"+i+".}\n");
334
335                                               
336                        if(direction == Direction.forward)
337                        {
338                        whereStr.append("?c").append(i).append(" ");
339                        whereStr.append("<").append(properties).append("> ");                   
340                        whereStr.append("?c").append(i+1).append(".\n");                       
341                        }
342                        else
343                        {
344                                whereStr.append("?c").append(i+1).append(" ");
345                                whereStr.append("<").append(properties).append("> ");
346                                whereStr.append("?c").append(i).append(".\n");
347                        }
348                       
349                        subjectClasses = objectClasses;
350                        i++;
351                        k++;
352                        if(k>=num){
353                                break;
354                        }
355                }
356               
357                selStr.append("?c").append(i).append(" \n");
358                selStr.append("?l").append(i).append(" \n");
359                whereStr.append("?c").append(i).append(" rdf:type ").
360                    append("<").
361                    append(subjectClasses).
362                    append(">").
363                        append(".\n");
364                whereStr.append("OPTIONAL{\n?c"+i+" rdfs:label ?l"+i+".}\n");
365       
366                                       
367                queryStr.append(selStr).append(whereStr);
368               
369                queryStr.append("}");
370                //OPTIONAL
371                queryStr.append("LIMIT 100\n");;
372               
373                System.out.println(queryStr);
374                return queryStr.toString();
375       
376   
377    }
378   
379}
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。