Sparql Virtuoso中的属性函数

Sparql Virtuoso中的属性函数,sparql,jena,virtuoso,Sparql,Jena,Virtuoso,我正在与Jena和Virtuoso合作,以托管一些RDF数据。 我计划使用Jena作为接口,使用Virtuoso作为后端存储,因为Jena似乎更易于扩展,而且Virtuoso具有一些很好的特性,例如将关系数据转换为RDF。 我的问题是,当virtuoso用作底层存储时,Jena中的属性函数(如上所述)和我想要实现的属性函数似乎没有任何效果 使用TDB(TDBFactory.createDataset)生成数据集时查询工作,但使用Virtuoso(VirtGraph、VirtDataset,以及尝

我正在与Jena和Virtuoso合作,以托管一些RDF数据。 我计划使用Jena作为接口,使用Virtuoso作为后端存储,因为Jena似乎更易于扩展,而且Virtuoso具有一些很好的特性,例如将关系数据转换为RDF。 我的问题是,当virtuoso用作底层存储时,Jena中的属性函数(如上所述)和我想要实现的属性函数似乎没有任何效果

使用TDB(TDBFactory.createDataset)生成数据集时查询工作,但使用Virtuoso(VirtGraph、VirtDataset,以及尝试QueryExecutionFactory.sparqlService)时不工作的示例:

前缀apf: 挑选* 哪里 {s apf:str“Test”} 限制5 我正在寻找一种让Jena/ARQ对发送给Virtuoso的查询结果进行预处理或后处理的方法


如果不可能,请指出其他方向。我最初的想法是在Virtuoso中实现属性函数,或者使用Sesame或其他易于扩展的系统。

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


(apf:str的
FILTER
BIND
str()
功能现在做得更好)

我认为,您也可以对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() ;
Model m=VirtModel.openDatabaseModel(…);
Query=QueryFactory.create(
“前缀apf:”+
“选择*其中{s apf:str“Test”}限制5”);
QueryExecution qexec=com.hp.hpl.jena.query.QueryExecutionFactory.create(query,m);
ResultSet rs=qexec.execSelect();
上面的示例将通过jenaarq执行查询(在客户端,但图形数据将通过virtographapi调用从Virtuoso加载)。
它比服务器端执行查询的速度慢,但您可以使用所有ARQ功能。

谢谢您的回复。代码片段没有为我提供任何结果。如果我使用{S?P?O}作为三重模式,我会得到结果,所以它不是not连接或类似的东西。
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() ;