【知识图谱】04RDF数据生成(使用D2RQ)

目录

1、生成TTL文件

2、修正TTL文件

2.1、删除 prefix vocab

2.2、增加主键描述:

2.3、删除冗余描述

2.4、修改属性描述值

2.5、修改关联表单属性值

2.6、修改后预览


生成RDF使用了D2RQ,安装配置见链接:

https://blog.csdn.net/shankezh/article/details/115013272

----------------------------------------------------------------------

1、生成TTL文件

使用如下命令:

C:\Program Files\d2rq-0.8.1>generate-mapping -u root -p .root -o kg_movie_map.ttl jdbc:mysql:///kg_movie

其中参数:

-u -p 是数据库的用户名和密码

-o 指输出文件,文件名称为kg_movie_map.ttl

jdbc:mysql:///kg_movie 实际写为  jdbc:mysql:/localhost//kg_movie ,因为localhost可以省略,所以是三个斜杠,kg_movie指的是数据库table名称。

 

2、修正TTL文件

主要涉及增加主键,删除冗余描述,修改属性

2.1、删除 prefix vocab

如下图红框内整行删除。

2.2、增加主键描述:

@prefix : <http://www.kg_movie.com#> .

如下图红框:

2.3、删除冗余描述

先删除vocab,操作如下图:

actor,movie,genre三个类都会生成xx_albel 和 xx_xx_id ,全部删除,如actor删除下图两个红框,同理,自行删除movie和genre的对应内容,这里删除的属于冗余描述,不影响后续:

2.4、修改属性描述值

ttl文件中,对于属性的描述值,修正为数据库字段的描述,这样也同时和我们使用protege设计的owl文件对应上了,如下图,同理自行修改movie和genre的属性值:

2.5、修改关联表单属性值

关联表单指的是actor_to_movie 和 movie_to_genre这两张,这里我们要印刷我们当初在protege设计的hasActedIn和hasGenre,修改如下:

很好理解,属于actor类别,hasActednIn,结果映射为movie类型,主谓宾齐全,至于为什么要把actor_to_movie改为hasActedIn,不改也行,但用的时候就得用actor_to_movie来做宾语了,这样就不和我们设计protege一致了。

同理修改另一张表的,如下:

2.6、修改后预览

修改后的kg_movie.ttl文件内容全文如下:

@prefix map: <#> .
@prefix db: <> .
@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.kg_movie.com#> .

map:database a d2rq:Database;
	d2rq:jdbcDriver "com.mysql.jdbc.Driver";
	d2rq:jdbcDSN "jdbc:mysql:///kg_movie";
	d2rq:username "root";
	d2rq:password ".root";
	jdbc:autoReconnect "true";
	jdbc:zeroDateTimeBehavior "convertToNull";
	.

# Table actor
map:actor a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "actor/@@actor.actor_id@@";
	d2rq:class :actor;
	d2rq:classDefinitionLabel "actor";
	.

map:actor_actor_bio a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_bio;
	d2rq:propertyDefinitionLabel "actor actor_bio";
	d2rq:column "actor.actor_bio";
	.
map:actor_actor_chName a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_chName;
	d2rq:propertyDefinitionLabel "actor actor_chName";
	d2rq:column "actor.actor_chName";
	.
map:actor_actor_foreName a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_foreName;
	d2rq:propertyDefinitionLabel "actor actor_foreName";
	d2rq:column "actor.actor_foreName";
	.
map:actor_actor_nationality a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_nationality;
	d2rq:propertyDefinitionLabel "actor actor_nationality";
	d2rq:column "actor.actor_nationality";
	.
map:actor_actor_constellation a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_constellation;
	d2rq:propertyDefinitionLabel "actor actor_constellation";
	d2rq:column "actor.actor_constellation";
	.
map:actor_actor_birthplace a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_birthplace;
	d2rq:propertyDefinitionLabel "actor actor_birthplace";
	d2rq:column "actor.actor_birthplace";
	.
map:actor_actor_birthday a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_birthday;
	d2rq:propertyDefinitionLabel "actor actor_birthday";
	d2rq:column "actor.actor_birthday";
	.
