我有几个像这样的三元组
:event1 :hasTimeStamp "2017-06-30T00:01:00Z" .
:event1 :hasTimeStamp "2017-06-30T00:02:00Z" .
:event1 :hasTimeStamp "2017-06-30T00:03:00Z" .
除了最早的,我想删除关于:event1
的{{1}}的所有断言。
我知道如何选择最早的,将其插入一个临时命名图,删除所有timestamp
:event1
,然后从暂存图中复制回来。
有没有办法在没有利用临时/临时图的情况下进行删除?
这是一个嵌套选择,其中内部子选择获得最小时间,然后将其与外部选择的单个时间进行比较。
现在我只需要将其包含在timestamp
。
delete
答案 0 :(得分:3)
试试这个(不在生产环境中):
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>
是唯一的选择标准。请添加其他标准。
答案 1 :(得分:3)
(@StansilavKralin的优秀解决方案的替代方案)
我刚刚根据样本数据
完成了这项工作@prefix : <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:event1 :hasTimeStamp "2017-06-30T00:01:00Z"^^xsd:dateTime .
:event1 :hasTimeStamp "2017-06-30T00:02:00Z"^^xsd:dateTime .
:event1 :hasTimeStamp "2017-06-30T00:03:00Z"^^xsd:dateTime .
不确定这是否是你想要的,但至少它非常紧凑,而且我是MINUS
的忠实粉丝,它至少更具人性化(但性能可能更低):
PREFIX : <http://example.org/>
DELETE {
?event :hasTimeStamp ?ts .
}
WHERE
{ ?event :hasTimeStamp ?ts
MINUS
{ { SELECT ?event (MIN(?_ts) AS ?ts)
WHERE
{ ?event :hasTimeStamp ?_ts }
GROUP BY ?event
}
}
}
答案 2 :(得分:1)
我认为这符合我的要求,但我希望看到其他人的建议。我不想随意删除。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DELETE {
?s <http://purl.obolibrary.org/obo/IAO_0000004> ?o .
}
WHERE
{ 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 )
}
}