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)详细编码
(5)结果
仅作学习交流,转载请标注此文!
(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#订货人 属性值:李明
仅作学习交流,转载请标注此文!
相关文章推荐
- eclipse中使用Jena解析本体文件
- 使用Jena-TDB存储RDF本体、知识图谱文件
- 使用jena写入多个本体文件到mysql
- jena读取和解析本体文件
- 在Java中使用poi包解析xls文件
- 使用JDOM创建和解析XML文件
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- 使用myeclipse创建的birt 报表文件放在eclipse环境运行
- eclipse配置文件导出,并给新工作空间使用
- jena构建本体,读取owl文件,输出owl文件相关知识
- 使用eclipse抓取trace文件
- C++使用static的错误:无法解析的外部符号、“static”不应在文件范围内定义的成员函数上使用 .
- java使用dom4j解析xml文件
- 使用eclipse进行JavaEE开发,查看经过Tomcat编译后的字节码文件路径
- 使用JAXB eclipse插件根据XSD文件生成JAVA代码
- MACS原理,使用,结果文件解析
- Android学习笔记---26_网络通信之资讯客户端,使用pull解析器,解析,从网络中获得的自定义xml文件
- 如何使用Fat Jar在Eclipse中制作jar文件包
- iOS:使用YYModel实现本地JSON文件解析
- 使用TinyXML解析XML文件