您的位置:首页 > 编程语言 > Java开发

eclipse中使用Jena解析本体文件

2012-12-26 16:30 549 查看
(1)在Jena的主页(http://jena.sourceforge.net/downloads.html)下载Jena的最新版本。将下载的Jena-2.6.4.zip解压到任意路径,解压之后生成Jena2.6.4文件夹。

(2)使用Eclipse新建Java工程,右健单击工程名字,选择“Build Path”->“Configure Build Path”,在打开的对话框中选择“Java创建路径/Java Build Path”,在右边标签中选择“库/Libraries”,之后选择“添加外部文件/Add Extenal JARs”,找到Jena2.6.4\lib目录下的所有jar文件并将其添加到工程。这样就可以使用Jena API。
(3)使用protégé创建一个本体,本体来源文章:基于关系数据库的OWL本体存储及查询方法。本体如下图所示:



(4)详细编码

package com.ont.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.Vector;

import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.db.IDBConnection;
import com.hp.hpl.jena.ontology.*;

public class OntAnalysisMysql  {

public static final String strDriver = "com.mysql.jdbc.Driver"; //path of driver class
public static final String strURL = "jdbc:mysql://localhost/ontodb3"; // URL of database
public static final String strUser = "root"; //database user id
public static final String strPassWord = "sql123"; //database password
public static final String strDB =  "MySQL"; //database type

/* 函数功能说明
*
* 创建本体模型,然后读取.owl文件,加载模型
*
* */
public OntModel createOnt(String owlpath) {

// 创建一个数据库连接
IDBConnection conn = new DBConnection ( strURL, strUser, strPassWord, strDB );
// 加载数据库驱动类,需要处理异常
try{
Class.forName(strDriver);
}catch(ClassNotFoundException e) {
e.printStackTrace();
}

//使用数据库连接参数创建一个模型制造器
ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
//创建一个默认模型
Model base = maker.createDefaultModel();
OntModel ontmodel = ModelFactory.createOntologyModel(getModelSpec(maker), base);

try {
ontmodel.read(new FileInputStream(owlpath), ""); // 读取文件,加载模型
} catch (FileNotFoundException e) {
System.out.println("读取失败" + e.getMessage());
}
return  ontmodel;
}

public static OntModelSpec getModelSpec(ModelMaker maker) {

OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);
spec.setImportModelMaker(maker);

return spec;
}

/*函数功能说明
*
* 获取owl文件中所有的class,内容包括:
* 类URI,类名,类描述类型,类描述值
*
*/
public void getAllClasses(String owlpath) {
OntModel ontModel = this.createOnt(owlpath);
String str;
// 列出所有的class

for (Iterator allclass = ontModel.listClasses(); allclass.hasNext();) {

OntClass ontclass = (OntClass) allclass.next();
if(!ontclass.isAnon()){
String classstr = ontclass.toString();
OntClassDTO dto = new OntClassDTO();;
System.out.println(dto.getC_URI());
System.out.print("类URI:" + classstr + "   ");
str = classstr.substring(classstr.indexOf("#") + 1);
System.out.print("类名:" + str + "   ");
if (!ontclass.listSuperClasses().hasNext()) {

System.out.println("类描述类型:无");
} else {
for (Iterator supclasses = ontclass.listSuperClasses(); supclasses
.hasNext();) {
OntClass supclass = (OntClass) supclasses.next();
String supclasstr = supclass.toString();
str = supclasstr.substring(supclasstr.indexOf("#") + 1);
System.out.print("类描述类型:subClassOf   ");
System.out.println("类描述值:" + str);

}
}
}
}
}

/* 函数功能说明
*
* 获取owl文件中所有的属性,内容包括:
* 属性URI,属性名,属性,定义域,值域
*
* */
public void getAllProperties(String owlpath) {
OntModel ontMdel = this.createOnt(owlpath);
String str;
OntProtyDAO dao = new OntProtyDAO();

// 列出所有的对象属性
for (Iterator allobjpry = ontMdel.listObjectProperties(); allobjpry
.hasNext();) {

OntProperty objpry = (OntProperty) allobjpry.next();

// 属性URI
String objprystr = objpry.toString();
System.out.print("属性URI:" + objprystr + "  ");
// 属性名
str = objprystr.substring(objprystr.indexOf("#") + 1);
System.out.print("属性值:" + str + " 属性:OP ");
// 属性定义域
String domain = objpry.getDomain().toString();
String domainstr = domain.substring(domain.indexOf("#") + 1);
System.out.print("定义域 :" + domainstr);
// 属性值域
String range = objpry.getRange().toString();
String rangestr = range.substring(range.indexOf("#") + 1);
System.out.println("  值域:" + rangestr);

}
// 列出所有的数据属性
for (Iterator alldatapry = ontMdel.listDatatypeProperties(); alldatapry
.hasNext();) {

OntProperty datapry = (OntProperty) alldatapry.next();
// 属性URI
String dataprystr = datapry.toString();
System.out.print("属性URI:" + dataprystr + "  ");
// 属性名
str = dataprystr.substring(dataprystr.indexOf("#") + 1);
System.out.print("属性值:" + str + " 属性:DP ");
// 属性定义域
String domain = datapry.getDomain().toString();
String domainstr = domain.substring(domain.indexOf("#") + 1);
System.out.print("定义域 :" + domainstr);
// 属性值域
String range = datapry.getRange().toString();
String rangestr = range.substring(range.indexOf("#") + 1);
System.out.println("  值域:" + rangestr);
System.out.println(dataprystr );
System.out.println(str);
System.out.println(domainstr);
System.out.println(rangestr);
}
}

/* 函数功能说明
*
* 列出所有的属性特征,内容包括:
* 属性URI、属性名、特征类型、特征值
*
* */
public void getAllProcharac(String owlpath) {
OntModel ontMdel = this.createOnt(owlpath);
String str;
// 列出所有的对象属性
for (Iterator allobjpry = ontMdel.listObjectProperties(); allobjpry.hasNext();) {

String info = null;
OntProperty objpry = (OntProperty) allobjpry.next();
OntProperty objinverof = objpry.getInverseOf();

if(objinverof!=null){
info = "属性URI :"+objpry+"\n属  性  名  :"+objpry.toString().substring(objpry.toString().indexOf("#")+1)
+"\n特征类型 :inverseOf  "+"\n特  征  值  :"+ objinverof.toString().substring(objinverof.toString().indexOf("#")+1);
System.out.println(info);
}
}
}

/* 函数功能说明
*
* 列出所有的实例,内容包括:
* 实例URI、实例名、类URI、属性URI、属性值
*
* */
public void getAllIndividuals(String owlpath) {
OntModel ontModel = this.createOnt(owlpath);
String str;

// 迭代出本体文件中所有的实例
for (Iterator allIndivs = ontModel.listIndividuals(); allIndivs.hasNext();) {
Individual indiv = (Individual) allIndivs.next();
//对象属性命名空间
String namespace = indiv.toString().substring(0,indiv.toString().indexOf("#") + 1);
// 实例所属的类
OntClass classOfIndiv = indiv.getOntClass();

//实例所属类的所有属性
for (Iterator classPryOfIndivs = classOfIndiv.listProperties(); classPryOfIndivs.hasNext();)
{
OntProperty classPryOfIndiv = (OntProperty) classPryOfIndivs.next();
System.out.println(classPryOfIndivs.next());
String classPryOfIndivstr = classPryOfIndiv.toString();
String info = null;
info = "实例URI:"
+ indiv
+ " 实例名:"
+ indiv.toString().substring(indiv.toString().indexOf("#") + 1) + "  实例所属类:"
+ classOfIndiv
+" 属性URI:"
+classPryOfIndivstr;

// 获取这个实例的属性值
if (indiv.getPropertyValue(classPryOfIndiv) != null) {
String pryValueOfIndiv = indiv.getPropertyValue(classPryOfIndiv).toString();
/*判断对象属性或数据属性
* 如果实例属性值中包括"^^"和"#",则为数据属性,否则为对象属性
*/
if (pryValueOfIndiv.contains("^^")&&pryValueOfIndiv.contains("#")) {
info = info
+ "  属性值:"
+ pryValueOfIndiv.substring(0, pryValueOfIndiv.indexOf("^^"));
}else{
info = info
+ "  属性值:"
+ pryValueOfIndiv.substring(pryValueOfIndiv.indexOf("#") + 1);
}
} else {
info = info + "   无属性值";
}
//输出实例信息
System.out.println(info);
}

}

}

public static void main(String[] args) {
String owlpath = "E:\\greenide\\workspace\\Ontology\\logistics.owl";
System.out.println("--------------------------------------------列表1    类------------------------------");
new OntAnalysisMysql().getAllClasses(owlpath);
System.out.println("--------------------------------------------列表2    属性-----------------------------");
new OntAnalysisMysql().getAllProperties(owlpath);
System.out.println("--------------------------------------------列表3   属性特征--------------------------");
new OntAnalysisMysql().getAllProcharac(owlpath);
System.out.println("--------------------------------------------列表4    属性约束--------------------------");
new OntAnalysisMysql().getAllProcharac(owlpath);
System.out.println("--------------------------------------------列表5    实例------------------------------");
new OntAnalysisMysql().getAllIndividuals(owlpath);

}

}

