如何解决将 Hermit 与 ONT-API 和 SPARQL 查询结合使用
我正在使用 owl-api 通过 swrl 规则加载和 owl 本体。
IRI iri = IRI.create(BASE_URL);
OntologyManager manager = OntManagers.createManager();
// Load an ontology
Ontology ontologyWithRules = manager.loadOntologyFromOntologyDocument(iri);
然后我实例化一个隐士推理器:
import org.semanticweb.hermit.reasonerFactory;
OWLreasonerFactory reasonerFactory = new reasonerFactory();
OWLreasoner reasoner = reasonerFactory.createreasoner(ontologyWithRules);
最后,我想查询这个模型:
try (
QueryExecution qexec = QueryExecutionFactory.create(QueryFactory
.create("SELECT ?s ?p ?o WHERE { ?s ?p ?o }"),ontologyWithRules.asGraphModel())
) {
ResultSet res = qexec.execSelect();
while (res.hasNext()) {
System.out.println(res.next());
}
}
但是没有使用推理器。有没有办法在打开推理器的情况下在图形上使用 SPARQL 查询?
解决方法
对模型运行推理是缺失的一步。因此,我需要使用 InferredOntologyGenerator
类。
一行代码说一千多字:
/**
* Important imports:
* import org.semanticweb.HermiT.ReasonerFactory;
* import org.semanticweb.owlapi.util.InferredOntologyGenerator;
**/
IRI iri = IRI.create(BASE_URL);
OntologyManager manager = OntManagers.createManager();
// Load an ontology
Ontology ontologyWithRules = manager.loadOntologyFromOntologyDocument(iri);
// Instantiate a Hermit reasoner:
OWLReasonerFactory reasonerFactory = new ReasonerFactory();
OWLReasoner reasoner = reasonerFactory.createReasoner(ontologyWithRules);
OWLDataFactory df = manager.getOWLDataFactory();
// Create an inference generator over Hermit reasoner
InferredOntologyGenerator inference = new InferredOntologyGenerator(reasoner);
// Infer
inference.fillOntology(df,ontologyWithRules);
// Query
try (
QueryExecution qexec = QueryExecutionFactory.create(QueryFactory
.create("SELECT ?s ?p ?o WHERE { ?s ?p ?o } "),ontologyWithRules.asGraphModel())
) {
ResultSet res = qexec.execSelect();
while (res.hasNext()) {
System.out.println(res.next());
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。