我有以下结构 一个对象,每个对象有多个子对象,作为父对象的变更日志,每个变更日志有一个作者。
现在,每个变更日志都有状态和时间戳,我现在想写一个SPARQL查询,我需要得到以我为作者的对象列表,以及特定状态的对象,比如 "待批准",而且必须是最新的变更日志。
这个查询是我目前已经尝试过的:我首先尝试获取变更日志,然后获取与之相关的对象,然后获取其中的所有其他变更日志,并通过时间戳比较最新的变更日志,如果时间戳较大则进行过滤。
select ?Object WHERE{ ?author myPrefix:userId "myuserid".
?changelog myPrefix:hasApprover ?author .
?changelog myPrefix:timestamp ?dv
FILTER( ?dv >= ?latestdate )
{
SELECT (max(?dv1) AS ?latestdate) WHERE {
?Object myPrefix:hasChangeLog ?changelog .
?Object myPrefix:hasChangeLog ?changelog1 .
?changelog1 myPrefix:timestamp ?dv1 .
}
}
?changelog myPrefix:status "To be approved" .
?Object myPrefix:hasChangeLog ?changelog .}
我在这里做的不对的地方是,它与所有对象的变更日志进行比较,而不是对象方面的比较,我如何才能做到这一点?
根据UninformedUser的建议。
select ?Object WHERE{ ?author myPrefix:userId "myuserid".
?changelog myPrefix:hasApprover ?author .
?changelog myPrefix:timestamp ?dv
FILTER( ?dv >= ?latestdate )
{
SELECT (max(?dv1) AS ?latestdate) WHERE {
?Object myPrefix:hasChangeLog ?changelog1 .
?changelog1 myPrefix:timestamp ?dv1 .
}group by ?Object
}
?changelog myPrefix:status "To be approved" .
?Object myPrefix:hasChangeLog ?changelog .}