Strabon

changeset 97:369029414139

merge
author George Garbis <ggarbis@di.uoa.gr>
date Thu Apr 05 12:58:20 2012 +0300 (2012-04-05)
parents 00cdb7b244b4 1ab50d5a58c4
children b22762ef9795
files
line diff
     1.1 --- a/endpoint/WebContent/WEB-INF/web.xml	Thu Apr 05 12:56:46 2012 +0300
     1.2 +++ b/endpoint/WebContent/WEB-INF/web.xml	Thu Apr 05 12:58:20 2012 +0300
     1.3 @@ -33,6 +33,17 @@
     1.4  		<url-pattern>/Store</url-pattern>
     1.5  	</servlet-mapping>
     1.6  	
     1.7 +	<servlet>
     1.8 +		<display-name>Update</display-name>
     1.9 +		<servlet-name>Update</servlet-name>
    1.10 +		<servlet-class>eu.earthobservatory.org.StrabonEndpoint.UpdateBean</servlet-class>
    1.11 +		<load-on-startup>1</load-on-startup>
    1.12 +	</servlet>
    1.13 +	<servlet-mapping>
    1.14 +		<servlet-name>Update</servlet-name>
    1.15 +		<url-pattern>/Update</url-pattern>
    1.16 +	</servlet-mapping>
    1.17 +		
    1.18  <!-- 	<servlet> -->
    1.19  <!-- 		<display-name>QueryServlet</display-name> -->
    1.20  <!-- 		<servlet-name>QueryServlet</servlet-name> -->
     2.1 --- a/endpoint/src/main/java/eu/earthobservatory/org/StrabonEndpoint/QueryBean.java	Thu Apr 05 12:56:46 2012 +0300
     2.2 +++ b/endpoint/src/main/java/eu/earthobservatory/org/StrabonEndpoint/QueryBean.java	Thu Apr 05 12:58:20 2012 +0300
     2.3 @@ -6,7 +6,6 @@
     2.4  import java.io.IOException;
     2.5  import java.io.PrintWriter;
     2.6  import java.math.BigInteger;
     2.7 -import java.net.InetAddress;
     2.8  import java.security.SecureRandom;
     2.9  import java.util.Date;
    2.10  import java.util.Iterator;
    2.11 @@ -18,11 +17,6 @@
    2.12  import javax.servlet.http.HttpServletRequest;
    2.13  import javax.servlet.http.HttpServletResponse;
    2.14  
    2.15 -import org.apache.commons.httpclient.HttpClient;
    2.16 -import org.apache.commons.httpclient.HttpException;
    2.17 -import org.apache.commons.httpclient.HttpMethod;
    2.18 -import org.apache.commons.httpclient.NameValuePair;
    2.19 -import org.apache.commons.httpclient.methods.GetMethod;
    2.20  import org.apache.commons.io.FileUtils;
    2.21  import org.openrdf.query.MalformedQueryException;
    2.22  import org.openrdf.query.QueryEvaluationException;
    2.23 @@ -36,7 +30,8 @@
    2.24  	
    2.25  	private static final long serialVersionUID = -378175118289907707L;
    2.26  	
    2.27 -	public QueryBean() {}
    2.28 +	private ServletContext context; 
    2.29 +	private StrabonBeanWrapper strabonWrapper;
    2.30  	
    2.31  	public void doGet(HttpServletRequest request, HttpServletResponse response)
    2.32  	throws ServletException, IOException
    2.33 @@ -58,28 +53,6 @@
    2.34  				this.errorMessage = null;				
    2.35  			}
    2.36  			
    2.37 -			public String getTinyURL(String fullURL){
    2.38 -				String tinyUrl = null;
    2.39 -				
    2.40 -				try {
    2.41 -					HttpClient httpclient = new HttpClient();
    2.42 -					HttpMethod method = new GetMethod("http://tinyurl.com/api-create.php"); 
    2.43 -					method.setQueryString(new NameValuePair[]{new NameValuePair("url",fullURL)});
    2.44 -					httpclient.executeMethod(method);
    2.45 -					tinyUrl = method.getResponseBodyAsString();
    2.46 -					method.releaseConnection();
    2.47 -					
    2.48 -				} catch (HttpException e) {
    2.49 -					// TODO Auto-generated catch block
    2.50 -					e.printStackTrace();
    2.51 -				} catch (IOException e) {
    2.52 -					// TODO Auto-generated catch block
    2.53 -					e.printStackTrace();
    2.54 -				}
    2.55 -				
    2.56 -				return tinyUrl;
    2.57 -			}
    2.58 -			
    2.59  			public String getSPARQLQuery() {
    2.60  				return SPARQLQuery;
    2.61  			}
    2.62 @@ -104,51 +77,22 @@
    2.63  				this.errorMessage = error;
    2.64  			}
    2.65  		}
    2.66 -		
    2.67 -//		System.out.println("\n\n\n\n\n\n\nrequest: ");
    2.68 -//		System.out.println("HEADERS");
    2.69 -//	    Enumeration headerNames = request.getHeaderNames();
    2.70 -//	    while(headerNames.hasMoreElements()) {
    2.71 -//	      String headerName = (String)headerNames.nextElement();
    2.72 -//	      System.out.println(headerName + ":" +request.getHeader(headerName));
    2.73 -//	    }
    2.74 -//	    System.out.println("ATTRIBUTES");
    2.75 -//	    Enumeration attributeNames = request.getAttributeNames();
    2.76 -//	    while(attributeNames.hasMoreElements()) {
    2.77 -//	      String attributeName = (String)attributeNames.nextElement();
    2.78 -//	      System.out.println(attributeName + ":" +request.getAttribute(attributeName).toString());
    2.79 -//	    }
    2.80 -//	    Enumeration paramNames = request.getParameterNames();
    2.81 -//	    while(paramNames.hasMoreElements()) {
    2.82 -//	      String paramName = (String)paramNames.nextElement();
    2.83 -//	      System.out.print(paramName + ":");
    2.84 -//	      String[] paramValues = request.getParameterValues(paramName);
    2.85 -//	      if (paramValues.length == 1) {
    2.86 -//	        String paramValue = paramValues[0];
    2.87 -//	        if (paramValue.length() == 0)
    2.88 -//	          System.out.print("No Value");
    2.89 -//	        else
    2.90 -//	          System.out.print(paramValue + " ");
    2.91 -//	      } else {
    2.92 -//	        for(int i=0; i<paramValues.length; i++) {
    2.93 -//	          System.out.println(":" + paramValues[i]);
    2.94 -//	        }
    2.95 -//	      }	    
    2.96 -//	    }
    2.97 -//		
    2.98 -//		System.out.println("\n\n\n\n\nREQUEST.CONTENTTYPE='"+request.getContentType()+"'\n\n\n\n\n");
    2.99 -		
   2.100 +				
   2.101  		DataHive hive = new DataHive(); 
   2.102  		
   2.103  		hive.setSPARQLQuery(request.getParameter("SPARQLQuery"));
   2.104 -		//System.out.println("SPARQLQuery = " + this.SPARQLQuery);
   2.105  		
   2.106  		String reqFormat = (request.getParameter("format") == null) ? "" : request.getParameter("format");
   2.107  		String reqAccept = (request.getHeader("accept") == null) ? "" : request.getHeader("accept");
   2.108  		String reqFuncionality = (request.getParameter("submit") == null) ? "" : request.getParameter("submit");
   2.109  		
   2.110  		// check whether Update submit button was fired
   2.111 -		boolean isUpdate = (reqFuncionality.equals("Update") ? true:false);
   2.112 +		if (reqFuncionality.equals("Update")) { // only for executions from web browsers
   2.113 +			response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
   2.114 +			response.sendRedirect("Update?SPARQLQuery=" + hive.getSPARQLQuery());
   2.115 +			
   2.116 +			return;
   2.117 +		}
   2.118  		
   2.119  		if ((reqFormat == "") && (reqAccept == "")) {
   2.120  			hive.setFormat("HTML");
   2.121 @@ -175,37 +119,10 @@
   2.122  			response.setContentType("text/html; charset=UTF-8");
   2.123  			hive.setFormat("HTML");
   2.124  		}
   2.125 -		//System.out.println("\n\n\n\n\format='"+this.format+"'\n\n\n\n\n");
   2.126  		
   2.127 -		ServletContext context = getServletContext();
   2.128 -		WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context);
   2.129 -		StrabonBeanWrapper strabonWrapper = (StrabonBeanWrapper)applicationContext.getBean("strabonBean");
   2.130 -		
   2.131 -		if (isUpdate) {
   2.132 -			try {
   2.133 -				strabonWrapper.getStrabon().update(hive.getSPARQLQuery(), strabonWrapper.getStrabon().getSailRepoConnection());
   2.134 -				response.setStatus(HttpServletResponse.SC_OK);
   2.135 -				
   2.136 -			} catch(MalformedQueryException e) {
   2.137 -				response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
   2.138 -				PrintWriter out = response.getWriter();
   2.139 -				e.printStackTrace(out);
   2.140 -			}
   2.141 -			
   2.142 -			return;
   2.143 -		}
   2.144 -
   2.145  		PrintWriter out = response.getWriter();
   2.146  		
   2.147  		if ((hive.getFormat().equalsIgnoreCase("KML"))) {
   2.148 -			//try {
   2.149 -		    //     String url = "http://www.google.com";
   2.150 -		    //     java.awt.Desktop.getDesktop().browse(java.net.URI.create(url));
   2.151 -		    //     }
   2.152 -		    //  catch (java.io.IOException e) {
   2.153 -		    //     System.out.println(e.getMessage());
   2.154 -		    //     }
   2.155 -			
   2.156  			StringBuilder errorMessage = new StringBuilder ();
   2.157  			String answer = evaluateQuery(strabonWrapper, hive.getFormat(), reqFuncionality, hive.getSPARQLQuery(), errorMessage);
   2.158  			hive.setErrorMessage(errorMessage.toString());
   2.159 @@ -240,33 +157,19 @@
   2.160   
   2.161  	            //System.out.println("Done");
   2.162   
   2.163 -    	     }catch(IOException e){
   2.164 +    	     } catch(IOException e) {
   2.165      		        e.printStackTrace();
   2.166 -    	           }
   2.167 +    	     }
   2.168      	     
   2.169   			 response.setContentType("application/vnd.google-earth.kml+xml; charset=UTF-8");
   2.170   			 response.setDateHeader("Expires", 0);
   2.171 - 			 InetAddress thisIp =InetAddress.getLocalHost();
   2.172   			 response.setHeader("Location", request.getScheme() + "://" +  request.getServerName() +":" + request.getServerPort() +"/tmp/" + temp + ".kml");
   2.173 - 			 response.setStatus(301);
   2.174 -             
   2.175 - 			 //out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
   2.176 -             //out.println("<html>");
   2.177 -             //out.println("<head>");
   2.178 -             //out.println("<title>:)</title>");
   2.179 -             //out.println("<meta http-equiv=\"REFRESH\" content=\"0;url=http://maps.google.com/maps?q=http://localhost:8080/tmp/temp.kml\"></HEAD>");
   2.180 -             //out.println("<BODY>");
   2.181 -             //out.println("Redirection WILL occur!");
   2.182 -             //out.println("</BODY>");
   2.183 -             //out.println("</HTML>");
   2.184 -			//out.println(answer);
   2.185 -			 
   2.186 + 			 response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
   2.187  			 
   2.188      	    String pathToKML = "";
   2.189 -    	    //InetAddress thisIp = InetAddress.getLocalHost();
   2.190      	    
   2.191      	    if (answer!="")
   2.192 -			   pathToKML = request.getScheme() + "://" +  request.getServerName() +":" + request.getServerPort() +"/tmp/" + temp + ".kml";//"http://dl.dropbox.com/u/19752551/dlr.kml";
   2.193 +			   pathToKML = request.getScheme() + "://" +  request.getServerName() +":" + request.getServerPort() +"/tmp/" + temp + ".kml";
   2.194  			
   2.195              appendHTML1a(out,pathToKML);
   2.196  			
   2.197 @@ -286,16 +189,49 @@
   2.198  			   //out.append("<div id=\"map_canvas\"></div>");
   2.199  				out.append("");
   2.200  			appendHTML5(out);
   2.201 -		} 
   2.202 -		else if ((hive.getFormat().equalsIgnoreCase("XML"))) {
   2.203 +			
   2.204 +		} else if ((hive.getFormat().equalsIgnoreCase("XML"))) {
   2.205 +			int status_code = HttpServletResponse.SC_OK;
   2.206 +			String answer = "";
   2.207 +			
   2.208 +			try {
   2.209 +				// execute query
   2.210 +				answer = (String) strabonWrapper.query(hive.getSPARQLQuery(), hive.getFormat());
   2.211 +				
   2.212 +			} catch (MalformedQueryException e) {
   2.213 +				status_code = HttpServletResponse.SC_BAD_REQUEST;
   2.214 +				answer = e.getMessage();
   2.215 +				
   2.216 +			} catch (RepositoryException e) {
   2.217 +				status_code = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
   2.218 +				answer = e.getMessage();
   2.219 +				
   2.220 +			} catch (QueryEvaluationException e) {
   2.221 +				status_code = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
   2.222 +				answer = e.getMessage();
   2.223 +				
   2.224 +			} catch (TupleQueryResultHandlerException e) {
   2.225 +				status_code = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
   2.226 +				answer = e.getMessage();
   2.227 +				
   2.228 +			} catch (ClassNotFoundException e) {
   2.229 +				status_code = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
   2.230 +				answer = e.getMessage();
   2.231 +			}
   2.232 +			
   2.233 +			// write response to client
   2.234  			response.setContentType("text/xml; charset=UTF-8");
   2.235 -			StringBuilder errorMessage = new StringBuilder ();
   2.236 -			String answer = evaluateQuery(strabonWrapper, hive.getFormat(), reqFuncionality, hive.getSPARQLQuery(), errorMessage);
   2.237 -			hive.setErrorMessage(errorMessage.toString());
   2.238 -			out.println(answer);
   2.239 -
   2.240 -		}
   2.241 -		else {
   2.242 +			response.setStatus(status_code);
   2.243 +			if (status_code == HttpServletResponse.SC_OK) {
   2.244 +				response.getWriter().append(answer);
   2.245 +				
   2.246 +			} else {
   2.247 +				response.getWriter().append(UpdateBean.getUPDATEHeaderResponse());
   2.248 +				response.getWriter().append(UpdateBean.getExceptionError(answer));
   2.249 +				response.getWriter().append(UpdateBean.getUPDATEFooterResponse());
   2.250 +			}
   2.251 +			
   2.252 +		} else { // HTML
   2.253  			
   2.254  			appendHTML1a(out,"");
   2.255  			
   2.256 @@ -337,27 +273,22 @@
   2.257  
   2.258  	public void init(ServletConfig servletConfig) throws ServletException {
   2.259  		super.init(servletConfig);
   2.260 +		
   2.261 +		// get StrabonWrapper
   2.262 +		context = getServletContext();
   2.263 +		WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context);
   2.264 +		
   2.265 +		strabonWrapper = (StrabonBeanWrapper) applicationContext.getBean("strabonBean");
   2.266  	}
   2.267  
   2.268  	public String evaluateQuery(StrabonBeanWrapper strabonWrapper, String resultFormat, String reqFunctionality, String SPARQLQuery, StringBuilder errorMessage) {		
   2.269  		String answer = "";
   2.270 -
   2.271 -//		System.out.println("evaluateQuery: will call wrapper. Query  = " + this.SPARQLQuery);
   2.272 -//		System.out.println("evaluateQuery: will call wrapper. result = " + resultFormat);
   2.273 -
   2.274 +		
   2.275  		try {
   2.276  			if (SPARQLQuery == null) {
   2.277  				answer = "";
   2.278  			} else {
   2.279 -				//System.out.println("evaluateQuery: Calling...");
   2.280 -				if (reqFunctionality.equals("Update")) {
   2.281 -				//if (((String)this.SPARQLQuery).toLowerCase().contains("insert") || ((String)this.SPARQLQuery).toLowerCase().contains("delete"))  { 
   2.282 -				   answer = (String)strabonWrapper.update(SPARQLQuery, resultFormat);
   2.283 -				   }
   2.284 -				else{
   2.285 -				   answer = (String)strabonWrapper.query(SPARQLQuery, resultFormat);
   2.286 -				}
   2.287 -				//System.out.println("evaluateQuery: Called...");
   2.288 +				   answer = (String) strabonWrapper.query(SPARQLQuery, resultFormat);
   2.289  			}
   2.290  		} catch (MalformedQueryException e) {
   2.291  			e.printStackTrace();
   2.292 @@ -382,10 +313,6 @@
   2.293  			errorMessage.append(e.getMessage());
   2.294  		}
   2.295  
   2.296 -		//System.out.println("evaluateQuery: called wrapper. answer  = " + answer);
   2.297 -		//System.out.println("evaluateQuery: called wrapper. error   = " + ((this.errorMessage == null) ? "" : this.errorMessage));
   2.298 -
   2.299 -		
   2.300  		return answer;		
   2.301  	}
   2.302  	
     3.1 --- a/endpoint/src/main/java/eu/earthobservatory/org/StrabonEndpoint/StrabonBeanWrapper.java	Thu Apr 05 12:56:46 2012 +0300
     3.2 +++ b/endpoint/src/main/java/eu/earthobservatory/org/StrabonEndpoint/StrabonBeanWrapper.java	Thu Apr 05 12:58:20 2012 +0300
     3.3 @@ -12,7 +12,6 @@
     3.4  import org.openrdf.repository.RepositoryException;
     3.5  import org.openrdf.repository.sail.SailRepositoryConnection;
     3.6  import org.openrdf.rio.RDFFormat;
     3.7 -import org.openrdf.rio.RDFParseException;
     3.8  
     3.9  import eu.earthobservatory.runtime.postgis.Strabon;
    3.10  
    3.11 @@ -102,19 +101,6 @@
    3.12  			throw new RepositoryException("Could not connect to Strabon.");
    3.13  		} 
    3.14  		
    3.15 -    	//String newQueryString = TemporalWrapper.rebuildQuery(queryString);
    3.16 -    	
    3.17 -    	System.out.println("================================================================");
    3.18 -    	System.out.println("Query:");
    3.19 -    	System.out.println(queryString);
    3.20 -    	System.out.println("================================================================");
    3.21 -    	System.out.println("Answer format: " + answerFormatStrabon);
    3.22 -    	System.out.println("================================================================");
    3.23 -    	//System.out.println("Rewritten query:");
    3.24 -    	//System.out.println(newQueryString);
    3.25 -    	//System.out.println("================================================================");
    3.26 -		
    3.27 -   		//return strabon.query(newQueryString, answerFormatStrabon, strabon.getSailRepoConnection());
    3.28  		return strabon.query(queryString, answerFormatStrabon, strabon.getSailRepoConnection());
    3.29  	}
    3.30  	
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/endpoint/src/main/java/eu/earthobservatory/org/StrabonEndpoint/UpdateBean.java	Thu Apr 05 12:58:20 2012 +0300
     4.3 @@ -0,0 +1,86 @@
     4.4 +/**
     4.5 + * 
     4.6 + */
     4.7 +package eu.earthobservatory.org.StrabonEndpoint;
     4.8 +
     4.9 +import java.io.IOException;
    4.10 +
    4.11 +import javax.servlet.ServletConfig;
    4.12 +import javax.servlet.ServletContext;
    4.13 +import javax.servlet.ServletException;
    4.14 +import javax.servlet.http.HttpServlet;
    4.15 +import javax.servlet.http.HttpServletRequest;
    4.16 +import javax.servlet.http.HttpServletResponse;
    4.17 +
    4.18 +import org.openrdf.query.MalformedQueryException;
    4.19 +import org.springframework.web.context.WebApplicationContext;
    4.20 +import org.springframework.web.context.support.WebApplicationContextUtils;
    4.21 +
    4.22 +/**
    4.23 + * @author charnik
    4.24 + *
    4.25 + */
    4.26 +public class UpdateBean extends HttpServlet {
    4.27 +
    4.28 +	private static final long serialVersionUID = -633279376188071670L;
    4.29 +
    4.30 +	private StrabonBeanWrapper strabonWrapper;
    4.31 +	
    4.32 +	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    4.33 +		doPost(request, response);
    4.34 +	}
    4.35 +			
    4.36 +	@Override
    4.37 +	public void init(ServletConfig servletConfig) throws ServletException {
    4.38 +		super.init(servletConfig);
    4.39 +		
    4.40 +		// get strabon wrapper
    4.41 +		ServletContext context = getServletContext();
    4.42 +		WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context);
    4.43 +		
    4.44 +		strabonWrapper = (StrabonBeanWrapper) applicationContext.getBean("strabonBean");
    4.45 +	}
    4.46 +	
    4.47 +	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    4.48 +		String query = request.getParameter("SPARQLQuery");
    4.49 +		
    4.50 +		String answer = "";
    4.51 +		try {
    4.52 +			strabonWrapper.getStrabon().update(query, strabonWrapper.getStrabon().getSailRepoConnection());
    4.53 +			response.setStatus(HttpServletResponse.SC_OK);
    4.54 +			answer = "true";
    4.55 +			
    4.56 +		} catch(MalformedQueryException e) {
    4.57 +			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
    4.58 +			answer = getExceptionError(e.getMessage());
    4.59 +		}
    4.60 +		
    4.61 +		// write response to client
    4.62 +		response.getWriter().append(UpdateBean.getUPDATEHeaderResponse());
    4.63 +		response.getWriter().append(answer);
    4.64 +		response.getWriter().append(UpdateBean.getUPDATEFooterResponse());
    4.65 +	}
    4.66 +	
    4.67 +	/**
    4.68 +	 * Used as the template answer for UPDATE queries.
    4.69 +	 * @return
    4.70 +	 */
    4.71 +	public static String getUPDATEHeaderResponse() {
    4.72 +		return "<?xml version='1.0' encoding='UTF-8'?>\n" +
    4.73 +			   "<response>\n" +
    4.74 +			   "\t";
    4.75 +	}
    4.76 +	
    4.77 +	/**
    4.78 +	 * Used as the template answer for UPDATE queries.
    4.79 +	 * @return
    4.80 +	 */
    4.81 +	public static String getUPDATEFooterResponse() {
    4.82 +		return "\n</response>\n";
    4.83 +	}
    4.84 +	
    4.85 +	public static String getExceptionError(String msg) {
    4.86 +		return "<exception>\n"+msg+"\n\t</exception>";
    4.87 +	}
    4.88 +
    4.89 +}
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/scripts/endpoint	Thu Apr 05 12:58:20 2012 +0300
     5.3 @@ -0,0 +1,101 @@
     5.4 +#!/bin/bash
     5.5 +#
     5.6 +# Script for executing SPARQL queries and SPARQL Update queries 
     5.7 +# as well as storing RDF triples on a Strabon Endpoint.
     5.8 +#
     5.9 +# Author: Charalampos (Babis) Nikolaou <charnik@di.uoa.gr>
    5.10 +#
    5.11 +
    5.12 +function help() {
    5.13 +	echo SYNOPSIS
    5.14 +	echo "	`basename ${0}` query|update|store ARGS"
    5.15 +}
    5.16 +
    5.17 +function help_query() {
    5.18 +	echo SYNOPSIS
    5.19 +	echo "	`basename ${0}` query URL SPARQL_QUERY"
    5.20 +	echo
    5.21 +	echo "	URL	     : the URL of Strabon Endpoint (e.g., http://localhost:8080/StrabonEndpoint/)"
    5.22 +	echo "	SPARQL_QUERY : the SPARQL query to execute"
    5.23 +}
    5.24 +
    5.25 +function help_update() {
    5.26 +	echo SYNOPSIS
    5.27 +	echo "	`basename ${0}` update URL SPARQL_QUERY"
    5.28 +	echo
    5.29 +	echo "	URL	     : the URL of Strabon Endpoint (e.g., http://localhost:8080/StrabonEndpoint/)"
    5.30 +	echo "	SPARQL_QUERY : the SPARQL update query to execute"
    5.31 +}
    5.32 +
    5.33 +function help_store() {
    5.34 +	echo SYNOPSIS
    5.35 +	echo "	`basename ${0}` store URL FORMAT -t TRIPLES|-u TRIPLES_URL  "
    5.36 +	echo
    5.37 +	echo "	URL	    : the URL of Strabon Endpoint (e.g., http://localhost:8080/StrabonEndpoint/)"
    5.38 +	echo "	FORMAT	    : the RDF format of the input (one of RDF/XML, N-Triples, Turtle, N3, TriX, TriG, or BinaryRDF)"
    5.39 +	echo "	TRIPLES	    : the RDF triples to store"
    5.40 +	echo "	TRIPLES_URL : the URL containing the RDF triples to store"
    5.41 +}
    5.42 +
    5.43 +CURL_OPTS="-w HTTP_CODE=%{http_code}\n -H \"Content-Type:application/x-www-form-urlencoded\" -H \"Accept:text/xml\""
    5.44 +
    5.45 +case "${1}" in
    5.46 +	help)
    5.47 +		help
    5.48 +		exit 0
    5.49 +		;;
    5.50 +	query)
    5.51 +		shift
    5.52 +		if ! test $# -eq 2; then
    5.53 +			help_query
    5.54 +			exit 1
    5.55 +		fi
    5.56 +		URL="${1}/Query"
    5.57 +		QUERY="${2}"
    5.58 +
    5.59 +		# TODO: make it an argument
    5.60 +		FORMAT="XML"
    5.61 +
    5.62 +		curl ${CURL_OPTS} -d "format=${FORMAT}" --data-urlencode "SPARQLQuery=${QUERY}" ${URL}
    5.63 +		;;
    5.64 +	update)
    5.65 +		shift
    5.66 +		if ! test $# -eq 2; then
    5.67 +			help_update
    5.68 +			exit 1
    5.69 +		fi
    5.70 +		URL="${1}/Update"
    5.71 +		QUERY="${2}"
    5.72 +		
    5.73 +		curl ${CURL_OPTS} --data-urlencode "SPARQLQuery=${QUERY}" ${URL}
    5.74 +		;;
    5.75 +	store)
    5.76 +		shift
    5.77 +		if ! test $# -eq 4; then
    5.78 +			help_store
    5.79 +			exit 1
    5.80 +		fi
    5.81 +		URL="${1}/Store"
    5.82 +		FORMAT="${2}"
    5.83 +		case "${3}" in
    5.84 +			-t)
    5.85 +				TRIPLES="${4}"
    5.86 +				curl ${CURL_OPTS} -d "format=${FORMAT}" --data-urlencode "data=${TRIPLES}" ${URL}
    5.87 +				;;
    5.88 +			-u)
    5.89 +				URL_TRIPLES="${4}"
    5.90 +				curl ${CURL_OPTS} -d "format=${FORMAT}" --data-urlencode "url=${URL_TRIPLES}" -d "fromurl=" ${URL}
    5.91 +				;;
    5.92 +			 *)
    5.93 +				help_store
    5.94 +				exit 1
    5.95 +				;;
    5.96 +		esac
    5.97 +		;;
    5.98 +	*) 
    5.99 +		echo "ERROR: Unknown command \"${1}\"."
   5.100 +		help
   5.101 +		exit 1
   5.102 +		;;
   5.103 +esac
   5.104 +