目录
生成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";
.
本篇内容完成。