SPARQL:删除实例及其所有具有链接子属性的属性

SPARQL:删除实例及其所有具有链接子属性的属性,sparql,virtuoso,triplestore,Sparql,Virtuoso,Triplestore,我有一个关于使用SPARQL从triplestore(在我的例子中是一个大师)中删除元素的问题。我已将以下元素存储在图形中: @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 &

我有一个关于使用SPARQL从triplestore(在我的例子中是一个大师)中删除元素的问题。我已将以下元素存储在图形中:

@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:。
@前缀ssn:。
a xy:点;
xy:值“10”;
ssn:观察结果时间;
ssn:观测采样时间;
ssn:观察者。
正如你们所看到的,我有一个xy:点,它有一些属性。在我的数据库中,我存储了几十个这样的点。现在我的问题是:如何删除一个点及其所有属性(甚至可能是ObservationsSamplingTime、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:。
@前缀ssn:
删除{
?观察a xy:点。
?观察xy:值?值。
观察ssn:观察结果时间?结果时间。
?观测ssn:观测采样时间?采样时间。
?观测ssn:由?传感器观测。
}
在哪里{
?观察xy:值?值。
观察ssn:观察结果时间?结果时间。
?观测ssn:观测采样时间?采样时间。
?观测ssn:由?传感器观测。
}
我想做的是“删除?观测a xy:点及其所有子特性”。有没有可能这样做

谢谢和亲切的问候

坦克托

(甚至可能与ObservationsSamplingTime、observationResultTime的子属性相关)

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

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

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

:time1 :hasLabel "time1" .
如果您“删除”:pointX,并递归删除:time1,则您也会丢失对:pointY很重要的信息。请记住,三元组存储存储三元组的集合。事物只有作为主语、谓语或宾语才能存在

无论如何,你想做的并不难。您只需执行以下操作:

删除{s?p?o}
在哪里{
:thing(|!)*?s。
?s?p?o。
}

(|!)*是一个通配符路径,因此s绑定到任何可以从:thing访问的对象,包括:thing本身?p?o只是?s的属性和对象。有关通配符的更多信息,请参阅。

您是否实际存储了
?这是一个相对的IRI,以后可能会引起一些问题。我在例子中遗漏了这一点。这仍然是一个相对的IRI…嗨,谢谢你的回答。我试过了,但不完全有效。如果“time1”具有子属性,则不会将其删除。我怎样才能删除它们呢?在我的triplestore中,不应该有链接的东西被另一个点使用的情况。如果我有多个点使用的属性,它们将存储在不同的图形中。我不确定您所说的
“time1”
是什么意思。“time1”是一个字符串,它是一个文本,不能作为at-triple的主语。例如,您不能有
“time1”:property:value“
。如果我使用您的命令,三元组“pointY hasme time1”和“pointY hasvalue valueY”将被删除。三元组“time1 hasLabel time1”仍然存在。我也想删除它。很抱歉,我的查询中有一个输入错误,它应该是
(|!)
(感叹号,不是插入符号)。我将更新答案谢谢!此解决方案在我的测试环境中与JENA DB和Fuseki一起工作,但不在Virtuoso 7中。两个商店都有相同的图形,但在Virtuoso上,查询返回一个空结果…不知道这是否是另一个严重的Virtuoso错误。