- 浏览: 61624 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
pkmu8426:
楼主 您好小弟初学Jena 发觉网上文件实在是太少正好看到您这 ...
本体推理的一个例子 -
hadesmile:
确实是个问题,不过一般不这样用,
奇怪的notify()与notifyAll()的执行问题 -
yydcj:
hadesmile 写道10个reduce线程虽然是顺序实例化 ...
一个notify()的实例分析 -
hadesmile:
10个reduce线程虽然是顺序实例化的,但是他们并不是顺序拿 ...
一个notify()的实例分析 -
biganer2008:
你好,按着你的步骤安装后,OWLVizTab标签空白啊,不知道 ...
在 Protege中安装owl-s editor、graphviz插件
数据源,一个RDF文件,就是帮助文档中的vc-db-1.rdf,文档描述了一些简单的人名信息,下面是类似三元组形式的数据表示。
2.2 查询语句q1.rq,记事本创建一个文件,内容如下,文件保存为q1.rq。注意文件后缀是.rq,不是.txt。
SELECT ?x
WHERE { ?x <http://www.w3.org/2001/vcard-rdf/3.0#FN
>
"John Smith" }
2.3 那么使用上面的查询语句查询vc-db-1.rdf文件中的数据的命令行语句就是
sparql --data=vc-db-1.rdf --query=q1.rq
返回结果是:
| x |
=================================
| <http://somewhere/JohnSmith/
>
|
在执行上面的查询时,要保证数据文件和查询文件在当前目录下,否则命令中应该包括完整路径,即:
sparql --data=d:\sparql\vc-db-1.rdf --query=d:\sparql\q1.rq
2.4 对查询语句和查询结果的理解
查询语句包括查询信息的名称以及名称应该符合的条件。条件子句以三元组形式出现,按照<主语,谓语,宾语>的顺序排列。查询条件也成为 一个模式(Pattern)。查询的结果实际就是条件三元组与数据文件(或RDF图)中RDF三元组匹配的结果。
语句中的 ? 加一个字母表示该字母是一个变量,比如 ?x,在SELECT后面的变量会显示在查询结果中,作为列名称出现。
3. 命名空间的简写替代
如果查询所有具有名字的实例以及该实例的名字,那么查询语句如下
SELECT ?x ?fname
WHERE {?x <http://www.w3.org/2001/vcard-rdf/3.0#FN
>
?fname}
注意,“?x ?fname”之间是空格,不是逗号。如果有多个模式三元组,那么三元组之间用点号“.”隔开,比如
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 .
}
这时候,模式中的谓词的URI都带一个长长的命名空间字符串,“http://www.w3.org/2001/vcard-rdf/3.0#”,能用一
个简单的单词代替它应该会比较简单。实现简写URI的的语法是这样的:
PREFIX vcard: http://www.w3.org/2001/vcard-rdf/3.0
#
SELECT ?givenName
WHERE
{ ?y vcard:Family "Smith" .
?y vcard:Given ?givenName .
}
语句 PREFIX vcard: http://www.w3.org/2001/vcard-rdf/3.0
#
定义了一个前缀单词vcard,在查询语句中,它与后面的命名空间等价。
4. 过滤查询结果
在查询语句中添加过滤条件的语句是
FILTER regex(?x, "pattern" [, "flags"])
FILTER是声明过滤, ?x是过滤模式作用的变量,后面的pattern是具体的限制条件,比如
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
SELECT ?g
WHERE
{ ?y vcard:Given ?g .
FILTER regex(?g, "r", "i") }
这是要查询一些名字(Given
Name),”r”表示,名字中必须出现的字母”r”或者”R”;”i”表示,对签名的字母限制,对大小写并不敏感。若是要对大小写敏感,则去掉这个限制
即可,即FILTER regex(?g, "r")。
上面查询的结果是
| g |
=============
| "Rebecca" |
| "Sarah" |
对数值限制的一个例子是:
PREFIX info <http://somewhere/peopleInfo
#>
SELECT ?resource
WHERE { ?resource info:age ?age .
FILTER (?age >= 24)}
注意,在RDF文件vc-db-1.rdf中并没有包括年龄age信息,这里要查询vc-db-2.rdf文件,即
sparql --data=vc-db-2.rdf --query=q-f2.rq
查询结果是
| resource |
=================================
| <http://somewhere/JohnSmith/
>
|
5. 可选的查询信息optional information
5.1 简单的可选信息
在一些查询中,一些需要返回的数据可能不存在,而这些不存在的数据所在的数据元素中有其他需要返回的信息,这时候就可以通过可选查询信息进行查询, 比如:
PREFIX info: <http://somewhere/peopleInfo
#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
SELECT ?name ?age
WHERE {
?person vcard:FN ?name .
OPTIONAL { ?person info:age ?age }
}
这是要查询一些名字和年龄,但有些人没有年龄信息,也要返回名字。
于是,OPTIONAL表示,模式 { ?person info:age ?age } 是可选的,不是必须满足的。这个查询的执行语句是
sparql --data=vc-db-2.rdf --query=q-opt1.rq
查询结果是
| name | age |
=======================
| "Becky Smith" | 23 |
| "Sarah Jones" | |
| "John Smith" | 25 |
| "Matt Jones"| |
如果去点关键字OPTIONAL,那么,查询的结果就
| name | age |
=======================
| "Becky Smith" | 23 |
| "John Smith" | 25 |
有些人没有年龄信息,那么,这些人的名字也不会被作为查询结果返回。
5.2 对可选模式添加过滤条件
PREFIX info: <http://somewhere/peopleInfo
#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
SELECT ?name ?age
WHERE {
?person vcard:FN ?name .
OPTIONAL { ?person info:age ?age . FILTER ( ?age > 24 ) }
}
这样返回的信息是
| name | age |
=======================
| "Becky Smith" | |
| "Sarah Jones" | |
| "John Smith" | 25 |
| "Matt Jones" | |
有些人没有年龄信息("Sarah Jones"和"Matt Jones" ),有些人的年龄小于24("Becky
Smith"),他们的名字信息也会出现在查询结果中。下面的查询要求,如果有年龄信息,那么年龄必须大于24,否则不是期望的查询结果。
PREFIX info: <http://somewhere/peopleInfo
#>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
SELECT ?name ?age
WHERE {
?person vcard:FN ?name .
OPTIONAL { ?person info:age ?age . }
FILTER ( !bound(?age) || ?age > 24 )
}
语句 !bound(?age) || ?age > 24
的意思是,没有(未绑定)age或者age大于24。如此,年龄小于24的"Becky Smith"就不会出现在这个查询的结果中了。
| name | age |
=======================
| "Sarah Jones" | |
| "John Smith" | 25 |
| "Matt Jones" | |
6. 联合查询
vCard词汇表和FOAF词汇表都可以表示人的信息,比如vCard中的 vCard:FN, FOAF中的 foaf:name.这一节介绍在一个RDF图同时用vCard:FN和 foaf:name表示人的信息时,如何查询相关数据。
注:vCard是电子商务中卡的一种文件格式标准,一般与邮件信息关联。FOAF(http://xmlns.com/foaf/0.1/ )是一种RDF的 应用,所列网址有它的规范。
6.1 一个RDF图文件,vc-db-3.ttl,文件的的内容为
@prefix foaf: <http://xmlns.com/foaf/0.1/
>
.
@prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
.
_:a foaf:name "Matt Jones" .
_:b foaf:name "Sarah Jones" .
_:c vcard:FN "Becky Smith" .
_:d vcard:FN "John Smith" .
它只是分别用foaf:name 和vcard:FN描述了四个人名,这一节的查询将针对此文件。
6.2 查询人名信息
PREFIX foaf: <http://xmlns.com/foaf/0.1/
>
PREFIX vCard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
SELECT ?name
WHERE{
{ [] foaf:name ?name } UNION { [] vCard:FN ?name }
}
查询结果是
| name |
=================
| "Matt Jones" |
| "Sarah Jones" |
| "Becky Smith" |
| "John Smith" |
一个等价的查询语句是
PREFIX foaf: <http://xmlns.com/foaf/0.1/
>
PREFIX vCard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
SELECT ?name
WHERE{
[] ?p ?name
FILTER ( ?p = foaf:name || ?p = vCard:FN ) }
6.3 记录结果的来源,查询语句和结果分别是
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 }
}
| name1 | name2 |
=================================
| "Matt Jones" | |
| "Sarah Jones" | |
| | "Becky Smith" |
| | "John Smith" |
6.4 同时使用OPTIONAL和UNION
查询语句是
PREFIX foaf: <http://xmlns.com/foaf/0.1/
>
PREFIX vCard: <http://www.w3.org/2001/vcard-rdf/3.0
#>
SELECT ?name1 ?name2
WHERE{
?x a foaf:Person
OPTIONAL { ?x foaf:name ?name1 }
OPTIONAL { ?x vCard:FN ?name2 }
}
查询结果是:
| name1 | name2 |
=================================
| "Matt Jones" | |
| "Sarah Jones" | |
| | "Becky Smith" |
| | "John Smith" |
7. 查询命名的图
图是一个RDF数据集,不是一个完整的RDF文件。现在有三个图
Default graph (ds-dft.ttl):
@prefix dc: <http://purl.org/dc/elements/1.1/
>
.
@prefix xsd: <http://www.w3.org/2001/XMLSchema
#>
.
<ds-ng-1.ttl> dc:date "2005-07-14T03:18:56+0100"^^xsd:dateTime .
<ds-ng-2.ttl> dc:date "2005-09-22T05:53:05+0100"^^xsd:dateTime .
Named graph (ds-ng-1.ttl):
@prefix dc: <http://purl.org/dc/elements/1.1/
>
.
[] dc:title "Harry Potter and the Philospher's Stone" .
[] dc:title "Harry Potter and the Chamber of Secrets" .
Named graph (ds-ng-2.ttl):
@prefix dc: <http://purl.org/dc/elements/1.1/
>
.
[] dc:title "Harry Potter and the Sorcerer's Stone" .
[] dc:title "Harry Potter and the Chamber of Secrets" .
7.1 查询语句是
PREFIX xsd: <http://www.w3.org/2001/XMLSchema
#>
PREFIX dc: <http://purl.org/dc/elements/1.1/
>
PREFIX : <.>
SELECT *{ ?s ?p ?o }
对图的查询是(PREFIX : <.>是为了格式化输出???),
sparql --graph=ds-dft.ttl –namedgraph=ds-ng-1.ttl –namedgraph=ds-ng-2.ttl --query=q-ds-1.rq
查询结果是
| s | p |
o |
======================================================================
| :ds-ng-2.ttl | dc:date | "2005-09-22T05:53:05+01:00"^^xsd:dateTime |
| :ds-ng-1.ttl | dc:date | "2005-07-14T03:18:56+01:00"^^xsd:dateTime |
7.2 查询指定图
PREFIX dc: <http://purl.org/dc/elements/1.1/
>
PREFIX : <.>
SELECT ?title{
GRAPH :ds-ng-2.ttl
{ ?b dc:title ?title }}
查询结果
| title |
=============================================
| "Harry Potter and the Sorcerer's Stone" |
| "Harry Potter and the Chamber of Secrets" |
. SPARQL查询结果集
四种形式的结果
¨ SELECT – 返回一个表(table),Tutorial里介绍的主要是这种查询
¨ CONSTRUCT – 返回一个RDF图
¨ DESCRIBE – 返回一个RDF图.
¨ ASK – 布尔查询
结果调整
¨ Projection 投影- keep only selected variables 只保持选择的变量
¨ OFFSET/LIMIT 偏移和限制 - chop the number solutions (best used with ORDER BY) 分解数字结果
¨ ORDER BY 排序- sorted results(同数据类型类的结果???)
¨ DISTINCT - yield only one row for one combination of variables and values.
9. 在Jena中使用SPARQL
在我的机器上,eclipse已经可以运行使用Jena API的Java程序。这样就可以直接编写SPARQL查询程序。一个简单查询的全部代码如下:
import java.io.*;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.ModelFactory;
public class OntoQuery{
public static void main(String[] args) throws IOException{
// 创建一个本体模型,这里使用的是前一段时间设计的IIPO本体,附带实例。
OntModel model =
ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
model.read("file:./IIPO.v1.1.with_individuals.owl");
// 创建一个查询语句
String queryString = "SELECT ?teacher ?student" +
" WHERE " +
"{ ?teacher <http://www.owl-ontologies.com/IIPO.owl#direct
>
?student}";
// 创建一个查询
Query query = QueryFactory.create(queryString);
// 执行查询,获得结果
QueryExecution qe = QueryExecutionFactory.create(query, model);
ResultSet results = qe.execSelect();
// 向控制台输出结果s
ResultSetFormatter.out(System.out, results, query);
// 释放资源
qe.close();
} // the end of main.
} // the end.
返回的结果是:
| teacher |
student |
|====================================================================================================|
|<http://www.owl-ontologies.com/IIPO.owl#Teacher_1
>
| <http://www.owl-ontologies.com/IIPO.owl#Std_1
>
|
总结:并没能够很好的理解SPARQL,纯粹对Tutorial的翻译和rephrasing.
说明:文章中参考翻译的Tutorial http://jena.sourceforge.net/ARQ/Tutorial/index.html
引自:http://imarine.blog.163.com/blog/static/5138018320071119110889/
发表评论
-
DAML-S简介
2010-08-02 11:30 882引自:http://hi.baidu.com/fe ... -
OWL-S API指南
2010-07-15 16:13 1231引自http://yoancn.blogbus.com/log ... -
在 Protege中安装owl-s editor、graphviz插件
2010-07-15 15:59 29661.软件安装: 双击install_protege.exe安 ... -
语义Web服务的API使用实例:OWL-S API结合matchmaker、推理机(Jena、Pellet)进行语义转换、匹配、组合及调用web服务
2010-07-15 15:58 1687引自http://www.cnblogs.com/armyme ... -
Jena 环境的配置
2010-07-15 15:55 1189引自 http://www.cnblogs.com/armym ... -
基于OWL-S的语义Web服务发现组装的常用工具
2010-07-15 15:54 1206Protege + OWL-S Editor + ... -
使用jena持久化OWL本体到MySQL
2010-07-15 15:54 1391引自http://www.cnblogs.com/ar ... -
语义Web Service检索服务的工具下载
2010-07-15 15:52 877Eclipse下载: http://www.eclipse.o ... -
本体推理的一个例子
2010-07-15 15:19 2486引自http://hi.baidu.com/wxmsona/b ... -
家族族谱推理规则文件
2010-07-15 15:19 695引自http://hi.baidu.com/wxmsona/b ... -
家族族谱owl文件
2010-07-15 15:17 1053引自http://hi.baidu.com/wxmsona/b ... -
jena持久化到数据库
2010-07-15 15:15 1104Jena 由 HP Labs (http://www.hp ... -
用 SPARQL 搜索 RDF 数据
2010-07-15 15:14 1697随着越来越多的数据使用类似 RSS 的 RDF 格式保存, ... -
jena 操作RDF的一个例子(参考IBM的一篇文章)
2010-07-15 15:13 1268jena 操作RDF的一个例子 ... -
Jena的一个例子
2010-07-15 15:12 1186摘自:http://www.crabone.com/index ... -
本体(Ontology)综述
2010-07-15 15:10 1026本体作为一种能在语义和知识层次 上描述领域概念的建模工具,其 ... -
语义Web和本体开发相关技术
2010-07-15 15:09 1318摘自:http://iMarine.blog.163.com/ ... -
owl-s API一个简单例子
2010-07-15 15:09 1166owl-s语义Web服务标记语言, 在Tim Berners- ... -
语义Web
2010-07-15 14:48 859语 义Web概念: 1998 ... -
语义Web中语言与本体
2010-07-15 14:43 843随着人们对网络上信 ...
相关推荐
SPARQL(SPARQL Protocol and RDF Query Language)是W3C推荐的RDF数据查询语言,类似于SQL对于关系数据库的作用。它提供了强大的查询能力,可以用于获取、组合和过滤RDF数据。"rdf-store-sparql"库支持SPARQL查询,...
# 基于Spring Boot和gStore的RDF数据查询系统 ## 项目简介 本项目是一个基于Spring Boot框架和gStore数据库的RDF数据查询系统。通过Java API与gStore进行交互,实现对RDF数据的查询和管理。项目包含了数据库配置、...
2. **易用性**:即使用户不了解底层本体结构或不熟悉SPARQL查询语言,也能使用该系统进行查询。 3. **可扩展性**:用户可以根据需要添加额外的数据源。 4. **数据过滤**:初始查询结果可以进一步筛选以提高相关性。 ...
SPARQL作为RDF数据的查询语言,具有以下特性: 1. **选择性查询**:可以获取满足特定条件的三元组。 2. **连接性查询**:允许查询多个三元组之间的关联。 3. **聚合函数**:支持COUNT、SUM、AVG等统计计算。 4. **...
### SPARQL语言规则——语义Web查询语言 #### 一、引言 随着语义Web技术的发展,越来越多的数据以RDF(Resource Description Framework,资源描述框架)格式存储,这催生了对一种高效、标准的查询语言的需求。在...
SPARQL是针对RDF数据的查询语言,类似于SQL对于关系数据库的作用。它允许用户用自然语言风格的语法查询知识图谱,获取相关信息。SPARQL支持基本查询、联接查询、子查询、过滤条件、分组、排序等多种功能,为KBQA提供...
本项目基于RDF(Resource Description Framework)数据模型和SPARQL(SPARQL Protocol and RDF Query Language)查询语言来实现。RDF是一种用于表示网络资源的标准模型,而SPARQL则是针对RDF数据进行查询的语言。...
3. SPARQL查询语言转换为CYPHER图形查询语言:SPARQL是一种针对RDF数据的查询语言,而CYPHER是Neo4j图数据库使用的图形查询语言。将SPARQL查询转换为CYPHER查询,是为了能够利用图数据库的高性能特性来执行查询操作...
为了深入挖掘和利用这个数据集,你需要掌握SPARQL查询语言,它是RDF数据的标准查询工具。此外,熟悉OWL(Web本体语言)和RDFS(RDF Schema)可以更好地理解和建模医疗知识图谱的结构。最后,使用数据分析和可视化...
微博数据查询是指使用SPARQL查询语言查询微博RDF数据的过程。微博数据查询可以帮助我们更好地获取微博数据的信息。 知识点7:微博数据格式化存储 微博数据格式化存储是指使用RDF三元组将微博数据存储在Openlink ...
RDF-RDFS-SPARQL 这是一个有关RDF / RDFS和Sparql查询的uni项目,以便对该对象有初步的了解。... 在上一个查询中,我们必须创建一些SPARQL查询,以便从在第三个查询中创建的RDF文件中提取某些特定数据。
总之,SPARQL作为RDF数据的查询语言,为语义网的应用提供了强大的查询能力,它结合了SQL的易用性和语义网的灵活性,使得开发者能够更好地处理和探索Web上的结构化信息。通过学习和掌握SPARQL,开发者可以利用语义网...
SPARQL是W3C推荐的标准查询语言,用于从RDF数据源中检索信息。它支持对知识图谱进行复杂查询,包括选择、投影、联接、过滤、分组和排序等操作。通过编写SPARQL查询,用户可以询问关于知识图谱的各种问题,如“哪些人...
SPARQL查询是用于查询 RDF 数据模型的标准查询语言,它利用特定语法来查询本体、RDF 图和RDF 源。将 SPARQL 查询转换为 SQL 查询,意味着需要解析 SPARQL 语句,并重写为可以在关系数据库上执行的 SQL 语句。这个...