如何在prolog查询中使用SPARQL Filter查询功能

时间:2015-02-12 16:26:50

标签: prolog rdf sparql allegrograph

我想查询RDF graphdatabse中那些在同一地点,同一日期或过度日期旅行的人。我们有人员信息与travlel位置及其fromdata和todate。我在SPARQL中运行以下查询,它给出了正确的结果。

SPARQL查询

SELECT DISTINCT ?p1 ?p2 ?o1 ?o2 ?loc ?fd1 ?td1 ?fd2 ?td2
WHERE {
    ?p1 ns:hasTravelledAt ?o1 .
    ?p2 ns:hasTravelledAt ?o2 .
    ?o1 ns:hasLocation ?loc .
    ?o2 ns:hasLocation ?loc .
    ?o1 ns:fromDate ?fd1 .
    ?o2 ns:fromDate ?fd2 .
    ?o1 ns:toDate ?td1 .
    ?o2 ns:toDate ?td2 .
  FILTER ( (?p1 != ?p2 ) && ( (?fd1 <= ?fd2 && ?fd2 <= ?td1) || (?fd2 <= ?fd1 && ?fd1 <= ?td2) ) )
}

现在我想在Prolog中编写相同的查询但是我遇到了Filter函数的问题如何在Prolog查询中替换Sparql Filter函数:我试图运行查询如下:但是没有得到结果:

(select-distinct (?p1 ?p2 ?o1 ?o2 ?loc ?fd1 ?td1 ?fd2 ?td2)
 (q ?p1 !ns:hasTravelledAt ?o1)
 (q ?p2 !ns:hasTravelledAt ?o2)
 (q ?o1 !ns:hasLocation ?loc)
 (q ?o2 !ns:hasLocation ?loc)
 (q ?o1 !ns:fromDate ?fd1)
 (q ?o2 !ns:fromDate ?fd2) 
 (q ?o1 !ns:toDate ?td1)
 (q ?o2 !ns:toDate ?td2) 
?- (or (and (?fd1 <= fd2) (?fd2 <= ?td1))  (and (?fd2 <= fd1) (?fd1 <= ?td2)) )
(not (= ?p1 ?p2))
 )

任何人都可以帮助我吗?如何在prolog查询中使用过滤器功能。 感谢

0 个答案:

没有答案