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)详细编码

[java] view plaincopyprint?
  1. package com.ont.demo;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.util.Iterator;  
  6. import java.util.Vector;  
  7.   
  8. import com.hp.hpl.jena.rdf.model.*;  
  9. import com.hp.hpl.jena.db.DBConnection;  
  10. import com.hp.hpl.jena.db.IDBConnection;  
  11. import com.hp.hpl.jena.ontology.*;  
  12.   
  13. public class OntAnalysisMysql  {  
  14.       
  15.     public static final String strDriver = "com.mysql.jdbc.Driver"//path of driver class    
  16.     public static final String strURL = "jdbc:mysql://localhost/ontodb3"; // URL of database    
  17.     public static final String strUser = "root"//database user id    
  18.     public static final String strPassWord = "sql123"//database password    
  19.     public static final String strDB =  "MySQL"//database type    
  20.       
  21.     /* 函数功能说明 
  22.      *  
  23.      * 创建本体模型,然后读取.owl文件,加载模型 
  24.      *  
  25.      * */  
  26.     public OntModel createOnt(String owlpath) {  
  27.           
  28.        // 创建一个数据库连接    
  29.         IDBConnection conn = new DBConnection ( strURL, strUser, strPassWord, strDB );   
  30.        // 加载数据库驱动类,需要处理异常    
  31.         try{    
  32.             Class.forName(strDriver);  
  33.         }catch(ClassNotFoundException e) {    
  34.              e.printStackTrace();    
  35.         }    
  36.           
  37.         //使用数据库连接参数创建一个模型制造器  
  38.         ModelMaker maker = ModelFactory.createModelRDBMaker(conn);  
  39.         //创建一个默认模型  
  40.         Model base = maker.createDefaultModel();  
  41.         OntModel ontmodel = ModelFactory.createOntologyModel(getModelSpec(maker), base);  
  42.           
  43.         try {  
  44.             ontmodel.read(new FileInputStream(owlpath), ""); // 读取文件,加载模型  
  45.         } catch (FileNotFoundException e) {  
  46.             System.out.println("读取失败" + e.getMessage());  
  47.         }  
  48.         return  ontmodel;  
  49.     }  
  50.       
  51.     public static OntModelSpec getModelSpec(ModelMaker maker) {  
  52.           
  53.          OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);  
  54.          spec.setImportModelMaker(maker);  
  55.            
  56.          return spec;  
  57.     }  
  58.   
  59.         /*函数功能说明 
  60.          *  
  61.          * 获取owl文件中所有的class,内容包括: 
  62.          * 类URI,类名,类描述类型,类描述值 
  63.          *  
  64.          */  
  65.         public void getAllClasses(String owlpath) {  
  66.             OntModel ontModel = this.createOnt(owlpath);  
  67.             String str;  
  68.             // 列出所有的class  
  69.               
  70.             for (Iterator allclass = ontModel.listClasses(); allclass.hasNext();) {  
  71.                   
  72.                 OntClass ontclass = (OntClass) allclass.next();  
  73.                 if(!ontclass.isAnon()){  
  74.                 String classstr = ontclass.toString();  
  75.                 OntClassDTO dto = new OntClassDTO();;  
  76.                 System.out.println(dto.getC_URI());  
  77.                 System.out.print("类URI:" + classstr + "   ");  
  78.                 str = classstr.substring(classstr.indexOf("#") + 1);  
  79.                 System.out.print("类名:" + str + "   ");  
  80.                 if (!ontclass.listSuperClasses().hasNext()) {  
  81.                                   
  82.                     System.out.println("类描述类型:无");  
  83.                 } else {  
  84.                     for (Iterator supclasses = ontclass.listSuperClasses(); supclasses  
  85.                             .hasNext();) {  
  86.                         OntClass supclass = (OntClass) supclasses.next();  
  87.                         String supclasstr = supclass.toString();  
  88.                         str = supclasstr.substring(supclasstr.indexOf("#") + 1);  
  89.                         System.out.print("类描述类型:subClassOf   ");  
  90.                         System.out.println("类描述值:" + str);  
  91.                           
  92.                           
  93.                     }  
  94.                 }  
  95.                 }  
  96.             }  
  97.         }  
  98.   
  99.         /* 函数功能说明 
  100.          *  
  101.          * 获取owl文件中所有的属性,内容包括: 
  102.          * 属性URI,属性名,属性,定义域,值域 
  103.          *  
  104.          * */  
  105.         public void getAllProperties(String owlpath) {  
  106.             OntModel ontMdel = this.createOnt(owlpath);  
  107.             String str;  
  108.             OntProtyDAO dao = new OntProtyDAO();  
  109.               
  110.             // 列出所有的对象属性  
  111.             for (Iterator allobjpry = ontMdel.listObjectProperties(); allobjpry  
  112.                     .hasNext();) {  
  113.   
  114.                 OntProperty objpry = (OntProperty) allobjpry.next();  
  115.                   
  116.                 // 属性URI  
  117.                 String objprystr = objpry.toString();  
  118.                 System.out.print("属性URI:" + objprystr + "  ");  
  119.                 // 属性名  
  120.                 str = objprystr.substring(objprystr.indexOf("#") + 1);  
  121.                 System.out.print("属性值:" + str + " 属性:OP ");  
  122.                 // 属性定义域  
  123.                 String domain = objpry.getDomain().toString();  
  124.                 String domainstr = domain.substring(domain.indexOf("#") + 1);  
  125.                 System.out.print("定义域 :" + domainstr);  
  126.                 // 属性值域  
  127.                 String range = objpry.getRange().toString();  
  128.                 String rangestr = range.substring(range.indexOf("#") + 1);  
  129.                 System.out.println("  值域:" + rangestr);  
  130.   
  131.             }  
  132.             // 列出所有的数据属性  
  133.             for (Iterator alldatapry = ontMdel.listDatatypeProperties(); alldatapry  
  134.                     .hasNext();) {  
  135.   
  136.                 OntProperty datapry = (OntProperty) alldatapry.next();  
  137.                 // 属性URI  
  138.                 String dataprystr = datapry.toString();  
  139.                 System.out.print("属性URI:" + dataprystr + "  ");  
  140.                 // 属性名  
  141.                 str = dataprystr.substring(dataprystr.indexOf("#") + 1);  
  142.                 System.out.print("属性值:" + str + " 属性:DP ");  
  143.                 // 属性定义域  
  144.                 String domain = datapry.getDomain().toString();  
  145.                 String domainstr = domain.substring(domain.indexOf("#") + 1);  
  146.                 System.out.print("定义域 :" + domainstr);  
  147.                 // 属性值域  
  148.                 String range = datapry.getRange().toString();  
  149.                 String rangestr = range.substring(range.indexOf("#") + 1);  
  150.                 System.out.println("  值域:" + rangestr);  
  151.                 System.out.println(dataprystr );  
  152.                 System.out.println(str);  
  153.                 System.out.println(domainstr);  
  154.                 System.out.println(rangestr);  
  155.             }  
  156.         }  
  157.   
  158.         /* 函数功能说明 
  159.          *  
  160.          * 列出所有的属性特征,内容包括: 
  161.          * 属性URI、属性名、特征类型、特征值 
  162.          *  
  163.          * */  
  164.         public void getAllProcharac(String owlpath) {  
  165.             OntModel ontMdel = this.createOnt(owlpath);  
  166.             String str;  
  167.             // 列出所有的对象属性  
  168.             for (Iterator allobjpry = ontMdel.listObjectProperties(); allobjpry.hasNext();) {  
  169.   
  170.                 String info = null;  
  171.                 OntProperty objpry = (OntProperty) allobjpry.next();  
  172.                 OntProperty objinverof = objpry.getInverseOf();  
  173.                   
  174.                 if(objinverof!=null){  
  175.                 info = "属性URI :"+objpry+"\n属  性  名  :"+objpry.toString().substring(objpry.toString().indexOf("#")+1)  
  176.                         +"\n特征类型 :inverseOf  "+"\n特  征  值  :"+ objinverof.toString().substring(objinverof.toString().indexOf("#")+1);  
  177.                 System.out.println(info);  
  178.                 }  
  179.             }  
  180.             }  
  181.           
  182.           
  183.         /* 函数功能说明 
  184.          *  
  185.          * 列出所有的实例,内容包括: 
  186.          * 实例URI、实例名、类URI、属性URI、属性值 
  187.          *  
  188.          * */  
  189.         public void getAllIndividuals(String owlpath) {  
  190.             OntModel ontModel = this.createOnt(owlpath);  
  191.             String str;  
  192.   
  193.             // 迭代出本体文件中所有的实例  
  194.             for (Iterator allIndivs = ontModel.listIndividuals(); allIndivs.hasNext();) {  
  195.                 Individual indiv = (Individual) allIndivs.next();  
  196.                 //对象属性命名空间  
  197.                 String namespace = indiv.toString().substring(0,indiv.toString().indexOf("#") + 1);  
  198.                 // 实例所属的类  
  199.                 OntClass classOfIndiv = indiv.getOntClass();  
  200.                   
  201.                 //实例所属类的所有属性  
  202.                 for (Iterator classPryOfIndivs = classOfIndiv.listProperties(); classPryOfIndivs.hasNext();)   
  203.                 {  
  204.                     OntProperty classPryOfIndiv = (OntProperty) classPryOfIndivs.next();  
  205.                     System.out.println(classPryOfIndivs.next());  
  206.                     String classPryOfIndivstr = classPryOfIndiv.toString();  
  207.                     String info = null;  
  208.                     info = "实例URI:"  
  209.                             + indiv  
  210.                             + " 实例名:"  
  211.                             + indiv.toString().substring(indiv.toString().indexOf("#") + 1) + "  实例所属类:"  
  212.                             + classOfIndiv  
  213.                             +" 属性URI:"  
  214.                             +classPryOfIndivstr;  
  215.                       
  216.                     // 获取这个实例的属性值  
  217.                     if (indiv.getPropertyValue(classPryOfIndiv) != null) {  
  218.                         String pryValueOfIndiv = indiv.getPropertyValue(classPryOfIndiv).toString();  
  219.                         /*判断对象属性或数据属性 
  220.                          * 如果实例属性值中包括"^^"和"#",则为数据属性,否则为对象属性 
  221.                          */  
  222.                         if (pryValueOfIndiv.contains("^^")&&pryValueOfIndiv.contains("#")) {  
  223.                             info = info   
  224.                                     + "  属性值:"  
  225.                                     + pryValueOfIndiv.substring(0, pryValueOfIndiv.indexOf("^^"));  
  226.                         }else{  
  227.                             info = info  
  228.                                     + "  属性值:"  
  229.                                     + pryValueOfIndiv.substring(pryValueOfIndiv.indexOf("#") + 1);  
  230.                         }  
  231.                     } else {  
  232.                         info = info + "   无属性值";  
  233.                     }  
  234.                     //输出实例信息  
  235.                     System.out.println(info);  
  236.                 }  
  237.           
  238.             }  
  239.   
  240.         }  
  241.   
  242.         public static void main(String[] args) {  
  243.             String owlpath = "E:\\greenide\\workspace\\Ontology\\logistics.owl";  
  244.             System.out.println("--------------------------------------------列表1    类------------------------------");  
  245.             new OntAnalysisMysql().getAllClasses(owlpath);  
  246.             System.out.println("--------------------------------------------列表2    属性-----------------------------");  
  247.             new OntAnalysisMysql().getAllProperties(owlpath);  
  248.             System.out.println("--------------------------------------------列表3   属性特征--------------------------");  
  249.             new OntAnalysisMysql().getAllProcharac(owlpath);  
  250.             System.out.println("--------------------------------------------列表4    属性约束--------------------------");  
  251.             new OntAnalysisMysql().getAllProcharac(owlpath);  
  252.             System.out.println("--------------------------------------------列表5    实例------------------------------");  
  253.             new OntAnalysisMysql().getAllIndividuals(owlpath);  
  254.               
  255.         }  
  256.   
  257.     }  

