SPARQL:使用链接的子属性

时间:2015-10-14 15:39:12

标签: sparql virtuoso triplestore

我有一个问题,即使用SPARQL从triplestore(在我的例子中是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,它有一些属性。在我的数据库中,我存储了数十个这些点。现在我的问题:如何删除一个点及其所有属性(甚至可能链接的observeSamplingTime,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 .
}

我想做的是“删除?观察xy:点和所有ob的子属性”。有没有可能这样做?

谢谢和亲切的问候

tanktoo

1 个答案:

答案 0 :(得分:1)

  

(即使是观察的可能关联的子属性,采样时间,observeResultTime)?

请注意,这样的事情非常危险,因为您可能会从您不期望的上下文中删除三元组。例如,假设你有像

这样的东西
:pointX :hasTime :time1 ;
        :hasValue :valueX .

:pointY :hasTime :time1 ;
        :hasValue :valueY .

:time1 :hasLabel "time1" .

如果您“删除”:pointX ,并递归删除:time1 ,那么您将丢失对:pointY 非常重要的信息。请记住,三重商店存储三元组的。事物只是作为主体,谓词或客体而存在。

无论如何,你要做的事情并不是太难。你可以这样做:

delete { ?s ?p ?o }
where {
  :thing (<>|!<>)* ?s . 
  ?s ?p ?o .
}

(&lt;&gt; |!&lt;&gt;)* 是一个通配符路径,因此会绑定到:thing <可以访问的任何内容/ strong>,包括:thing 本身。 ?p ?o 只是的属性和对象。有关通配符的更多信息,请参阅SPARQL: is there any path between two nodes?