【发布时间】:2020-06-16 04:16:24
【问题描述】:
[![在此处输入图片描述][1]][1][1]:https://i.stack.imgur.com/AG7MM.png
给定以下三元组
我想得到一个结果 :crr1 :hasPart :part1 :crr2 :hasPart :part3
我目前尝试了下面的查询,但我没有得到预期的结果我试图在两个查询的 UNION 上放置一个过滤器 FILTER (?part = ?part2) 但未能得到我需要的响应,什么我在这里做错了吗?
我查询的唯一目的是查找缺失的连接,例如在这种情况下,如果 CRR1 和 CRR2 通过 Part2 连接,那么我想创建一个新的 CRR,根据谁是本例中的 DOB 来连接 Part1 和 Part3是CRR1
:crr1 a :XObject .
:crr2 a :XObject .
:crr3 a :XObject .
:crr4 a :XObject .
:part1 a :Part
:part2 a :Part
:part3 a :Part
:part4 a :Part
:part5 a :Part
:crr1 :hasPart :part1 .
:crr1 :hasPart :part2 .
:crr2 :hasPart :part2 .
:crr2 :hasPart :part3 .
:crr3 :hasPart :part3 .
:crr3 :hasPart :part4 .
:crr4 :hasPart :part4 .
:crr4 :hasPart :part5 .
:crr1 :hasType :DOB .
PREFIX : <http://example.com/test#>
construct {
?o :hasPart ?part .
:crr2 :hasPart ?part2 .
}
where
{
{
?o :hasPart ?part
{
select DISTINCT ?o
where {
:crr2 (:hasPart/^:hasPart)+ ?o
FILTER (:crr2 != ?o)
}
}
FILTER EXISTS {?o :hasType :DOB .}
}
UNION
{
:crr2 :hasPart ?part2 .
}
FILTER (?part = ?part2)
}
【问题讨论】: