tan*_*too 3 sparql triplestore virtuoso
我有一个关于使用 SPARQL 从三元组存储(在我的例子中是 Virtuoso)中删除元素的问题。我已将以下元素存储在图表中:
@prefix xy: <http://purl.oclc.org/xy/xy#> .
@prefix ssn: <http://purl.oclc.org/NET/ssnx/ssn#> .
<point> a xy:Point ;
xy:value "10" ;
ssn:observationResultTime <Rs_b8d4ae44-6083-4140-b4e3-11fcf38a53c8> ;
ssn:observationSamplingTime <St_b8d4ae44-6083-4140-b4e3-11fcf38a53c8> ;
ssn:observedBy <SensorID-b8d4ae44-6083-4140-b4e3-11fcf38a53c8> .
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我有一个 xy:Point,它具有一些属性。在我的数据库中,我存储了数十个这样的点。现在我的问题是:如何删除一个点及其所有属性(甚至是观察采样时间、观察结果时间可能链接的子属性)?有什么简单的解决办法吗?现在,我通过给出所有精确关系来删除该点及其属性,例如:
@prefix xy: <http://purl.oclc.org/xy/xy#> .
@prefix ssn: <http://purl.oclc.org/NET/ssnx/ssn#>
delete {
?observation a xy:Point .
?observation xy:value ?value .
?observation ssn:observationResultTime ?resultTime .
?observation ssn:observationSamplingTime ?samplingTime .
?observation ssn:observedBy ?sensor .
}
WHERE {
?observation xy:value ?value .
?observation ssn:observationResultTime ?resultTime .
?observation ssn:observationSamplingTime ?samplingTime .
?observation ssn:observedBy ?sensor .
}
Run Code Online (Sandbox Code Playgroud)
我想做的是“删除?观察 xy:Point 及其所有 ob 子属性”。有可能这样做吗?
感谢和亲切的问候
坦克图
(甚至是观察采样时间、观察结果时间可能链接的子属性)?
请注意,这样的事情非常危险,因为您可能会从您不希望的上下文中删除三元组。例如,假设你有类似的东西
:pointX :hasTime :time1 ;
:hasValue :valueX .
:pointY :hasTime :time1 ;
:hasValue :valueY .
:time1 :hasLabel "time1" .
Run Code Online (Sandbox Code Playgroud)
如果您“删除” :pointX,并递归删除:time1 ,那么您也会丢失对:pointY重要的信息。请记住,三元组存储存储三元组的集合。事物仅凭借作为主语、谓语或宾语而存在。
无论如何,你想做的事情并不太难。你可以这样做:
:pointX :hasTime :time1 ;
:hasValue :valueX .
:pointY :hasTime :time1 ;
:hasValue :valueY .
:time1 :hasLabel "time1" .
Run Code Online (Sandbox Code Playgroud)
(<>|!<>)*是通配符路径,因此?s绑定到从:thing可以到达的任何内容,包括:thing本身。 ?p和?o只是?s的属性和对象。有关通配符的更多信息,请参阅SPARQL:两个节点之间是否有路径?。