Virtuoso的财产功能

时间:2014-03-06 15:47:48

标签: sparql jena virtuoso

我正在与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或其他易于扩展的系统是我自己的初步想法。

2 个答案:

答案 0 :(得分:0)

如果您需要Jena功能,那么您可以向Virtuoso发出查询并返回图表,然后在该图表上本地执行查询。否则,您需要服务器中的功能,而不是客户端。

apf:str功能现在更好,FILTERBINDSTR()

答案 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功能。