【发布时间】:2016-09-22 21:25:37
【问题描述】:
我在 sesame 中有两个存储库,其中一个包含完整数据,另一个包含链接到原始数据的少量字段的数据。
例子:
主要数据字段:
uri、skos:prefLabel、skosAltLabel 等
辅助数据字段:
uri,自定义字段
所以基本上我想查询 customField 上的辅助数据,这将返回可以映射到主数据并获取其他详细信息的 uri。
所以它们是链接数据集。
那么是否可以一次查询在芝麻上的链接存储库?
【问题讨论】:
我在 sesame 中有两个存储库,其中一个包含完整数据,另一个包含链接到原始数据的少量字段的数据。
例子:
uri、skos:prefLabel、skosAltLabel 等
uri,自定义字段
所以基本上我想查询 customField 上的辅助数据,这将返回可以映射到主数据并获取其他详细信息的 uri。
所以它们是链接数据集。
那么是否可以一次查询在芝麻上的链接存储库?
【问题讨论】:
SPARQL 1.1 支持SERVICE 子句,它允许您将来自多个 SPARQL 端点的结果合并到一个查询结果中。因为 Sesame Server 将每个存储库都公开为 SPARQL 端点,所以您可以使用它对多个存储库进行查询。
例如,假设您有一个在 http://localhost:8080/openrdf-sesame 上运行的芝麻服务器,它有两个存储库,Primary 和 Secondary。两个存储库的 SPARQL 查询端点分别是 http://localhost:8080/openrdf-sesame/repositories/Primary 和 http://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 .
}
}
另一种方法是使用FederationSail 在 Sesame 中设置联合存储库。这是一种将多个 Sesame 数据库组合在一起以形成“虚拟”存储库 - 联合的方式。您可以对联邦执行查询,结果将包括来自联邦所有成员数据库的数据(无需指定要查询的端点,就像使用 SERVICE 子句时需要做的那样)。
可以通过编程方式或(如果您使用 Sesame Server 和 Workbench)通过 Workbench 设置联合。只需选择“新存储库”,然后在存储类型下拉列表中选择“联合存储”选项。给它一个 id 和一个描述,然后在下一个屏幕上你可以选择哪些数据库应该是联邦的一部分。
【讨论】: