如何在数据库中存储OWL本体文件
黯然失色
MySQL?服务器?5.5-win32
jena2.6.4
保护4.3
MySQL-connector-Java-5.1.35(MySQL的JDBC)
1.?用MySQL创建数据库:Create?数据库?军事_本体;
2.?打开Eclipse并创建一个名为military_ontology的新Java项目。(文件-新建-Java?项目,输入名称military_ontology,然后单击下一步)
3.?新建项目时,分别导入MySQL的Jena包和JDBC。(单击库-单击添加?外在?罐子,全部加。jar文件分别在JDBC和耶拿,C:\Program?Files\MySQL\MySQL?连接器?j和G:\Jena\lib目录,点击完成)
4.?创建一个新的Java文件(New-Class ),命名为military _ ontology.java在project military_ontology\src\目录下;
5.?开始在military_ontology.java中编写以下代码:
包裹?军事_本体;
进口?Java . io . *;//导入IO包的所有类。
进口?Java . SQL . SQL exception;//导入SQL相关异常处理包
进口?com . HP . HPL . jena . db . *;//导入jena链接数据库的包
进口?com . HP . HPL . jena . rdf . model . *;//导入jena关于模型的包
进口?com . HP . HPL . jena . ontology . ont model;//导入OntModel包
进口?com . HP . HPL . jena . ontology . ontmodelspec;//导入OntModelSpec包
模特?defModel?=?null
如果(连接。contains model(" militaryDB "))//确定名为military db的模型是否已经有数据。
{
defModel?=?maker.openModel("militaryDB ",true);//如果数据存在,则打开此模型。
System.out.println("打开现有模型");?
}
其他
{ ?
defModel?=?maker . create model(" military db ");//如果数据不存在,则创建此模型。
System.out.println("创建新模型");
}
OntModelSpec?规格?=?新的?OntModelSpec(OntModelSpec。猫头鹰_ MEM);
OntModel?DBModel?=?model factory . createontologymodel(规格,?def model);
//将临时模型转换为本体模型(OWL格式),其中spec参数表示模型存在于内存中。
FileInputStream?读书?=?null//定义并初始化文件输入流变量read
尝试
{
文件?文件?=?新的?文件(" g:/毕业设计/软件/本体实例/本体1428926241032/本体1428926241032。猫头鹰”);
读书?=?新的?FileInputStream(文件);//读取OWL本体文件
}
接住?(FileNotFoundException?E)//抓取读入文件时出现异常
{
e . printstacktrace();
System.out.println("没有找到要存储的本体文件,请检查文件地址和名称");
}
System.out.println("本体文件已经转换成字节流文件。");
InputStreamReader?在?=?null//在中定义并初始化输入流转换变量
试试?
{
在?=?新的?InputStreamReader((file inputstream)read,?“UTF-8”);//将字节流文件转换为UTF 8编码
System.out.println("字节流文件已转换为UTF-8编码。");?
}?
接住?(UnsupportedEncodingException?E)//抓取转换异常
{
e . printstacktrace();
不支持上述字符集。);
}
defModel.read(in,null);//将流文件读入数据库模型
def model . commit();//将模型保存到数据库。
System.out.println("数据转换完成,本体文件已经存储在数据库中。");
试试?
{
in . close();
System.out.println("字节流文件已关闭。");?
}?
接住?(IOException?E)//抓取输入输出异常。
{
e . printstacktrace();
System.out.println("无法关闭字节流文件。");
}
尝试
{
connection . close();//关闭连接
System.out.println("连接已关闭。");
}?
接住?(SQLException?e)
{
e . printstacktrace();
System.out.println("无法关闭连接。");
}
}?
接住?(RDFRDBException?e)
{
System.out.println("发生异常");
}
System.out.println("本体文件已经无异常持久化到数据库");
}
}
执行程序后,本体存储在MySQL数据库中。数据库将生成以下表格:
Jena_g1t0_reif存储处理后的本体数据。
Jena_g1t1_stmt存储本体的数据信息。
Jena_graph存储每个用户图的名称和唯一标识符。
耶拿_龙_利特?将不方便直接存储的长字符常量存储在语句表中。
jena_long_uri?将不便于直接存储的长资源URIs存储在语句表中。
Jena_prefix存储URI的前缀。前缀只存储一次,节省了空间。
Jena_sys_stmt存储本体的元数据信息。
主要数据存在于两个表中。
1)军事_本体. jena_g1t1_stmt?存储本体的数据信息。
2)military _ ontology . jena _ sys _ stmt?存储本体的元数据信息。