- 浏览: 59928 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 850引自:http://hi.baidu.com/fe ... -
OWL-S API指南
2010-07-15 16:13 1202引自http://yoancn.blogbus.com/log ... -
在 Protege中安装owl-s editor、graphviz插件
2010-07-15 15:59 29091.软件安装: 双击install_protege.exe安 ... -
语义Web服务的API使用实例:OWL-S API结合matchmaker、推理机(Jena、Pellet)进行语义转换、匹配、组合及调用web服务
2010-07-15 15:58 1647引自http://www.cnblogs.com/armyme ... -
Jena 环境的配置
2010-07-15 15:55 1160引自 http://www.cnblogs.com/armym ... -
基于OWL-S的语义Web服务发现组装的常用工具
2010-07-15 15:54 1180Protege + OWL-S Editor + ... -
使用jena持久化OWL本体到MySQL
2010-07-15 15:54 1365引自http://www.cnblogs.com/ar ... -
语义Web Service检索服务的工具下载
2010-07-15 15:52 846Eclipse下载: http://www.eclipse.o ... -
本体推理的一个例子
2010-07-15 15:19 2460引自http://hi.baidu.com/wxmsona/b ... -
家族族谱推理规则文件
2010-07-15 15:19 654引自http://hi.baidu.com/wxmsona/b ... -
家族族谱owl文件
2010-07-15 15:17 1014引自http://hi.baidu.com/wxmsona/b ... -
jena持久化到数据库
2010-07-15 15:15 1084Jena 由 HP Labs (http://www.hp ... -
用 SPARQL 搜索 RDF 数据
2010-07-15 15:14 1670随着越来越多的数据使用类似 RSS 的 RDF 格式保存, ... -
jena 操作RDF的一个例子(参考IBM的一篇文章)
2010-07-15 15:13 1232jena 操作RDF的一个例子 ... -
Jena的一个例子
2010-07-15 15:12 1162摘自:http://www.crabone.com/index ... -
本体(Ontology)综述
2010-07-15 15:10 999本体作为一种能在语义和知识层次 上描述领域概念的建模工具,其 ... -
语义Web和本体开发相关技术
2010-07-15 15:09 1289摘自:http://iMarine.blog.163.com/ ... -
owl-s API一个简单例子
2010-07-15 15:09 1137owl-s语义Web服务标记语言, 在Tim Berners- ... -
语义Web
2010-07-15 14:48 833语 义Web概念: 1998 ... -
语义Web中语言与本体
2010-07-15 14:43 803随着人们对网络上信 ...
相关推荐
通过对经典RDF模型添加时间戳表示其时间维度,并对时态RDF图中的蕴涵问题进行了讨论,根据SPARQL查询语言提出了完备的时态RDF查询语言T-SPARQL,并对提出的查询语言进行了可行性以及性能的实验仿真。利用该时态RDF...
SparQL(Simple Protocol and RDF Query Language),是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。 SparQL 协议和 RDF 查询语言...
RDF-RDFS-SPARQL 这是一个有关RDF / RDFS和Sparql查询的uni项目,以便对该对象有初步的了解。... 在上一个查询中,我们必须创建一些SPARQL查询,以便从在第三个查询中创建的RDF文件中提取某些特定数据。
资源描述框架(RDF),SPARQL协议和RDF查询语言(SPARQL)于大约十年前推出,以实现语义Web上灵活的无模式数据交换。 如今,数据科学家使用该框架作为可伸缩的图形表示形式,以集成,查询,浏览和分析托管在不同来源...
允许查询数据源。 SPARQL.js将SPARQL转换为JSON并返回,因此您可以在JavaScript应用程序中解析和构建SPARQL查询。 它还在sparqlStar选项下包含对扩展的sparqlStar 。 它完全支持,包括,和。 用法 图书馆 // Parse...
尝试使用了三元组数据库Apace Jena和原生图数据库Neo4j,并分别使用RDF结构化查询语言SPARQL和属性图查询语言Cypher,在知识图谱上进行查询。 知识抽取 基于之间构建的关系抽取数据集,利用deepke中提供的工具进行...
尝试使用了三元组数据库Apace Jena和原生图数据库Neo4j,并分别使用RDF结构化查询语言SPARQL和属性图查询语言Cypher,在知识图谱上进行查询。 知识抽取 基于之间构建的关系抽取数据集,利用deepke中提供的工具进行...
查询引擎对RDF.ex数据结构执行查询时,尚不支持以下列表中缺少的查询语言功能。 SPARQL 1.1查询语言 基本图形模式匹配 组图模式匹配 通过OPTIONAL可选图形模式匹配 通过UNION替代图形模式匹配 通过FROM和GRAPH在...
文档包含了RDF(资源描述框架)数据,和有关音乐知识的Owl(网络本体语言),音乐知识图表是用rdf数据表示的,通过SPARQL查询语言可以对文档中数据进行增删改查等操作。
为了简化该过程,有必要使用一种广为人知的语料库查询语言,使用它,然后将查询转换为SPARQL查询,然后针对我们的数据运行该查询。 CQP是查询语言的最佳选择,CQP是为IMS Corpus Workbench开发的一种语言。 它可...
SPARQL 的实现(解析器/解释器),这是 W3C 当前推荐的 RDF 数据查询语言。 允许轻松自定义语言并插入多个流行的 RDF 服务器,如 Sesame。
现有的语义 Web 查询语言,如 SPARQL,以事实的检索、组合和重用为目标,但迄今为止都忽略了元知识的所有方面,例如数据的来源、作者、新近度或确定性。 在本文中,我们提出了一种原始的、通用的、形式化的和已实现...
查询语言显示、分析和可视化数据和文档的工具包。 Gastrodon 将支持 SPARQL 协议 () 的数据库链接到用于分析表格数据的流行 Python 库。 反过来,Pandas 连接到大量的可视化、统计和机器学习工具,所有这些工具都...
本教程介绍了 SPARQL 以及基础数据格式。还涵盖了 RDF、RDF Schema、OWL 以及 Turtle 知识表示语言。通过这些语言可以建立本体 或者域模型。本教程的例子建立了用于日志和预约系统的本体和查询,可以生成带...
() ()描述是用于从RDF三元组存储检索数据的查询语言。 我经常遇到这样的问题,即开发人员或数据狂热者要求提供三重存储中的数据,但他们不了解SPARQL。 该服务器应用程序解决了该问题: 您编写查询并为其命名...
为解决基于本体的数据集成系统中的查询转换问题,提出SPARQL查询的关系代数表示和转换方法。引入RDF图模式的关系代数,定义了五种基本的关系运算,给出了SPARQL...系统实现表明,该方法能够有效地实现查询语言的转换。
我们发布并维护一个黄金标准的KBQA(知识库问答)数据集,其中包含5000个Question和SPARQL查询。 LC-QuAD使用作为目标KB。 用法 许可证:您可以下载数据集(随),或阅读以下内容以了解更多信息。 版本控制:我们...
语义查询和搜索可以通过语义Web标准查询语言SPARQL探索使用RDF构建的数据。 使用SPARQL Endpoint,您可以访问所有数据或下载数据。语义浏览器提供在Web浏览器中浏览使用RDF构建的数据的功能。 您可以看到语义数据的...
SPARQL 是一种用于查询 RDF 图形的声明式查询语言,支持仅基于事实检索数据; 相比之下,推荐系统旨在预测用户对一组未消费项目的品味。 但是,预测或建议是无法显式检索的实体。 ReSPARQL 是 SPARQL 的扩展,它填补...