Sparql запрос для удаления - PullRequest
3 голосов
/ 14 марта 2012

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

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

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

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

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

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

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

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

2 голосов
/ 15 мая 2017

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

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