2014-03-06 53 views
4

我正在与Jena和Virtuoso一起承载一些RDF数据。 我打算将Jena作为接口,将Virtuoso作为后端存储,因为Jena似乎更容易扩展,并且Virtuoso具有一些很好的功能,例如将关系数据转换为RDF。 我的问题是,在Jena(描述为here)中的属性函数以及我想实现的属性函数在将virtuoso用作底层存储时似乎没有任何影响。Virtuoso中的属性函数

的查询中使用TDB(TDBFactory.createDataset)时,使数据集工作,但不使用时炫技工作示例(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

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

(该apf:str功能更好地完成现在作为FILTERBINDSTR()

0

我想,你可以执行对炫技服务器也该查询,而无需重写。 尝试下一:

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调用被载入)。 它比查询的服务器端执行速度慢,但您将能够使用所有ARQ功能。

+0

谢谢你的回应。代码片段不会为我提供任何结果。如果我使用{?s?五氧化二磷}三重模式,而不是我得到的结果,所以它不是没有连接或类似的东西。 – abondoa