Обновление данных RDF с использованием php на сезам-сервере

У меня есть вопрос об обновлении данных RDF с использованием кода PHP на сезам-сервере. Я попытался использовать обновление SPARQL с конечной точки кунжута и преуспел. Однако при использовании PHP это не дало никаких ошибок, но когда я проверяю данные RDF, ничего не меняется!!

при подключении я использовал эту ссылку для обновления: 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);

а у меня ошибка!!

что не так или что мне делать?


person Tota    schedule 09.11.2015    source источник


Ответы (2)


Проблема в том, что вы путаете/смешиваете DELETE DATA и DELETE 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\".
    }";
person Jeen Broekstra    schedule 09.11.2015
comment
Я понял. Спасибо(: - person Tota; 10.11.2015

Я решил проблему, поскольку пытался использовать команду удаления без какой-либо переменной (? s) и вместо этого использовал фактическую тему, например:

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

Я думаю, это потому, что вы не можете удалить то, чего не знаете. и я использовал следующее для его выполнения:

$result = $sparql->update($query);
person Tota    schedule 09.11.2015
comment
Хотя это работает, переменная в вашем запросе на самом деле не является проблемой — и это неправда, что вы не можете удалить то, чего не знаете. Подробности смотрите в моем ответе. - person Jeen Broekstra; 10.11.2015
comment
Также стоит отметить: это обновление отличается от того, что указано в вашем вопросе, — оно удаляет одно конкретное утверждение, в то время как обновление DELETE...WHERE удаляет все соответствующие утверждения. Конечно, может случиться так, что в вашем фактическом наборе данных есть только один оператор с таким точным предикатом и значением объекта, но если вы не уверены в этом, будьте осторожны с тем, какой подход вам действительно нужен. - person Jeen Broekstra; 10.11.2015
comment
Имеет смысл, спасибо - person Tota; 10.11.2015