知识图谱(Knowledge Graph)是当前互联网最炙手可热的技术之一,它的典型应用场景就是搜索引擎,比如Google搜索,百度搜索。我们在百度搜索中输入问题“中国银行的总部在哪”,搜索的结果如下:

这便是知识图谱的典型应用,能够直接输出问题的答案。借助知识图谱,能够让搜索引擎更加高效,搜索结果更加精准,给用户带来更好的搜索体验和乐趣。

  关于知识图谱的知识点和工具数不胜数,我们在学习时常常会感到无从下手,一片茫然。本文将尝试着介绍知识图谱的几个知识点——RDF、URI、URL和SPARQL,希望能以此为切入点,让读者对SPARQL有些感性的认识,至于知识图谱,则是更大更深的范围了,不是本文所能概括的。

什么是SPARQL?

  SPARQL的英文全称为SPARQL Protocol and RDF Query Language,是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。它于2008年1月15日正式成为一项W3C推荐标准,于2013年3月发布SPARQL1.1。

  既然SPARQL是为是为RDF开发的一种查询语言,那么什么是RDF呢?

什么是RDF?

  首先,RDF不是一种数据格式。

  RDF的英语全称为Resource Description Framework,中文名称为资源描述框架。RDF是一种描述数据文件储存的数据模型,该数据模型通常描述由三个部分组成的事实,被称为三元组(triples)。三元组由主语(subject)、谓语(predicate)和宾语(object)组成,看上去很像一个简单的句子。比如:

subject predicate object
richard homeTel (229)276-5135
cindy email cindym@gmail.com

  以下为Turtle RDF格式的RDF文件,文件名为ex002.ttl,

# filename: ex002.ttl

@prefix ab: <http://learningsparql.com/ns/addressbook#> .

ab:richard ab:homeTel "(229) 276-5135" .
ab:richard ab:email "richard49@hotmail.com" . ab:cindy ab:homeTel "(245) 646-5488" .
ab:cindy ab:email "cindym@gmail.com" . ab:craig ab:homeTel "(194) 966-1505" .
ab:craig ab:email "craigellis@yahoo.com" .
ab:craig ab:email "c.ellis@usairwaysgroup.com" .

#表示注释,@prefix行为前缀行,即为<http://learningsparql.com/ns/addressbook#>取一个前缀ab:,也就是别名,避免每次命名时都要写这个长长的字符,句子最后的.可写可不写,写上后便于阅读。另外,<http://learningsparql.com/ns/addressbook#>是URI,这个后面会介绍。

   之后的每一行,都是一个三元组,分别是主语、谓语和宾语,带有前缀ab:。

URI和URL

  URI和URL是两个相近的概念,但URL只是URI的一种。

  URL就是我们常说的网址,英文全称为Uniform Resource Locators,是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

  URI的英语全称为Uniform Resource Identifier,是统一资源标识符。在RDF三元组中,主语、谓语必须属于某个特定的命名空间,避免相似的名字发生混淆,因此需要使用URI。

如何使用ARQ?

  好了,在了解了上述的基本概念之后,我们需要实践一把,在这里,我们使用ARQ。

  ARQ是SPARQL处理器。它是Apache Jena框架的一部分,是一个基于java的免费软件,其下载地址为:http://jena.apache.org/download/index.cgi。以Linux系统为例,我们下载文件apache-jena-3.11.0.zip,并将解压后的zip文件中的bin目录添加到环境变量中。添加方式如下:

  • vim /etc/profile
  • 在文件末尾添加命令:
export JENA_HOME=你的apache-jena-3.11.0路径
export PATH=$JENA_HOME/bin:$PATH
  • source /etc/porfile
  • 运行命令echo $JENA_HOME,如果能输出你的JENA路径,则表明添加该环境变量成功。

  接着我们写好SPARQL查询语句(关于查询语句,会在后面的文章中介绍),文件名为ex003.rq,内容如下:

# filename: ex003.rq

PREFIX ab: <http://learningsparql.com/ns/addressbook#> 

SELECT ?craig_email
WHERE
{ ab:craig ab:email ?craig_email . }

简单对该查询语句做个说明:PREFIX ab: http://learningsparql.com/ns/addressbook# 表示使用哪个URI,并取别名。后续的查询语句类似于SQL,是对三元组做查询,?craig_email为变量,查询三元组中的宾语,用通俗的话来理解,就是查询craig的电子邮箱是什么?

  运行命令:

arq --data ex002.ttl --query ex003.rq

输出结果如下:(ex002.ttl文件见之前的描述)

--------------------------------
| craig_email |
================================
| "c.ellis@usairwaysgroup.com" |
| "craigellis@yahoo.com" |
--------------------------------

还可以查询三元组中的其他部分,这里不再讲述,后续会专门讲SPARQL查询语句的。

总结

  在知识图谱的工具箱中,有很多图数据库,它们提供了很好的查询语句功能和可视化效果,比如Neo4j, Cayley,这次,我们可以学习下RDF和SPARQL,毕竟,SPARQL的查询能力和推理能力也是很强的哦~

  期待下次关于SPARQL的分享~

