同じ場所、同じ日付、または重複した日付に旅行した人を RDF グラフデータベースからクエリしたいと考えています。旅行の場所とその 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 で同じクエリを作成したいのですが、Prolog クエリで Sparql フィルター関数を置き換えるにはどうすればフィルター関数に問題がありますか: 次のようにクエリを実行しようとしています: しかし、結果が得られません:
(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))
)
誰でも私を助けることができますか?プロローグクエリでフィルター機能を使用するにはどうすればよいですか。ありがとう