2016-04-28 5 views
0

Я пытаюсь очень простое обновление SPARQL как в Protégé 4.3 и 5b24:Как обновить троек в Protégé?

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
DELETE {?s ?p ?o} 
WHERE { ?s rdfs:isDefinedBy ?o } 

Он выдает следующее сообщение об ошибке:

An error was thrown: org.openrdf.query.MalformedQueryException: Encountered " "delete" "DELETE "" at line 5, column 1. Was expecting one of: "base" ... "prefix" ... "select" ... "construct" ... "describe" ... "ask" ...

Мои вопросы:

  1. ли любое обновление, разрешенное в Protégé? и если нет

  2. Каковы альтернативные способы доступа к файлам для этого? (включая средства, не относящиеся к SPARQL, в Protégé)

+0

Существует предложение [здесь] (http://stackoverflow.com/questions/30818173/malformed-sparql-delete-query), что Protégé не поддерживает обновления. Но в случае, если это не так, попробуйте [этот ответ] (http://stackoverflow.com/questions/11456102/sparql-query-delete-all-statements). В качестве альтернативы и при условии, что вы работаете в среде Java, вы можете использовать API JENA. [ARQ - процессор SPARQL для Jena] (https://jena.apache.org/documentation/query/index.html), который поддерживает SPARQL/Updates. – ishmaelMakitla

+0

Если вы хотите использовать SPARQL, Protégé 4, вероятно, не является хорошим выбором, поскольку он не основан на RDF. Protégé 3 может работать лучше или использовать другие инструменты на основе RDF, такие как Jena, TopBraid Composer и т. Д. – scotthenninger

+0

Ну, я использовал TopBraid. 'DELETE' не выдавал ошибку, но фактически не работал. Однако «INSERT» работал нормально. Во всяком случае, мне все еще интересно, как это можно сделать в Protégé, и я в порядке, если мне нужно использовать что-то еще, если не SPARQL. –

ответ

0

В вашем графическом изображении DELETE есть ошибка. ?p не связан в предложении WHERE, поэтому диаграмма DELETE не сможет найти совпадение. Ниже будет удалить тройки с rdfs:isDefinedBy как свойство:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
DELETE { ?s rdfs:isDefinedBy ?o } 
WHERE { ?s rdfs:isDefinedBy ?o } 

работать не для TopBraid композитора, и может работать на Protégé.

+0

Я не могу понять, почему этот шаблон неправильный. Попросить удалить каждую тройку, где предикат является «rdfs: isDefinedBy», - это то, как должен работать SPARQL. И если шаблон неправильный, почему тогда он работает с 'SELECT'? На самом деле это то, как я вижу, что я собираюсь удалить. (Я понимаю, что 'SELECT' не работает на тройных шаблонах, тогда как' DELETE' и 'WHERE' do) я бы очень признателен, если бы вы могли разработать. (Я подтверждаю, что с вашим предложением он работает в TBC, он не работает в Protégé, но там я не думаю, что любой UPDATE может работать) –

+0

Путем сопоставления шаблонов в SPARQL является то, что предложение 'WHERE' определяет переменные привязки, которые могут использоваться в 'INSERT',' DELETE', 'CONSTRUCT' и т. д. Если переменные не связаны, то для' p' в вашем случае, тогда DELETE не имеет троек, которые он может создать. Все они были бы '{? S nil? O}', что не является допустимой тройкой. – scotthenninger