Just for information, you might want to look at SSWAP:

http://sswap.info/
http://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-10-309

They used OWL to assemble web services, and you might find useful ideas there.

Using SPARQL this way seems like an awful lot of overhead. Is there something 
particular about your data or services that lends interest to using SPARQL in 
particular?

---
A. Soroka
The University of Virginia Library

> On Aug 21, 2016, at 1:19 PM, Simon Schäfer <m...@antoras.de> wrote:
> 
> Hello,
> 
> Right now I'm designing a distributed software system whose components (or 
> services) communicate through protocols. In order to minimize the efforts to 
> create and handle protocols I had the idea to only use linked data for 
> communication.
> 
> I would like to use SPARQL to send requests to other services and receive 
> answers as SPARQL-JSON results. So far no problem with Jena. However I would 
> like to also register, find and call services through SPARQL queries and this 
> is the point where I could need some advice on how to proceed.
> 
> The idea basically is that I create a service, for example in Java:
> 
> public class MyService {
> public int run(int param1, String param2) {
>   return 0;
> }
> }
> 
> The service then can be registered by a SPARQL update:
> 
> prefix registry:<http://my.registry/kb/>
> prefix service:<http://my.registry/kb/Service/>
> insert data {
>  <http://my.registry/kb/MyService/> registry:service service:MyService .
>  <http://my.registry/kb/MyService/> registry:name "MyService" .
>  # ... more data
> }
> 
> After that the (for me) complicated part starts. Finding the service is 
> relatively easy, for example by searching for its name, but invoking the 
> "run" function of the Java class and passing arguments to it is a big hurdle 
> for me right now. I thought of something like this:
> 
> prefix registry:<http://my.registry/kb/>
> prefix service:<http://my.registry/kb/Service/>
> select * where {
>  # find service
>  ?s registry:service service:MyService .
>  # specify name of method to call
>  ?s registry:method "run" .
>  # specify parameter values of method
>  ?s registry:parameter [registry:param1 100] .
>  ?s registry:parameter [registry:param2 "string"] .
> }
> 
> The overall idea is that I pass all of the necessary information for a method 
> call together with the SPARQL query. As a result I would like to not get the 
> "?s" as a result value but of course I would like to receive the return value 
> of the function. The difficult part here is that this would require special 
> support by the query evaluation engine because it needs to understand that I 
> want to call the service and it needs to know how to extract the parameters 
> out of the SPARQL query.
> 
> My question would be: Would it be possible with Jena to alter the query 
> engine in a way that it can support this feature and if yes would it be a 
> good idea to do so? The syntax above is of course just an idea to illustrate 
> my point, it can look differently. I still don't know SPARQL very well, maybe 
> it even supports some other constructs that would make such a feature easier 
> to implement?
> 
> Btw, I know that there are other ways and existing technologies that would 
> make it easy to support a service registration framework but I want to depend 
> only on linked data (i.e. triples) for both requests and responses against my 
> software system and no existing technology that I know of can do that right 
> now.
> 

Reply via email to