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

1

У меня вопрос об обновлении данных 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);

и я получил ошибку!

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

Теги:
sparql
sesame

2 ответа

1
Лучший ответ

Проблема в том, что вы запутываете/смешиваете 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\".
    }";
  • 0
    Я понял. Спасибо(:
1

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

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

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

$result = $sparql->update($query);
  • 0
    Хотя это работает, переменная в вашем запросе на самом деле не является проблемой - и это неправда, что вы «не можете удалить то, что не знаете». Смотрите мой ответ для деталей.
  • 0
    Также стоит отметить: это обновление делает что-то отличное от того, которое задано в вашем вопросе - оно удаляет одно конкретное утверждение, в то время как обновление DELETE...WHERE удаляет все соответствующие утверждения. Конечно, может быть так, что в вашем фактическом наборе данных есть только одно утверждение с таким точным предикатом и значением объекта, но если вы не уверены в этом, будьте осторожны с тем, какой подход вам действительно нужен.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню