一、Ontology languages and the Jena Ontology API

Jena Ontology API是与语言无关的:Java类名并不特定于底层语言。例如,OntClass Java类可以表示OWL类或RDFS类。为了表示不同表示之间的差异,每种本体语言都有一个概要文件,其中列出了允许的构造以及类和属性的名称。

因此,在OWL配置文件OWL:ObjectProperty(http://www.w3.org/2002/07/owl#ObjectProperty的缩写),而在RDFS配置文件中它是空的,因为RDFS没有定义对象属性。

概要文件绑定到一个本体模型,它是Jena的model类的扩展版本。基本模型允许访问RDF数据集合中的语句。OntModel通过添加对本体中所期望的各种构造的支持来扩展这一点:类(在类层次结构中)、属性(在属性层次结构中)和个体。

当您在Jena中使用本体时,所有状态信息仍然编码为RDF三元组(作为Jena语句访问),存储在RDF模型中。本体API不会改变本体的RDF表示。它所做的是添加一组方便的类和方法,使您更容易编写操作底层RDF三元组的程序。

本体语言中定义的谓词名称对应于API中Java类上的访问器方法。例如,一个OntClass有一个方法来列出它的超类,它对应于RDF表示中的subClassOf属性的值。这一点值得再次强调:没有信息存储在OntClass对象本身中。当您调用OntClass listSuperClasses()方法时,Jena将从底层RDF三元组检索信息。类似地,向一个OntClass添加一个子类断言一个额外的RDF三元组,通常在模型中使用谓词rdfs:subClassOf。

二、本体和推理(Ontologies and reasoning)

构建基于本体的应用程序的主要好处之一是使用推理器来获得关于您正在建模的概念的其他事实。我们在上面看到了一个简单的例子:断言“弗雷德是一条鱼”需要演绎“弗雷德是一种动物”。有许多不同风格的自动推理器,以及非常多不同的推理算法。Jena通过推理API包含了对各种推理器的支持。

Graph是一个内部Jena接口,支持RDF三元组的组合。断言的语句,可能是从本体文档中读入的,保存在基本图中。推理器或推理引擎可以使用基本图的内容和语言的语义规则来显示一组更完整的基本和派生三元组。这也是通过一个Graph接口来表示的,因此OntModel只能使用最外层的接口。这种规律性使我们可以很容易地建立有推理器或没有推理器的本体模型。这也意味着基本图可以是内存存储、数据库支持的持久存储或其他存储结构——例如LDAP目录——同样不会影响本体模型的操作(但注意,这些不同的方法可能具有非常不同的效率配置文件)。

 三、RDF-level polymorphism and Java

Jena认为Java抽象(OntClass、Restriction、DatatypeProperty等)只是资源的一个视图或方面,从而接受了RDF级别上多态性的这一基本特征。也就是说,存在从资源到资源可以表示的方面的一对多映射。如果资源的类型是owl:Class,它可以呈现OntClass facet;给定其他类型,它可以显示其他方面。Jena提供了.as()方法来有效地从RDF对象映射到其允许的facet之一。给定一个RDF对象(例如,org.apache.jena.rdf.model.RDFNode的实例或它的子类型之一),您可以通过调用as()来获得一个facet,其参数表示所需的facet。具体来说,facet由所需facet的Java类对象标识。例如,要获取资源的OntClass方面,我们可以这样写:

Resource r = myModel.getResource( myNS + "DigitalCamera" );
OntClass cls = r.as( OntClass.class );

这种模式允许我们的代码在运行时才决定使用正确的Java抽象。选择取决于资源本身的属性。如果给定的RDFNode不支持到给定facet的转换,它将引发ConversionException异常。我们可以用canAs()测试.as()对于给定的facet是否成功。这种rdf级别的多态性在Jena本体API中被广泛使用,以允许最大限度地灵活处理本体数据。

四、运行示例:ESWC本体

为了说明使用本体API的原则,我们将使用来自ESWC本体的示例。该本体提供了一个简单的模型,用于描述与典型学术会议相关的概念和活动。

五、Creating ontology models

本体模型是Jena RDF模型的扩展,为处理本体提供了额外的功能。本体模型是通过Jena ModelFactory创建的。创建本体模型最简单的方法如下:

OntModel m = ModelFactory.createOntologyModel();

这将创建一个具有默认设置的本体模型,这些设置是为了最大限度地兼容先前版本的Jena。这些默认值是:

1.owl full语言

2.内存中的存储

2.RDFS推理,它主要从子类和子属性层次结构中产生任务。

在许多应用程序中,比如驱动GUI, RDFS推理太强了。例如,每个类都被推断为owl:Thing的直接子类。在其他应用中,需要更强的推理能力。一般来说,要创建带有特定推理器或语言概要文件的OntModel,您应该将模型规范传递给createOntologyModel调用。例如,一个完全不执行推理的OWL模型可以通过以下方法创建:

OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );

