2015-11-09 3 views
1

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

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

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

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

ответ

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

Я получил его сейчас. Спасибо(: – Tota

1

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

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

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

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

В то время как это работает, то переменная в вашем запросе на самом деле не проблема - и неправда, что вы «не можете удалить что-то, чего не знаете». См. Мой ответ для деталей. –

+0

Также стоит отметить: это обновление делает что-то отличное от того, которое было в вашем вопросе, - оно удаляет один конкретный оператор, в то время как обновление 'DELETE ... WHERE' удаляет _all_-инструкции, которые соответствуют. Разумеется, может быть, что в вашем фактическом наборе данных есть только одно утверждение с этим точным предикатом и объектной стоимостью, но если вы не уверены в этом, будьте осторожны, какой подход вам действительно нужен. –

+0

Смысл, спасибо – Tota

Смежные вопросы