使用D2RQ转换关系型数据库Mysql数据为RDF

目录

背景

1.安装D2RQ

1.1 简介

1.2 下载安装

1.3 配置mysql连接

2.转换为RDF

2.1 将mysql映射到mapping上

2.2 将Mysql数据转为RDF


背景

知识图谱数据的来源主要有三个:结构化数据、半结构化数据和非结构化的数据。这里所使用的电影数据就是结构化的数据。半结构化的数据指的是数据有一定的组织形式,但较结构化数据而言更松散(属性名和属性值具有多样性,比如“生日”就有“出生日期”、“诞辰”等多种表达方式)。

W3C的RDB2RDF工作小组制定了两个标准,用于将关系型数据库的数据转换为RDF格式的数据。

第一个标准是direct mapping,即直接映射。

另外一个标准是R2RML,可以让用户更灵活的编辑和设置映射规则。 

这里先记录一下,后续有时间再详细了解。

为了创建知识图谱的应用知识问答项目,把mysql数据库的内容以RDF的形式转化出来,上传到Fuseki数据库中,在这里进行记录主要记录如何用d2rq这个工具把mysql的数据转为RDF。

1.安装D2RQ

1.1 简介

Accessing Relational Databases as Virtual RDF Graphs--D2RQ的官方介绍。

D2RQ平台是一个能够把关系数据库当作虚拟的、只读的RDF图来访问的一个平台。它提供了基于RDF的访问模式,但不需要把数据以RDF的形式存储。以虚拟RDF图的方式访问关系数据库是其最主要的一个特性。它的机理就是通过mapping文件,把对RDF的查询等操作翻译成SQL语句,最终在RDB上实现对应操作。在做知识图谱项目的时候,我们可以灵活地选择数据访问方式。当对外提供服务,查询操作比较频繁的情况下,最好是将RDB的数据直接转为RDF,会节省很多SPARQL到SQL的转换时间。
使用D2RQ,你可以:

  • 使用SPARQL查询非RDF数据库
  • 把数据库的内容当作链接来访问
  • 把数据库的内容以RDF的形式转化出来
  • 使用Apache Jena API 访问非RDF数据库

D2RQ支持的数据库有MySQL、Oracle、PostgreSQL、SQL Server、HSQLDB、Interbase/Firebird。也支持其他某些数据库,但可能会有限制。请参考数据库兼容性说明(Accessing Relational Databases as Virtual RDF Graphs)。

1.2 下载安装

进入官网:http://d2rq.org/下载安装包,解压即安装。

D2RQ下载
D2RQ下载
D2RQ下载
D2RQ解压安装

也可以下载最新release进行安装,Github地址:https://github.com/d2rq/d2rq

1.3 配置mysql连接

将mysql-connector-java-5.1.44-bin的jar文件放入d2rq的/lib文件夹中

进入sun官网找到MySQL Community Downloads社区下载,选择Connector/J,进入Archives存档版本,选择你想要的版本,我选择了5.1.44版本,也可以直接复制https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.44.zip下载。

解压mysql-connector-java-5.1.44.zip后,将mysql-connector-java-5.1.44-bin.jar放入d2rq的/lib文件夹中。

2.转换为RDF

在本地MySQL数据库中新建一个database,里面table是你要转换的数据。注意每个table的column中要指定一个primary key主键,作为。

2.1 将mysql映射到mapping上

连接数据库,把数据导出到ttl文件中。执行下列命令后在D2RQ目录下会生成ttl文件,如下图所示。

.\generate-mapping -o temp_mapping.ttl -u root -p root jdbc:mysql://localhost:/mydb

-u root 是数据库的登录名
-p root 是登录密码,没有密码则不输入
-o temp_mapping.ttl 是映射文件的名称,指定输出文件路径及名称
jdbc:mysql:///mydb 指定数据库的名称,指定我们要映射的数据库 
?useSSL=false 避免提示警告
该命令的其他参数及使用方式请参考文档。 

映射mysql,生成ttl文件
映射mysql,生成ttl文件

 

  • 可以进行网页端口访问

    d2r-server temp_mapping.ttl
    网页端口访问
    运行D2RQ
网页端口访问
网页端口访问
  • 修改mapping文件

根据mysql数据库生成的默认mapping文件进行修改:

