java - Virtuoso Jena 程序中的推理器
问题描述
我正在使用 Virtuoso Jena Provider 来查询上传到 Virtuoso 上的图表,但我也想在我的查询中添加推理。
我已经尝试过这段代码,但我得到了一个错误.execSelect();
在线
Exception in thread "main" java.lang.NullPointerException
at mypackage.Main.main(Main.java:49)
这是我到目前为止尝试过的代码。
VirtGraph vg = new VirtGraph(graph, url, username, password);
VirtModel model = new VirtModel(vg);
InfModel ont = ModelFactory.createInfModel(ReasonerRegistry.getOWLReasoner(), model);
Query sparql = QueryFactory.create("PREFIX sosa: <http://www.w3.org/ns/sosa/>\r\n" +
"PREFIX ex: <http://example.org/data/>\r\n" +
"SELECT ?s ?o FROM <http://147.27.60.65/sensorOntology> WHERE {?s sosa:isHostedBy ?o}");
QueryExecution vqe = VirtuosoQueryExecutionFactory.create(sparql, ont);
ResultSet results = vqe.execSelect();
向我的图表添加推理器的正确方法是什么?如何查询结果集?
这些是我正在使用的版本: Jena:3.1 JDBC:4 Virtuoso:6
编辑我从https://github.com/stardog-union/pellet 安装了 Pellet 推理器,但我只能正确推断存储在我的电脑上并加载到 Jena 上的 .owl 文件,但我仍然无法推断作为大师图上传的相同文件.
解决方案
VirtuosoQueryExecutionFactory
只能与VirtGraph
/VirtModel
数据源一起使用。
如果要对InfModel
数据源执行查询,则必须使用 Jena 查询引擎。
正确的示例在Virtuoso Jena Example14 => inpublic static void test4() { ... }
代码来自test4()
...
public static void exec_select(String header, Model m, String query) {
String h = header==null?"":header;
System.out.println("===========["+h+"]==========");
System.out.println("Exec: "+ query);
Query jquery = QueryFactory.create(query) ;
QueryExecution qexec = QueryExecutionFactory.create(jquery, m) ;
ResultSet results = qexec.execSelect();
ResultSetFormatter.out(System.out, results, jquery);
qexec.close();
System.out.println("============================\n");
}
...
public static void test4() {
try {
System.out.println("--------------- TEST 4 -------------------");
VirtModel vdata = VirtModel.openDatabaseModel("test:inf4", URL, uid, pwd);
vdata.removeAll();
String NS = PrintUtil.egNS;
Resource c1 = vdata.createResource(NS + "C1");
Resource c2 = vdata.createResource(NS + "C2");
Resource c3 = vdata.createResource(NS + "C3");
vdata.add(c2, RDFS.subClassOf, c3);
vdata.add(c1, RDFS.subClassOf, c2);
OntModel om = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_RDFS_INF, vdata);
exec_select("Data in DB", vdata, "select * where {?s ?p ?o}");
exec_select("Data in Ontology Model", om, "select * where {?s ?p ?o}");
exec_select("Data in Ontology", om, "select * where {<"+c1+"> <"+RDFS.subClassOf+"> ?o}");
} catch (Exception e) {
System.out.println("ERROR Test Failed.");
e.printStackTrace();
}
}
推荐阅读
- c# - 在.net core web api中的属性上显示名称注释
- reactjs - 在 MERN 中,我如何在客户端管理 JWT cookie?
- python - Zerodha KiteConnect API 产生 1006 错误
- php - 如何在与函数相同的 php 文件中使用 include_once
- python-3.x - 为 PCA 生成 95% 的预测省略号
- pyspark - 使用 Pregel 构建树层次结构
- solr - 按常数排序
- flutter - FutureBuilder 不会等到未来完成
- c++ - Qt保持gui响应
- api - Flutter从API调用的地图内的列表中提取数据