dotnetrdf 中的 SPARQL 查询不查询导入 ontology
SPARQL query in dotnetrdf does not query imported ontology
我想做的是在 owl 文件中使用以下查询列出所有 类,该文件是我使用 Protege 5 创建的,并且已导入 "foaf" ontology.
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}
}
问题是,当我在 Protege 的 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;
我做错了什么?
仅解析文件不会导致遵循 owl:imports 语句。查询引擎不 OWL 敏感。
g.LoadFromFile(owlFile, new TurtleParser());
https://github.com/dotnetrdf/dotnetrdf/wiki/HowTo-Load-OWL
While dotNetRDF does not support OWL in terms of axioms, OWL
ontologies and reasoning
LoadFromFile
读取编码 ontology 的 RDF 语句。没有 OWL 级处理,包括处理 owl:imports
.
您可以通过找到 owl:imports 语句并将 link 读入 g
来模拟这一点。这并不完美,但从最初的描述来看,可能正是我们想要的。
我想做的是在 owl 文件中使用以下查询列出所有 类,该文件是我使用 Protege 5 创建的,并且已导入 "foaf" ontology.
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}
}
问题是,当我在 Protege 的 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;
我做错了什么?
仅解析文件不会导致遵循 owl:imports 语句。查询引擎不 OWL 敏感。
g.LoadFromFile(owlFile, new TurtleParser());
https://github.com/dotnetrdf/dotnetrdf/wiki/HowTo-Load-OWL
While dotNetRDF does not support OWL in terms of axioms, OWL ontologies and reasoning
LoadFromFile
读取编码 ontology 的 RDF 语句。没有 OWL 级处理,包括处理 owl:imports
.
您可以通过找到 owl:imports 语句并将 link 读入 g
来模拟这一点。这并不完美,但从最初的描述来看,可能正是我们想要的。