Jena Ontology API相关推荐

  1. mysql jena rdf_RDF和Jena RDF API简介

    这是官方文章<An Introduction to RDF and the Jena RDF API>的译文.原文是在刺猬的温驯这里看到的.其中的图片没法显示了,还有一段丢失了.于是我在此 ...

  2. Jena RDF API 使用教程

    Jena RDF API 使用教程 Jena RDF(Resource Description Framework) 基础Java API 使用Maven引入Jena 创建资源(Resource) 描 ...

  3. Jena文档《An Introduction to RDF and the Jena RDF API》的译文

    前言 本文是一篇对W3C的资源描述框架(RDF)和 Jena(一个Java的RDF API)的教程性介绍. 本文是为那些不熟悉RDF的, 以及那些通过建立原形可以达到最好学习效果的, 或是因为其他原因 ...

  4. Jena文档《An Introduction to RDF and the Jena RDF API》的译文

    前言 本文是一篇对W3C的资源描述框架(RDF)和 Jena(一个Java的RDF API)的教程性介绍. 本文是为那些不熟悉RDF的, 以及那些通过建立原形可以达到最好学习效果的, 或是因为其他原因 ...

  5. Jena的简单理解和一个例子

    本文简单介绍Jena(Jena 2.4),使用Protégé 3.1(不是最新版本)创建一个简单的生物(Creature)本体,然后参照Jena文档中的一个例子对本体进行简单的处理,输出本体中的Cla ...

  6. Jena对本体、RDF三元组的API操作记录

    目录 目标 导入RDF 导入本体文件 新增三元组 (1)Statement方式 (2)Resource方式 问题记录 参考文献 目标 通过这份源码以及对应配套的博客内容的学习,基本上是了解和掌握了知识 ...

  7. jena 开发之 mysql数据导入_在Jena框架下基于MySQL数据库实现本体的存取操作

    转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统.其中对本体的操作部分,我使用的是Jena框架:数据模型是 ...

  8. Jena 简介:通过 Jena Semantic Web Framework 在 Jave 应用程序中使用 RDF 模型

    简介: RDF 越来越被认为是表示和处理半结构化数据的一种极好选择.本文中,Web 开发人员 Philip McCarthy 向您展示了如何使用 Jena Semantic Web Toolkit,以 ...

  9. 通过 Jena Semantic Web Framework 在 Jave 应用程序中使用 RDF 模型 (转)

    RDF 越来越被认为是表示和处理半结构化数据的一种极好选择.本文中,Web 开发人员 Philip McCarthy 向您展示了如何使用 Jena Semantic Web Toolkit,以便在 J ...

最新文章

  1. sqlserver 三种恢复模式
  2. RHEL6新特性之联网和服务
  3. 图解VMWARE内存机制
  4. 定制化Azure站点Java运行环境(2)
  5. 【转蝈蝈俊.net 】SQL Server 2005 配置发送邮件
  6. lnmp基于fastcgi实现nginx_php_mysql的分离_LNMP基于FastCGI实现Nginx,PHP,MySQL的架构分离...
  7. 巧用句柄函数:闪烁窗体,做提示功能时很有用哦
  8. osg学习笔记(一)
  9. 剑指offer(C++)-JZ18:删除链表的节点(数据结构-链表)
  10. canvas瓦片图加载
  11. 【开源教程9】疯壳·开源编队无人机-定时器(LED 航情灯、指示灯闪烁)
  12. Quartus II 13.1 出现 ‘‘can‘t find design entity <Filename>‘‘ 问题的解决方法
  13. JAVA中(PO,VO,TO,BO,DAO,POJO)分别是指什么
  14. 蓝桥杯——六面体染色
  15. CSS字体颜色,文本装饰线,删除线
  16. 在技术面前,请保持一颗谦卑的心
  17. ORA-01122 ORA-01110 ORA-01200
  18. 跨境电商亚马逊之ERP系统开发的初衷产生的意义
  19. ArcGIS10地图包的使用
  20. 华丽酷炫的汽车Mac高清动态壁纸

热门文章

  1. 鸿蒙科学实验课,无字天书、人造雪等30个小实验玩出大科学
  2. 火狐浏览器安装Vue.js devtools 控制台不显示问题
  3. 第5周【项目3 - 括号的匹配】
  4. 百度天天快照知识宝典
  5. python 生成器
  6. ZCMU 1980 不存在的泳池
  7. windows双网卡配置路由三
  8. 详解JavaScript(ECMAScript与DOM)
  9. PHP 计划任务的实现
  10. Rowhammer Test for DRAM