SPARQL, почему существуют условия DELETE и WHERE?

Недавно я удалял некоторые данные в соответствии с совпадающим шаблоном ?s a :answers и замечаю, что могу добиться правильного выполнения удаления только в том случае, если бы у меня были оба блока условий одинаковыми:

PREFIX :      <http://localhost:2020/vocab/> 
DELETE {
    ?s a :answers
}
WHERE {
    ?s a :answers
}
# returns all the correct data

и если блок удаления более общий, ничего не возвращается:

PREFIX :      <http://localhost:2020/vocab/>
DELETE {
    ?s ?p ?o
}
WHERE {
    ?s a :answers
}
# returns 0 rows

Для чего нужны два разных набора условий (материал между фигурными скобками: {...})? и какой на самом деле выбирает данные для удаления?


person Kristian    schedule 16.02.2015    source источник


Ответы (1)


Потому что то, что вы удаляете, может не совпадать с WHERE.

Для первого случая есть специальная форма:

DELETE WHERE { ?s a :answers }

Во втором? P и? O не связаны. Пытаться:

DELETE {
    ?s ?p ?o
}
WHERE {
    ?s a :answers .
    ?s ?p ?o .
}
person AndyS    schedule 16.02.2015