首页 > 解决方案 > 嵌套 SPARQL 查询

问题描述

我有以下结构一个对象,每个对象都有多个子对象作为父对象的更改日志,每个更改日志都有一个作者。 在此处输入图像描述

现在每个变更日志都有状态和时间戳我现在想编写一个 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 .}

我在这里做错的是它将它与所有对象更改日志进行比较,而不是对象比较我怎么能做到这一点?

标签: sparqlrdfjenaontology

解决方案


根据 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 .}

推荐阅读