软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 数据库 -> Sparql查询RDF -> 正文阅读

[数据库]Sparql查询RDF


SparQL(Simple Protocol and RDF Query Language),是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。
ARQ(Automatic Repeat Request)是jena用来支持SparQL的查询引擎,这里我们来介绍下使用ARQ进行实际的SparQL操作。


数据源:
在我们使用ARQ之前,我们先来介绍下使用的RDF数据源,数据源结构如下图所示。
[img]http://img.blog.csdn.net/20160401105740170
这个本体模型我们保存为一个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配置
[img]http://img.blog.csdn.net/20160401112040179
②path配置
[img]http://img.blog.csdn.net/20160401112207273
③jenaroot配置
[img]http://img.blog.csdn.net/20160401112232008
配置结束之后,我们打开终端cmd,输入sparql之后效果如下图:如果出现No query string or query file表示你已经配置成功,接下来我们可以通过终端做查询操作了。
[img]http://img.blog.csdn.net/20160401112411555
现在我们来通过sparql查询我们的data.rdf文本看看效果。
[img]http://img.blog.csdn.net/20160401113013120
在这里我们可以看到直接执行查询的话,提示找不到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" } 

[img]http://img.blog.csdn.net/20160401113448544
因为终端操作很麻烦,我还是喜欢写代码,接下来我通过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" |
-------------

今天暂时写到这里,后续会继续学习和分享。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:56:17  
数据库 最新文章
Python&MySQL&PyQt
最新用python来操作mysql完全解析
mongodb的安装详解
1.PDO简介
《MySQL必知必会学习笔记》:高级联结
【翻译自mos文章】怎么对Microsoft(Office)
MyCAT全局表描述及示例
ocp
关于SQL数据表存储过程表名前缀换成dbo代码
数据库调优教程(二)慢查询数据准备
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-23 3:50:28
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --