实践篇(2):关系数据库到RDF

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012052268/article/details/89553244

image

简介

在上一文章中我们定义了本体结构、并且把数据保存在mysql中,其ER图如下:
image

为了把RDB(关系型数据库)转换成RDF(三元组形式),同时把RDB中数据映射到我们定义的本体上面一一对应。

我们使用D2RQ工具将RDB数据转换到RDF形式。

D2RQ有一个比较方便的地方,可以根据已定义的数据库自动生成预定义的mapping文件,用户可以在mapping文件上修改,把数据映射到自己的本体上。

D2RQ 的框架如下图所示:

image

1. D2RQ下载安装

d2rq的下载,查看如下官方网站:http://d2rq.org/

image

2. D2RQ安装

下载到喜欢的地方,解压即可算是安装,我的是解压到了D:\Programming\d2rq-0.8.1

3. D2RQ的使用

3.1 D2RQ使用第一步:生成mapping

  1. D2RQ使用第一步:生成mapping文件:

下载D2RQ,进入其目录,运行下面的命令根据我们的mysql数据库生成的默认mapping文件(当前文件夹下):

generate-mapping -u root -p root -o Hr_HG_QA_mapping.ttl jdbc:mysql:///hr_kg_qa_db

参数解读:root是mysql的用户名,没有密码则不输入,-o指定输出文件路径及名称,jdbc:mysql:///kg_demo_movie 指定我们要映射的数据库。

3.2 D2RQ使用第二步:修改mapping文件

  1. D2RQ使用第二步:修改mapping文件

将mapping文件中的数据列名 对应到 我们设计的本体文件中。修改规则如下

  • 首先,为了表达简练,我们给本体的IRI设置一个前缀。
@prefix: <http://www.hr_kg_qa.com#> .
  • 将数据库自动生成的id和label属性删除,因为我们不需要这两个属性。
  • vocab 这个我们不用,因此删除开头和正文中带有 vocab 的部分。
  • 把默认的映射词汇改为我们本体.owl中的词汇即可:修改类型值,将vocab:xxxx修改为我们owl文件中定义的属性。例如将d2rq:class vocab: Leave;修改为d2rq:class :Leave;(千万别忘记删除属性第三行的vocab)
  • 将连接表(连接两个实体关系的表)属性从类d2rq:ClassMap改为属性d2rq:PropertyBridge 。在处理外键的时候要注意当前编辑的属性的domain和range,belongsToClassMap是domain,refersToClassMap是range。
#这个例子是 外键 是自己表的主键, 该表必须与自身相连。需要用到d2rq:alias 声明自己

map:leave_LeaveTogetherWith a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:leave;
	d2rq:property :LeaveTogetherWith;
	d2rq:refersToClassMap map:leave;
	d2rq:join "leave.LeaveTogetherWith => LeaveTogetherWith.id";
	d2rq:alias "leave AS LeaveTogetherWith";
	.

更多规则可参考:http://link.zhihu.com/?target=http%3A//d2rq.org/d2rq-language

3.3 D2RQ使用第三步:生成RDF文件

  1. D2RQ使用第三步 根据修改后的mapping文件生成RDF

使用下面的命令将我们的数据转为RDF:

在D2RQ目录右键 shift -> 在此处打开命令窗口。运行以下命令,则在当前文件夹内生成 三原则文件:“Hr_HG_QA.nt ”

dump-rdf.bat -o Hr_HG_QA.nt Hr_HG_QA_mapping.ttl

参数解读:.nt 这是rdf的一种保存格式

命令将数据转换为Ntriples。这一步比较慢,如果sql中的数据很多,则生成的文件也比较大,因此要做好预留空间。

猜你喜欢

转载自blog.csdn.net/u012052268/article/details/89553244