首页 理论教育 Protégé-OWLAPI的分析介绍

Protégé-OWLAPI的分析介绍

时间:2023-02-18 理论教育 版权反馈
【摘要】:与Jena类似,Protégé-OWL API也提供了文件存储和数据库存储两种方式。Protégé-OWL API的中心是model包中的一系列java接口。如果想使用查询语言如RDQL进行细致的查询,需要使用外部库,因为Protégé-OWL中没有对它们的本地实现。例如,可以使用Jena中的OntModel来实现对这些查询语言的支持,如何从ProtegeOWL API中获得OntModel,下面将作介绍。代码4-11利用OWLModel检索资源Protégé-OWL API不是仅局限于OWL形式的本体数据的。

Protégé-OWLAPI的分析介绍

4.4.2 Protégé-OWL API

Protégé-OWL API是一个针对OWL和RDF(S)的开源的Java资源库,它是斯坦福大学相关研究人员在Jena API基础上开发的,针对OWL本体进行操作的API,此API提供了相关的类(Classes)和方法(Methods)实现了装载和保存OWL文件、查询和操纵OWL模型,并且可以实现基于逻辑描述的推理引擎。它对Jena中的Ontology API进行了功能扩展,使OWL Ontology的开发和操作更为方便。Protégé-OWL API有以下几个主要功能:

(1)OWL API(主要是edu.stanford.smi.Protégéx.owl.model包)。可将OWL模型视为可从整体上操作本体库的模型。

(2)本体存储(主要是edu.stanford.smi.Protégéx.owl.database包)。与Jena类似,Protégé-OWL API也提供了文件存储和数据库存储两种方式。

(3)Jena API使用(主要是edu.stanford.smi.Protégéx.owl.jena包)。提供转换到Jena API的方法,可以使用Jena API中所特有的方法(如对RDQL查询语言的支持)。

(4)可视化界面(主要是edu.stanford.smi.Protégéx.owl.ui包)。本体编辑工具protégé的界面的来源,可以根据实际要求对源码进行修改,使得该本体编辑工具更加符合用户需求。

Protégé-OWL API的中心是model(edu.stanford.smi.Protégéx.owl.model)包中的一系列java接口。通过这些接口可提供获取本体模型及其中的元素如类、属性、实例。开发者不需要直接使用这些接口的实现类(如Default RDF Individual),可直接通过接口操作。使用接口的好处是使用者不需要关心Protégé存储本体的内部细节。

如图4-14,model包中的接口按照继承层次关系分布。所有本体资源的最顶层接口是RDFResource,它有子接口:类(classes)、属性(properties)、实例(individuals)。RDFResource为所有资源定义了最基本的操作,特别是设置和获取属性值。RDFProperty是rdf: Proterty及其子类owl:DatatypeProperty和owl:ObjectProperty的基础接口。由于OWL有各种类型的匿名类,对本体中的类来说,这个继承结构相当的复杂(在该图中没有画出各个匿名类)。

img56

图4-14 OWLModel的主要结构图

Model包中最重要的接口是OWLModel,跟Jena中的OntModel类似,它提供了对本体中所有资源的操作。可以通过OWLModel创建、查询、删除各种类型的资源,并用其返回的对象做具体的操作。如代码4-10,我们在OWLModel中创建了一个人物具名类(person),并且定义了一个数据类型属性年龄(age),设置年龄属性的Domain必须是人物类的实例,Range是整数型(XSDint),并创建了人物类的一个实例(Darwin),设置他的年龄属性值为0。

代码4-10 创建和使用OWL模型

//创建一个空的OWLModel

OWLModel owlModel=ProtégéOWL.createJenaOWLModel();

//在OWLModel中创建一个具名类person

OWLNamedClass personClass=owlModel.createOWLNamedClass(″Person″);

//在OWLModel中创建一个数据类型属性age

OWLDatatypeProperty ageProperty=owlModel.createOWLDatatypeProperty(″age″);

//设置属性age的Domain和Range

ageProperty.setRange(owlModel.getXSDint());

ageProperty.setDomain(personClass);

//创建person类的一个实例Darwin

RDFIndividual darwin=personClass.createRDFIndividual(″Darwin″);

//将实例Darwin的age属性值设置为0

darwin.setPropertyValue(ageProperty,new Integer(0));

