如何同时查询两个芝麻仓库?

How to query two sesame repositories at a time?

我在 sesame 中有两个存储库,一个有完整的数据,一个有几个链接到主要数据的字段的数据。

示例:

主要数据字段:

uri、skos:prefLabel、skosAltLabel 等

辅助数据字段:

uri、自定义字段

所以基本上我想在 customField 上查询辅助数据,它将 return 可以映射到主要数据的 uri 并获取其他详细信息。

所以它们是链接数据集。

那么是否可以同时查询芝麻上的链接库?

使用 SPARQL 1.1 SERVICE 查询

SPARQL 1.1 支持 SERVICE 子句,它允许您将来自多个 SPARQL 端点的结果合并到一个查询结果中。因为 Sesame Server 将每个存储库公开为 SPARQL 端点,您可以使用它对多个存储库进行查询。

例如,假设您在 http://localhost:8080/openrdf-sesame 有一个 Sesame 服务器 运行,有两个存储库,PrimarySecondary。两个存储库的 SPARQL 查询端点分别为 http://localhost:8080/openrdf-sesame/repositories/Primaryhttp://localhost:8080/openrdf-sesame/repositories/Secondary

您可以在一个存储库(例如 Primary)上执行 SPARQL,然后在查询中引用另一个存储库,如下所示:

 SELECT *
 WHERE { 
         # data from Primary dataset
         ?uri a skos:Concept ;
              skos:prefLabel ?prefLabel ;
              skos:altLabel ?altLabel .

         # data from Secondary dataset  
         SERVICE <http://localhost:8080/openrdf-sesame/repositories/Secondary>  {
             ?uri :customField ?customFieldValue .
         }
}  

使用 Sesame 的 FederationSail

另一种方法是使用 FederationSail 在 Sesame 中设置联合存储库。这是一种将多个 Sesame 数据库组合在一起以形成 "virtual" 存储库 - 联合的方法。您可以在联邦上执行查询,结果将包括来自联邦所有成员数据库的数据(无需指定要查询的端点,就像使用 SERVICE 子句时需要做的那样)。

可以通过编程方式设置联合,或者(如果您使用的是 Sesame Server 和 Workbench)通过 Workbench。只需选择 'New repository',然后在商店类型下拉列表中选择 'Federation store' 选项。给它一个 id 和一个描述,然后在下一个屏幕上你可以选择哪些数据库应该成为联邦的一部分。