2017-09-23 55 views
1

我想要做的是列出所有的类,在我使用Protege 5创建的owl文件中使用以下查询,并将“foaf”作为导入的本体。dotnetrdf中的SPARQL查询不查询导入的本体

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标签运行此查询我得到了“FOAF”命名空间中定义的所有类,但是当我尝试使用C#中dotnetrdf API来运行相同的查询我不明白相同的结果。

以下是我在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; 

我到底做错了什么?

+0

'parmeterizedString.SetLiteral(“value”,searchQuery);' - 查询中没有?值。 – AndyS

回答

4

只解析文件不会导致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来模拟此操作。这并不完美,但从原来的描述来看,可能是想要的。