:- use_module(library(rdf)). :- use_module(library(rdf_db)). :- rdf_register_ns(daml,'http://www.daml.org/2001/03/daml+oil#'). :- rdf_register_ns(foaf,'http://xmlns.com/foaf/0.1/'). :- rdf_register_ns(space,'http://frot.org/space/0.1/'). :- rdf_register_ns(geo,'http://www.w3.org/2003/01/geo/wgs84_pos/'). :- rdf_register_ns(dc,'http://purl.org/dc/1.0/'). :- rdf_register_ns(bot,'http://frot.org/bot/bot#'). :- rdf_register_ns('near','http://frot.org/space/near'). london:- rdf_load('/home/jo/london.rdf'). tube:- rdf_load('/home/jo/spacenamespace/prolog_tube.rdf'). connects(X,Y,S1,S2):- spaces(X,Y,S1,S2), rdf(S1,space:connects,S2). connects_subject(X,Y):- rdf(X,space:connects,literal(Y)). connect(X,Y,A,B):- spaces(X,Y,S1,S2), rdf_assert(S1,space:connects,literal(S2)), reify(S1,space:connects,literal(S2),A), rdf_assert(S2,space:connects,literal(S1)), reify(S2,space:connects,literal(S1),B). space(X,Y) :- rdf(Y,space:name,literal(X)). path(X,Y,P,[Y|P]):- X \== Y,connects(X,Y,S,S2). path(X,Z,P,Path):- X \== Z, connects(X,Y,S1,S2), Y \== Z, \+ member(Y,P), path(Y,Z,[Y|P],Path). % bigger(X,nil). % bigger(X,[Y,A]):- geq(X,Y),bigger(X,A). % geq(X,Y) :- X >= Y. % exists(X). tubeline(Name,L) :- tubeline(Name,X,L), reify(X,space:connects,literal(L),A). do_tube :- tubeline(X,Y). tubeline(Name,X,L) :- tube(Name,X), connects_subject(X,L). tube(Name,Y):- rdf(Y,space:name,literal(Name)), rdf(Y,space:type,literal('Tube Line')). list(X,Stn,List) :- connects(X,Stn,Id1,Id2), append(List,[Id1,Id2],List), list(X,Stn,List). spaces(X,Y,S1,S2) :- space(X,S1), space(Y,S2), not(X==Y). route(X,Y,Path):- X \== Y, append([X],[],R), path(X,Y,R,N), reverse(N,Path). is_near(X,Y,Z):- space(Y,S1), space(Z,S2), rdf_assert(S1,X,S2). near(X,Y,Z):- spaces(Y,Z,S1,S2), rdf(S1,X,literal(S2)). create_space(X) :- gensym(X,Y), rdf_assert(Y,space:name,literal(X)). reify(X,Y,Z,N) :- gensym(X,N), rdf_assert(N,rdf:subject,X), rdf_assert(N,rdf:predicate,Y), rdf_assert(N,rdf:object,Z). reified(X,Y) :- append([],rdf(X,rdf:subject,A),[Al]), append(A1,rdf(X,rdf:predicate,B),[Bl]), append(B1,rdf(X,rdf:subject,A),[Y]). :- create_space('t1'). :- create_space('t2'). :- create_space('t3'). :- create_space('t4'). :- connect('t1','t2',A,B). :- connect('t3','t2',A,B). :- connect('t3','t4',A,B). :- trace(path/4). :- trace(member/2).