SPARQL子查询和DELETE

时间:2015-10-14 15:58:43

标签: sparql

我正在尝试删除与一系列相似内容相关的特定三元组。那么,我们在哪里......

someURI a our:thing;
 our:name "literal".
someOtherURI a our:thing;
 our:name "literal".
...n

我想专门删除所有someURI our:name "literal"三元组并保留定义的内容。

我知道我可以通过DELETE DATA执行此操作,但这需要我首先了解所有URI,这本身就是太多的步骤。

我与DELETE WHERE有点挣扎,但我认为答案就像...

DELETE{ ?uri our:name ?literal }
WHERE{ ?uri a our:thing. }

首先,是我的DELETE WHERE声音?

其次,我想知道是否可以在SELECT内嵌套DELETE DATA查询?所以......

DELETE DATA{ 
 ?uri our:name ?literal
 {
   SELECT ?uri
   WHERE {?uri a our:thing.}
 }
}

具体来说,子查询是否会提供地面三元组(用于替换?uri变量的URI,或者DELETE DATA的无变量规则是否会先抛出错误?这似乎很明显,但我已经一直想知道,无法在我的三重商店中测试它。我正在使用OWLIM-SE。

1 个答案:

答案 0 :(得分:4)

  

首先,是我的DELETE WHERE声音?

几乎,但不完全。 DELETE子句不能包含任何未绑定在WHERE子句中的变量(在您的情况下为变量?literal)。所以你需要稍微修改它,如下所示:

DELETE { 
  ?uri our:name ?literal .
}
WHERE { 
  ?uri a our:thing; 
       our:name ?literal . 
}
  

其次,我想知道是否可以在SELECT内嵌套DELETE DATA查询   一个DELETE DATA

这是不可能的。 SELECT操作只能 包含固定的RDF三元组 - 没有变量,当然也没有子查询。

但是,如果需要,可以DELETE WHERE操作中使用嵌套DELETE { ?uri our:name ?literal . } WHERE { { SELECT ?uri ?literal WHERE { ?uri a our:thing; our:name ?literal . } } } 。所以以下是合法的:

.btn {padding:10px 40px 10px 20px;
    width:70%;
    border-radius:3px;
    border:2px solid inherit;
border-color: #eeeeee;
    background-color:rgb(153,0,51);
    background-position:center right;
    background-repeat:no-repeat;
    text-align:center;
 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#990033', endColorstr='#ffffff',GradientType=1 ); /* IE6-9 */
    font-size: .6em

    }
     .white_txt {color:#ffffff!important;}
     .purple_btn {border:2px solid #eeeeee;border-radius:3px;}

在您的特定情况下,它并没有给您带来任何优势:此更新表达与第一个完全相同的东西,只是以更迂回的方式。