我正在与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或其他易于扩展的系统是我自己的初步想法。
答案 0 :(得分:0)
如果您需要Jena功能,那么您可以向Virtuoso发出查询并返回图表,然后在该图表上本地执行查询。否则,您需要服务器中的功能,而不是客户端。
(apf:str
功能现在更好,FILTER
或BIND
和STR()
)
答案 1 :(得分:0)
我认为,您也可以对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功能。