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", но когда я пытаюсь выполнить тот же запрос, используя dotnetrdf api в C#, я не получаю тот же результат.
Ниже мой код в C#
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;
Что я делаю неправильно?
1 ответ
Простой синтаксический анализ файла не приводит к тому, что операторы owl:import должны следовать. Механизм запросов не чувствителен к OWL.
g.LoadFromFile(owlFile, new TurtleParser());
https://github.com/dotnetrdf/dotnetrdf/wiki/HowTo-Load-OWL
Хотя dotNetRDF не поддерживает OWL с точки зрения аксиом, онтологий OWL и аргументации
LoadFromFile
читает операторы RDF, которые кодируют онтологию. Нет обработки на уровне OWL, и это включает в себя обработку owl:imports
,
Вы можете смоделировать это, найдя выражение owl:import и прочитав ссылку на g
, Это не идеально, но из оригинального описания может быть то, что нужно.