SPARQL:删除实例及其所有具有链接子属性的属性
SPARQL: Delete instance and all of its properties with linked subproperties
我对使用 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> .
如您所见,我有一个 xy:Point,它具有一些属性。在我的数据库中,我存储了数十个这样的点。现在我的问题是:如何删除一个点及其所有属性(甚至是 observationSamplingTime、observationResultTime 可能关联的子属性)?有什么简单的解决办法吗?到现在为止,我通过给出所有确切的关系来删除点及其属性,例如:
@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 .
}
我想做的是"Delete ?observation a xy:Point and all ob its subproperties"。有没有可能做到这一点?
感谢和亲切的问候
坦克
(even the possibly linked subproperties of observationSamplingTime, observationResultTime)?
请注意,这样的事情非常危险,因为您可能会从您不期望的上下文中删除三元组。例如,假设您有类似
:pointX :hasTime :time1 ;
:hasValue :valueX .
:pointY :hasTime :time1 ;
:hasValue :valueY .
:time1 :hasLabel "time1" .
如果您 "delete" :pointX,并递归删除 :time1,那么您将丢失对 :pointY 还有。请记住,三元组存储 组 三元组。事物只有作为主语、谓语或宾语而存在。
无论如何,你要做的事情并不难。你可以这样做:
delete { ?s ?p ?o }
where {
:thing (<>|!<>)* ?s .
?s ?p ?o .
}
(<>|!<>)* 是通配符路径,因此 ?s 绑定到任何可从 :thing,包括 :thing 本身。 ?p 和 ?o 只是 属性 和 ?s 的对象。有关通配符的详细信息,请参阅 .
我对使用 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> .
如您所见,我有一个 xy:Point,它具有一些属性。在我的数据库中,我存储了数十个这样的点。现在我的问题是:如何删除一个点及其所有属性(甚至是 observationSamplingTime、observationResultTime 可能关联的子属性)?有什么简单的解决办法吗?到现在为止,我通过给出所有确切的关系来删除点及其属性,例如:
@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 .
}
我想做的是"Delete ?observation a xy:Point and all ob its subproperties"。有没有可能做到这一点?
感谢和亲切的问候
坦克
(even the possibly linked subproperties of observationSamplingTime, observationResultTime)?
请注意,这样的事情非常危险,因为您可能会从您不期望的上下文中删除三元组。例如,假设您有类似
:pointX :hasTime :time1 ;
:hasValue :valueX .
:pointY :hasTime :time1 ;
:hasValue :valueY .
:time1 :hasLabel "time1" .
如果您 "delete" :pointX,并递归删除 :time1,那么您将丢失对 :pointY 还有。请记住,三元组存储 组 三元组。事物只有作为主语、谓语或宾语而存在。
无论如何,你要做的事情并不难。你可以这样做:
delete { ?s ?p ?o }
where {
:thing (<>|!<>)* ?s .
?s ?p ?o .
}
(<>|!<>)* 是通配符路径,因此 ?s 绑定到任何可从 :thing,包括 :thing 本身。 ?p 和 ?o 只是 属性 和 ?s 的对象。有关通配符的详细信息,请参阅