知识图谱学习与实践(4)——通过例句介绍Sparql的使用

通过例句介绍Sparql的使用

1 简介

SPARQL的定义,是一个递归的定义,为SPARQL Protocal and RDF Query Language,是W3C制定的RDF知识图谱标准查询语言,大部分的图数据库都支持SPARQL查询。SPARQL在语法上借鉴了SQL。SPARQL是针对RDF三元组进行查询,通过图匹配的方式获得需要查找的内容。

下面通过一个例子来说明SPARQL的查询语句的基本结构。这个例子可以在http://dbpedia.org/sparql中运行,获取结果。

prefix ontology:<http://dbpedia.org/ontology/>

select distinct  ?p  ?o

from <http://dbpedia.org>

where  {ontology:deathDate ?p ?o}

LIMIT 10

查询例句,包括了5个部分。

第一部分是前缀声明,这部分主要是为了后面查询内容的简洁,本例中用ontology代替http://dbpedia.org/ontology/,在后面的查询中直接使用ontology,比如ontology:deathDate就表示http://dbpedia.org/ontology/deathDate,

第二部分是select子句,用来确定需要查找的内容。以变量的形式体现,本例中就是查找?p和?o,按照三元组的主谓宾结构,这里查找的是谓语和宾语,分别用带问号的字符(串)来表示。

第三部分是from子句,用来确定从哪个图数据库中查找,类似于关系数据库的表名。本例需要查找的数据是在图数据库http://dbpedia.org中进行查找。也可以把http://dbpedia.org这个Graph IRI放到第一个方框内,作为默认的数据集名称。

第四部分是where子句,这部分是用来匹配三元组,把需要匹配的内容放到{}中,本例中,ontology:deathDate ?p ?o的含义就是主语是ontology:deathDate,即http://dbpedia.org/ontology/deathDate,谓语是?p,宾语是?o,匹配这个内容结构的所有三元组,也就是找出主语是http://dbpedia.org/ontology/deathDate的所有三元组。

第五部分是查询修正的内容,类似于关系数据查询最后的一些限定子句,比如排序order by,限定前几个输出的limit等。本例就是用的limit 10,限定只输出10个结果。

查询结果如下


p


o


http://www.w3.org/1999/02/22-rdf-syntax-ns#type


http://www.w3.org/2002/07/owl#FunctionalProperty


http://www.w3.org/1999/02/22-rdf-syntax-ns#type


http://www.w3.org/1999/02/22-rdf-syntax-ns#Property


http://www.w3.org/1999/02/22-rdf-syntax-ns#type


http://www.w3.org/2002/07/owl#DatatypeProperty


http://www.w3.org/2002/07/owl#equivalentProperty


http://www.wikidata.org/entity/P570


http://www.w3.org/2002/07/owl#equivalentProperty


http://schema.org/deathDate


http://www.w3.org/2000/01/rdf-schema#label


"Sterbedatum"@de


http://www.w3.org/2000/01/rdf-schema#label


"date de décès"@fr


http://www.w3.org/2000/01/rdf-schema#label


"death date"@en


http://www.w3.org/2000/01/rdf-schema#label


"sterfdatum"@nl


http://www.w3.org/2000/01/rdf-schema#label


"ημερομην?α_θαν?του"@el

2 一些常用的查询语句

2.1 最简单的查询

就像SQL语句中的查询所有内容select * from table,SPARQL也有一个查询全部数据的语句,也是最简单的语句。

select ?s ?p ?o where {?o ?p ?o}

这个语句可以查看图数据库里面的所有三元组,不过如果数据集比较庞大,可能发生延时错误,也就是在一定的时间内查询不能完成导致最后无法完成查询,从而不能提供查询结果。

2.2 聚合函数

在SPARQL中,也有类似SQL中的聚合函数,比如count,比较常用的一个就是查询图数据库的三元组数量。

select count(?s) where {?o ?p ?o}

我们用上面的语句查询http://dbpedia.org中三元组的数量,我查了几次,有几次是给出延时错误,有的时候能给出结果。


callret-0


316290000

可以看到,http://dbpedia.org这个图数据库一共有3亿多条数据。

2.3 opional过滤

使用optional,可以起到过滤的作用,如果满足optional后面匹配的条件,则结果显示出来。比如下面的语句

prefix ontology:<http://dbpedia.org/ontology/>

select distinct  ?p  ?o

