2015-10-14 94 views
1

我有一个关于从triplestore元素(在我的情况演奏家)使用SPARQL的缺失问题。我已经存储了以下内容的图:SPARQL:删除实例和其所有属性与链接子属性

@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:点,其中有一些属性。在我的数据库中,我存储了许多这些点。现在我的问题是:如何删除一个点及其所有属性(即使是可能链接的observingSamplingTime,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

+0

你实际存储了''吗?这是一个相对IRI,可能会在稍后导致一些问题。 –

+0

没有它的。我错过了这个例子。 – tanktoo

+1

这仍然是一个相对IRI ... –

回答

1

(甚至observationSamplingTime的可能挂子属性,observationResultTime)?

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

:pointX :hasTime :time1 ; 
     :hasValue :valueX . 

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

:time1 :hasLabel "time1" . 

如果“删除” :pointX,并递归删除:时间1,那么你就失去了,这是很重要的信息:尖尖为好。请记住,三联商店集合三倍。事物只是凭借作为主语,谓语或宾语而存在。

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

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

(<> | <>!)*是一个通配符路径,所以小号获取绑定到任何可到达从:事情,包括:事情本身? 。 3 P2 O仅仅是财产和对象?的。有关通配符的更多信息,请参阅SPARQL: is there any path between two nodes?

+0

嗨,谢谢你的回答。我已经尝试过,但它并不完全。如果“time1”具有子属性,则它们不会被删除。我怎么能删除它们呢? 在我的三重商店里,不应该有其他问题使用链接的情况。如果我有多个点使用的属性,它们将存储在另一个图中。 – tanktoo

+0

我不确定''time1''是什么意思。 “time1”是一个字符串,它是一个字面值,不能是三倍的主题。你不能拥有,例如'“time1”:property:value“'。 –

+0

如果我使用你的命令,将删除“pointY hasTime time1”和“pointY hasvalue valueY”三元组。三重“time1 hasLabel time1”仍然存在。我也想删除它。 – tanktoo