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" |
-------------
今天暂时写到这里,后续会继续学习和分享。
Sparql查询RDF相关推荐
- SPARQL:Jena搭建SPARQL查询RDF数据
1 Jena搭建SPARQL查询RDF数据 1.1 Jena概要 · SPARQL是W3C的RDF数据工作组设计的一种查询语言和协议,用于RDF数据的查询.经过类似于JDK安装时候的配置,可以在命令行 ...
- 使用 SPARQL 查询 RDF 数据
在 "大规模数据集成:使用 RDF 创建数据网络" 中,您了解了资源描述框架:一种万维网联盟 (W3C) 标准,它定义了一种基于图形的模型来支持来自几乎无限多个来源的完全可移植.灵 ...
- sparql rdf_使用SPARQL查询RDF数据
sparql rdf 在" 大规模数据集成 :使用RDF创建数据网 "中,您了解了资源描述框架:万维网联盟(W3C)标准,定义了基于图形的模型,该模型允许从几乎无限的来源中获得完全 ...
- 使用 SPARQL 查询 RDF
ARQ 是 Jena 用以支持 SPARQL 的 查询引擎.本文将通过使用 ARQ 进行实际的 SPARQL 查询操作,来对 SPARQL 进行介绍. 数据源 在使用 ARQ 之前,让我们先来介绍一下 ...
- 论文浅尝 | S3QLRDF: 用于大规模RDF数据分布式SPARQL查询的关系分割架构
笔记整理 | 孙磊,天津大学硕士. 动机 RDF形式的语义网的繁荣对高效.可伸缩以及分布式的存储和高可用和容错并行策略都有着要求.RDF数据的飞速增长提升了在分布式数据管理系统上高效划分策略的需求来提 ...
- 技术动态 | eBay开源分布式知识图谱存储Beam,支持类SPARQL查询
本文转载自公众号:AI前线. 作者 | Diego Ongaro,Simon Fell 译者 | 盖磊 编辑 | Natalie AI 前线导读:eBay 工程人员于 5 月 1 日在 官方技术博客 ...
- sparql查询mysql_Sparql查询语言基础学习(一)
全程官方文档英文阅读理解.. (有部分谷歌翻译辅助,不过大部分还是阅读理解,因为谷歌翻译的虽然很好,但是有些也会脱离本意) 标题写着 "SPARQL Query Language for R ...
- sparql查询mysql_SPARQL查询以检索所有对象和属性
使用 Wine ontology,我想创建SPARQL查询,以便我可以检索所有葡萄酒及其属性,如下表 – 考虑我不知道属性的名称先验. vin | rdf:type | vin:hasMaker | ...
- mysql支持sparql吗_neo4j 中使用sparql查询
最近研究了一下neo4j这个数据库中如何使用sparql查询,鉴于现在真正实现的中文文档较少,故记录一下. 先亮答案: 亲测,官方 提供的 sparql-plugin 为一个可以使用的库,如果有同学想 ...
最新文章
- redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
- python代码基础题-python每日经典算法题5(基础题)+1(中难题)
- 如何理解JavaScript多个连续箭头函数书写方式
- 计算机地址永无符号数表示,计算机如何区分 有符号 无符号数的区别???
- js利用HTML5的拖拽API做流程图
- 修改marathon源码后,如何编译,部署到集群中?
- 自己过好就是最大的公益!
- 智慧机场大数据可视化分析决策系统
- 计算机很多文件无法删除,电脑有文件删不掉怎么办?电脑有文件删不掉解决方法介绍...
- 两种自动化测试工具AutoRunner与Selenium的对比
- 游戏网站运营文章——原神七七介绍
- 数据结构实现学生信息管理系统功能
- 广告词 android,广告语猜猜看
- MOOS-ivp 实验五 MOOS编程进阶(2)
- SpeedTree - 在SpeedTree中导入自定义模型
- 小日本的恶趣味?育碧让玩家用VR外设闻屁味
- 使用vuepress搭建一个完全免费的个人博客网站
- Vue的自学之路(三)
- nginx-rtmp-hls 模块---大疆mavic推流hlx无法播放问题
- 第一周 Web开发入门(下)