先是数据库的映射,然后是类型的映射(也就是资源类型),接下来就是在资源和属性值之间搭一个桥梁propertyBridge。

映射文件的理解,详见官方文档The D2RQ Mapping Language

@prefix map: <#> .
@prefix db: <> .
#@prefix vocab: <vocab/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .
@prefix jdbc: <http://d2rq.org/terms/jdbc/> .

@prefix : <http://www.kgdemo.com#> .  #设置一个前缀

# 整个映射的主要模式: 把每个表映射成一个类;每一行是一个资源;每一列就是资源的属性。
map:database a d2rq:Database;  # 把数据库名映射为Database
    d2rq:jdbcDriver "com.mysql.jdbc.Driver";
    d2rq:jdbcDSN "jdbc:mysql://localhost/police";
    d2rq:username "root";
    d2rq:password "bitnet";
    jdbc:autoReconnect "true";
    jdbc:zeroDateTimeBehavior "convertToNull";
    .

# Table mysql_tab 建立mysql_tab表的映射
map:mysql_tab a d2rq:ClassMap; # 每个表都是一个ClassMap
    d2rq:dataStorage map:database; # 指明来自哪个数据库

    # uriPattern 这个是对资源的标识,'@@'前面可以自己修改,默认是ttl文件存储位置。'@@' 之间是表示取标识串里面的值,也就是会取数据库表对应的值。'urlify' 表示自动采用urlencode编码,而且会把空格转化为_。
    # d2rq:uriPattern "mysql_tab/@@mysql_tab.WFXYRBH|urlify@@";
    d2rq:uriPattern "http://www.kgdemo.com/@@mysql_tab.WFXYRBH|urlify@@";
    # d2rq:class vocab:mysql_tab;
    d2rq:class :mysql_tab;  # 指明资源的类型,对应rdf:type
    d2rq:classDefinitionLabel "mysql_tab";  # 指明类型定义的标签,对应与rdfs:label
    .

# 定义每一个资源标签的属性
map:mysql_tab__label a d2rq:PropertyBridge;
    d2rq:belongsToClassMap map:mysql_tab;
    d2rq:property rdfs:label;
    d2rq:pattern "mysql_tab #@@mysql_tab.WFXYRBH@@"; # 标签的模式
    .

# 属性值的映射
map:mysql_tab_WFXYRBH a d2rq:PropertyBridge; # 指明是一个属性
    d2rq:belongsToClassMap map:mysql_tab; # 指明属于哪个类别的
    # d2rq:property vocab:mysql_tab_WFXYRBH;
    d2rq:property :mysql_tab_WFXYRBH;  # 指明属性的标识名字
    d2rq:propertyDefinitionLabel "mysql_tab WFXYRBH"; # 属性标签
    d2rq:column "mysql_tab.WFXYRBH"; # 指定属性的值,注意一定要用双引号表示取其中的值

map:mysql_tab_NAME a d2rq:PropertyBridge;
    d2rq:belongsToClassMap map:mysql_tab;
    # d2rq:property vocab:mysql_tab_NAME;
    d2rq:property :mysql_tab_NAME;
    d2rq:propertyDefinitionLabel "mysql_tab NAME";
    d2rq:column "mysql_tab.NAME";

2.2 将Mysql数据转为RDF

dump-rdf.bat -o temp_rdf.nt temp_mapping.ttl

temp_mapping.ttl是修改后的mapping文件。其支持导出的RDF格式有"TURTLE", "RDF/XML", "RDF/XML-ABBREV", "N3",和"N-TRIPLE"。其中,"N-TRIPLE"是默认的输出格式。

例子:以turtle格式转换为nt文件。
./dump-rdf -f TURTLE -o dump.nt mydb.ttl

把数据库的内容以rdf的形式转化出来
把数据库的内容以rdf的形式转化出来

 temp_rdf.nt部分内容所下所示:

<http://www.kgdemo.com/X410700481708201408000001> <http://www.kgdemo.com#mysql_tab_NAME> "\u90D1\u798F\u5B89" .
<http://www.kgdemo.com/X410700480L07201510000001> <http://www.kgdemo.com#mysql_tab_NAME> "\u738B\u660E\u78CA" .

学习:https://zhuanlan.zhihu.com/p/32552993

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值