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

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

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 112508 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: [原创]实现将本体文件存入数据库,再从数据库中读出,输出该本体中的所有类,所有属性及其对应属性的值 举报  打印  推荐  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
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 计算机英语 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 4:51:39

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

     *树形目录 (最近20个回帖) 顶端 
    主题:  [原创]实现将本体文件存入数据库,再从数据库中读出,输出该本体中的所有类,所有属性及其对应属性的值..(6248字) - dorothyle,2010年10月21日
        回复:  你好 楼主 请问你是在什么环境中 写的以上代码呀(47字) - sylfirelotussyl,2011年11月17日
        回复:  谢谢楼主!(12字) - ylzhu,2011年8月14日
        回复:  出错了 前几部还算是顺利 到了最后一步出错了:贴出报警,请指教!(为什么有那么多的null)数据..(10412字) - andyneo,2010年12月28日
        回复:  出错了 :数据库连接成功了,但是无法实例化mysql5.0 以下是控制台全部代码 请楼主指教 谢谢..(1642字) - andyneo,2010年12月27日
        回复:  学习,感谢发帖(14字) - pjohn2003,2010年11月8日
        回复:  这里的实例是在本例中直接建好的某个类的实例吗?需要推理以后才能成为某个类的实例这种情况是不是还得有..(112字) - hanyonghua6,2010年11月5日
            回复:  这是Jena OntModel类(实际上是一个interface)的说明文档中的一部分:Depe..(740字) - Roger_,2010年11月6日
                回复:  请问 如果在列出本体中的类的时候 出现了NULL 是不是指的是匿名类呢?..(66字) - andyneo,2010年12月28日
                回复:  嗯,谢谢,你是在研究本体吗?我正在学习阶段,希望以后多多指教~~(64字) - hanyonghua6,2010年11月8日
                    回复:  研究方向是语义网,但具体的研究不是本体。。用过Jena,所以了解些大家一起学习..(80字) - Roger_,2010年11月8日
                        回复:  哦,我最近在看jena关于本体查询的一些资料,你有做过这方面的研究吗?(66字) - hanyonghua6,2010年11月8日
                            回复:  一样的。。我也看那个(20字) - Roger_,2010年11月8日
        回复:  谢谢楼主!!(14字) - hjx_221,2010年10月21日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    341.797ms