2012-03-14 2 views
2

Я пишу sparql-запрос в java для удаления данных rdf с определенным идентификатором. Я пытаюсь сзапрос sparql для удаления

Delete ?ID ?name Where { 
    ?ID rdf:type ex:example ex:name ?name 
    FILTER(?ID ="something") 
} 

но он ничего не делает. Кто-нибудь знает, в чем моя ошибка?

ответ

4

Этот запрос, вероятно, не удается, тем ближе SPARQL запрос, который может работать в ...

DELETE WHERE { 
    ?id rdf:type ex:example; 
     ex:name ?name . 
    FILTER(?id = <http://foo.com/some/example/uri>) 
} 

Значение переменной ?id не может быть строкой, так как он позиционируется как субъект и RDF все субъекты ирис, не литералы.

Если вы разместите данные некоторых образцов, мы сможем помочь вам лучше.

+0

я думаю, что проблема с SPARQL обновлением, потому что я получаю ошибку Столкнутые «„удалить“» DELETE „“ в строке 6, колонка 1. Ожидал один of "prefix" ... "select" ... "construct" ... "описать" ... "ask" ... Знаете ли вы, что я могу сделать что угодно, чтобы запустить удаление запрос? – user1259487

+0

, какой тройной магазин вы используете? –

+0

Сообщение об ошибке связано с различиями между запросом SPARQL и обновлением SPARQL. Они представлены с использованием разных классов в Jena (что, я думаю, это то, что вы используете), и они обычно отображаются как разные конечные URL: s. Они не совместимы по дизайну, следовательно, ошибка. –

0

Представление RDF означает, что мы можем удалять только удаляя (под) графики. Любая попытка удалить эквивалент полей в запросе SELECT приведет к ошибкам. Кроме того, существует несколько форм запроса DELETE, как видно из SPARQL 1.1 Update specification. Другая проблема с запросом в вопросе заключается в том, что используемый формат DELETE является ярлыком для того, когда предложение WHERE используется для определения троек, которые будут удалены, но фильтр испортил ярлык. Используя полный УДАЛИТЬ синтаксис должен работать нормально:

PREFIX ex: <http://example.org#> 
DELETE { 
    ?id a ex:Example ; 
     ex:name ?name .} 
WHERE { 
    ?id rdf:type ex:Example ; 
    ex:name ?name . 
    FILTER(str(?id) != "") 
}