首页 百科知识 本体开发工具

本体开发工具

时间:2022-02-27 百科知识 版权反馈
【摘要】:Jena从最初的Jena1版本开始,经过不断的发展改进,目前的版本是Jena2.4。Jena1的主要贡献是[18]为处理RDF图提供了丰富的用于Model类的API。
本体开发工具__领域本体的半自动构建及检索研究

3.3 本体开发工具——Jena

3.3.1 Jena简介

Jena[17]是由HP实验室研究开发,用于构建语义Web应用的开发框架。该框架工具完全以Java开发的,它定义的类很容易用来进行语义Web开发,既可以方便地访问标准的OWL类及属性,也可以进行关联文件的推理、基于结构的推理、基于实例的推理等等。Jena从最初的Jena1版本开始,经过不断的发展改进,目前的版本是Jena2.4(2006年12月)。

Jena1的主要贡献是[18]为处理RDF图提供了丰富的用于Model类的API。围绕着这些API,Jena1提供了大量的工具,包括对模型的多种方式的输入和输出I/O(RDF/XML,N3,N-triple),RDF查询语言RDQL,使用这些API,用户可以选择将RDF图存储在内存或者是持久性存储(即文件和数据库方式)。Jena1还提供了附加的用于处理DAML+OIL数据的API,但是Jena1并不支持OWL。

Jena2支持基于RDFS和OWL等语义推理。Jena支持RDQL语义网查询语言。Jena2还拥有一种表现层接口是RDF WebAPI,它能够提供Web客户端查询RDF图,这种基于Web查询的数据获取方式当然也可以成为系统和应用程序员提供接口,是Jena以后的发展方向。

3.3.2 Jena的主要构成

Jena是一个具有三层架构和多种视图的语义网开发框架,提供给各种开发人员多种应用程序开发接口,具有很高的灵活性[19]。Jena主要由6部分组件构成,分别是ARP、RDF API、持久性存储、推理子系统、Ontology API和RDQL。

在使用Jena进行语义网应用时,最重要的包是com.hp.hpl.mesa.rdf.jena.model,这个包包含了用于表达model、resource、property、literal、statements以及其他RDF的关键的接口;com.hp.hpl.mesa.rdf.jena.tutorial包包含了与Jena一同发布的指南中所使用的例子的源代码;com.hp.hpl.mesa.rdf.jena.mem包包含了用于将整个模型状态装入内存的Jena API的实现。凡是创建基于内存的模型(最典型的是创建ModelMem类的实例)的实现都在本包中;com.hp.hpl.mesa.rdf.jena.common包包含了对于诸多实现通用的实现类。例如,它定义了类ResourceImpl,PropertyImpl,LiteralImpl。开发者一般不要直接使用这里的方法,例如不直接使用ResourceImpl,而使用createResource方法,这是为了保证在实现发生优化后不需要进行类型转换;com.hp.hpl.jena.rdf为RDF包。

(1)Jena的三层架构

Jena2的系统架构分为三层:Graph层、EnhGraph层和Model (Ontology)层。各层的详细功能如下:

img8

图3-3 Jena三层架构图[20]

①Graph层:用RDF三元组作为全局数据结构,包括内存和持久性存储方式,同时实现提供多种持久性存储三元组的方式,并且内置了基于RDFS和OWL-Lite的推理。

②EnhGraph层:多种视图的同步,Model层和Graph层之间的中间层,使得系统能够同步提供多种图或节点的方式。

③Model层:为应用开发人员提供视图,提供了大量的方法来操作RDF有向图(通过Model接口)和图中的节点(通过Resource接口)。

(2)Jena的构成组件

①ARP

ARP是Jena的一部分,它的功能是解析RDF/XML数据文件,主要用于Jena中的读取操作,但是也可以脱离Jena而使用在其他的Java程序中。ARP是基于Xerces(一种xml解析器)的,它遵循以下的规范:daml:collection,xml:lang,xml:base,URI,XML Names,International URI refs,Unicode Normal Form C,XML Literal,Relative Namespace URI references。

通常ARP被用在其他应用程序中,但是可以通过NTriple类的命令行方式来将一个RDF/XML文档转换成N-Triple形式,同时可以测试一个RDF/XML文档的健壮性。

②RDF API

RDF API用来创建、解析、处理和查询RDF模型。Jena定义了很多接口来处理和访问RDF数据。一个RDF图由多个三元组组成,而每个三元组又是由三个RDFNode构成,一个三元组可以用{predicate,subject,object}来表示。

RDFNode接口为所有的可以作为RDF三元组的元素提供了一个公共的基础,Resource和Literal集成了RDFNode接口。Literal接口表示文字值,例如“红色”、“宋代”等,提供了将文字值转换为String、int和double这样Java类型数据的方法。Resource接口提供了将RDF数据模型当作一个具有属性资源的集合来处理的方法。Property接口对象用来处理三元组中的<predicate>。Statement接口提供了将RDF数据模型当作一个RDF三元组集合来处理的方法。一个Statement表示一个三元组,或者一个三元组中的<object>。

③持久性存储

Jena2存储子系统扩充了Model类,可以透明地使用基于数据库引擎的持久性存储模型,支持的数据库有:MySQL、Oracle,PostgreSQL,而且支持Linux和Windows平台。

创建持久性模型主要采用工厂化(factory)方法。该方法分为三个步骤。第一步,加载JDBC驱动类,建立与数据库的连接。第二步,构造ModelMaker类,用来创建模型的持久性实例。第三步,调用ModelMaker类的方法创建新的模型或者打开已经存储的数据库持久性模型。

