我想查询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查询中使用过滤器功能。 感谢