Jena学习笔记(二) SPARQL


title: Jena学习笔记(二) SPARQL
date: 2016/11/29 22:11:29
tags: Jena
categories: paper


官方描述:Apache Jena(或简称Jena)是一个用于构建语义Web和关联数据应用程序的自由和开源的Java框架。 该框架由不同的API组成,用于处理RDF数据。

Jena是一个用于Java语义Web应用程序的API(应用程序编程接口)。它不是一个程序或工具,如果这是你正在寻找,我建议或许TopBraid Composer作为一个好的选择。因此,Jena的主要用途是帮助您编写处理RDF和OWL文档和描述的Java代码。

SPARQL是用于访问由W3C RDF数据访问工作组设计的RDF的查询语言和协议。

作为一种查询语言,SPARQL是“数据导向的”,因为它只查询模型中保存的信息;在查询语言本身没有推理。当然,Jena模型是“聪明的”,因为它提供了某些三元组存在的印象,即按需创建它们,包括OWL推理。除了以查询的形式获取应用程序想要的描述外,SPARQL不执行任何操作,并以一组bindings或RDF图形的形式返回该信息。

官方网站:http://jena.apache.org/index.html
SPARQL教程:http://jena.apache.org/tutorials/sparql.html


设置环境变量

Setting up your Environment
An environment variable JENAROOT is used by all the command line tools to configure the class path automatically for you. You can set this up as follows:

On Linux / Mac

export JENAROOT=the directory you downloaded Jena to
export PATH=$PATH:$JENAROOT/bin
On Windows

SET JENAROOT=the directory you downloaded Jena to
SET PATH=%PATH%;%JENAROOT%\bat

数据格式

首先,我们需要清楚查询要查询的数据。 SPARQL查询RDF图。 RDF图是一组三元组(Jena调用RDF图“模型”和三元组“语句”,因为这是他们在第一次设计Jena API时调用的)。

重要的是要意识到三元组的重要性,而不是序列化。序列化只是一种写三元组的方式。 RDF / XML是W3C的建议,但是可能很难看到序列化形式的三元组,因为有多种方法来编码同一个图。在本教程中,我们使用了一个更像“三元组”的序列化,称为Turtle(另请参阅W3C语义网络引文中描述的N3语言)。

我们将从vc-db-1.rdf中的简单数据开始:此文件包含用于多个vCard人员描述的RDF。 vCard在RFC2426中描述,并且RDF翻译在W3C笔记“在RDF / XML中表示vCard对象”中描述。我们的示例数据库只包含一些名称信息。

图形上,数据看起来像:


在三元组中,如下所示:

@prefix vCard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix :        <#> .

<http://somewhere/MattJones/>
    vCard:FN    "Matt Jones" ;
    vCard:N     [ vCard:Family
                              "Jones" ;
                  vCard:Given
                              "Matthew"
                ] .

<http://somewhere/RebeccaSmith/>
    vCard:FN    "Becky Smith" ;
    vCard:N     [ vCard:Family
                              "Smith" ;
                  vCard:Given
                              "Rebecca"
                ] .

<http://somewhere/JohnSmith/>
    vCard:FN    "John Smith" ;
    vCard:N     [ vCard:Family
                              "Smith" ;
                  vCard:Given
                              "John"
                ] .

<http://somewhere/SarahJones/>
    vCard:FN    "Sarah Jones" ;
    vCard:N     [ vCard:Family
                              "Jones" ;
                  vCard:Given
                              "Sarah"
                ] .

更加明确的:

@prefix vCard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://somewhere/MattJones/>  vCard:FN   "Matt Jones" .
<http://somewhere/MattJones/>  vCard:N    _:b0 .
_:b0  vCard:Family "Jones" .
_:b0  vCard:Given  "Matthew" .

<http://somewhere/RebeccaSmith/> vCard:FN    "Becky Smith" .
<http://somewhere/RebeccaSmith/> vCard:N     _:b1 .
_:b1 vCard:Family "Smith" .
_:b1 vCard:Given  "Rebecca" .

<http://somewhere/JohnSmith/>    vCard:FN    "John Smith" .
<http://somewhere/JohnSmith/>    vCard:N     _:b2 .
_:b2 vCard:Family "Smith" .
_:b2 vCard:Given  "John"  .

<http://somewhere/SarahJones/>   vCard:FN    "Sarah Jones" .
<http://somewhere/SarahJones/>   vCard:N     _:b3 .
_:b3 vCard:Family  "Jones" .
_:b3 vCard:Given   "Sarah" .

重要的是要意识到这些是相同的RDF图,并且图中的三元组没有特定的顺序。计算机不在乎其顺序。

第一个SPARQL查询

看一个简单的查询并展示如何使用Jena执行它。

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

用命令行查询应用程序执行所述查询:

---------------------------------
| x                             |
=================================
| <http://somewhere/JohnSmith/> |
---------------------------------

这通过将WHERE子句中的三元模式与RDF图中的三元组进行匹配来实现。三元组的谓词和对象是固定值,因此模式将只匹配与这些值的三元组。主体是一个变量,并且对变量没有其他限制。模式匹配任何三元组与这些谓词和对象值,它匹配x的结果。

<>中包含的项目是一个URI(实际上是一个IRI),而包含在“”中的项目是一个普通的字面量。就像Turtle,N3或N-triples一样,输入的文字用\ ^ \ ^编写,语言标签可以用@添加。

?x是一个称为x的变量。?不会形成名称的一部分,这就是为什么它不会出现在表的输出中。
该查询返回x查询变量中的匹配项。所示的输出是通过一条ARQ的命令获得的。

执行查询

Windows setup
Execute:

bat\sparql.bat --data=doc\Tutorial\vc-db-1.rdf --query=doc\Tutorial\q1.rq
You can just put the bat/ directory on your classpath or copy the programs out of it.

bash scripts for Linux/Cygwin/Unix
Execute:

bin/sparql --data=doc/Tutorial/vc-db-1.rdf --query=doc/Tutorial/q1.rq

在Linux中执行结果


获取所有人的FullName

SELECT ?x ?fname
WHERE {?x  <http://www.w3.org/2001/vcard-rdf/3.0#FN>  ?fname}
//执行
ubuntu@master:~/paper/doc$ sparql --data=vc-db-1.rdf --query=q-bp1.rq
----------------------------------------------------
| x                                | fname         |
====================================================
| <http://somewhere/JohnSmith/>    | "John Smith"  |
| <http://somewhere/SarahJones/>   | "Sarah Jones" |
| <http://somewhere/MattJones/>    | "Matt Jones"  |
| <http://somewhere/RebeccaSmith/> | "Becky Smith" |
----------------------------------------------------

指定前缀

ubuntu@master:~/paper/doc$ cat q2.rq 
PREFIX vCard:      <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?x
WHERE
 { ?x vCard:FN "John Smith" }
ubuntu@master:~/paper/doc$ sparql --data=vc-db-1.rdf --query=q2.rq
---------------------------------
| x                             |
=================================
| <http://somewhere/JohnSmith/> |
---------------------------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容