Logic can be sent remotely to the server
from prologterms import TermGenerator, PrologRenderer, Program, Var, Term
from sparqlprog import SPARQLProg
from rdflib import Namespace
P = TermGenerator()
R = PrologRenderer()
dbont = Namespace("http://dbpedia.org/ontology/")
dbr = Namespace("http://dbpedia.org/resource/")
server = 'http://localhost:9083'
X = Var('X')
Y = Var('Y')
Z = Var('Z')
rules = [
# in-band if bandMember OR formerBandMember
P.in_band(X,Y) <= P.rdf(Y, dbont['bandMember'], X),
P.in_band(X,Y) <= P.rdf(Y, dbont['formerBandMember'], X),
# shared band members, at any point in time
P.has_shared_band_member(X,Y,Z) <= (P.in_band(Z, X), P.in_band(Z,Y), Term('\=', X, Y))
]
S = SPARQLProg(server=server,
rules=rules,
endpoint='dbpedia')
query = P.has_shared_band_member(dbr['Metallica'], X, Z)
#query = P.has_shared_band_member(Y, X, Z)
#query = P.in_band(X,Y)
res = S.query(query)
for r in res:
print(f"band: {r['X']} connecting member: {r['Z']}")
band: http://dbpedia.org/resource/Mass_Mental connecting member: http://dbpedia.org/resource/Robert_Trujillo band: http://dbpedia.org/resource/Black_Label_Society connecting member: http://dbpedia.org/resource/Robert_Trujillo band: http://dbpedia.org/resource/Suicidal_Tendencies connecting member: http://dbpedia.org/resource/Robert_Trujillo band: http://dbpedia.org/resource/List_of_Suicidal_Tendencies_band_members connecting member: http://dbpedia.org/resource/Robert_Trujillo band: http://dbpedia.org/resource/Infectious_Grooves connecting member: http://dbpedia.org/resource/Robert_Trujillo band: http://dbpedia.org/resource/Spastik_Children connecting member: http://dbpedia.org/resource/Kirk_Hammett band: http://dbpedia.org/resource/Leather_Charm connecting member: http://dbpedia.org/resource/James_Hetfield band: http://dbpedia.org/resource/Spastik_Children connecting member: http://dbpedia.org/resource/James_Hetfield band: http://dbpedia.org/resource/Megadeth connecting member: http://dbpedia.org/resource/Dave_Mustaine band: http://dbpedia.org/resource/Newsted connecting member: http://dbpedia.org/resource/Jason_Newsted band: http://dbpedia.org/resource/Red_Lamb connecting member: http://dbpedia.org/resource/Dave_Mustaine band: http://dbpedia.org/resource/MD.45 connecting member: http://dbpedia.org/resource/Dave_Mustaine band: http://dbpedia.org/resource/Trauma_(band) connecting member: http://dbpedia.org/resource/Cliff_Burton band: http://dbpedia.org/resource/EZ-Street connecting member: http://dbpedia.org/resource/Cliff_Burton band: http://dbpedia.org/resource/Spastik_Children connecting member: http://dbpedia.org/resource/Cliff_Burton band: http://dbpedia.org/resource/WhoCares connecting member: http://dbpedia.org/resource/Jason_Newsted band: http://dbpedia.org/resource/Flotsam_and_Jetsam_(band) connecting member: http://dbpedia.org/resource/Jason_Newsted band: http://dbpedia.org/resource/Voivod_(band) connecting member: http://dbpedia.org/resource/Jason_Newsted band: http://dbpedia.org/resource/Spastik_Children connecting member: http://dbpedia.org/resource/Jason_Newsted band: http://dbpedia.org/resource/Rock_Star_Supernova connecting member: http://dbpedia.org/resource/Jason_Newsted band: http://dbpedia.org/resource/Echobrain connecting member: http://dbpedia.org/resource/Jason_Newsted band: http://dbpedia.org/resource/Leather_Charm connecting member: http://dbpedia.org/resource/Ron_McGovney band: http://dbpedia.org/resource/Phantasm_(band) connecting member: http://dbpedia.org/resource/Ron_McGovney