2017-09-23 128 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來模擬此操作。這並不完美,但從原來的描述來看,可能是想要的。