新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 计算机英语求助,计算机英语翻译互助
    [返回] 计算机科学论坛休息区『 计算机英语 』 → [原创]实现将本体文件存入数据库,再从数据库中读出,输出该本体中的所有类,所有属性及其对应属性的值 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 120812 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [原创]实现将本体文件存入数据库,再从数据库中读出,输出该本体中的所有类,所有属性及其对应属性的值 举报  打印  推荐  IE收藏夹 
       本主题类别: Ontology Language | RDF/RDFS    
     dorothyle 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:44
      积分:285
      门派:XML.ORG.CN
      注册:2009/9/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给dorothyle发送一个短消息 把dorothyle加入好友 查看dorothyle的个人资料 搜索dorothyle在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看dorothyle的博客楼主
    发贴心情 [原创]实现将本体文件存入数据库,再从数据库中读出,输出该本体中的所有类,所有属性及其对应属性的值

    今天终于实现了将一个本体文件存储到数据库中,再从数据库中将文本文件读出来,输出该本体中的所有类,所有属性及其对应属性的值。

    import java.util.Iterator;
    import com.hp.hpl.jena.db.DBConnection;
    import com.hp.hpl.jena.db.IDBConnection;
    import com.hp.hpl.jena.ontology.Individual;
    import com.hp.hpl.jena.ontology.OntClass;
    import com.hp.hpl.jena.ontology.OntModel;
    import com.hp.hpl.jena.ontology.OntModelSpec;
    import com.hp.hpl.jena.ontology.OntProperty;
    import com.hp.hpl.jena.rdf.model.Model;
    import com.hp.hpl.jena.rdf.model.ModelFactory;
    import com.hp.hpl.jena.rdf.model.ModelMaker;
    import com.hp.hpl.jena.util.iterator.ExtendedIterator;

    public class ReadOntologyFromMysql {
     public static final String strDriver = "com.mysql.jdbc.Driver";
     public static final String strURL = "jdbc:mysql://localhost:3306/jena";
     public static final String strUser = "root";
     public static final String strPassword = "root";
     public static final String strDB = "MySQL";
     
     // 连接数据库
     public static IDBConnection connectDB(String DBURL, String DBUSER, String DBPASSWORD, String DBTYPE){
      try {
       Class.forName("com.mysql.jdbc.Driver");
       System.out.print("数据库连接成功, 已经连接到");
      }catch (ClassNotFoundException e){
       e.printStackTrace();
       System.out.println("数据库连接不成功");
      }
      return new DBConnection(DBURL, DBUSER,DBPASSWORD,DBTYPE);
     }
     
        // 提取本体文件关于OWL架构等详细信息
     public static OntModelSpec getModelSpec(ModelMaker maker) {
      OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);
      spec.setImportModelGetter(maker);
      return spec;
     }
     
     // 从文件读取本体并将其存入数据库
     public static OntModel ceateDBModelFromFile(IDBConnection con, String name, String filePath){
      ModelMaker maker = ModelFactory.createModelRDBMaker(con);
      Model base = maker.createModel(name);
      OntModel newmodel = ModelFactory.createOntologyModel(getModelSpec(maker),base);
      newmodel.read(filePath);
      System.out.println("已将本体文件存入数据库。");
      System.out.println();
      return newmodel;  
     }
     
     // 从数据库中得到已存入本体
     public static OntModel getModelFromDB(IDBConnection con, String name){
      ModelMaker maker = ModelFactory.createModelRDBMaker(con);
      Model base = maker.getModel(name);
      OntModel newmodel = ModelFactory.createOntologyModel(getModelSpec(maker),base);
      System.out.println("已从数据库中读出本体文件。");
      System.out.println();
      return newmodel;
     }
     
     // 简单读取本体中的所有类
     public static void SimpleReadOntology(OntModel model){
      System.out.println("该本体文件中包括以下类:");
      for (Iterator i = model.listClasses(); i.hasNext();){
       OntClass c = (OntClass) i.next();
       System.out.println("    " + c.getLocalName());
      }
      System.out.println();
     }
     
     public static void main(String args[]){
      IDBConnection con = connectDB(strURL, strUser, strPassword, strDB);
      System.out.println(con + ";");
      System.out.println();
      String filePath = "file:e:/ontologies/BeijingOpera/Costume.owl";
      String prefix = "http://Costume.owl#";
      
      OntModel defModel = ceateDBModelFromFile(con, "Costume", filePath);
      // 读取filePath目录下本体文件Costume的内容,将该本体文件的内容存储到数据库con中;
      OntModel model = getModelFromDB(con, "Costume");
      // 将数据库con中存储的本体文件Costume的内容读出到一个本体文件Model中;
      
      SimpleReadOntology(model);
      OntClass CostumeClass = model.getOntClass(prefix + "Costume");
      String name = CostumeClass.getLocalName();
    //返回的是Costume本体中的类Costume的名字,是一个字符串;
      System.out.print("此处返回的是" + name + "类的名称");
      System.out.println(name);
      System.out.println();
      
      ExtendedIterator it = CostumeClass.listInstances();
      System.out.println("此处返回的是" + name + "类的所有实例:");
      while (it.hasNext()) {
       Individual oi = (Individual) it.next();
       System.out.println("    " + oi.getLocalName());
       
       for (Iterator ipp = CostumeClass.listDeclaredProperties(); ipp.hasNext();){
        OntProperty p = (OntProperty) ipp.next();
        System.out.println("    associated property:" + p.getLocalName() + ":" + oi.getPropertyValue(p));
       }
      }
     }
    }

    以上代码执行后,控制台的输出如下:
    数据库连接成功, 已经连接到com.hp.hpl.jena.db.DBConnection@157f0dc;

    已将本体文件存入数据库。

    已从数据库中读出本体文件。

    该本体文件中包括以下类:
        Costume
        Document
        Image
        Master

    此处返回的是Costume类的名称Costume

    此处返回的是Costume类的所有实例:
        HongTuanLongMang
                associated property:kind:Mang^^http://www.w3.org/2000/01/rdf-schema#Literal
                associated property:image:null
                associated property:pattern:SanJianShui, Long^^http://www.w3.org/2000/01/rdf-schema#Literal
                associated property:daPei:null
                associated property:name:HuanTuanLongMang^^http://www.w3.org/2000/01/rdf-schema#Literal
                associated property:color:red^^http://www.w3.org/2000/01/rdf-schema#Literal
                associated property:hangDang:Sheng^^http://www.w3.org/2000/01/rdf-schema#Literal
                associated property:texture:DaDuan^^http://www.w3.org/2000/01/rdf-schema#Literal
                associated property:depiction:null
                associated property:style:DuiJin, YuanCollar^^http://www.w3.org/2000/01/rdf-schema#Literal

        HuangTuanLongMang
                associated property:kind:null
                associated property:image:null
                associated property:pattern:null
                associated property:daPei:null
                associated property:name:null
                associated property:color:null
                associated property:hangDang:null
                associated property:texture:null
                associated property:depiction:null
                associated property:style:null

        LvTuanLongMang
                associated property:kind:null
                associated property:image:null
                associated property:pattern:null
                associated property:daPei:null
                associated property:name:null
                associated property:color:null
                associated property:hangDang:null
                associated property:texture:null
                associated property:depiction:null
                associated property:style:null


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/10/21 10:05:00
     
     hjx_221 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:博士一年级
      文章:4607
      积分:24021
      门派:XML.ORG.CN
      注册:2004/8/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hjx_221发送一个短消息 把hjx_221加入好友 查看hjx_221的个人资料 搜索hjx_221在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hjx_221的博客2
    发贴心情 
    谢谢楼主!!

    ----------------------------------------------
    初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒~ 
    http://hjx221.blogger.org.cn/

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/10/21 16:17:00
     
     hanyonghua6 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:11
      积分:114
      门派:XML.ORG.CN
      注册:2010/11/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanyonghua6发送一个短消息 把hanyonghua6加入好友 查看hanyonghua6的个人资料 搜索hanyonghua6在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hanyonghua6的博客3
    发贴心情 
    这里的实例是在本例中直接建好的某个类的实例吗?需要推理以后才能成为某个类的实例这种情况是不是还得有推理的代码啊?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/11/5 17:34:00
     
     Roger_ 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:10
      积分:177
      门派:XML.ORG.CN
      注册:2009/4/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Roger_发送一个短消息 把Roger_加入好友 查看Roger_的个人资料 搜索Roger_在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Roger_的博客4
    发贴心情 
    这是Jena OntModel类(实际上是一个interface)的说明文档中的一部分:
    Depending on the inference capability of the underlying model, the OntModel will appear to contain more or less triples. For example, if this class is used to wrap a plain memory or database model, only the relationships asserted by the document will be reported through this convenience API. Alternatively, if the OntModel wraps an OWL inferencing model, the inferred triples from the extension will be reported as well.

    lz的代码只是将本体简单的存放为database model(OntModel接口实现的方式之一),因而不具备inference能力。所以我觉得,那个listInstances方法返回的是本体中已知的类实例,不包含隐含的实例。

    对Jena Ontology存储所需的类和方法不太熟,如果有错,请大家指正。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/11/6 20:21:00
     
     hanyonghua6 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:11
      积分:114
      门派:XML.ORG.CN
      注册:2010/11/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanyonghua6发送一个短消息 把hanyonghua6加入好友 查看hanyonghua6的个人资料 搜索hanyonghua6在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hanyonghua6的博客5
    发贴心情 
    嗯,谢谢,你是在研究本体吗?我正在学习阶段,希望以后多多指教~~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/11/8 8:45:00
     
     Roger_ 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:10
      积分:177
      门派:XML.ORG.CN
      注册:2009/4/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Roger_发送一个短消息 把Roger_加入好友 查看Roger_的个人资料 搜索Roger_在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Roger_的博客6
    发贴心情 
    研究方向是语义网,但具体的研究不是本体。。
    用过Jena,所以了解些

    大家一起学习

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/11/8 9:35:00
     
     hanyonghua6 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:11
      积分:114
      门派:XML.ORG.CN
      注册:2010/11/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanyonghua6发送一个短消息 把hanyonghua6加入好友 查看hanyonghua6的个人资料 搜索hanyonghua6在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hanyonghua6的博客7
    发贴心情 
    哦,我最近在看jena关于本体查询的一些资料,你有做过这方面的研究吗?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/11/8 9:44:00
     
     Roger_ 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:10
      积分:177
      门派:XML.ORG.CN
      注册:2009/4/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Roger_发送一个短消息 把Roger_加入好友 查看Roger_的个人资料 搜索Roger_在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Roger_的博客8
    发贴心情 
    一样的。。我也看那个
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/11/8 10:12:00
     
     pjohn2003 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:10
      积分:96
      门派:XML.ORG.CN
      注册:2010/11/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给pjohn2003发送一个短消息 把pjohn2003加入好友 查看pjohn2003的个人资料 搜索pjohn2003在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看pjohn2003的博客9
    发贴心情 
    学习,感谢发帖
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/11/8 20:00:00
     
     andyneo 帅哥哟,离线,有人找我吗?
      
      
      等级:大二期末(Java考了96分!)
      文章:82
      积分:363
      门派:XML.ORG.CN
      注册:2010/11/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给andyneo发送一个短消息 把andyneo加入好友 查看andyneo的个人资料 搜索andyneo在『 计算机英语 』的所有贴子 引用回复这个贴子 回复这个贴子 查看andyneo的博客10
    发贴心情 
    出错了 :数据库连接成功了,但是无法实例化mysql5.0 以下是控制台全部代码 请楼主指教 谢谢!
    数据库连接成功, 已经连接到com.hp.hpl.jena.db.DBConnection@1ded0fd;

    Exception in thread "main" com.hp.hpl.jena.db.RDFRDBException: Failure to instantiate DB Driver:mysql5.0 java.lang.ClassNotFoundException: com.hp.hpl.jena.db.impl.Driver_mysql5.0
     at com.hp.hpl.jena.db.DBConnection.getDriver(DBConnection.java:272)
     at com.hp.hpl.jena.db.DBConnection.containsModel(DBConnection.java:195)
     at com.hp.hpl.jena.db.impl.GraphRDBMaker.hasGraph(GraphRDBMaker.java:132)
     at com.hp.hpl.jena.db.impl.GraphRDBMaker.createGraph(GraphRDBMaker.java:94)
     at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:46)
     at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createModel(ModelMakerImpl.java:49)
     at com.jena.test.ReadOntologyFromMysql.ceateDBModelFromFile(ReadOntologyFromMysql.java:45)
     at com.jena.test.ReadOntologyFromMysql.main(ReadOntologyFromMysql.java:80)
    Caused by: java.lang.ClassNotFoundException: com.hp.hpl.jena.db.impl.Driver_mysql5.0
     at java.net.URLClassLoader$1.run(Unknown Source)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(Unknown Source)
     at java.lang.ClassLoader.loadClass(Unknown Source)
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
     at java.lang.ClassLoader.loadClass(Unknown Source)
     at java.lang.ClassLoader.loadClassInternal(Unknown Source)
     at java.lang.Class.forName0(Native Method)
     at java.lang.Class.forName(Unknown Source)
     at com.hp.hpl.jena.db.DBConnection.getDriver(DBConnection.java:267)
     ... 7 more

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/12/27 21:18:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 计算机英语 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/21 14:55:42

    本主题贴数14,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    171.875ms