Запрос SPARQL в dotnetrdf не запрашивает импортированную онтологию

То, что я пытаюсь сделать, это перечислить все классы, используя следующий запрос в файле owl, который я создал с помощью Protege 5 и имеет «foaf» как импортированную онтологию.

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT DISTINCT ?subject ?label ?comment
    WHERE 
    { 
        ?subject a owl:Class 
        OPTIONAL { ?subject a rdfs:Class }
        OPTIONAL { ?subject rdfs:label ?label }
        OPTIONAL { ?subject rdfs:comment ?comment}
    }

Проблема в том, что когда я запускаю этот запрос на вкладке SPARQL в Protege, я получаю все классы, определенные в пространстве имен «foaf», но когда я пытаюсь запустить тот же запрос, используя API-интерфейс dotnetrdf в С#, я не получаю тот же результат.

Ниже приведен мой код на С#

var g = new Graph();
g.LoadFromFile(owlFile, new TurtleParser());
ISparqlDataset ds = new InMemoryDataset(g);
LeviathanQueryProcessor processor = new LeviathanQueryProcessor(ds);
var queryParser = new SparqlQueryParser();
var parmeterizedString = new SparqlParameterizedString(query);
parmeterizedString.SetLiteral("value", searchQuery);
return processor.ProcessQuery(queryParser.ParseFromString(parmeterizedString.ToString())) as SparqlResultSet;

Что я делаю неправильно ?


person Nabin Karki Thapa    schedule 23.09.2017    source источник
comment
parmeterizedString.SetLiteral("value", searchQuery); -- в запросе нет ?value.   -  person AndyS    schedule 23.09.2017


Ответы (1)


Простой синтаксический анализ файла не приводит к выполнению операторов owl:imports. Механизм запросов не чувствителен к OWL.

g.LoadFromFile(owlFile, new TurtleParser());

https://github.com/dotnetrdf/dotnetrdf/wiki/HowTo-Load-OWL

Хотя dotNetRDF не поддерживает OWL с точки зрения аксиом, онтологий и рассуждений OWL.

LoadFromFile читает операторы RDF, которые кодируют онтологию. Обработки на уровне OWL нет, включая обработку owl:imports.

Вы можете смоделировать это, найдя оператор owl:imports и прочитав ссылку в файле g. Это не идеально, но, судя по первоначальному описанию, может быть тем, что нужно.

person AndyS    schedule 23.09.2017