没有合适的资源?快使用搜索试试~ 我知道了~
介绍Jena,运行Jena,Jena Ontology API,例子,参考资料
资源推荐
资源详情
资源评论
Jena 简介
一般来说,我们在 这样的编辑器里构建了本体,就会想在应用程序里
使用它,这就需要一些开发接口。用程序操作本体是很必要的,因为在很多情
况下,我们要自动生成本体,靠人手通过 创建所有本体是不现实的。
是 公司开发的这样一套 ,似乎 公司在本体这方面走得很靠前,
其他大公司还在观望吗?
可以这样说, 对应用程序就像 对我们,我们使用 操作
本体,应用程序则是使用 来做同样的工作,当然这些应用程序还是得由我
们来编写。其实 本身也是在 的基础上开发的,你看如果
的 里报异常的话,多半会和 有关。最近出了一个
,相当于对 的包装,据说使用起来更方便,这个
就是 的 所使用的,相信作者经过 的开发以
后,说这些话是有一定依据的。
题目是说用 处理 ,其实 当然不只能处理 ,就像
除了能处理 外还能处理 一样。 最基本的使用是处理
,但毕竟 已经成为 的推荐标准,所以对它的支持也是大势
所趋。
好了,现在来点实际的,怎样用 读我们用 创建的 本体呢,
假设你有一个 本体文件(),里面定义了动物类( !"##
$%##%,注意这并不是一个实际存在的 &,不要试图
去访问它),并且它有一些实例,现在看如下代码:
'()%)*)'(++'(,
%+*,
%()!%%+-)..,
))*)%/0 !++!-)%. !"##
$%##%.,
) 12)3
)))))%)*))2,
))))+%!%1%,
4
和操作 不同,% ! !0+'( 是专门处理本
体(+)的,它是 % ! !0(5%('( 的子接口,具
有 '( 的全部功能,同时还有一些 '( 没有的功能,例如
、/0!,因为只有在本体里才有“类”和“属性”
的概念。
上面的代码很简单,从 '(+ 创建一个 '(,从指定文件把模
型读到内存里。再下面的代码是一个例子,作用是取出模型中所有 % 的
实例((6(,也叫个体),并打印它们的名称。要从 '( 里取实
例,也可以用 (6(方法,只不过你得在得到的实例中判断它们是
不是 % 的实例,我觉得不如用上面这种简易查询的方式来得方便。
里扩展了很多 ,比如 、% 和
1( 等等,刚开始用会觉得很别扭,好象还不如都用 06 标准的
,不知道 的设计者是怎么考虑的。要熟练掌握还是得对整个
的 有全局掌握才好。
在循环里,我们得到的每个元素都是一个 ,因为本体里的任何东西
都是资源,不论你想得到 /0、!+ 还是 /0,在 里实际得
到的都是资源(),在 里,!+ 是 的子接口,
而 并没有 /0 或 /0 接口。(注:在 本体中,/07
8!+78/0 组成一个三元组,例如:张小刚78父亲78张大刚;或者:
绵羊多利78(5"+!78动物,(5"+! 是一个特殊的属性,表示前者是后者的
实例)
暂时先写到这,关于在本体中引入其他本体和使用推理,下次继续。
本文简单介绍 (),使用 (不是最新版本)创建一个简单
的生物()本体,然后参照 文档中的一个例子对本体进行简单的处理,输出
本体中的 、 等信息。
本文内容安排如下:
Ø介绍 Jena
Ø运行 Jena
ØJena Ontology API
Ø例子
Ø参考资料
一、介绍 Jena
由()开发的 开发工具包!用于 "#
$%语义网&中的应用程序开发; 是开源的,在下载的文档中有 的完整代码。
框架主要包括
&以 '()*+、三元组形式读写 '()
资源描述框架是%'()&是描述资源的一项标准%在技术上是 $ 的推荐标准&, 文
档中有一部分呢详细介绍了 '() 和 '(),-,其内容包括对 '() 包的介绍、
'() 模型的创建、读写、查询等操作,以及 '() 容器等的讨论。
&'()",.$,(,+/.- 等本体的操作
框架包含一个本体子系统(."),它提供的 ,- 允许处理基
于 '() 的本体数据,也就是说,它支持 .$,(,+/.- 和 '()"。本体 ,- 与推理子
系统结合可以从特定本体中提取信息, 还提供文档管理器
(.(+)以支持对导入本体的文档管理。
&利用数据库保存数据
0000 允许将数据存储到硬盘中,或者是 .$ 文件,或者是关系数据库中。本文处理
的本体就是 .$ 文件读入的。
1&查询模型
提供了 ,'2 查询引擎,它实现 ",'2 查询语言和 '(2,从而支持对模型
的查询。另外,查询引擎与关系数据库相关联,这使得查询存储在关系数据库中的本体时
能够达到更高的效率。
&基于规则的推理
支持基于规则的简单推理,其推理机制支持将推理器%#3&导
入 ,创建模型时将推理器与模型关联以实现推理。
是一个开源的本体编辑器(目前的版本是 ),用户可以在 45- 环
境下创建本体或者知识库。有一种说法是: 对应用程序就像 对我们——我们
使用 操作本体,应用程序则是使用 来做同样的工作。当然这些应用程序还是
得由我们来编写。
二、运行 Jena
可以在 的主页(6311)下载 的最新
版本,目前是 版本。 是 ,-,所以需要 运行环境。本文使用的是
61789:9 和 ;#。
将下载的 <=# 解压到任意路径,解压之后生成 文件夹,将
# 下的 6 文件全部加入 ,"",>,这样就可以在任意的 编辑器中调用
,- 了。在解压目录下有一个 文件,用于配置的测试。在控制台运行此程序,如果
你的配置正确,测试将顺利完成。
4?61?#?616@4?61?#?##6@4?61?#?<1?<1<
6@4?61?#?6 >6@4?61?#?6@4?6?#?<A86@4?6?#?
B6@4?6?#?B<C6@4?6?#?<#<6@4?6?#?
6@4?6?#?#6::6@4?6?#?##6@4?6?#?66@4?6?#?
66@4?6?#?66@4?6?#?6#6@4?6?#?6<6@4?6?#?
<<996@4?6?#?C<#<96@4?6?#?C<<996@4?6?#?
C-6@4?6?#?C<#6
如果使用 ;#,则可以通过修改工程的 创建路径的方法导入 6 文件。
在 ;# 下创建 工程,右健单击工程名字,选择“属性#D,在打开的对话
框中选择“ 创建路径 E#1D,在右边标签中选择“库##D!之后选择“添
加外部文件,11;C,'D,找到 # 目录下的所有 6 文件并将其添加到工程。
这样就可以运行 文档中的例子了。
三、Jena Ontology API
的 .,- 包含在 包(6)中,可以在
目录<6 下查看所有程序的代码, 本体部分的说
明网页是<1#1C!本部分内容以及程序的编写主要参考这两个文
档。
在语义网上有很多表示本体信息的本体语言,其中表达能力最强的是 .$,.$ 按
复杂程度分为.$)、.$( 和 .$# 三个版本。其他的本体语言还有
'()"、(,+/.-。.,- 为语义网应用程序开发者提供了一组独立于具体
语言的一致编程接口。
提供的接口本质上都是 程序,也就是6 文件经过 6 之后生成的
文件。显然, 文件并不能提示本体创建使用的语言。为了区别于其他的表示方法,每
种本体语言都有一个自己的框架(3#),它列出了这种语言使用的类(概念)和属性
的构建方式和 5'-。因此,在 (,+ 框架里,对象属性()的 5'- 是
1.6,而在 .$ 框架里却是 .6。'()" 并没有定义对象
属性,所以在 '()" 框架里,对象属性的 5'- 是 。
在 中,这种框架通过参数的设置在创建时与本体模型(.+1)绑定
在一起。本体模型继承自 中的 +1 类。+1 允许访问 '() 数据集合中的陈述
("),.+1 对此进行了扩展,以便支持本体中的各种数据对象:类
()、属性(#)、实例(个体 #1# #1)。
本部分简单介绍要用到的几个 6 类或者接口。
.本体模型 .+1
本体模型(.+1)是对 '() 模型的扩展(继承自 '() 模型),提供了处
理本体数据的功能。使用 处理本体首先就是要建立一个本体模型,之后就能够通过
本体模型中所定义的方法操作模型,比如导入子模型()、获取模型中本体的信息、操作
本体属性以及将本体的表示输出到磁盘文件等等。 通过 1 包中的 +1)
创建本体模型,+1) 是 提供用来创建各种模型的类,在类中定义了具体实
现模型的成员数据以及创建模型的二十多种方法。一个最简单的创建本体模型的语句如下:
OntModel ontModel = ModelFactory.createOntologyModel();
该语句不含参数,应用默认设置创建一个本体模型 +1,也就是说:它使用
.$ 语言、基于内存,支持 '()" 推理。可以通过创建时应用模型类别
(.+1")参数创建不同的模型,以实现不同语言不同类型不同推理层次的本体
操作。例如,下面的语句创建了一个使用 (,+ 语言内存本体模型。直观地讲,内存模型
就是只在程序运行时存在的模型,它没有将数据写回磁盘文件或者数据库表。
OntModel ontModel =
ModelFactory.createOntologyModel( OntModelSpec.DAML_MEM );
更多类型设置可以参照 OntModelSpec 类中的数据成员的说明。
我们所使用的本体是从 .$ 文件获得的,也就是说,是从磁盘读取的。读取的方法
是调用 .+1 提供的 '1 方法。例如
ontModel.read("file:D:/temp/Creatrue/Creature.owl");
就是读取位于 ( 盘相应目录下的 文件以建立本体模型。'1 方法也有很多
重载,上面调用的方法以文件的绝对路径作为参数。其他的方法声明如下
read( String url );
read( Reader reader, String base );
read( InputStream reader, String base );
read( String url, String lang );
剩余43页未读,继续阅读
资源评论
yangcuni
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功