上面简单地介绍了如何使用OWLModel创建资源,接下来看看如何查询一个本体库中的各种资源。OWLModel提供了检索资源的方法,也可以在检索出来的资源上进行相关操作,然而使用OWL API只能对OWL模型进行粗浅的检索操作。如代码4-11,先由一个本体的uri创建了一个OWLModel,然后利用OWLModel的方法获得该本体中用户定义的所有OWL具名类,接下来遍历每个具名类,打印每个具名类的所有实例。如果想使用查询语言如RDQL进行细致的查询,需要使用外部库,因为Protégé-OWL中没有对它们的本地实现。例如,可以使用Jena中的OntModel来实现对这些查询语言的支持,如何从ProtegeOWL API中获得OntModel,下面将作介绍。

代码4-11 利用OWLModel检索资源

img57

Protégé-OWL API不是仅局限于OWL形式的本体数据的。OWL本身是对RDF Schema的一种扩展,所以该API也对处理相关的RDF元素提供了本地支持。特别是,通过使用RDFSNamedClass、RDFProperty以及RDFIndividual这些Java类来代替它们的OWL扩展,能够创建和查询纯RDF(S)形式的文件。该API也能够很容易地实施,同时利用OWL和RDF两者特征的混合方案,来克服纯RDF形式的文件的局限性。例如,可以使用union classes作为一个RDFProperty的Domain或者Range。在代码4-12中,创建了人物类Person、年龄属性age,并创建了人物类的一个实例Holger,该人物类是RDFS具名类,年龄属性是RDF属性,Holger实例也是一个RDF实例,因此该文件是一个纯RDF(S)文件。

代码4-12 创建纯RDF(S)文件

//创建RDF具名类

RDFSNamedClass personClass=owlModel.createRDFSNamedClass(″Person″);

//创建RDF属性

RDFProperty ageProperty=owlModel.createRDFProperty(″age″);

//创建RDF实例

RDFIndividual individual=personClass.createRDFIndividual(″Holger″);

跟Jena类似,Protégé-OWL API也提供了两种存储模式:

(1)文件存储方式(对应于API中的JenaOWLModel类)。

(2)数据库存储方式(对应于API中的OWLDatabaseModel类)。

这两种方式都使用OWLModel核心接口进行操作。方法调用如创造类是完全独立于存储方式的,程序员不需要关心类是存储在物理上的数据库中还是只在内存里。这两种方式之间也存在一些细微的差别,它们都有一些额外的功能。

文件存储方式是基于JenaOWLModel类的。可以使用ProtégéOWL类的静态方法从一个流或者URI中装载一个已存在的OWL文件。这种调用会返回一个JenaOWLModel,可以利用JenaOWLModel中的保存方法来将文件写到硬盘上。如代码4-13,首先从一个已知的URI中装载一个已存在的本体文件,然后使用文件存储方式将其保存到硬盘中的一个文件(travel-saved.owl)中,并利用一个集合对象(errors)放置所有在保存过程中出现的错误

代码4-13 使用文件存储方式存储本体

//从一个URI中装载已存在的owl文件

JenaOWLModel owlModel=ProtégéOWL.createJenaOWLModelFromURI(uri);

String fileName=″travel-saved.owl″;(www.xing528.com)

//创建一个用来放置保存中出现的错误的集合对象

Collection errors=new ArrayList();

//使用文件存储方式将本体保存到硬盘上,并将该过程中的错误放入到errors集合中

owlModel.save(new File(fileName).toURI(),FileUtils.langXMLAbbrev,errors);

System.out.println(″File saved with″+errors.size()+″errors.″);

数据库存储方式是基于edu.stanford.smi.Protégéx.owl.database包中的OWLDatabaseModel类的,支持Oracle,SQL Server 2000,mysql等常用数据库。在数据量很大的情况下,如果使用文件存储方式则可能导致机器的内存占有率过高,影响系统效率,甚至在有些极端情况下,会抛内存不足的异常。此时,采用数据库存储方式则显得更加合适。但是,如果数据量不大,而修改操作又很频繁,使用数据库存储方式则会产生大量的I/O操作,这时使用文件存储方式则显得更为合理。在代码4-14中,创建了一个基于mysql数据库的OWL数据库存储模型(OWLDatabaseModel),可以在该模型中进行一系列本体操作,如添加新的资源、查询已有资源等。

代码4-14 使用数据库存储方式存储本体

DatabaseKnowledgeBaseFactory dbFactory=new DatabaseKnowledge BaseFactory();

KnowledgeBase kb=dbFactory.createKnowledgeBase(new ArrayList());

//使用数据库连接,并装载相应的本体数据