where  {{?s ?p <http://schema.org/deathDate>}  optional {?s <http://www.w3.org/2000/01/rdf-schema#label> ?o}}

查询的含义是先查找宾语是http://schema.org/deathDate 的主语?s和谓语?p,将主语?s满足模式?s <http://www.w3.org/2000/01/rdf-schema#label> ?o的内容找出来,最后显示出两个条件都满足的结果,也可以理解为,通过optional后面的子句过滤掉一部分第一个子句的结果,得到最终的结果。


p


o


http://www.w3.org/2002/07/owl#equivalentProperty


[email protected]


http://www.w3.org/2002/07/owl#equivalentProperty


date de décè[email protected]


http://www.w3.org/2002/07/owl#equivalentProperty


death [email protected]


http://www.w3.org/2002/07/owl#equivalentProperty


[email protected]


http://www.w3.org/2002/07/owl#equivalentProperty


ημερομην?α_θαν?του@el


http://www.w3.org/2002/07/owl#equivalentProperty


没年月日@ja


http://www.w3.org/2002/07/owl#equivalentProperty


resting [email protected]


http://www.w3.org/2002/07/owl#equivalentProperty


埋葬年月日@ja

2.4 union全集

union也是一个在SPARQL中常用的关键字,使用union表示,将所有union连接的子句匹配的结果都显示出来。我们还用2.3的例子,不过把optional替换为union,可以比较一下二者的不同。

查询语句为

prefix ontology:<http://dbpedia.org/ontology/>

select distinct  ?p  ?o

where  {{?s ?p <http://schema.org/deathDate>}  union {?s <http://www.w3.org/2000/01/rdf-schema#label> ?o}}

查询结果为(部分结果)

从结果可以看出,optional和union的差别还是很明显的,optional是过滤,union是全集,是并的操作。

2.5 模糊查询

在SQL中的like查询,在SPARQL中也有对应的语句,就是使用FILTER 和regex。

例句为

prefix ontology:<http://dbpedia.org/ontology/>

select distinct  ?p  ?o

where  {ontology:deathDate ?p ?o filter regex(?p,‘label‘)}

还是查找主语deathDate这个主语的谓语和宾语列表,模糊查询的是谓语中含有’label’的谓语和宾语,这个filter和regex的组合实现的功能就是类似SQL的like功能。

查询结果为


p


o


http://www.w3.org/2000/01/rdf-schema#label


[email protected]


http://www.w3.org/2000/01/rdf-schema#label


date de décè[email protected]


http://www.w3.org/2000/01/rdf-schema#label


death [email protected]


http://www.w3.org/2000/01/rdf-schema#label


[email protected]


http://www.w3.org/2000/01/rdf-schema#label


ημερομην?α_θαν?του@el


http://www.w3.org/2000/01/rdf-schema#label


没年月日@ja

从结果可以看到,模糊查询中谓语只包含了有label的内容,其它的给过滤掉了。

3 结语

这里只是简单介绍了SPARQL的语法和常用的查询语句,实际环境中,应用SPARQL进行查询可能会复杂的多,会有很多复合语句,更为复杂的可能会跨数据集进行查询,也可能用到RDF的一些特性,比如只查找字面量或者只查找IRI的数据等等。总之,SPARQL查询,在实际的使用中,会碰到各种不同的需求,还要根据具体情况写出各种查询语句。

书写SPARQL查询语句的时候,还要细心,不能出错,不能写错一个字符,有的时候还要注意顺序,这些问题没有注意到,都可能导致查不到结果,或者是直接报错。在拼接SPARQL的时候,要多一些耐心,按照SPARQL规则来,循序渐进,慢慢就会初步掌握这种查询语言。

另外SPARQL还有UPDATE功能,有insert和delete关键字,但是没有update关键字,也就是说,SPARQL如果实现update操作,需要先insert再delete,从而达到update的效果。SPARQL的UPDATE功能,不如查询功能用的广泛,可能是因为数据集一般数据量大,都是直接以文件的形式存到数据库中的缘故。

本文通过例句的形式,介绍了SPARQL的基础知识,希望对大家学习sparql有帮助,在学习过程中,有什么问题,还是要多交流,共同进步。

参考资料

https://www.w3.org/TR/rdf-sparql-query/

原文地址:https://www.cnblogs.com/coodream2009/p/11243322.html

时间: 2024-08-02 17:46:09

知识图谱学习与实践(4)——通过例句介绍Sparql的使用的相关文章

知识图谱学习

发展 Curated KBs:以yago2和freebase为代表,他们从维基百科和WordNet等知识库抽取了大量的实体及实体关系,可以把它理解城一种结构化的维基百科. RDF <实体1,关系,实体2> 或  <实体1,属性1,属性值1>, 例如:<Google,is-a,人工智能公司>:<人工智能公司,subclass,高料技公司> 应用 存储 图数据库 ref:https://www.jianshu.com/p/cd937f20bf55 https:/

通用知识图谱VS行业知识图谱

??众所周知,知识图谱是Google于2012年提出,用来优化搜索结果.经过多年的发展,知识图谱在人工智能的许多行业都拥有了成熟落地的应用.按照知识图谱的覆盖面来看,主要分为通用知识图谱与行业知识图谱. This is why a "web" of notes with links between them is far more useful than a fixed hierarchical system-Cicles and arrows leaves one free to d

[期末复习]《语义网与知识图谱》期末复习(二)

<语义网与知识图谱>期末复习(二) 这次老师发了个最终版的pdf帮助我们复习,那我就重来. 基本 语义web的组成:语义web信息的开放标准.从web描述信息中进一步获取语义的方法. 本体:本体是一种形式化的,对共享概念体系的明确而又详细的说明.提供一种共享词表.核心是分类体系. RDF使用有向图作为数据类型. RDF-Literals 即文本或者说是字符串,在rdf图种用方框表示. RDF表示 一个三元组包含 主语:URIs和空节点 谓语:URIs(通常被成为属性) 宾语:URIs.空节点或

知识图谱研究进展

在原文<知识图谱研究进展>基础上上做了相应的调整和补充 本文首先简要回顾知识图谱的历史,探讨知识图谱研究的意义.其次,介绍知识图谱构建的关键技术,包括实体关系识别技术.知识融合技术.实体链接技术和知识推理技术等.然后,给出现有开放的知识图谱数据集的介绍.最后,给出知识图谱在情报分析中的应用案例. - 漆桂林.高桓.吴天星 东南大学计算机科学与工程学院 本文节选自<情报工程>2017 年第 1 期,知识图谱专题稿件. 1 知识图谱构建技术 ??本节首先给出知识图谱的技术地图,然后介绍

Atitit learn by need 需要的时候学与预先学习知识图谱路线图

1. 体系化是什么 架构 知识图谱路线图思维导图的重要性11.1. 体系就是架构21.2. 只见树木不见森林21.3. 知识图谱路线图的优点优点需要的21.4. 思维导图 大纲性 集成化22. 文字化>>表格化>>脚本化,可视化23. 如何体系化23.1. 分类,单根继承23.2. 一点带线,以线带面23.3. 纵向,横向抽象拓展23.4. 拓展和应用23.5. 以点带面,全方位网状  拓展33.6. 大纲总结 聚合33.7. Qa问题取代的拓展(csdn bbs,知乎等)34.

知识图谱相关会议之观后感分享与学习总结

2015年6月27日,清华大学FIT楼多功能报告厅,中国中文信息学会青年工委系列学术活动--知识图谱研究青年学者研讨会. 由于我毕设是与知识图谱.实体消歧.实体对齐.知识集成相关的,所以去听了这个报告:同时报告中采用手写笔记,所以没有相应的PPT和原图(遗憾),很多图是我自己画的找的,可能存在遗漏或表述不清的地方,请海涵~很多算法还在学习研究中,最后希望文章对大家有所帮助吧!感谢那些分享的牛人,知识版权归他们所有. 目录: 一.面向知识图谱的信息抽取技术 二.常识知识在结构化知识库构建中的应用

(转)知识图谱研究综述: 表示学习、知识获取与应用

摘要 人类知识提供了对世界的认知理解.表征实体间结构关系的知识图谱已经成为认知和人类智能研究的一个日益流行的方向.在本次综述论文中,我们对知识图谱进行了全面的综述,涵盖了知识图谱表示学习.知识获取与补全.时序知识图谱.知识感知应用等方面的研究课题,并总结了最近的突破和未来的研究方向.我们提出对这些主题进行全视角分类和新的分类法.知识图谱嵌入从表示空间.得分函数.编码模型和辅助信息四个方面进行组织.对知识获取,特别是知识图谱的补全.嵌入方法.路径推理和逻辑规则推理进行了综述.我们进一步探讨了几个新

技术人,为什么需要构建知识图谱

这个时代,信息极大丰富,人每时每刻都被各种各样的知识.信息轰炸着.如何有效的选择对自己有价值的知识,如何构建一个独属于自己的知识体系并让它为自己创造价值,变得越来越重要.只有知识经过了你的选择和应用,内化为自己的隐性经验,纳入到你的知识体系中,才能真正地为你创造财富. 怎样才能建立自己的知识体系呢? 选择方向,设定目标 学习.实践.输出.内化 同主题扩散 运用工具整理记录知识图谱 迭代与更新知识图谱 有目标,才有知识体系 如果只能选择一个方向,你希望在什么方向上做到出类拔萃? 对这个问题的思考,

程序员进阶路上不能错过的史上最全技术知识图谱秘籍

今天在技术大海中游啊游游啊游,哇啊哈哈 ^_^发现了一份非常有用的超级技术图谱诶! 强烈推荐啊!!本文原作者是易宝支付技术经理/架构师李艳鹏,这是鹏哥多年来积累和收集的技术知识技能图谱,有的是鹏哥原创总结的最佳实践,有的是小伙伴们的分享. 其实,每个秘籍图谱里面的内容都是互联网高并发架构师应该了解和掌握的知识.鹏哥索性就把这些图谱都收集在一起,并且进行了归类,便于大家查找和学习.图谱也暗含着他的一个小目标:想把更多的技术图谱和思维导图汇集在一起,成为互联网上“最全的技术图谱”. 这份技术知识图谱