I would like to announce something I have been working on for a while, a way of executing logic program queries over a SPARQL endoint. This is similar to Samer Abdallah’s sparkle, but extends on it a number of ways.
You can get it from:
The basic idea is that you can write logic programs, and so long as you stay within a specified subset (essentially datalog) and leverage the use of the semweb
rdf/3 and related predicates, then you can make normal prolog queries that are compiled down to SPARQL and executed remotely.
For example, we can write:
has_shared_band_member(B1,B2,A) :- rdf(A,dbo:associatedBand,B1), rdf(A,dbo:associatedBand,B2), B1\=B2.
has_shared_band_member(dbr:Deep_Purple, OtherBand, SharedMember)
It’s also possible freely mix execution within the prolog engine and remote execution on the SPARQL server in a way that avoids the impedance mismatches of an imperative language.
I want to credit Sam Neaves for the ideas here, nicely described in Reactome Pengine: a web-logic API to the Homo sapiens reactome
And because Prolog is sometimes a hard sell, there is a Python wrapper, plus some example Jupyter notebooks: sparqlprog-python. (A sparqlprog service can easily be run via Docker, communication is via Pengines).
I’m going to be working on this as part of a Biohackathon in Japan the first week of September. There is a not currently very active sparqlprog gitter room which I promise to monitor during this week, if others want to join me remotely! (Will Byrd of “The Reasoned Schemer” and miniKanren fame will also be at the hackathon).
Chris Mungall, PhD
Department Head, Molecular Ecosystems Biology, Lawrence Berkeley National Laboratory
717 Potter Street,
Berkeley, CA 94710
(510) 486 4170