`
akunamotata
  • 浏览: 373595 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在应用程序中利用Jena API处理OWL本体

    博客分类:
  • note
阅读更多

接触Semantic Web的时间还不是很长,所以现在写的这方面内容算是笔记性质,很可能存在很多误解,欢迎指出或讨论:)


一般来说,我们在Protege这样的编辑器里构建了本体,就会想在应用程序里使用它,这就需要一些开发接口。用程序操作本体是很必要的,因为在很 多情况下,我们要自动生成本体,靠人手通过Protege创建所有本体是不现实的。Jena是HP公司开发的这样一套API,似乎HP公司在本体这方面走 得很靠前,其他大公司还在观望吗?


可以这样说,Jena对应用程序就像Protege对我们,我们使用Protege操作本体,应用程序则是使用Jena来做同样的工作,当然这些应 用程序还是得由我们来编写。其实Protege本身也是在Jena的基础上开发的,你看如果Protege的console里报异常的话,多半会和 Jena有关。最近出了一个Protege OWL API,相当于对Jena的包装,据说使用起来更方便,这个API就是Protege的OWL Plugin所使用的,相信作者经过OWL Plugin的开发以后,说这些话是有一定依据的。


题目是说用Jena处理OWL,其实Jena当然不只能处理OWL,就像Protege除了能处理OWL外还能处理RDF(S)一样。Jena最基本的使用是处理RDF(S),但毕竟OWL已经成为W3C的推荐标准,所以对它的支持也是大势所趋。


好了,现在来点实际的,怎样用Jena读我们用Protege创建的OWL本体呢,假设你有一个OWL本体文件(.owl),里面定义了动物类(http://www.zoo.com/ont/Animal ,注意这并不是一个实际存在的URL,不要试图去访问它),并且它有一些实例,现在看如下代码:

 

OntModel m = ModelFactory.createOntologyModel();
File myFile = ...;
m.read(new FileInputStream(myFile), "");
ResIterator iter = m.listSubjectsWithProperty(RDF.type, m.getResource("http://www.zoo.com/ont/Animal"));
while (iter.hasNext()) {
    Resource animal = (Resource) iter.next();
    System.out.println(animal.getLocalName());
} 

 

和操作RDF(S)不同,com.hp.hpl.jena.ontology.OntModel是专门处理本体(Ontology)的,它是 com.hp.hpl.jena.rdf.model.Model的子接口,具有Model的全部功能,同时还有一些Model没有的功能,例如 listClasses()、listObjectProperties(),因为只有在本体里才有“类”和“属性”的概念。


上面的代码很简单,从ModelFactory创建一个OntModel,从指定文件把模型读到内存里。再下面的代码是一个例子,作用是取出模型中所有 Animal的实例(Individual,也叫个体),并打印它们的名称。要从OntModel里取实例,也可以用listIndividuals() 方法,只不过你得在得到的实例中判断它们是不是Animal的实例,我觉得不如用上面这种简易查询的方式来得方便。


Jena里扩展了很多Iterator,比如ResIterator、StmtIterator和NodeIterator等等,刚开始用会觉得很别扭, 好象还不如都用java标准的Iterator,不知道Jena的设计者是怎么考虑的。要熟练掌握还是得对整个Jena的API有全局掌握才好。


在循环里,我们得到的每个元素都是一个Resource,因为本体里的任何东西都是资源,不论你想得到Subject、Property还是 Object,在Jena里实际得到的都是资源(Resource),在Jena里,Property是Resource的子接口,而Jena并没有 Subject或Object接口。(注:在OWL本体中,Subject->Property->Object组成一个三元组,例如:张小 刚->父亲->张大刚;或者:绵羊多利->rdf:type->动物,rdf:type是一个特殊的属性,表示前者是后者的实 例)

 

 

分享到:
评论

相关推荐

    利用jena API查询OWL本体(重要).txt

    利用jena API查询OWL本体 最近在学习本体和语义网。学习了OWL,也尝试着用了一下jena API对OWL本体进行查询。

    jena+API查询OWL本体(重要).rar_OWL API_jena_jena api_jena owl api_本体 ow

    这是一个jena api解析owl文件的简单案例。

    Jena-API.rar_jena api_jena protege_owl_protege jena_本体

    本体,应用程序则是使用Jena来做同样的工作,当然这些应用程序还是得由我 们来编写。其实Protege本身也是在Jena的基础上开发的,你看如果Protege 的console里报异常的话,多半会和Jena有关。最近出了一个Protege OWL...

    Jena中文教程-本体API

    jena的中文教程,适合不想去官网看原版教程的人。适合新手入门学习jena的基本操作。jena可以解析本体,可以将建模工具和java联系起来

    jena语义网络开发框架

    此外Jena还提供了非常实用的命令行工具(例如SPARQL查询、批量导入RDF数据等)和一个基于Jena框架构建的Web应用程序Fuseki。 学习Jena框架,一定要结合对于的语义技术的知识,这样才能更加快速地上手。

    OWL本体查询技术研究 (2006年)

    通过基于本体工程API的本体查询技术的研究,给出了一种基于Jena的、支持OWL Lite本体查询的原型工具OWL-QS的设计与实现技术.该技术给出了本体解析、本体信息...基于当前开源本体API(如Jena)实现OWL本体查询是可行的.

    JenaOntology教程

    可以这样说,Jena对应用程序就像Protege对我们,我们使用Protege操作本体,应用程序则是使用Jena来做同样的工作,当然这些应用程序还是得由我们来编写。其实Protege本身也是在Jena的基础上开发的,你看如果Protege的...

    An Introduction to RDF and the Jena RDF API(英文版)

    jena的RDF开发API,内含很多实例,英文版

    Automatic-Patent-Ontology-Construction-System:专利本体论自动建置系统

    Jena API:SPARQL 语法查询本体知识 MySQL Protégé 本体架构 专利资料 下图是利用爬虫至页面取得的专利资料,储存在MySQL DB,有以下栏位: id :专利编号 name :专利名称 announcement_date :公告/公开日 LOC...

    java8看不到源码-rdf-protege:(RDF)Protege桌面

    OWL-API v5(不是 v4)的实现,因此没有现有的原生 Protege 插件与此分支兼容。 由于 ONT-API 是一个以 RDF 为中心的 OWL-API 实现(并且 RDF-Graph 是那里的主要主角),这为原生支持所有与 RDF 相关的事物提供了很...

Global site tag (gtag.js) - Google Analytics