我有几个这样的三元组
:event1 :hasTimeStamp "2017-06-30T00:01:00Z" .
:event1 :hasTimeStamp "2017-06-30T00:02:00Z" .
:event1 :hasTimeStamp "2017-06-30T00:03:00Z" .
我想删除所有关于 :event1
的 timestamp
的断言,除了最早的断言。
我知道如何选择最早的,将其插入到一个名为 scratch 的 graph 中,删除所有 :event1
timestamp
,然后从 scratch graph 中复制回来。
有没有办法在不使用临时/临时图的情况下就地删除?
这是一个嵌套选择,其中内部子选择获得最短时间,然后将其与外部选择的各个时间进行比较。
现在我只需要将它包装在 delete
中。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT *
WHERE
{ ?s rdf:type <http://turbo.org/procStartTimeMeas> ;
<http://purl.obolibrary.org/obo/IAO_0000136> ?something .
?something <http://purl.obolibrary.org/obo/RO_0002223> ?another .
?another rdf:type <http://turbo.org/R2RInstantiation> .
?s <http://purl.obolibrary.org/obo/IAO_0000004> ?o
{ SELECT ?s (MIN(?o) AS ?earliest)
WHERE
{ ?s rdf:type <http://turbo.org/procStartTimeMeas> ;
<http://purl.obolibrary.org/obo/IAO_0000136> ?something .
?something <http://purl.obolibrary.org/obo/RO_0002223> ?another .
?another rdf:type <http://turbo.org/R2RInstantiation> .
?s <http://purl.obolibrary.org/obo/IAO_0000004> ?o
}
GROUP BY ?s
}
FILTER ( ?o != ?earliest )
}
最佳答案
试试这个(不是在生产环境中):
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DELETE {
?s <http://purl.obolibrary.org/obo/IAO_0000004> ?o2 .
}
WHERE {
?s <http://purl.obolibrary.org/obo/IAO_0000004> ?o2 .
?s rdf:type <http://turbo.org/procStartTimeMeas> .
FILTER EXISTS {
?s <http://purl.obolibrary.org/obo/IAO_0000004> ?o1 .
?s rdf:type <http://turbo.org/procStartTimeMeas> .
FILTER (?o2 > ?o1)
}
}
我不确定我是否正确理解了这些谓词的含义。
我想 <http://purl.obolibrary.org/obo/IAO_0000004>
是:hasTimeStamp
最初的例子。
在我的回答中,?s rdf:type <http://turbo.org/procStartTimeMeas>
是唯一的选择标准。请添加其他条件。
关于sparql - 删除除最早事件时间之外的所有关于事件时间的三元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44848832/