Я проверил мой запрос SPARQL на онтологию пиццы в протеже, и запрос работает нормально.Проблема в том, что я пытаюсь выполнить один и тот же запрос к одному и тому же файлу онтологии с помощью dotNetRDF.Запрос возвращает правильное количество результатов, но все они кажутся пустыми.
Кто-нибудь может указать, в чем здесь проблема?
Результаты запроса с использованием Protege:
Запросрезультаты с использованием dotNetRDF:
Вот мой код на C #:
OntologyGraph ontGraph = new OntologyGraph();
FileLoader.Load(ontGraph, "PizzaOntology.owl");
ontGraph.BaseUri = null;
#region SPARQL query
SparqlParameterizedString queryString = new SparqlParameterizedString();
queryString.Namespaces.AddNamespace("rdf", new Uri("http://www.w3.org/1999/02/22-rdf-syntax-ns#"));
queryString.Namespaces.AddNamespace("owl", new Uri("http://www.w3.org/2002/07/owl#"));
queryString.Namespaces.AddNamespace("rdfs", new Uri("http://www.w3.org/2000/01/rdf-schema#"));
queryString.Namespaces.AddNamespace("xsd", new Uri("http://www.w3.org/2001/XMLSchema#"));
queryString.Namespaces.AddNamespace("ont", new Uri("http://www.semanticweb.org/ontologies/pizza.owl#"));
queryString.CommandText = "SELECT ?subject";
queryString.CommandText += "WHERE { ?subject rdfs:subClassOf ont:PizzaBase }";
SparqlQueryParser parser = new SparqlQueryParser();
SparqlQuery query = parser.ParseFromString(queryString);
#endregion
#region Query Processor
TripleStore store = new TripleStore();
store.Add(ontGraph);
InMemoryDataset ds = new InMemoryDataset(store, true);
ISparqlQueryProcessor processor = new LeviathanQueryProcessor(ds);
object results = processor.ProcessQuery(query);
if (results is SparqlResultSet)
{
//Print out the Results
SparqlResultSet rset = (SparqlResultSet)results;
foreach (SparqlResult result in rset)
{
Console.WriteLine(result.ToString());
}
}
#endregion