将OWL本体文件存储到MySQL数据库

将OWL本体文件存储到MySQL数据库

一、安装好必要的软件并配置好开发环境

Eclipse

MySQL Server 5.5-win32

jena2.6.4

protege4.3

mysql-connector-java-5.1.35(MySQL的JDBC)

 

二、用protege4.3构建好面向作战文书理解的军事领域本体,并主动生成OWL本体文件g:/毕业设计/软件/本体实例/Ontology1428926241032/Ontology1428926241032.owl

 

三、将OWL本体文件存储到MySQL数据库

 

1. 利用MySQL创建一个数据库:create database military_ontology;

 

2. 打开Eclipse,新建一个Java工程,起名为military_ontology。(File-New-Java Project,输入名字military_ontology,点击next)

 

3. 新建工程的同时,分别导入Jena包和MySQL的JDBC。(点击Libraries-点击Add External JARs,分别加入JDBC和Jena中全部.jar文件,C:\Program Files\MySQL\MySQL Connector J和G:\Jena\lib目录中,点Finish)

 

4. 在工程military_ontology\src\目录下新建一个Java文件(New-Class),名字为military_ontology.java;

 

5. 在military_ontology.java中开始编写以下代码:

 

package military_ontology;

 

import java.io.*;//导入IO包的所有类

import java.sql.SQLException;//导入SQL有关异常处理包

import com.hp.hpl.jena.db.*;//导入jena链接数据库的包

import com.hp.hpl.jena.rdf.model.*;//导入jena有关模型的包

import com.hp.hpl.jena.ontology.OntModel;//导入OntModel

import com.hp.hpl.jena.ontology.OntModelSpec;//导入OntModelSpec

 

public class military_ontology 

{

public static final String strURL = "jdbc:mysql://localhost:3306/military_ontology"//数据库URL

 public static final String strUser = "root";//数据库登录名

 public static final String strPassword = "520tongli";//数据库登录密码

 public static final String strDB = "MySQL";//数据库类型名称

 

 public static void main(String[] args) throws SQLException

 {

    try 

    {

       DBConnection connection = new DBConnection(strURLstrUserstrPasswordstrDB);//创建数据库连接

       try 

       {

           Class.forName("com.mysql.jdbc.Driver");//装载JDBC驱动

           System.out.println("驱动程序已经安装。");

       } 

       catch (ClassNotFoundException e)

       {System.out.println("ClassNotFoundException, Driver is not available");}

       if(connection.getConnection()!=null)

           System.out.println("数据库连接成功。");

       //getConnection()方法用于检查连接是否成功,若没有连接成功,会自动抛出异常,同时程序会被挂起

   

       // 从此处开始读入一个OWL文件并且存储到数据库中;       

       ModelMaker maker = ModelFactory.createModelRDBMaker(connection); 

       // createModelRDBMaker()方法创建一个数据库的ModelMaker模型对象,ModelMaker负责创建模型具体操作,也将模型与DB联系起来,参数connection是一个数据库的连接对象

 

       Model defModel = null;

       if(connection.containsModel("militaryDB"))//判断名为militaryDB的模型是否已经存在数据

       {

            defModel = maker.openModel("militaryDB",true);//数据存在则打开此模型

            System.out.println("打开已存在的模型"); 

       }

       else

       {       

           defModel = maker.createModel("militaryDB");//数据不存在则创建此模型

           System.out.println("创建一个新模型");

       }

       OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM);

       OntModel DBModel = ModelFactory.createOntologyModel(spec, defModel);

       //将临时模型转换成本体模型(OWL格式),其中spec参数表示该模型是在内存中存在的。

   

       FileInputStream read = null;//定义并初始化文件输入流变量read

       try        

       {

            File file = new File("g:/毕业设计/软件/本体实例/Ontology1428926241032/Ontology1428926241032.owl");

           read = new FileInputStream(file);//读入OWL本体文件

       }

       catch (FileNotFoundException e)//抓取读入文件异常

       {

            e.printStackTrace();

           System.out.println("未找到要存储的本体文件,请检查文件地址及名称");

       }

       System.out.println("已将本体文件转换为字节流文件。");    

       InputStreamReader in = null;//定义并初始化输入流转换变量in

       try 

       {

            in = new InputStreamReader((FileInputStream)read, "UTF-8");//将字节流文件转换为UTF-8编码

       System.out.println("已将字节流文件转换为UTF-8编码。");   

       } 

       catch (UnsupportedEncodingException e)//抓取转换异常

       {

            e.printStackTrace();

           System.out.println("不支持上述字符集。");

       }

       defModel.read(in,null);//将流文件读入数据库模型

       defModel.commit();//将模型保存到数据库中

       System.out.println("数据转换执行完毕,已将本体文件存入数据库。");

       try 

       {

            in.close();

       System.out.println("已将字节流文件关闭。");  

       } 

       catch (IOException e)//抓取输入输出异常

       {

            e.printStackTrace();

           System.out.println("无法关闭字节流文件。");

       }        

       try

       {

            connection.close();//关闭连接

            System.out.println("已将连接关闭。");

       } 

       catch (SQLException e)

       {

            e.printStackTrace();

           System.out.println("连接无法关闭。");

       }

    } 

    catch (RDFRDBException e)

    {

       System.out.println("出现异常");

    }

    System.out.println("已将本体文件持久化到数据库中,无异常");

 }

}

 

 

执行程序之后,本体被存入MySQL数据库中。数据库会生成以下几张表:

    jena_g1t0_reif    存储经过处理的本体数据

    jena_g1t1_stmt   存储了本体的数据信息

    jena_graph       存储每一个用户图的名字和唯一标志符

    jena_long_lit     存储陈述表中不便于直接存储的长字符创常量

jena_long_uri     存储陈述表中不便于直接存储的长资源URI

    jena_prefix       存储URI的前缀。前缀只存储一次,节省空间

    jena_sys_stmt    存储了本体的元数据信息

主要数据存在两个表中。

1)    military_ontology.jena_g1t1_stmt 存储了本体的数据信息

2)    military_ontology.jena_sys_stmt 存储了本体的元数据信息

  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值