eclipse中使用Jena解析本体文件
来源:互联网 发布:js 大数 错误 编辑:程序博客网 时间:2024/05/16 18:23
(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#订货人 属性值:李明
仅作学习交流,转载请标注此文!
http://blog.csdn.net/xiaocong1314/article/details/8439696
0 0
- eclipse中使用Jena解析本体文件
- eclipse中使用Jena解析本体文件
- 用Jena解析本体Ontology Jena的使用 Jena实例
- 使用jena写入多个本体文件到mysql
- 使用Jena-TDB存储RDF本体、知识图谱文件
- jena下载,做本体使用
- Jena 解析本体 实体,属性,属性值
- jena保存本体到数据库中
- 使用Jena将本体存入MySQL
- 使用Jena将本体存入MySQL
- eclipse中导入jena
- Jena查询本体
- Jena 本体推理
- JENA操作本体
- 在应用程序中利用Jena API处理OWL本体
- Jena中SPARQL查询本体的简单实现
- 使用jena持久化OWL本体到MySQL
- 手把手教您:在eclipse中使用jena
- fat32结构图
- DoTween 六:< 常用方法 —— 移动:通过锚点坐标渐变位置>
- 让浏览器不加载缓存CSS和JS的方法
- nodejs vim 配置
- 解决ld: warning: directory not found for option"已删除路径"警告
- eclipse中使用Jena解析本体文件
- hive 中的排序优化
- 指针和const
- hive全排序优化
- 揭开 SuperMap GIS 8C“Alpha通道”的神秘面纱
- 【网络】——计算机网络
- test test
- 用递归解决汉诺塔问题
- FTP与TFTP的区别