首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SPARQL的联邦查询

我们知道,三元组数据库用来存储相同的数据结构(三元组:主谓宾),使用SPARQL语句可以在不同的数据库之间通用,即同样的SPARQL语句可以在不同的系统之间进行检索。这就引出了SPARQL中的最亮的一个功能:联邦查询(Federated Query)。联邦查询可以使SPARQL跨数据集进行检索,而无需将这些数据集的数据存放到同一个数据库。

一、“并行”查询远程数据集数据

我们尝试在自己的Virtuoso里面检索CBDB(中国历代人物传记资料库)数据,这里用到SERVICE功能。我们来看一个例子:

使用SPARQL进行检索时,一定要注意使用效率。三元组对于主语和宾语有一个已经确认的情况下,性能较高;尽量避免字符串的操作,比如字符串的截取,字符串的对比等。

SERVICE在一个SPARQL中可以含有多个,即从多个数据集中获取数据。我们一起看下面的SPARQL:

从中可以看出,蓝色的资源s来自于CBDB(资源地址为http://cbdb.library.sh.cn/entity/person/246cgp1bxccnra16);红色的资源s来自于SionPedia(资源地址为http://sinopedia.library.sh.cn/entity/person/7e74fe7977504f2d83624aebea984615)。

二、“串行”查询远程数据集数据

W3C的关联数据标准要求尽可能关联多的数据集(注:以后我们可以专门讲解关联数据的相关知识),不同数据集之间的资源可以用owl:sameAs、rdfs:seeAlso等属性进行关联,这就给不同数据集之间的数据融合提供了便利。

我们还是看上面的例子(从CBDB和SinoPedia中获取数据),从SinoPedia中可以看出,该资源链接到了CBDB数据库。

因此可以这样来写SPARQL,将CBDB中的数据叠加到SinoPedia数据集中。

我们看两个SERVICE的位置,CBDB的SERVICE嵌套在SinoPedia的SERVICE里面,表示先在SinoPedia数据集中检索李清照信息,再根据owl:sameAs的关联属性,从关联的数据集中获取数据(将?same传入CBDB数据端点)。

此外,这里和之前例子还有一个区别为:之前例子,将两个数据集的资源分别显示,即s中有CBDB的资源,也有SinoPedia的资源;这里则将CBDB的资源属性叠加到SinoPedia资源中,返回的结果只有一个资源URI。

当然,“串行”这种方式,也可以将结果返回为各自的资源URI,和“并行”结果完全一致,您会写吗?大家可以把这个作为今天的作业。

如果把整个SPARQL看成是一个星空,则联邦查询可以看成是星空中最亮的那颗星。在实际应用中,联邦查询也用的非常广,尤其是跨数据集的信息整合(混搭),比如生物医学领域中药物的发现(Drug Discovery),就涉及到疾病、基因、蛋白、药物等多个数据集。这里给个例子,大家可以去自行研究,以后有机会,我们可以一起来学习。

Integrating Wikidata and other linked data sources – Federated SPARQL queries

http://sulab.org/2017/07/integrating-wikidata-and-other-linked-data-sources-federated-sparql-queries/

至此,联邦检索分享结束,要想学好SPARQL,一定要多尝试。下一讲,我们将开始学习SPARQL的其它三种查询模式(ASK、DESCRIBE和CONSTRUCT)。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190118G089Z000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券