(5)结果

--------------------------------------------列表1    类------------------------------
类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#顾客   类名:顾客   类描述类型:无
类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#销售商   类名:销售商   类描述类型:无
类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单   类名:订单   类描述类型:无
类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#团体顾客   类名:团体顾客   类描述类型:subClassOf   类描述值:顾客
类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#一般顾客   类名:一般顾客   类描述类型:subClassOf   类描述值:顾客
--------------------------------------------列表2    属性-----------------------------
属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货人  属性值:订货人 属性:OP 定义域 :订单  值域:顾客
属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货  属性值:发货 属性:OP 定义域 :销售商  值域:顾客
属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#下订单  属性值:下订单 属性:OP 定义域 :顾客  值域:销售商
属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货日期  属性值:订货日期 属性:DP 定义域 :订单  值域:date
属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量  属性值:订货数量 属性:DP 定义域 :订单  值域:positiveInteger
属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货日期  属性值:发货日期 属性:DP 定义域 :销售商  值域:date
--------------------------------------------列表3   属性特征--------------------------
属性URI :http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货
属  性  名  :发货
特征类型 :inverseOf
特  征  值  :下订单
--------------------------------------------列表4    属性约束-------------------------- http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量
MaxCardinalityRestriction
100 http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量
MinCardinalityRestriction
1
--------------------------------------------列表5    实例------------------------------
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#韩梅梅 实例名:韩梅梅  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#一般顾客 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#下订单  属性值:淘宝
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#李明 实例名:李明  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#团体顾客 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#下订单  属性值:麦考林
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#淘宝 实例名:淘宝  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#销售商 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货   无属性值
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#淘宝 实例名:淘宝  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#销售商 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货日期  属性值:2011-04-05
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#麦考林 实例名:麦考林  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#销售商 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货  属性值:李明
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#麦考林 实例名:麦考林  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#销售商 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货日期   无属性值
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#高跟鞋 实例名:高跟鞋  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货日期  属性值:2011-04-01
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#高跟鞋 实例名:高跟鞋  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量  属性值:10
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#高跟鞋 实例名:高跟鞋  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货人  属性值:韩梅梅
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#雪地靴 实例名:雪地靴  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货日期  属性值:2012-11-11
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#雪地靴 实例名:雪地靴  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量  属性值:60
实例URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#雪地靴 实例名:雪地靴  实例所属类:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货人  属性值:李明


仅作学习交流,转载请标注此文!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: