0

我想从 RDF graphdatabse 查询那些在同一地点、同一日期或重叠日期旅行的人。我们有人员信息,包括旅行位置及其来源数据和今天。我在 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))
 )

谁能帮我?如何在序言查询中使用过滤器功能。谢谢

4

0 回答 0