关于sparql:在芝麻服务器上使用php更新RDF数据

Updating RDF data using php on sesame server

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

在连接中,我已使用此链接进行更新:
http:// localhost:8080 / Sesame / repositories / MyData / statements

和以下代码来实现更新:

1
2
3
4
5
6
7
8
9
10
$query="
DELETE DATA{
  ?s foaf:firstName "
Lina".
}
WHERE {
  ?s foaf:firstName "
Lina".
}"
;


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

我以为我现在必须更改查询功能,这不是查询,而是更新。另外,我尝试了

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

我出错了!

哪里出了问题或该怎么办?


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

1
2
3
4
5
6
7
$query="
DELETE {
  ?s foaf:firstName "
Lina".
}
WHERE {
  ?s foaf:firstName "
Lina".
}"
;

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

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

1
2
3
4
5
$query="
    DELETE
    WHERE {
      ?s foaf:firstName "
Lina".
    }"
;


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

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

我认为这是因为您无法删除自己不认识的内容。
我使用以下代码来执行它:

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