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

对知识图谱有兴趣的读者可以关注我的知乎专栏,主要介绍知识图谱的相关概念、技术,也包含一些具体实践。上一篇文章介绍了我们所使用的数据。其实,知识图谱数据的来源主要有三个:结构化数据、半结构化数据和非结构化的数据。我们所使用的电影数据就是结构化的数据。半结构化的数据指的是数据有一定的组织形式,但较结构化数据而言更松散(属性名和属性值具有多样性,比如“生日”就有“出生日期”、“诞辰”等多种表达方式)
摘要由CSDN通过智能技术生成

对知识图谱有兴趣的读者可以关注我的知乎专栏,主要介绍知识图谱的相关概念、技术,也包含一些具体实践。

上一篇文章介绍了我们所使用的数据。其实,知识图谱数据的来源主要有三个:结构化数据、半结构化数据和非结构化的数据。我们所使用的电影数据就是结构化的数据。半结构化的数据指的是数据有一定的组织形式,但较结构化数据而言更松散(属性名和属性值具有多样性,比如“生日”就有“出生日期”、“诞辰”等多种表达方式),例如百度百科、维基百科、互动百科等;对infobox(下图红框)中的属性和属性值做一定处理后,我们就可以得到结构化的数据。非结构化数据通常是指我们看到的一切纯文本数据。

zhou_baike

本文首先介绍W3C的RDB2RDF工作小组制定的两个标准,用于将关系型数据库的数据转换为RDF格式的数据。然后介绍如何利用d2rq这个工具把我们Mysql中的数据转为RDF。

一、两个标准

第一个标准是direct mapping,即直接映射。何为直接映射?看过前面文章的读者心中应该有些猜测了(传送门:“知识图谱基础之RDF,RDFS与OWL”,请参考第二个部分第一段内容)。规则十分简单:
1. 数据库的表作为本体中的类(Class)。比如我们在mysql中保存的数据,一共有5张表。那么通过映射后,我们的本体就有5个类了,而不是我们自己定义的三个类。
2. 表的列作为属性(Property)。
3. 表的行作为实例/资源。
4. 表的单元格值为字面量
5. 如果单元格所在的列是外键,那么其值为IRI,或者说实体/资源。

在实际应用中我们很少用到这种方法,尽管它是最便捷的方式。详细的解释和示例,请参考W3C的官方文档

Direct mapping的缺点很明显,不能把数据库的数据映射到我们自己定义的本体上。RDB2RDF工作小组指定了另外一个标准——R2RML,可以让用户更灵活的编辑和设置映射规则。

我不打算在这里详细地讲解R2RML的具体语法和规则,读者可以自己参考W3C的官方文档。其实可以把它当做一个工具,用的时候再查文档即可,不用把所有的特性和语法都记下来,只需要知道它是什么,能干什么即可。为了让读者有个直观地认识,我们以mysql中的数据为例,介绍怎么把person这个表映射到我们在protege中定义的Person类上,person_name映射到personName上。

@prefix rr: <http://www.w3.org/ns/r2rml#>.
@prefix : <http://www.kgdemo.com#>.

<#TriplesMap1>
    rr:logicalTable [ rr:tableName "person" ];
    rr:subjectMap [
        rr:template "http://www.kgdemo.com/person/{person_id}";
        rr:class :Person;
    ];
    rr:predicateObjectMap [
        rr:predicate :personName;
        rr:objectMap [ rr:column "person_name" ];
    ].

rr:template指定实体/资源的IRI生成模板,括号中的字符串是对应表中的某个列名。在本例中指每个人物的IRI由我们预定义的前缀加人物ID组成。rr:Class声明这些实体/资源的类是我们在Ontology中定义的Person。rr:predicate指定谓语,即属性。rr:objectMap指定该属性的值是来源于哪一列。其他属性的定义类似,读者可以自己查文档尝试。关于外键的定义,读者也可以参考文档相关示例。