注意:不妨了解下笔者的微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注~

参考文献

  1. SPARQL百度百科:https://baike.baidu.com/item/SparQL/10956405?fr=aladdin

  2. RDF百度百科:https://baike.baidu.com/item/rdf/5956080

  3. URI百度百科:https://baike.baidu.com/item/URI/16481812

  4. URL百度百科:https://baike.baidu.com/item/url

  5. SPARQL维基百科:https://en.wikipedia.org/wiki/SPARQL

  6. Apache Jena下载页面:http://jena.apache.org/download/index.cgi

  7. 书籍: Learning SPARQL,Bob DuCharme,Publisher: O'Reilly Media, Inc.

  8. Learning SPARQL学习网址:http://www.learningsparql.com/

SPARQL入门(一)SPARQL简介与简单使用的更多相关文章

  1. SPARQL入门(二)使用Java操作ARQ

      在文章SPARQL入门(一)SPARQL简介与简单使用中,我们了解了RDF.SPARQL以及基于Java编写的SPARQL处理器ARQ.在本文中,笔者将会如何使用Java来操作ARQ.   注意到 ...

  2. SQL Server复制入门(一)----复制简介【转】

    SQL Server复制入门(一)----复制简介 简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是 ...

  3. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  4. Python 入门之Python简介

    Python 入门之Python简介 1.Python简介: (1) Python的出生: ​ python的创始人为吉多·范罗苏姆(Guido van Rossum)(中文名字:龟叔).1989年的 ...

  5. C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

    在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架 ...

  6. knockout.js的简介和简单使用

    1.knockout简介knockout是一个轻量级的UI类库,通过MVVM模式使JavaScript前端UI简单化knockout有四大重要概念:1)声明式绑定:使用简明移读的语法很容易地将模型(m ...

  7. MEF简介及简单的Demo

    MEF简介及简单的Demo 文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门 ...

  8. Redis简介与简单安装

    Redis简介与简单安装   一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类 ...

  9. gtest简介及简单使用

    本文摘自 gtest简介及简单使用 ,在此感谢作者的分享. 具体使用教程 _______________________________________________________________ ...

  10. 『NiFi 学习之路』入门 —— 下载、安装与简单使用

    一.概述 "光说不练假把式." 官网上的介绍多少让人迷迷糊糊的,各种高大上的词语仿佛让 NiFi 离我们越来越远. 实践是最好的老师.那就让我们试用一下 NiFi 吧! 二.安装 ...

随机推荐

  1. GenericServlet和HttpServlet有什么区别?

    1.HttpServlet 1). 是一个 Servlet, 继承自 GenericServlet. 针对于 HTTP 协议所定制. 2). 在 service() 方法中直接把 ServletReu ...

  2. Jenkins + Docker + dockerfile-maven-plugin + Harbor CI/CD spring-boot项目的最轻量级配置

    说明 本文只为方便日后查阅,记录一些关键性的步骤和踩坑的情况. dockerfile-maven-plugin构建镜像配置 <plugin> <groupId>com.spot ...

  3. Java String 如何加双引号

    public class Test{ public static void main(String[] args){ String str1 = "\"name\"&qu ...

  4. 转自自己的关于落谷计数器【p1239】的题解

    本蒟蒻写这道题用了两天半里大概五六个小时.(我太弱了) 然后这篇题解将写写我经历的沟沟坎坎,详细的分析一下, 但是由于它很长,因此一定还有多余的地方,比如说我的 预处理,可能比较多余.但是我觉得,信息 ...

  5. 高性能mysql——高性能索引策略

    <高性能MySQL>读书笔记 一. 索引的优点 1. 索引可以让服务器快速定位到表的指定位置,大大减少了服务器需要扫描的数量: 2. 最常见的B-Tree索引按照顺序存储数据,可以用来做o ...

  6. Android 插件化开发(四):插件化实现方案

    在经过上面铺垫后,我们可以尝试整体实现一下插件化了.这里我们先介绍一下最简单的实现插件化的方案. 一.最简单的插件化实现方案 最简单的插件化实现方案,对四大组件都是适用的,技术面涉及如下: 1). 合 ...

  7. Racket 命令行方式安装 collection

    最近在学习 SICP,里面用的 Lisp 系列的 Scheme.OS X 上要配置Scheme环境. Racket 完整的包要 110 M,mini 版只要10M.我只需要简单的命令行操作,显然选mi ...

  8. python--推倒式(列表、字典、集合)

    python的各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体 ...

  9. REST架构指导方案

    目录 REST架构指导方案 何为REST 在WEB系统中应用REST风格 应用约束 对资源应用正确的动词语义 名词性的URI地址 RESTFUL的URL路径实践 单一资源的路径制定 复杂查询的路径制定 ...

  10. C# Task TaskFactory 异步线程/异步任务

    Task是.NetFramework3.0出现的,线程是基于线程池,然后提供了丰富的API TaskFactory  提供对创建和计划 Task 对象的支持 创建和启动异步任务 1.Task task ...