map:actor_actor_repWorks a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_repWorks;
	d2rq:propertyDefinitionLabel "actor actor_repWorks";
	d2rq:column "actor.actor_repWorks";
	.
map:actor_actor_achiem a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_achiem;
	d2rq:propertyDefinitionLabel "actor actor_achiem";
	d2rq:column "actor.actor_achiem";
	.
map:actor_actor_brokerage a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :actor_brokerage;
	d2rq:propertyDefinitionLabel "actor actor_brokerage";
	d2rq:column "actor.actor_brokerage";
	.

# Table actor_to_movie (n:m)
map:actor_to_movie__link a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:actor;
	d2rq:property :hasActedIn;
	d2rq:refersToClassMap map:movie;
	d2rq:join "actor_to_movie.actor_id => actor.actor_id";
	d2rq:join "actor_to_movie.movie_id => movie.movie_id";
	.

# Table genre
map:genre a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "genre/@@genre.genre_id@@";
	d2rq:class :genre;
	d2rq:classDefinitionLabel "genre";
	.

map:genre_genre_name a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:genre;
	d2rq:property :genre_name;
	d2rq:propertyDefinitionLabel "genre genre_name";
	d2rq:column "genre.genre_name";
	.

# Table movie
map:movie a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "movie/@@movie.movie_id@@";
	d2rq:class :movie;
	d2rq:classDefinitionLabel "movie";
	.

map:movie_movie_bio a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_bio;
	d2rq:propertyDefinitionLabel "movie movie_bio";
	d2rq:column "movie.movie_bio";
	.
map:movie_movie_chName a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_chName;
	d2rq:propertyDefinitionLabel "movie movie_chName";
	d2rq:column "movie.movie_chName";
	.
map:movie_movie_foreName a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_foreName;
	d2rq:propertyDefinitionLabel "movie movie_foreName";
	d2rq:column "movie.movie_foreName";
	.
map:movie_movie_prodTime a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_prodTime;
	d2rq:propertyDefinitionLabel "movie movie_prodTime";
	d2rq:column "movie.movie_prodTime";
	.
map:movie_movie_prodCompany a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_prodCompany;
	d2rq:propertyDefinitionLabel "movie movie_prodCompany";
	d2rq:column "movie.movie_prodCompany";
	.
map:movie_movie_director a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_director;
	d2rq:propertyDefinitionLabel "movie movie_director";
	d2rq:column "movie.movie_director";
	.
map:movie_movie_screenwriter a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_screenwriter;
	d2rq:propertyDefinitionLabel "movie movie_screenwriter";
	d2rq:column "movie.movie_screenwriter";
	.
map:movie_movie_genre a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_genre;
	d2rq:propertyDefinitionLabel "movie movie_genre";
	d2rq:column "movie.movie_genre";
	.
map:movie_movie_star a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_star;
	d2rq:propertyDefinitionLabel "movie movie_star";
	d2rq:column "movie.movie_star";
	.
map:movie_movie_length a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_length;
	d2rq:propertyDefinitionLabel "movie movie_length";
	d2rq:column "movie.movie_length";
	.
map:movie_movie_releaseTime a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_releaseTime;
	d2rq:propertyDefinitionLabel "movie movie_releaseTime";
	d2rq:column "movie.movie_releaseTime";
	.
map:movie_movie_language a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_language;
	d2rq:propertyDefinitionLabel "movie movie_language";
	d2rq:column "movie.movie_language";
	.
map:movie_movie_achiem a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :movie_achiem;
	d2rq:propertyDefinitionLabel "movie movie_achiem";
	d2rq:column "movie.movie_achiem";
	.

# Table movie_to_genre (n:m)
map:movie_to_genre__link a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:movie;
	d2rq:property :hasGenre;
	d2rq:refersToClassMap map:genre;
	d2rq:join "movie_to_genre.movie_id => movie.movie_id";
	d2rq:join "movie_to_genre.genre_id => genre.genre_id";
	.

本篇内容完成。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值