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
|