annotate jamendo/sparql-archived/p2r_entailment.pl @ 27:d95e683fbd35 tip

Enable CORS on urispace redirects as well
author Chris Cannam
date Tue, 20 Feb 2018 14:52:02 +0000
parents df9685986338
children
rev   line source
Chris@0 1 :- module(p2r_entailment,[
Chris@0 2 ]).
Chris@0 3
Chris@0 4 :- use_module(library('semweb/rdf_db'),
Chris@0 5 [ rdf_global_id/2,
Chris@0 6 rdf_reachable/3,
Chris@0 7 rdf_has/3,
Chris@0 8 rdf_subject/1,
Chris@0 9 rdf_equal/2,
Chris@0 10 rdf_global_term/2
Chris@0 11 ]).
Chris@0 12
Chris@0 13 :- use_module(match).
Chris@0 14
Chris@0 15
Chris@0 16 term_expansion((rdf(S0, P0, O0) :- Body),
Chris@0 17 (rdf(S, P, O) :- Body)) :-
Chris@0 18 rdf_global_id(S0, S),
Chris@0 19 rdf_global_id(P0, P),
Chris@0 20 rdf_global_id(O0, O).
Chris@0 21
Chris@0 22
Chris@0 23 rdf(Subject,Predicate,Object) :-
Chris@0 24 match:eq(Pred,Triples),
Chris@0 25 expand_t(Triples,TriplesX),
Chris@0 26 rdf_global_id(Subject,SubjectX),rdf_global_id(Predicate,PredicateX),rdf_global_id(Object,ObjectX),
Chris@0 27 member_m(rdf(SubjectX,PredicateX,ObjectX),TriplesX,rdf(SM,_,OM)),
Chris@0 28 Pred,
Chris@0 29 (SM=pattern(ListA)->concat_atom(ListA,SubjectX);true),
Chris@0 30 (OM=pattern(ListB)->concat_atom(ListB,ObjectX);true).
Chris@0 31
Chris@0 32 member_m(_,[],_) :- fail.
Chris@0 33 member_m(rdf(S,P,O),[rdf(SM,PM,OM)|_],rdf(SM,PM,OM)) :-
Chris@0 34 pattern_match(SM,S),pattern_match(PM,P),pattern_match(OM,O).
Chris@0 35 member_m(rdf(S,P,O),[_|T],rdf(SM,PM,OM)) :-
Chris@0 36 member_m(rdf(S,P,O),T,rdf(SM,PM,OM)).
Chris@0 37
Chris@0 38 pattern_match(P,A) :- var(A),\+var(P), P=pattern(_),!.
Chris@0 39 pattern_match(P,A) :- atomic(A),\+var(P), P=pattern(_),!, pattern_match_p(P,A).
Chris@0 40 pattern_match(A,A).
Chris@0 41 pattern_match_p(pattern([]),'').
Chris@0 42 pattern_match_p(pattern([H|T]),Atom) :- atomic(Atom),
Chris@0 43 atom_concat(H,Atomtail,Atom),
Chris@0 44 pattern_match(pattern(T),Atomtail).
Chris@0 45
Chris@0 46 expand_t([],[]).
Chris@0 47 expand_t([rdf(A,B,C)|T],[rdf(AX,BX,CX)|TX]) :-
Chris@0 48 rdf_global_id(A,AX),rdf_global_id(B,BX),rdf_global_id(C,CX),
Chris@0 49 expand_t(T,TX).
Chris@0 50
Chris@0 51 /*******************************
Chris@0 52 * REGISTER *
Chris@0 53 *******************************/
Chris@0 54
Chris@0 55 :- multifile
Chris@0 56 serql:entailment/2.
Chris@0 57
Chris@0 58 serql:entailment(p2r, p2r_entailment).
Chris@0 59
Chris@0 60
Chris@0 61
Chris@0 62