`
hdxiong
  • 浏览: 375291 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Jena将本体存入MySQL

阅读更多
使用Jena将本体存入MySQL——文档和例子
iMarine http://iMarine.blog.163.com
注明:本文档参考Jena 2.5文档,使用Jena 2.5 API和MySQL 5.0.4-beta-nt数据库。MySQL驱动包使用的是mysql-connector-java-
3.1.10-bin.jar。
1 Jena的数据库接口
Jena提供了将RDF数据存入关系数据库的接口,Model、Resource、Query等接口可以用于访问和维护数据库里的RDF数据。在处理数据
时,应用程序不必直接操作数据库(而是通过Jena的API),也不必知道数据库的模式。
Jena提供了支持MySQL、HSQLDB、PostgreSQ、Oracle和Microsoft SQL Server的程序接口。有些第三方提供其他数据库接口的支持。
可以参考Jena数据库文档获得数据库版本以及对应的JDBC驱动说明。
2 Jena的数据库模式
关系数据库存储RDF数据的一般模式是“三元组”,表有三列(主体、谓词、客体)每个RDF陈述(sataement)占用一行。有时候,
添加第四列以表示客体是字符常量还是URI。
Jena 2采用一种denormalized的三元组存储方法,是存储空间和访问时间的一种权衡方法(a space-time trade-off)。Jena使用两
类七个表存储本体,第一类是asserted statements,第二类reified statements。
Statement Tables 陈述表
1)         Asserted Statement Table (Jena_GiTj_Stmt):存储本体数据
2)         Reified Statement Table (Jena_GiTj_Reif):经过处理的本体数据
System Tables 系统表:存储元数据和陈述表中使用的较长的文字或者资源
3)         System Statement Table (Jena_Sys_Stmt):存储系统元数据
4)         Long Literals Table (Jena_Long_Lit):存储陈述表中不便于直接存储的长字符创常量(Literals)
5)         Long Resources Table (Jena_Long_URI):存储陈述表中不便于直接存储的长资源URI
6)         Prefixes Table (Jena_Prefix):存储URI的前缀。前缀只存储一次,节省空间。
7)         Graph Table (Jena_Graph):存储每一个用户图的名字和唯一标志符。
8)         Lock Table (Jena_Mutex):一个没有内容的表。如果该表存在,在一定时间段里数据库被锁定。
可以参照\\Jena-2.5\doc\DB\layout.html获取各个表的详细信息。
3 创建本体的持久模型
Jena同时支持内存模型和数据库模型。一般来讲,创建内存模型只需要调用Jena的一些接口,但创建数据库模型,或者打开先前创建
的模型,要求一些具体的步骤。
任何数据库的持久模型通过以下步骤创建:
1)         加载数据库JDBC驱动
2)         创建数据库连接
3)         为数据库创建一个ModelMaker
4)         为本体创建一个模型
4 将本体存入MySQL
使用Jena将本体出入MySQL中的OntoDatabase数据库。完整代码如下:
/** 将本体存入MySQL **/
import java.io.*;
import java.sql.SQLException;
import com.hp.hpl.jena.db.*;
import com.hp.hpl.jena.rdf.model.*;
 
public class Onto2Database{
     
     public static final String strDriver = "com.mysql.jdbc.Driver"; //path of driver class
     public static final String strURL = "jdbc:mysql://localhost/OntoDB"; // URL of database
     public static final String strUser = "root"; //database user id
     public static final String strPassWord = "onto"; //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("Driver is not available...");
              }
              
            // 使用数据库连接参数创建一个模型制造器
              ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
              
              // 创建一个默认模型,命名为 MyOntology
              Model defModel = maker.createModel("MyOntology");
 
              // 准备需要存入数据库的本体文件,建立输入文件流
              FileInputStream inputSreamfile = null;
              try {
                   File file = newFile("G:\\eclipse\\workspace.thesis\\data\\MyOntology.owl");
                   inputSreamfile = new FileInputStream(file);
              } catch (FileNotFoundException e) {
                   e.printStackTrace();
                   System.out.println("Ontology File is not available...");
              }
              
              InputStreamReader in = null;
              try {
                   in = new InputStreamReader(inputSreamfile,"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...");
         }
     }
} // 代码结束

5 查看数据库中的本体
    执行程序之后,本体被存入MySQL数据库中。主要数据存在两个表中。
1)    ontodatabase.jena_g1t1_stmt 存储了本体的数据信息
2)    ontodatabase.jena_sys_stmt 存储了本体的元数据信息
可以通过命令行查看或者使用MySQL GUI客户端工具查看。建议使用后者。


链接:以下是关于语义网和本体论的经典论文【英文】
http://sxzx.360doc.com/content/080416/11/23378_1193793.html
分享到:
评论

相关推荐

    用Jena将本体文件存入MySQL数据库的实现方法

    总结来说,将本体文件存入MySQL数据库,需要正确配置Jena、数据库和Java环境,解决版本兼容性问题,以及使用Jena API进行模型的创建、加载和操作。这个过程虽然可能遇到挑战,但通过理解这些基本步骤和调试技巧,...

    基于Jena的本体推理示例

    在这个“基于Jena的本体推理示例”中,我们将深入探讨如何使用Jena库进行本体推理,并通过SPARQL查询语言来操作本体。 首先,我们需要了解Jena的基本用法。Jena提供了一系列API,使得开发者能够轻松地创建、加载和...

    jena操作本体的小例子

    2. **构建本体**:使用Jena将这些信息构建成一个本体模型,定义实体之间的关系。 3. **定义查询**:编写SPARQL查询语句,用于检索特定类型的关系。 4. **结果展示**:将查询结果以合适的形式展示给用户,比如生成...

    JENA教程(包括生成RDF和写本体到MySQL中)

    JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体...

    Jena本体推理实例

    1. **加载本体模型**:首先,我们需要使用Jena API加载包含本体定义的OWL文件,创建一个模型对象。这个模型包含了关于实体、类、属性和约束的元数据。 2. **创建推理模型**:Jena提供了`InfModel`接口,它是一个...

    Jena对本体操作综合笔记

    ### Jena对本体操作综合知识点详解 #### Jena框架概览 Jena是一个功能强大的Java工具包,专为语义网技术的程序开发而设计。其核心特性包括: 1. **RDF处理**:支持以RDF/XML、三元组形式读写RDF数据,便于构建和...

    基于Jena的本体构建方法研究.pdf

    通过使用Jena平台提供的工具和技术,成功地构建了一个完整的本体,并验证了其在实际应用中的可行性和有效性。 #### 结论 本文提出了一种基于Jena的本体构建方法,通过五个步骤详细阐述了如何利用Jena平台有效地构建...

    Jena对本体的处理

    数据仓库课程上的报告,主要是关于本体的集成,使用到jena

    Jena本体推理详细实例.zip

    1. **加载本体模型**:使用`OntModelSpec`配置模型,指定推理模型类型,如`OWL_MEM_RDFS_INF`,这将使用RDFS推理。然后,用`ModelFactory`加载本体模型。 2. **创建推理模型**:基于加载的本体模型创建一个`...

    Jena-API.rar_jena api_jena protege_owl_protege jena_本体

    本体,应用程序则是使用Jena来做同样的工作,当然这些应用程序还是得由我 们来编写。其实Protege本身也是在Jena的基础上开发的,你看如果Protege 的console里报异常的话,多半会和Jena有关。最近出了一个Protege OWL...

    Jena对本体推理的支持

    ### Jena对本体推理的支持 #### 概览 Jena 是一个强大的Java框架,用于构建语义网和链接数据的应用程序。它提供了一系列工具来处理RDF(资源描述框架)、RDFS(RDF Schema)以及OWL(Web Ontology Language)。...

    jena.dll,在、net中用jena操作本体的工具

    jena.dll,在、net中用jena操作本体的工具

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

    在这个过程中,我们将使用Jena框架和MySQL数据库来实现OWL本体文件的存储。 首先,我们需要安装必要的软件并配置好开发环境,包括Eclipse、MySQL Server 5.5、Jena 2.6.4和Protege 4.3。同时,我们也需要安装MySQL...

    运用Jena对本体模型进行推理及其应用

    ### 运用Jena对本体模型进行推理及其应用 ...通过结合使用本体语言OWL、本体编辑工具Protégé以及语义网系统开发工具Jena API,我们可以有效地进行本体模型的推理,进而挖掘出更多有用的信息,提升系统的智能化水平。

    jena本体的一个小程序

    本篇文章将围绕标题“jena本体的一个小程序”展开,深入探讨这个程序的核心概念和功能。 首先,我们要理解什么是本体。在语义网中,本体是一种形式化的、结构化的共享概念模型,用于描述一个领域的知识,使得计算机...

    Jena本体操纵类(1)——本体文件读取

    在"Jena本体操纵类(1)——本体文件读取"这个主题中,我们将深入探讨如何使用Jena库来读取和解析本体文件。 首先,Jena提供了OntModel接口,这是处理本体的核心。OntModel不仅可以存储本体信息,还能执行查询和推理...

Global site tag (gtag.js) - Google Analytics