如何同时查询两个芝麻仓库?
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 服务器 运行,有两个存储库,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 .
}
}
使用 Sesame 的 FederationSail
另一种方法是使用 FederationSail
在 Sesame 中设置联合存储库。这是一种将多个 Sesame 数据库组合在一起以形成 "virtual" 存储库 - 联合的方法。您可以在联邦上执行查询,结果将包括来自联邦所有成员数据库的数据(无需指定要查询的端点,就像使用 SERVICE 子句时需要做的那样)。
可以通过编程方式设置联合,或者(如果您使用的是 Sesame Server 和 Workbench)通过 Workbench。只需选择 'New repository',然后在商店类型下拉列表中选择 'Federation store' 选项。给它一个 id 和一个描述,然后在下一个屏幕上你可以选择哪些数据库应该成为联邦的一部分。
我在 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 服务器 运行,有两个存储库,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 .
}
}
使用 Sesame 的 FederationSail
另一种方法是使用 FederationSail
在 Sesame 中设置联合存储库。这是一种将多个 Sesame 数据库组合在一起以形成 "virtual" 存储库 - 联合的方法。您可以在联邦上执行查询,结果将包括来自联邦所有成员数据库的数据(无需指定要查询的端点,就像使用 SERVICE 子句时需要做的那样)。
可以通过编程方式设置联合,或者(如果您使用的是 Sesame Server 和 Workbench)通过 Workbench。只需选择 'New repository',然后在商店类型下拉列表中选择 'Federation store' 选项。给它一个 id 和一个描述,然后在下一个屏幕上你可以选择哪些数据库应该成为联邦的一部分。