持久性存储子系统支持快速路径查询方法—RDQL查询,对于数据库Model,Jena内部动态的将RDQL转换成数据库支持的SQL查询。

④推理子系统

语义检索是基于概念及其概念之间的关系进行的语义层面的检索,其关键在于概念之间的推理。Jena提供基于规则的推理机(如RDFS Reasoner、OWL Reasoner等),它包含了一般的推理功能,此外用户还可以根据需要自定义推理规则,也可以注册使用第三方推理引擎。推理机的工作原理是:推理机注册机制根据基本RDF三元组描述(信息资源)和Ontology(可选)创建出推理机,由此推理机可以生成包含推理机制的模型对象(Inference Graph,Inf Graph)。在Jena中,图(Graph)也被称为模型(Model),而表现形式为模型界面(Model Interface),然后可以使用Model API和Ontology API对此模型进行操作和处理,从而实现语义层面的信息检索。Jena提供了全面、灵活的推理机制和实现方法,比较好地解决了语义检索研究中的关键而又有一定难度的推理问题。

img9

图3-4 Jena推理机的结构[21]

在Jena使用推理机的步骤如下:

①获得推理机

对于每种类型的推理机,都有一个与之相对应的工厂类(这些工厂类都实现了Reasoner Factory接口),用于创建相关的Reasoner实例。可以直接使用已知工厂类的the Instance静态方法,或者通过在全局Reasoner Registry(存储着通过分派给推理机的URI来进行索引的工厂类实例)中检索来获取这些工厂类实例。

此外,还可以使用Reasoner Registry中诸如getTransitiveReasoner,getRDFSReasoner,getOWLReasoner以及getRDFSSimpleReasoner等方法来获取相应的推理机实例。使用用于构建推理机的工厂对象只是为了简化设计和扩展注册服务。一旦获取了推理机实例,就可以通过绑定不同的数据集来重用该推理机,而不必每次都创建新的推理机实例。

②配置推理机

许多推理机的行为都是可配置的。为了向这些推理机传递任意的配置信息,可使用RDF来为这些配置情况进行编码。Reasoner Factory.create方法可以接收JenaResource对象,并使用该对象的属性配置创建的推理机。

为了简化编码,可采用Reasoner.setParameter方法来设置配置参数。这些参数使用相应的配置属性标识。参数值可以是String类型或构造值。例如,可以使用字符串“true”或“false”表示布尔类型值,也可以使用Java中的Boolean对象表示,还可以在RDF中使用xsd:Boolean表示。

③应用推理机

创建了推理机实例以后,就要使用推理机实例与特定的RDF数据模型相关联以构建推理模型。这一过程可以通过把所有的RDF数据放到一个模型中实现,或者分别操作数据的不同组成部分(Schema部分和实例数据部分)实现。将推理机与数据集绑定来创建推理模型,是通过Model Factory.createlnfModel方法实现的。

④访问和推理

创建了推理模型后,可使用访问RDF语句的API操作,将可以访问通过推理机推导出的额外的语句。由于使用了推理机,这些通过推理机推导出的新的“虚语句”既可以在第一次触动模型的时候预先推导出来,也可以每次都使用动态的推导,或者在使用的时候推导,然后再将它们缓存起来。

⑤推理描述

这些推理机可以使用RDF元数据进行描述,通过这种方式可以根据特定的属性来获取推理机。可使用Reasoner.get Capabilities和Reasoner.supportsProperty来访问描述性元数据。

⑥Ontology API

Ontology API为语义网应用开发人员提供了一个持续稳定的开发接口,支持Ontology的各种语言,如RDFS、DAML+OIL以及OWL。该接口是完全采用Java语言描写的开发接口,提供了本体的建立、本体的解析、本体的推理等各种方法的类库,包括本体中类、实例以及属性的建立、读取和修改方法。

常用的类有OntModel、OntClass、OntResource、OntProperty、Individual等,其中OntModel用于建立本体模型,包括指定描述语言以及推理机制等;OntClass用来对本体主要部件——类的处理,如类的建立、读取等;OntResource定义了一个资源类,是本体中任何取值的超类,可以用于本体中各种类的存取;OntProperty主要对本体的各种属性进行处理,如建立、读取、删除属性操作;而Individual主要是对本体的实例进行处理。

⑦RDQL

RDQL是Jena中针对RDF的查询语言,已经被许多基于RDF的系统采用。RDQL是从早期的RDFDB QL和SquishQL演变过来的,在Jena的很多RDFAPI中都实现了对RDQL的支持。这种查询语言将RDF视为三元组,也就是带有向边的图,图的节点是资源(Resource)或者文字(Literal)。RDQL提供了一种图匹配策略,查询RDF中满足一定节点的图,查询结果返回匹配到的属性值。

RDQL满足一定的范式,基本由SELECT、FROM、WHERE 和USING字句组成。其中SELECT字句衔接的是提问中心,WHERE字句衔接的是查询条件,即满足一定语义关系的用户查询组合,而FROM和USING字句分别衔接的RDF模型和本体的URI地址,由检索时设定。

以“清代描述大麻栽培的农书有哪些”为例,生成的查询语句如下:

SELECT?x WHERE(c:齐民要术,c:has_edtion,?x),(c:华东地区,c:collected,?x)

USING c for http://www.owl-ontologies.com/unnamed.owl#

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