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

    >> 本版讨论Semantic Web(语义Web,语义网或语义万维网, Web 3.0)及相关理论,如:Ontology(本体,本体论), OWL(Web Ontology Langauge,Web本体语言), Description Logic(DL, 描述逻辑),RDFa,Ontology Engineering等。
    [返回] W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWLW3CHINA.ORG讨论区 - Web新技术讨论『 Semantic Web(语义Web)/描述逻辑/本体 』 → 向高手求救:如何将创建好的本体数据导入MySQL中[求助] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 30907 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 向高手求救:如何将创建好的本体数据导入MySQL中[求助] 举报  打印  推荐  IE收藏夹 
       本主题类别: Ontology Engineering    
     白色闪电 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:5
      积分:82
      门派:XML.ORG.CN
      注册:2008/11/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给白色闪电发送一个短消息 把白色闪电加入好友 查看白色闪电的个人资料 搜索白色闪电在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看白色闪电的博客楼主
    发贴心情 向高手求救:如何将创建好的本体数据导入MySQL中[求助]

    大家好!
    请问如何将创建好的本体数据导入MySQL中,请求 详细的导入方法,谢谢!

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/4/13 17:18:00
     
     Avansky 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:大三(研究MFC有点眉目了!)
      文章:103
      积分:675
      门派:W3CHINA.ORG
      注册:2008/12/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Avansky发送一个短消息 把Avansky加入好友 查看Avansky的个人资料 搜索Avansky在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Avansky的博客2
    发贴心情 
    在Myeclipse中实现Jena
    可以在Jena的主页(http://jena.sourceforge.net/downloads.html)下载Jena的最新版本,目前是Jena2.4版本。Jena是Java API,所以需要Java运行环境。本文使用的是jdk1.5.0_04和Eclipse3.2。
    1)将下载的Jena-2.4.zip解压到任意路径,解压之后生成Jena2.4文件夹,将Jena2.4\lib下的jar文件全部加入CLASSPATH,这样就可以在任意的Java编辑器中调用Jena API了。在解压目录下有一个test.bat文件,用于配置的测试。在控制台运行此程序,如果你的配置正确,测试将顺利完成。
    2)如果使用Eclipse,则可以通过修改工程的Java创建路径的方法导入Jena jar文件。在Eclipse下创建Java工程(eg:OWL_SQL.java),右健单击工程名字,选择“属性/Properties”,在打开的对话框中选择“Java创建路径/Java Build Path”,在右边标签中选择“库/Libraries”,之后选择“添加外部文件/Add Extenal JARs”,找到Jena2.4\lib目录下的所有jar文件并将其添加到工程。这样就可以运行Jean文档中的例子了。
    3)在Eclipse中用同样的方法导入mysql-connector-java-5.0.8-bin.jar到工程OWL_SQL.java中。
    import java.io.*;
    import java.sql.SQLException;
    import com.hp.hpl.jena.db.*;
    import com.hp.hpl.jena.rdf.model.*;

    public class OWL_SQL1{
         public static final String strDriver ="com.mysql.jdbc.Driver"; // path of driver class
         public static final String strURL ="jdbc:mysql://localhost:3306/avan"; // URL of database
         public static final String strUser ="root"; // database user id
         public static final String strPassWord ="root"; // database password
         public static final String strDB="MySQL"; // database type

         public static void main(String[] args){
             try{// 创建一个数据库连接
                  IDBConnection conn = new DBConnection ( strURL, strUser, strPassWord, strDB );
                // 加载数据库驱动类,需要处理异常
                  try{
                       Class.forName(strDriver);
                  }catch(ClassNotFoundException e) {
                       System.out.println("ClassNotFoundException, Driver is not available...");
                  }
                // 使用数据库连接参数创建一个模型制造器
                  ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
                  // 创建一个默认模型,命名为 MyOntology
                  Model defModel = maker.createModel("TNB");
                  // 准备需要存入数据库的本体文件,建立输入文件流
                  FileInputStream inputStreamfile = null;
                  try {
                       File file = new File("D:\\Program Files\\Protege_3.1\\TNB.owl");
                       inputStreamfile = new FileInputStream(file);
                  } catch (FileNotFoundException e) {
                       e.printStackTrace();
                       System.out.println("Ontology File is not available...");
                  }
                  InputStreamReader in = null;
                  try {
                       in = new InputStreamReader(inputStreamfile, "UTF-8");
                  } catch (UnsupportedEncodingException e) {
                       e.printStackTrace();
                  }
                // 读取文件
                defModel.read(in,null);
                // 关闭输入流读取器
                try {
                       in.close();
                  } catch (IOException e) {
                       e.printStackTrace();
                  }
                  // 执行数据转换,将本体数据存入数据库
                defModel.commit();
                // 关闭数据库连接
                  try {
                       conn.close();
                  } catch (SQLException e) {
                       e.printStackTrace();
                  }
             }catch(RDFRDBException e){
                  System.out.println("Exceptions occur...");
             }
         }
    }

    二,Jena Ontology API
    Jena2.4的Ontology API包含在ontology包(com.hp.hpl.jena.ontology)中,可以在目录\\Jena-2.4\src\com\hp\hpl\jena\ontology下查看所有程序的代码,Jena本体部分的说明网页是\\Jena-2.4\doc\ontology\index.html,本部分内容以及程序的编写主要参考这两个文档。
    在语义网上有很多表示本体信息的本体语言,其中表达能力最强的是OWL,OWL按复杂程度分为 OWL Full、OWL DL和OWL Lite三个版本。其他的本体语言还有RDFS、DAML+OIL。Jena Ontology API为语义网应用程序开发者提供了一组独立于具体语言的一致编程接口。
    Jena提供的接口本质上都是Java程序,也就是.java文件经过javac之后生成的.class文件。显然,class文件并不能提示本体创建使用的语言。为了区别于其他的表示方法,每种本体语言都有一个自己的框架(profile),它列出了这种语言使用的类(概念)和属性的构建方式和URI。因此,在DAML框架里,对象属性()的URI是daml:ObjectProperty,而在OWL框架里却是owl:ObjectProperty。RDFS并没有定义对象属性,所以在RDFS框架里,对象属性的URI是null。
    在Jena中,这种框架通过参数的设置在创建时与本体模型(Ontology Model)绑定在一起。本体模型继承自Jena中的Model类。Model允许访问RDF数据集合中的陈述(Statements),OntModel对此进行了扩展,以便支持本体中的各种数据对象:类(classes)、属性(properties)、实例(个体individuals)。
    本部分简单介绍要用到的几个java类或者接口。

    1.本体模型OntModel
    本体模型(OntModel)是对Jena RDF模型的扩展(继承自RDF模型),提供了处理本体数据的功能。使用Jena处理本体首先就是要建立一个本体模型,之后就能够通过本体模型中所定义的方法操作模型,比如导入子模型()、获取模型中本体的信息、操作本体属性以及将本体的表示输出到磁盘文件等等。Jena通过model包中的ModelFactory创建本体模型,ModelFactory是Jena提供用来创建各种模型的类,在类中定义了具体实现模型的成员数据以及创建模型的二十多种方法。一个最简单的创建本体模型的语句如下:
    OntModel ontModel = ModelFactory.createOntologyModel();
    该语句不含参数,应用默认设置创建一个本体模型ontModel,也就是说:它使用OWL语言、基于内存,支持RDFS推理。可以通过创建时应用模型类别(OntModelSpec)参数创建不同的模型,以实现不同语言不同类型不同推理层次的本体操作。例如,下面的语句创建了一个使用DAML语言内存本体模型。直观地讲,内存模型就是只在程序运行时存在的模型,它没有将数据写回磁盘文件或者数据库表。
    OntModel ontModel = ModelFactory.createOntologyModel( OntModelSpec.DAML_MEM );
    更多类型设置可以参照OntModelSpec类中的数据成员的说明。
    我们所使用的本体是从OWL文件获得的,也就是说,是从磁盘读取的。读取的方法是调用Jena OntoModel提供的Read方法。例如
    ontModel.read("file:D:/temp/Creatrue/Creature.owl");
    就是读取位于D盘相应目录下的Creature.owl文件以建立本体模型。Read方法也有很多重载,上面调用的方法以文件的绝对路径作为参数。其他的方法声明如下
    read( String url );
    read( Reader reader, String base );
    read( InputStream reader, String base );
    read( String url, String lang );
    read( Reader reader, String base, String Lang );
    read( InputStream reader, String base, String Lang );

    2.文档管理器Document manager
    本体文档管理器(OntDocumentManager)是用来帮助管理本体文档的类,它包含了导入本体文档创建本体模型、帮助缓存下载网络上的本体等功能。每个本体模型都有一个相关联的文档管理器。在创建本体模型时,可以创建独立的文档管理器并作为参数传递给模型工厂(ModelFactory)。文档管理器有非常多的配置选项,基本可以满足应用的需求。首先,每个文档管理器的参数都可以通过Java代码来设置(注:OntDocumentManager有五种重载的构造函数)。另外,文档管理器也可以在创建的时候从一个RDF格式的策略文件读取相应设定值。
    下面的例子创建一个文档管理器并将它与以创建的本体模型关联。
    OntModel m = ModelFactory.createOntologyModel();
    OntDocumentManager dm = m.getDocumentManager();

    3.接口OntClass
    这个接口中定义了本体中与概念(也就是类Class)相关的操作,通过OntModel中的listClasses()便可以返回模型中的所有概念组成的迭代器(Iterator),然后调用OntClass的各种方法具体进行具体操作。OntoClass对概念之间的各种关系都有相应的定义方法,典型的有添加子类、添加约束、创建互斥概念、迭代返回某种类型的概念以及相关的逻辑判断等等。
    第四部分的例子主要是应用这个类的方法。

    4.基本本体类型OntResource
    所有本体API中用于表示本体的类继承自OntResource,这样就可以在OntResource中放置所有类公用的功能,并可以为一般的方法设置通用的返回值。Java接口OntResource扩展了Jena的RDF资源接口,所以任何可以接受资源或者RDFNode的方法都可以接受OntResource,并且也就可以接受任何其他本体值。虽然这个类涵盖了涉及本体的所有类,在例子中并没有使用它。从Jena Java Doc可以获得它的详细信息。

    例子的主要代码如下列出。
    // 创建使用OWL语言的内存模型
    OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
    ontModel.read("file:./Creature.owl"); // 读取当前路径下的文件,加载模型
    // 定义一个类作为模型中Animal类的等等价类,并添加注释
    OntClass cls = ontModel.createClass(":DongwuClass");
    cls.addComment("the EquivalentClass of Animal...", "EN");
    // 通过完整的URI取得模型中的Animal类
    OntClass oc = ontModel.
    getOntClass("http://www.owl-ontologies.com/marine.owl#Animal");
    oc.addEquivalentClass(cls); // 将先前定义的类添加为Animal的等价类

    // 迭代显示模型中的类,在迭代过程中完成各种操作
    for (Iterator i = ontModel.listClasses(); i.hasNext();) {
    OntClass c = (OntClass) i.next(); // 返回类型强制转换
    if (!c.isAnon()) { // 如果不是匿名类,则打印类的名字
    System.out.print("Class");
    // 获取类的URI并输出,在输出时对URI做了简化(将命名空间前缀省略)
    System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()));
                                
    // 处理Animal类
    if (c.getLocalName().equals("Animal")) { // 如果当前类是Animal
           System.out.println("  URI@" + c.getURI()); // 输出它的完整URI                
    // 取得它的的等价类并打印
           System.out.print("  Animal's EquivalentClass is "+ c.getEquivalentClass());
    // 输出等价类的注释
    System.out.println(" [comments:" + c.getEquivalentClass().getComment("EN")+"]");
    }// 处理Animal结束
    // 迭代显示当前类的直接父类
    for (Iterator it = c.listSuperClasses(); it.hasNext();)
    {
           OntClass sp = (OntClass) it.next();
           String str = c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()) // 获取URI
                                + "'s superClass is " ;
           String strSP = sp.getURI();
           try{ // 另一种简化处理URI的方法
                  str = str + ":" + strSP.substring(strSP.indexOf('#')+1);
                  System.out.println("  Class" +str);
           }catch( Exception e ){}
    } // super class ends
    // 迭代显示当前类的直接子类
    for (Iterator it = c.listSubClasses(); it.hasNext();){
    System.out.print("  Class");
    OntClass sb = (OntClass) it.next();
    System.out.println(c.getModel().getGraph().getPrefixMapping()
                                              .shortForm(c.getURI())+ "'s suberClass is "
                                              + sb.getModel().getGraph().getPrefixMapping()
                                              .shortForm(sb.getURI()));
    }// suber class ends
    // 迭代显示与当前类相关的所有属性
    for(Iterator ipp = c.listDeclaredProperties(); ipp.hasNext();){
           OntProperty p = (OntProperty)ipp.next();
           System.out.println("  associated property: " + p.getLocalName());
           }// property ends
    }// anonymity ends
    else {}// 是匿名类
    }// for ends

    ----------------------------------------------
    本人的论文是基于语义网的搜索引擎技术。
    望同路人多交流!
    Email:avan1017@163.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/4/13 22:20:00
     
     白色闪电 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:5
      积分:82
      门派:XML.ORG.CN
      注册:2008/11/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给白色闪电发送一个短消息 把白色闪电加入好友 查看白色闪电的个人资料 搜索白色闪电在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看白色闪电的博客3
    发贴心情 
    非常感谢,我试试您说的方法
    下面这个例子看过,总之,谢啦
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/4/14 10:41:00
     
     angleangleangle 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:42
      积分:271
      门派:XML.ORG.CN
      注册:2010/3/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给angleangleangle发送一个短消息 把angleangleangle加入好友 查看angleangleangle的个人资料 搜索angleangleangle在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看angleangleangle的博客4
    发贴心情 
    楼上的说法,运行结果是Exceptions occur...
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/4/20 17:26:00
     
     Avansky 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:大三(研究MFC有点眉目了!)
      文章:103
      积分:675
      门派:W3CHINA.ORG
      注册:2008/12/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Avansky发送一个短消息 把Avansky加入好友 查看Avansky的个人资料 搜索Avansky在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Avansky的博客5
    发贴心情 
    兄弟,你好!
    1)在window---->Prefrences---->MyEclipse Edition------>Database Explorer----->Database Drivers中添加与数据库的链接。
    2)必须在Myeclipse项目中,Referenced Libraries中导入mysql-connector包。

    ----------------------------------------------
    本人的论文是基于语义网的搜索引擎技术。
    望同路人多交流!
    Email:avan1017@163.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/4/21 18:14:00
     
     Avansky 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:大三(研究MFC有点眉目了!)
      文章:103
      积分:675
      门派:W3CHINA.ORG
      注册:2008/12/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Avansky发送一个短消息 把Avansky加入好友 查看Avansky的个人资料 搜索Avansky在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看Avansky的博客6
    发贴心情 
    MyEclipse和Mysql的配置!!
    下面是别人的博客,讲的很详细!

    Java中使用JDBC访问MySQL数据库:
    http://hi.baidu.com/laoxiumu/blog/item/d21580a77d317892d1435858.html

    ----------------------------------------------
    本人的论文是基于语义网的搜索引擎技术。
    望同路人多交流!
    Email:avan1017@163.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/4/21 18:19:00
     
     angleangleangle 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:42
      积分:271
      门派:XML.ORG.CN
      注册:2010/3/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给angleangleangle发送一个短消息 把angleangleangle加入好友 查看angleangleangle的个人资料 搜索angleangleangle在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看angleangleangle的博客7
    发贴心情 
    存储数据库那个输出什么也没有
    [此贴子已经被作者于2010-5-5 15:09:55编辑过]
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/5/4 22:14:00
     
     angleangleangle 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:42
      积分:271
      门派:XML.ORG.CN
      注册:2010/3/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给angleangleangle发送一个短消息 把angleangleangle加入好友 查看angleangleangle的个人资料 搜索angleangleangle在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看angleangleangle的博客8
    发贴心情 
    mydb mydb mydb 
      
    20000908 honey 21
    [此贴子已经被作者于2010-5-5 15:07:32编辑过]
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/5/4 22:25:00
     
     lyfsemanticweb 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:12
      积分:113
      门派:XML.ORG.CN
      注册:2009/7/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给lyfsemanticweb发送一个短消息 把lyfsemanticweb加入好友 查看lyfsemanticweb的个人资料 搜索lyfsemanticweb在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看lyfsemanticweb的博客9
    发贴心情 
    弱弱的问一下怎么将用protege构建的本体保存到SQL server数据库中啊?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/9/7 19:47:00
     
     qxr777 帅哥哟,离线,有人找我吗?
      
      
      等级:大二(研究汇编)
      文章:28
      积分:266
      门派:XML.ORG.CN
      注册:2005/5/12

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给qxr777发送一个短消息 把qxr777加入好友 查看qxr777的个人资料 搜索qxr777在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 引用回复这个贴子 回复这个贴子 查看qxr777的博客10
    发贴心情 
    将OWL文件导入DB,效率真的能够比导入内存高吗?
    我们有一个2M左右的owl,持久化到MySQL后,再从MySQL中载入内存,居然大约得花10分钟的时间;而直接从owl文件载入内存则快得多。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2010/9/12 21:33:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Semantic Web(语义Web)/描述逻辑/本体 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/20 0:02:32

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

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