OWL本体文件如何存储到数据库

 我来答
huanglenzhi
2017-12-07 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517184
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部

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

Eclipse

MySQL Server 5.5-win32

jena2.6.4

protege4.3

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

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包

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 存储了本体的元数据信息

追问
我想问下,本体元数据和本体数据的区别在哪?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式