R2RML也支持SQL语句来对查询结果进行映射。比如,我们有一列表示某人的性别,我们可以用SQL语句选取男性的行,把这些行映射成我们定义的男性类。女性同理。这种特性大大增强了其灵活性。

下面我们介绍如何用d2rq这个工具把mysql的数据转为RDF。

二、D2RQ

D2RQ的官方介绍是:

Accessing Relational Databases
as Virtual RDF Graphs

没错,以虚拟RDF图的方式访问关系数据库是其最主要的一个特性。它的机理就是通过mapping文件,把对RDF的查询等操作翻译成SQL语句,最终在RDB上实现对应操作。在做知识图谱项目的时候,我们可以灵活地选择数据访问方式。当对外提供服务,查询操作比较频繁的情况下,最好是将RDB的数据直接转为RDF,会节省很多SPARQL到SQL的转换时间。

D2RQ提供了自己的mapping language,其形式和R2RML类似。D2RQ发布了r2rml-kit以支持W3C制定的两个映射标准。D2RQ有一个比较方便的地方,可以根据你的数据库自动生成预定义的mapping文件,用户可以在这个文件上修改,把数据映射到自己的本体上。就我们这个例子而言,数据关系比较简单,自己编辑R2RML文件或者在D2RQ生成的mapping文件上修改效率差不多。在数据关系很复杂的时候,我建议直接在D2RQ生成的mapping文件上修改,会节省很多时间。D2RQ的mapping language也很简洁,同样支持对SQL结果进行映射,其SQL是用condition关键词隐式地表达,不像R2RML是显式的SQL语句。更多的细节请参考官方文档。

下载D2RQ,进入其目录,运行下面的命令生成默认的mapping文件:

generate-mapping -u root -o kg_demo_movie_mapping.ttl jdbc:mysql:///kg_demo_movie

root是mysql的用户名,没有密码则不输入,-o指定输出文件路径及名称,jdbc:mysql:///kg_demo_movie 指定我们要映射的数据库。该命令的其他参数及使用方式请参考文档。

根据我们的mysql数据库生成的默认mapping文件:

@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/> .

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

# Table genre
map:genre a d2rq:ClassMap;
    d2rq:dataStorage map:database;
    d2rq:uriPattern "genre/@@genre.genre_id@@";
    d2rq:class vocab:genre;
    d2rq:classDefinitionLa
  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
关系型数据库转换为RDF(Resource Description Framework)的工具是一种用于将关系型数据库中的数据转换为RDF格式的软件工具。RDF是一种用于表示和存储数据的语义网标准,它的数据模型基于三元组(主题、谓词、对象)的描述方式。 关系型数据库转换为RDF的过程主要包括以下几个步骤: 1. 数据模式分析:分析关系型数据库的表结构、字段类型、主键、外键等信息,将其映射为RDF中的类和属性。 2. 数据抽取:从关系型数据库中抽取数据,并转换为RDF格式。可以根据需要选择将整张表转换为一个RDF图,或者将每条记录转换为一个RDF三元组。 3. 数据映射:将关系型数据库中的数据映射到RDF模型中。根据数据模式分析的结果,将表的字段映射为RDF中的属性,将表之间的关系映射为RDF中的关联关系。 4. 数据加载:将RDF数据导入到RDF存储系统中,例如基于图数据库的存储系统,以便进行查询和语义推理等操作。 目前市面上有一些开源和商业的关系型数据库转换为RDF的工具,例如D2RQ、Ontop、Oracle Spatial等。这些工具提供了图形界面或者命令行接口,用户可以通过配置映射规则和连接数据库等参数来进行关系型数据库转换为RDF的操作。另外,一些图数据库也提供了内置的关系型数据库转换为RDF的功能,简化了转换的过程。 总之,关系型数据库转换为RDF的工具可帮助用户将关系型数据库中的数据转换为RDF格式,从而更好地利用语义网的技术和工具来处理和分析数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值