Sparql查询RDF

SparQL(Simple Protocol and RDF Query Language),是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。

ARQ(Automatic Repeat Request)是jena用来支持SparQL的查询引擎,这里我们来介绍下使用ARQ进行实际的SparQL操作。



数据源:

在我们使用ARQ之前,我们先来介绍下使用的RDF数据源,数据源结构如下图所示。

这个本体模型我们保存为一个RDF文件。

data.rdf 文本内容如下:

<rdf:RDF
  xmlns:rdf=‘http://www.w3.org/1999/02/22-rdf-syntax-ns#‘
  xmlns:vCard=‘http://www.w3.org/2001/vcard-rdf/3.0#‘
   >

  <rdf:Description rdf:about="http://somewhere/JohnSmith/">
    <vCard:FN>John Smith</vCard:FN>
    <vCard:N rdf:parseType="Resource">
    <vCard:Family>Smith</vCard:Family>
    <vCard:Given>John</vCard:Given>
    </vCard:N>
  </rdf:Description>

  <rdf:Description rdf:about="http://somewhere/RebeccaSmith/">
    <vCard:FN>RebeccaSmith</vCard:FN>
    <vCard:N rdf:parseType="Resource">
    <vCard:Family>Smith</vCard:Family>
    <vCard:Given>Rebecca</vCard:Given>
    </vCard:N>
  </rdf:Description>

  <rdf:Description rdf:about="http://somewhere/SarahJones/">
    <vCard:FN>Sarah Jones</vCard:FN>
    <vCard:N rdf:parseType="Resource">
    <vCard:Family>Jones</vCard:Family>
    <vCard:Given>Sarah</vCard:Given>
    </vCard:N>
  </rdf:Description>

  <rdf:Description rdf:about="http://somewhere/MattJones/">
    <vCard:FN>Matt Jones</vCard:FN>
    <vCard:N
    vCard:Family="Jones"
    vCard:Given="Matthew"/>
  </rdf:Description>

</rdf:RDF>

使用三元组形式表示如下:

model.write(System.out,"N-TRIPLE")
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffc <http://www.w3.org/2001/vcard-rdf/3.0#Given> "Matthew" .
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffc <http://www.w3.org/2001/vcard-rdf/3.0#Family> "Jones" .
<http://somewhere/RebeccaSmith/> <http://www.w3.org/2001/vcard-rdf/3.0#N> _:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffe .
<http://somewhere/RebeccaSmith/> <http://www.w3.org/2001/vcard-rdf/3.0#FN> "RebeccaSmith" .
<http://somewhere/SarahJones/> <http://www.w3.org/2001/vcard-rdf/3.0#N> _:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffd .
<http://somewhere/SarahJones/> <http://www.w3.org/2001/vcard-rdf/3.0#FN> "Sarah Jones" .
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7fff <http://www.w3.org/2001/vcard-rdf/3.0#Given> "John" .
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7fff <http://www.w3.org/2001/vcard-rdf/3.0#Family> "Smith" .
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffd <http://www.w3.org/2001/vcard-rdf/3.0#Given> "Sarah" .
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffd <http://www.w3.org/2001/vcard-rdf/3.0#Family> "Jones" .
<http://somewhere/JohnSmith/> <http://www.w3.org/2001/vcard-rdf/3.0#N> _:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7fff .
<http://somewhere/JohnSmith/> <http://www.w3.org/2001/vcard-rdf/3.0#FN> "John Smith" .
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffe <http://www.w3.org/2001/vcard-rdf/3.0#Given> "Rebecca" .
_:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffe <http://www.w3.org/2001/vcard-rdf/3.0#Family> "Smith" .
<http://somewhere/MattJones/> <http://www.w3.org/2001/vcard-rdf/3.0#N> _:Ad537bf7X3aX153cfcf2ec7X3aXX2dX7ffc .
<http://somewhere/MattJones/> <http://www.w3.org/2001/vcard-rdf/3.0#FN> "Matt Jones" .

这里我们需要首先配置环境变量,跟JDK一样,把我们的下载的apache-jena-3.0.0加压到指定目录,我的是C:\Program Files\apache-jena-3.0.0

具体环境变量配置如下图:

①classpath配置

②path配置

③jenaroot配置

配置结束之后,我们打开终端cmd,输入sparql之后效果如下图:如果出现No query string or query file表示你已经配置成功,接下来我们可以通过终端做查询操作了。