(5)结果

[plain] view plaincopyprint?
  1. --------------------------------------------列表1    类------------------------------  
  2. 类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#顾客   类名:顾客   类描述类型:无  
  3. 类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#销售商   类名:销售商   类描述类型:无  
  4. 类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单   类名:订单   类描述类型:无  
  5. 类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#团体顾客   类名:团体顾客   类描述类型:subClassOf   类描述值:顾客  
  6. 类URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#一般顾客   类名:一般顾客   类描述类型:subClassOf   类描述值:顾客  
  7. --------------------------------------------列表2    属性-----------------------------  
  8. 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货人  属性值:订货人 属性:OP 定义域 :订单  值域:顾客  
  9. 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货  属性值:发货 属性:OP 定义域 :销售商  值域:顾客  
  10. 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#下订单  属性值:下订单 属性:OP 定义域 :顾客  值域:销售商  
  11. 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货日期  属性值:订货日期 属性:DP 定义域 :订单  值域:date  
  12. 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量  属性值:订货数量 属性:DP 定义域 :订单  值域:positiveInteger  
  13. 属性URI:http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货日期  属性值:发货日期 属性:DP 定义域 :销售商  值域:date  
  14. --------------------------------------------列表3   属性特征--------------------------  
  15. 属性URI :http://www.semanticweb.org/ontologies/2012/10/logistics.owl#发货  
  16. 属  性  名  :发货  
  17. 特征类型 :inverseOf    
  18. 特  征  值  :下订单  
  19. --------------------------------------------列表4    属性约束--------------------------  
  20. http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单  
  21. http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量  
  22. MaxCardinalityRestriction  
  23. 100  
  24. http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订单  
  25. http://www.semanticweb.org/ontologies/2012/10/logistics.owl#订货数量  
  26. MinCardinalityRestriction  
  27. 1  
  28. --------------------------------------------列表5    实例------------------------------  
  29. 实例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#下订单  属性值:淘宝  
  30. 实例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#下订单  属性值:麦考林  
  31. 实例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#发货   无属性值  
  32. 实例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  
  33. 实例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#发货  属性值:李明  
  34. 实例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#发货日期   无属性值  
  35. 实例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  
  36. 实例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  
  37. 实例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#订货人  属性值:韩梅梅  
  38. 实例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  
  39. 实例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  
  40. 实例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