dbFactory.loadKnowledgeBase(kb,″com.mysql.jdbc.Driver″,

″jdbc:mysql://localhost/Protégé″,″user″,″″,″password″,new ArrayList());

//创建一个OWLDatabaseModel

OWLDatabaseModel owlModel=new OWLDatabaseModel(dbFactory);

Protégé-OWL API是建立在Jena API的基础上的,而Protégé-OWL API可以在任何时候被用来得到一个Jena中的OntModel,如代码4-15。JenaOWLModel和OWLDatabaseModel,它们都实现了OntModelProvider接口,而该接口提供的getOntModel()方法,可以从现有的本体中得到OntModel。借助于该手段,程序员可以很自由地使用OntModel中的操作,特别是一些基于Jena的查询和存储服务,如对RDQL查询语言的支持。然而,由于在每次改变后都需要调用getOntModel()方法,对大数据量的本体库来说,这会在一定程度上影响系统效率。

代码4-15 获取Jena中的OntModel

//从Protégé-OWL API中获得Jena API中的实现OntModel接口的对象

OntModel ontModel=owlModel.getOntModel();

//使用得到的OntModel进行操作

OntClass ontClass=ontModel.getOntClass(cls.getURI());

参考文献

[1]IDEF Family of Methods A Structured Approach to Enterprise ModelingandAnalysis[OL].[2007-11-15].http://www.idef.com/

[2]Uschold M.Ontologies Principles,Methods and Applications[J].Knowledge Engineering Review.1996,11(2):56-67.

[3]Gruninger M,Fox M S.Methodology for the Design and Evaluation of Ontologies.Workshop on Basic Ontological Issues in Knowledge Sharing[M].IJCAI-95,Montreal,1995.

[4]Fernandez M,Gomez-Perez A,Juristo N.Methontology:From Ontological Art Towards Ontological Engineering[M].AAAI-97 SpringSymposiumonOntologicalEngineering,Stanford University,1997.

[5]Bernaras A,Laresgoiti I,Corera J.Building and reusing ontologies for electrical network applications[M].In:Proc of the European Conf on Artificial Intelligence.Budapest,Hungary:John Wiley and Sons,1996:298-302.

[6]Ontology Creation and Use:SENSUS[OL].[2007-11-15].http://www.isi.edu/natural-language/resources/sensus.html.

[7]Apollo Home Page[OL].[2007-11-17].http://apollo.open.ac.uk.

[8]Welcome to Language and Computing[OL].[2007-11-18].http://www.landc.be.

[9]Ontolingua[OL].[2007-11-2].http://www.ksl.stanford.edu/ software/ontolingua.

[10]Welcometoprotégé[OL].[2007-11-22].http://Protege.stanford.edu.

[11]SPARQL Query Language for RDF[OL].[2007-11-23].http://www.w3.org/TR/rdf-sparql-query.

[12]陈琮.基于Jena的本体检索模型设计与实现[D].武汉:武汉大学信息管理学院,2005.

[13]OWL Web Ontology Language Overview[OL].[2007-11-8].http://www.w3.org/TR/owl-features/

[14]龚资.基于OWL描述的本体推理研究[D].吉林:吉林大学计算机系,2007.

[15]董慧,余传明,徐国虎,等.基于本体的数字图书馆检索模型研究(Ⅳ)——历史领域知识推理机制[J].情报学报,2006(06):666-678.

[16]徐德智,汪智勇,王斌.当前主要本体推理工具的比较分析与研究[J].现代图书情报技术,2006(12):12-15,77.

[17]DIG接口参考[OL].[2007-11-16].http://down.xml.org.cn/

Semantic%20Web/RACER/DIG%20interface1.1.pdf.

[18]Racer(Renamed Abox and Concept Expression Reasoner)[OL].[2007-11-5].http://www.racer-systems.com/products/ racerpro/users-guide-1-9.pdf.

[19]Pellet:The Open Source OWL DL Reasoner[OL].[2007-11-9].http://pellet.owldl.com/docs/.

[20]Dmitry Tsarkov,Ian Horrocks.FaCT++Description Logic Reasoner:System Description[OL].[2007-10-29].http://web.comlab.ox.ac.uk/oucl/work/ian.horrocks/Publications/ download/2006/TsHo06a.pdf.

[21]李永超,罗钧旻.语义Web中的本体推理研究[J].计算机技术与发展,2007(07):101-103,107.

[22]Jena Semantic Web Framework[OL].[2007-11-10].http://jena.sourceforge.net/documentation.html.

[23]protégé-owl api[OL].[2007-11-13].http://protege.stanford.edu/ plugins/owl/api/index.html.

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

我要反馈