在芝麻服务器上使用 php 更新 RDF 数据

Updating RDF data using php on sesame server

我有一个关于在芝麻服务器上使用 PHP 代码更新 RDF 数据的问题。 我尝试使用 sesame 端点的 SPARQL 更新并成功。但是,使用 PHP 它没有给出任何错误,但是当我检查 RDF 数据时没有任何变化!!

在连接中,我使用这个link来进行更新: http://localhost:8080/Sesame/repositories/MyData/statements

和下面的代码实现更新:

$query= "
DELETE DATA{
  ?s foaf:firstName \"Lina\".
}
WHERE {
  ?s foaf:firstName \"Lina\".
}";


$result = $sparql->query($query); 

我想我现在必须更改查询功能,因为现在不是查询而是更新。另外,我试过

$result = $sparql->update($query);

我收到一个错误!!

出了什么问题或我应该怎么办?

我已经解决了这个问题,因为我尝试使用不带任何变量 (?s) 的删除命令,而是使用实际主题,例如:

$query= "DELETE DATA{ds:S1 foaf:firstName \"Lina\".}";

我想那是因为你不能删除你不知道的东西。 我使用以下命令来执行它:

$result = $sparql->update($query);

问题是您是 confusing/mixing DELETE DATADELETE WHERE - 它们是 SPARQL 中不同类型的更新操作。只需从查询中删除 DATA 关键字,如下所示:

$query= "
DELETE {
  ?s foaf:firstName \"Lina\".
}
WHERE {
  ?s foaf:firstName \"Lina\".
}";

这将删除所有带有谓词 foaf:firstName 和对象 "Lina" 的语句。

并且由于您想删除匹配的确切三元组,因此不必在 DELETE 子句中重复图形模式,因此您的查询可以变得更短:

$query= "
    DELETE 
    WHERE {
      ?s foaf:firstName \"Lina\".
    }";