【发布时间】:2020-04-13 12:58:02
【问题描述】:
我有以下结构一个对象,每个对象都有多个子对象作为父对象的更改日志,每个更改日志都有一个作者。
现在每个变更日志都有状态和时间戳我现在想编写一个 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 .}
我在这里做错的是它将它与所有对象更改日志进行比较,而不是对象比较我怎样才能做到这一点?
【问题讨论】:
-
您应该显示示例 RDF 数据以及您迄今为止尝试过的数据。
-
您好,我在这里上传了查询,不确定是否可以发布数据,因为它是机密的,但如果需要可以准备一些
-
好的,不确定我是否理解正确,但您不应该只获取每个对象的最新更改日志吗?将内部查询更改为
SELECT ?Object (max(?dv1) AS ?latestdate) WHERE { ?Object myPrefix:hasChangeLog ?changelog . ?Object myPrefix:hasChangeLog ?changelog1 . ?changelog1 myPrefix:timestamp ?dv1 . } group by ?Object -
哎呀!!!这就是我所缺少的谢谢 :)
-
只是另一个问题,我这样做的方式是正确的还是有更好的方法来编写相同的查询?