【问题标题】:Property functions in VirtuosoVirtuoso 中的属性函数
【发布时间】:2014-03-06 15:47:48
【问题描述】:

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

使用 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 或其他易于扩展的系统代替是我自己的初步想法。

【问题讨论】:

    标签: sparql jena virtuoso


    【解决方案1】:

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

    apf:str 功能现在最好使用 FILTERBINDSTR()

    【讨论】:

      【解决方案2】:

      我认为,您也可以对 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 执行查询(在客户端,但图形数据将通过 VirtuosoGraph API 调用从 Virtuoso 加载)。 它的工作速度比服务器端执行查询要慢,但您将能够使用所有 ARQ 功能。

      【讨论】:

      • 感谢您的回复。代码 sn-p 没有为我提供任何结果。如果我使用 {?S ?P ?O} 作为三重模式,我会得到结果,所以它不是非连接或类似的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多