我正在使用Jena和Virtuoso托管一些RDF数据。我计划使用Jena作为接口,使用Virtuoso作为后端存储,因为Jena似乎更容易扩展,并且Virtuoso具有一些不错的功能,例如将关系数据转换为RDF。我的问题是,当virtuoso用作底层存储时,Jena中的属性函数(描述为here)以及我想实现的属性函数似乎没有任何效果。
使用TDB (TDBFactory.createDataset)创建数据集,但使用Virtuoso (VirtGraph,VirtDataset,还尝试使用QueryExecutionFactory.sparqlService)时不起作用的查询示例:
PREFIX apf: <java:com.hp.hpl.jena.sparql.pfunction.library.>
SELECT *
WHERE
{ ?s apf:str "Test" }
LIMIT 5我正在寻找一种让Jena/ARQ对发送到Virtuoso的查询结果进行预处理或后处理的方法。
如果这是不可能的,请指出其他方向。在Virtuoso中实现属性函数,或者使用Sesame或其他容易扩展的系统,这是我自己的初步想法。
发布于 2014-03-07 18:37:21
如果您需要Jena功能,那么可以向Virtuoso发出一个查询并返回一个图,然后在该图上本地执行一个查询。否则,你需要的是服务器的功能,而不是客户端的功能。
(现在更好的做法是使用FILTER或BIND和STR()来实现apf:str功能)
发布于 2014-03-10 10:47:23
我认为,您也可以在Virtuoso服务器上执行此查询,而无需重写。尝试下一步:
Model m = VirtModel.openDatabaseModel(...);
Query query = QueryFactory.create(
"PREFIX apf: <java:com.hp.hpl.jena.sparql.pfunction.library.> "+
"SELECT * WHERE { ?s apf:str "Test" } LIMIT 5") ;
QueryExecution qexec = com.hp.hpl.jena.query.QueryExecutionFactory.create(query, m) ;
ResultSet rs = qexec.execSelect() ;上面的示例将通过Jena ARQ执行查询(在客户端,但图形数据将通过VirtosoGraph API调用从Virtuoso加载)。它的工作速度比服务器端的查询执行速度慢,但你可以使用所有的ARQ特性。
https://stackoverflow.com/questions/22229302
复制相似问题