现在我们来通过sparql查询我们的data.rdf文本看看效果。

在这里我们可以看到直接执行查询的话,提示找不到sparql.rq文本,这是我们需要进入文件所在目录即可或者写文本所在全路径也可以(这里就不再具体操作了)。

我们可以看到我们查询的结果。sparql语句如下:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX vCard: <http://www.w3.org/2001/vcard-rdf/3.0#>  

SELECT ?name1 ?name2
WHERE
{
   { [] foaf:name ?name1 } UNION { [] vCard:FN ?name2 }
}  

现在我们改下

SELECT ?x  WHERE { ?x  <http\://www.w3.org/2001/vcard-rdf/3.0\#FN>  "John Smith" } 

因为终端操作很麻烦,我还是喜欢写代码,接下来我通过java代码来做具体的查询吧。

现在我们把sparql内容更改如下:

SELECT ?x ?fname
WHERE {?x  <http://www.w3.org/2001/vcard-rdf/3.0#FN>  ?fname}

ResultSetFormatter.out(System.out, results, query) ;//格式化输出到控制台

这里我们得到了四个Resource和对应的fname。

-----------------------------------------------------
| x                                | fname          |
=====================================================
| <http://somewhere/MattJones/>    | "Matt Jones"   |
| <http://somewhere/SarahJones/>   | "Sarah Jones"  |
| <http://somewhere/RebeccaSmith/> | "RebeccaSmith" |
| <http://somewhere/JohnSmith/>    | "John Smith"   |
-----------------------------------------------------

基本模式(Basic Pattern)

基本模式时一些三元组模式(Triple Patterns)的集合。如下 SPARQL 语句:

SELECT ?givenName
WHERE
  { ?y  <http://www.w3.org/2001/vcard-rdf/3.0#Family>  "Smith" .
    ?y  <http://www.w3.org/2001/vcard-rdf/3.0#Given>  ?givenName .
  }  

仅当一次查询中所有的三元组都与同一个值 match 的时候,我们才说它同这个值 match。如这个 SPARQL 语句查询所得到的结果为:

-------------
| givenName |
=============
| "Rebecca" |
| "John"    |
-------------

前缀机制:

sparql内容如下:

PREFIX vcard:      <http://www.w3.org/2001/vcard-rdf/3.0#>  

SELECT ?y ?givenName
WHERE
 { ?y vcard:Family "Smith" .
   ?y vcard:Given  ?givenName .
 } 

查询的结果如下:

--------------------
| y    | givenName |
====================
| _:b0 | "Rebecca" |
| _:b1 | "John"    |
--------------------

以 “_:” 开头的QName 并不是空节点的内部表示,它们仅仅是 ARQ 所打印出来的一个标记而已。

字符串匹配

语法为:

FILTER regex(?x, "pattern" [, "flags"])  

其中 flags 如果是 “i” ,就代表忽略大小写。

sparql内容如下:它将查询名字中包含 “R” 或 “r” 的项。

PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>  

SELECT ?g
WHERE
{ ?y vcard:Given ?g .
  FILTER regex(?g, "r", "i") }  

查询结果如下:

-------------
| g         |
=============
| "Sarah"   |
| "Rebecca" |
-------------

今天暂时写到这里,后续会继续学习和分享。

时间: 2024-10-31 11:16:08

Sparql查询RDF的相关文章

搭建Jena Fuseki并执行SPARQL查询

1. 下载Jena Fuseki:http://jena.apache.org/download/index.cgi 2. 运行服务 windows解压后双击fuseki-server.bat linux解压后运行命令 java -jar fuseki-server.jar --update --loc /data/apache-jena-fuseki-3.5.0/run/databases/DB /ds "–update"表示允许修改:"–loc"后面的参数,表示

自然语言转为SPARQL查询

面向知识库的中文自然语言问句的语义理解 目标:将中文的自然语言转化为SPARQL查询 基本方法: 自然语言预处理:分词(ICTCLAS),命名实体识别,句法分析(Standford Parser)得到句法分析树 1.利用句法分析树构建用户的查询语义图(查询语义图是用来描述用户的查询中实体关系的一张图,其中顶点表示命名实体或名词性变量,边表示顶点之间的关系) 2.实体消歧(将查询语义图中顶点对应到知识库中实体) 3.谓词消歧(将查询语义图中的边映射为知识库中的边) 将自然语言中的关键词映射为知识库

SPARQL入门(一)SPARQL简介与简单使用

??知识图谱(Knowledge Graph)是当前互联网最炙手可热的技术之一,它的典型应用场景就是搜索引擎,比如Google搜索,百度搜索.我们在百度搜索中输入问题"中国银行的总部在哪",搜索的结果如下: 这便是知识图谱的典型应用,能够直接输出问题的答案.借助知识图谱,能够让搜索引擎更加高效,搜索结果更加精准,给用户带来更好的搜索体验和乐趣. ??关于知识图谱的知识点和工具数不胜数,我们在学习时常常会感到无从下手,一片茫然.本文将尝试着介绍知识图谱的几个知识点--RDF.URI.UR

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

通过例句介绍Sparql的使用 1 简介 SPARQL的定义,是一个递归的定义,为SPARQL Protocal and RDF Query Language,是W3C制定的RDF知识图谱标准查询语言,大部分的图数据库都支持SPARQL查询.SPARQL在语法上借鉴了SQL.SPARQL是针对RDF三元组进行查询,通过图匹配的方式获得需要查找的内容. 下面通过一个例子来说明SPARQL的查询语句的基本结构.这个例子可以在http://dbpedia.org/sparql中运行,获取结果. pre

国外、国内Hadoop的应用现状

2015-04-23 大数据 摘要:Hadoop是一个开源的高效云计算基础架构平台,其不仅仅在云计算领域用途广泛,还可以支撑搜索引擎服务,作为搜索引擎底层的基础架构系统,同时在海量数据处理.数据挖掘.机器学习.科学计算等领域都越来越受到青睐.本文将讲述国外.国内Hadoop的主要应用现状. 国外Hadoop的应用现状 1.Yahoo Yahoo是Hadoop的最大支持者,截至2012年,Yahoo的Hadoop机器总节点数目超过42?000个,有超过10万的核心CPU在运行Hadoop.最大的一

导入本体到Jena TDB数据库

本体的存储方法或称本体持久化,大致分为基于内存的方式.基于文件的方式.基于数据库的方式和专门的管理工具方式4种(傅柱等, 2013).其中,基于数据库的方式又有基于关系数据库.基于面向对象数据库.基于Native XML数据库和基于NoSQL的三元组数据库(Triple Store)4种主要方式.基于数据库的本体持久化方式充分利用了数据库的安全可靠(数据保密.数据完整性.并发控制.故障恢复等).高效.易于管理并易于与应用系统集成等优点,是主要的本体持久化方式. 在本体中,数据被表示为一系列由主语

知识工程基础-作业1

RDF/RDFS知识表示和SPARQL查询构建 在课堂上以冥王星为例介绍了如何使用RDF/RDFS来进行知识表示,请在此基础上进行扩展,实现太阳系相关天文学知识的表示,并构造相应的SPARQL查询在得到的RDF图上进行查询,给出查询结果. 作业要求 1.知识表示 使用RDF/RDFS语言来表示太阳系相关知识,要求: 包括太阳.八大行星.冥王星.月球.哈雷彗星等 包括与太阳的距离.半径.质量.自转周期.公转周期等基本属性 使用Turtle语言编写,文件格式符合RDF 1.1标准,文件扩展名为'.r

知识图谱基础知识之三——知识图谱的构建过程

前两次介绍了知识图谱的基本概念和知识图谱的构建方式,这次介绍一个知识图谱系统的构建过程. 1 知识图谱的总体构建思路 如图所示,从原始的数据到形成知识图谱,经历了知识抽取.知识融合(实体对齐).数据模型构建.质量评估等步骤. 原始的数据,按照数据的结构化程度来分,可以分为结构化数据.半结构化数据和非结构化数据,根据数据的不同的结构化形式,采用不同的方法,将数据转换为三元组的形式,然后对三元组的数据进行知识融合,主要是实体对齐,以及和数据模型进行结合,经过融合之后,会形成标准的数据表示,为了发现新

(翻译)W3C的Turtle文档

主要翻译如下页面,https://www.w3.org/TR/turtle/,对该页面中Turtle的内容部分进行翻译,希望对使用Turtle的朋友们有所帮助. 1 简介 2 Turtle语言 2.1 简单的三元组 2.2 谓词列表 2.3 宾语列表 2.4 IRIs 2.5 RDF字面量 2.5.1 引用的字面量 2.5.2 数字 2.5.3 布尔值 2.6 RDF空节点 2.7 Turlte中的嵌套无标签空节点 2.8 集合 3 举例 4. Turtle与SPARQL的对比 5 一致性 5.