D2R server关联数据发布.docx

上传人:b****9 文档编号:23321467 上传时间:2023-05-16 格式:DOCX 页数:20 大小:133.29KB
下载 相关 举报
D2R server关联数据发布.docx_第1页
第1页 / 共20页
D2R server关联数据发布.docx_第2页
第2页 / 共20页
D2R server关联数据发布.docx_第3页
第3页 / 共20页
D2R server关联数据发布.docx_第4页
第4页 / 共20页
D2R server关联数据发布.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

D2R server关联数据发布.docx

《D2R server关联数据发布.docx》由会员分享,可在线阅读,更多相关《D2R server关联数据发布.docx(20页珍藏版)》请在冰豆网上搜索。

D2R server关联数据发布.docx

D2Rserver关联数据发布

如何利用D2R发布Linkeddata

简介:

 Linkeddata作为semanticWeb的一个子话题,近年来逐渐得到学术界以及工业界的广泛重视。

Linkeddata这个词表示了一系列在Web上发布和关联结构化数据的最佳实践。

在用LinkedData构建的数据Web上,我们可以自由地从一片数据跳转到其它数据,比之现在的文档Web(从一个文档跳转到其他文档),数据Web提供的关联不但更加丰富,而且具有语义。

本文着重介绍目前比较流行的一种发布Linkeddata的工具D2R的使用方法,并以Academic领域的数据为例,展示怎么使用D2R工具构建Linkeddata,并提供简单的浏览功能。

本文希望给需要开发基于Linkeddata应用程序的程序员提供有价值的参考。

前言

Linkeddata最早是在2007年5月,由ChrisBizerandRichardCyganiak向W3CSWEO提交的一个项目申请LinkedOpenDataProject中提出来的。

Linkeddata提出的目的是构建一张计算机能理解的语义数据网络,而不仅仅是人能读懂的文档网络,以便于在此之上构建更智能的应用。

LinkedOpenDataProject的宗旨在于号召人们将现有数据发布成Linkeddata,并将不同数据源互联起来。

在过去的三年中,越来越多的数据提供者和Web应用开发者将他们各自的数据发布到Web上,并且与其它数据源关联在一起,形成一个巨大的数据Web。

截止2009年7月,已发布的Linkeddata规模为6.726.000.000个RDF三元组以及148.948.000个RDF关联关系,相比2007年5月的500millionRDF三元组以及120,000RDF关联关系,增涨非常迅速。

其数据领域涉及GeographicData,LifeSciences,Publications,UserGenerateContent,Media等等。

不仅仅是PublicWeb,随着企业2.0的到来,企业内部也迫切需要越来越多的数据与Web上的数据关联,从而构建更好的应用与服务。

而现有的数据,尤其是企业内部的数据,大多数存在于关系型数据库中,因此,本文挑选了一个目前应用较为广泛的工具D2R,介绍如何使用它将关系型数据库的数据发布成LinkedData。

什么是Linkeddata

简单来讲,Linkeddata即为一系列利用Web在不同数据源之间创建语义关联的最佳实践方法。

这里的不同数据源,可以来自一个组织内部的不同系统,也可以来自不同组织的不同系统,它们的内容,存储地点以及存储方式都可以完全不同,但它们很可能存在着关联,例如:

Amazon上图书可能与MySpace上的人之间可能存在关联,因为图书的作者有可能在Myspace上注册账号。

总之,Linkeddata最大的特点便是将不同的数据关联起来。

Linkeddata包含一些基本原则:

资源。

在发布一个领域的数据之前,我们需要确定要发布的资源是什么。

任何事物,只要你认为是有意义的,有被引用必要的,都可以称之为资源。

资源标识。

任何一个资源都用一个HTTPURI(UniformResourceIdentifiers)来标识。

之所有要用HTTPURI来标识,是希望数据能够通过HTTP协议访问,真正实现基于Web的访问与互联。

资源描述。

资源可以有多种描述,例如HTML,XML,RDF以及JPEG。

文档Web的文档主要通过HTML格式来表示,数据Web的数据主要通过 RDF格式(ResourceDescriptionFramework)来表示。

RDF将一个资源描述成一组三元组(主语,谓语,宾语)。

例如:

王老师教授英语课

(主语)(谓语)(宾语)

主语用来表示需要描述的资源,谓语用来表示主语的某个属性(例如:

姓名,出生日期)或者某个关系(例如,雇佣,认识,教授等),宾语表示了属性的值或者关系的值。

主语,谓语都需要要用HTTPURI来表示。

宾语可以用HTTPURI标识另一个资源,也可以是字符串表示的文本。

我们可以把主语看作是类资源,而将谓语看作是类资源的属性资源,宾语或者是类资源或者是文字型资源。

根据宾语的种类,可以将三元组分为两类:

文字型三元组以及非文字型三元组,第二种可以看作是类资源之间的关联。

什么是D2R

Linkeddata的优点虽然很突出,但要想发挥其作用,其前提是数据必须满足Linkeddata的基本原则。

然而实际上上大量已存在的数据并不满足这些原则,于是Linkeddata的推动者们便开发了一系列实用的工具,来帮助完成传统数据向Linkeddata的转换。

D2R便是其中一个非常流行的工具。

它的作用是一个将关系型数据库发布为Linkeddata。

D2R主要包括D2RServer,D2RQEngine以及D2RQMapping语言。

D2RServer是一个HTTPServer,它的主要功能提供对RDF数据的查询访问接口,以供上层的RDF浏览器、SPARQL查询客户端以及传统的HTML浏览器调用。

D2RQEngine的主要功能是使用一个可定制的D2RQMapping文件将关系型数据库中的数据换成RDF格式。

D2RQengine并没有将关系型数据库发布成真实的RDF数据,而是使用D2RQMapping文件将其映射成虚拟的RDF格式。

该文件的作用是在访问关系型数据时将RDF数据的查询语言SPARQL转换为RDB数据的查询语言SQL,并将SQL查询结果转换为RDF三元组或者SPARQL查询结果。

D2RQEngine是建立在 Jena(Jena是一个创建SemanticWeb应用的Java平台,它提供了基于RDF,SPARQL等的编程环境)的接口之上。

D2RQMapping语言的主要功能是定义将关系型数据转换成RDF格式的Mapping规则。

图1呈现了D2R的主体架构:

图1.D2R的主体构架

如何使用D2R

环境准备

在使用D2R之前,先要进行准备工作,即对D2R的环境进行下载和安装:

下载D2R的环境

下载与你目前使用的数据库版本相匹配的驱动,将其jar文件放在D2RServer的lib目录下面。

D2R目前已经详细测试过Oracle,MySQL,PostgreSQL,MicrosoftSQLServer。

其它数据库没有测试,但笔者尝试过IBMDB2,发现同样是支持的。

使用D2R可以对关系型数据库的数据进行两种方案的转化与访问。

第一种方案是将关系型数据库的数据转换为虚拟的RDF数据进行访问,分为两个步骤,第一步是生成Mapping文件,第二步是使用Mapping文件对关系型数据进行转换与访问。

我们可以通过D2Rserver访问关系型数据,或者通过在自己的Javaapplication中调用Jena/Seasame的API去访问数据。

第二种方案是直接将关系型数据库的数据包装成真实的RDF文件,以供一些可以访问RDFStore的接口访问。

由于一般来讲,数据库的数据规模都比较大,且内容经常发生变化,转换为虚拟的RDF数据空间复杂度会更低,更新内容更加容易,因此第一种方案的应用更加广泛。

我们在这里只介绍第一种方案,并分下述两个步骤进行介绍。

生成Mapppingfile

D2R提供了生成Mapping文件的执行脚本。

我们需要在命令行中进入您所下载的D2R所在的路径,执行下面的命令:

generate-Mapping[-uusername][-ppassword][-ddriverclass][-ooutfile.n3][-bbaseuri]jdbcURL

参数意义如下:

jdbcURL

JDBC链接数据库的URL

MySQL:

jdbc:

mysql:

//servername/databasename

PostgreSQL:

jdbc:

postgresql:

//servername/databasename

Oracle:

jdbc:

oracle:

thin:

@servername:

1521:

databasename

MicrosoftSQLServer:

jdbc:

sqlserver:

//servername;databaseName=databasename

(包含分号,使用时需要用引号引起来)

DB2:

jdbc:

db2:

//servername:

50000/databasename

-uusername

数据库用户登录名

-ppassword

数据库用户登录密码

-ddriverclass

数据库驱动类名

MySQL:

com.mysql.jdbc.Driver

PostgreSQL:

org.postgresql.Driver

Oracle:

oracle.jdbc.OracleDriver

MicrosoftSQLServer:

com.microsoft.sqlserver.jdbc.SQLServerDriver

DB2:

com.ibm.db2.jcc.DB2Driver

-ooutfile.n3

Mappingfile的输出文件,以n3为后缀

-bbaseuri

Baseuri作为词汇的命名空间,默认为 http:

//localhost:

2020/ 词汇的前缀按照 http:

// baseURI /vocab/resource/ 模式生成。

baseuri需要与server的uri相一致。

例如:

现在我准备一个关于Academic的数据库,其中包括1)从hompage上抽取的有关研究者的信息:

homepagePeople;2)从wikipedia上抽取的有关研究者的信息:

wikipediaPeople;3)从ACM页面上抽取的有关论文与作者的信息:

Paper,Author,Paper2Author。

数据库相关的schema如清单1所示:

清单1.Academic数据库Schema

CREATETABLEhomepagePeople(

peopleIDINTEGERNOTNULLGENERATEDALWAYSASIDENTITY,

namevarchar(100)NOTNULL,

emailvarchar(100),

organizationvarchar(100),

homepagevarchar(100),

phonevarchar(100),

positionvarchar(100),

PRIMARYKEY(peopleID)

);

CREATETABLEwikiPeople(

peopleIDINTEGERNOTNULLGENERATEDALWAYSASIDENTITY,

namevarchar(100)NOTNULL,

emailvarchar(100),

titlevarchar(100),

employervarchar(100),

educationvarchar(100),

occupationvarchar(100),

PRIMARYKEY(peopleID)

);

CREATETABLEpaper(

paperIDINTEGERNOTNULL,

titlevarchar(200)NOTNULL,

publishYearvarchar(200),

conferencevarchar(200),

PRIMARYKEY(paperID)

);

CREATETABLEauthor(

authorIDINTEGERNOTNULL,

namevarchar(200)NOTNULL,

emailvarchar(200),

organizationvarchar(200),

PRIMARYKEY(authorID)

);

CREATETABLEpaper2author(

paperIDINTEGERNOTNULL,

authorIDINTEGERNOTNULL,

PRIMARYKEY(authorID,paperID),

FOREIGNKEY(paperID)REFERENCESpaper(paperID)ONDELETECASCADE,

FOREIGNKEY(authorID)REFERENCESauthor(authorID)ONDELETECASCADE

);

 

执行下面命令便可以根据 Academic 的 Schema 生成一个 Mapping 文件存储在 Academic.n3 中 :

 generate-Mapping-oAcademic.n3-dcom.ibm.db2.jcc.DB2Driver-utest-ptestjdbc:

db2:

//localhost:

50000/Academic默认的Mapping文件非常简单,我们需要的一些数据关联可能没有提供。

之后会着重介绍一些利用Mapping语言自定制Mapping文件的实践方法。

使用Mapping文件对数据进行转化与访问

生成Mapping文件后,我们便希望通过Mapping文件对关系型数据库的数据进行转换和访问,这里有两种方式,一种是通过D2RServer自动调用D2RQEngine对数据进行转换访问,另一种在自己的Javaapplication中通过Jena/Seasame的API去使用D2RQEngine。

使用D2Rserver默认的数据处理和访问方式浏览Linkeddata。

该方法很简单,不需要自己写代码,只需要在命令行下面进入D2R所在文件路径,执行下面的命令启动D2RServer:

d2r-serverAcademic.n3

其中Academic.n3即为上一节中生成Mapping文件。

然后在Web浏览器中访问http:

//localhost:

2020,便可以默认的HTML浏览器、DF浏览器以及SPARQL查询端对我们的数据进行访问:

图2.D2RServer运行的入口页面

从图2中可以看出,虽然我们的schema一共有五个,但是D2RServer在显示时仅生成了四种类资源:

HomepagePeople,wikiPeople,paper,以及author(图2第一行),而是将paper2author看作是类资源author与Paper之间的关系。

其概念模型如下所示:

图3.Academic数据概念模型

点击图2第一行的Author,呈现出5个作者,如图4所示:

图4.点击Author的HTML显示结果

点击Author#2,得到Author#2的详细属性与关系。

如图5所示:

图5.访问类资源Author中标号为2的作者HTML显示结果

注意在这里,Paper2Atuhor被映射成了Author的一个关系属性,点击该关系关联的资源“

//localhost:

2020/resource/ZJ.PAPER/1>”,得到Paper#1的详细属性与关系,如图6所示:

图6.访问类资源Paper中标号为1的论文HTML显示结果

注意在浏览Paper的详细信息时,也可以通过反属性(isvocab:

Paper2Authorof)跳转到相关Author的详细信息。

点击图2中的类资源HomepagePeople,再点击1号资源,呈现出JamesA.Hendler的homepage详细信息,如图7所示:

图7.访问类资源HomepagePeople中标号为1的人HTML显示结果

点击图2中的类资源WikiPeople,再点击1号资源,呈现出JamesHendler的wikipedia详细信息,如图8所示:

图8.访问类资源WikiPeople中标号为1的人HTML显示结果

使用JenaAPI构建自己的应用

如果需要在RDF数据层上构建自己的应用,开发自己的客户端展示方法,就要用到第二种方式,即直接在自己的Java工程中通过Jena/Seasame的API去使用D2RQ,这里仅介绍Jena的使用方式,Seasame的使用留给读者自己去实践。

首先需要在你的工程中引用D2RQ与Jena相关的jar包:

将你下载的D2Rserver目录下的lib/d2rq-0.7.jar加入你工程的classpath;

下载 ARQ2.8.1,将其lib目录下的所有jar包加入你工程的classpath。

使用JenaAPI可以多种方式调用D2RQ,其中最简洁的方式为直接编写SPARQL查询语言,其余方式都需要调用Jena的封装类,如Resource,Property,RDFNode等,需要读者非常熟悉Jena的接口,并需要为自己的数据创建相应的Jena类对象,因此比较麻烦。

本文在此介绍最容易上手也是最灵活的访问方式,SPARQL查询。

假定我们现在需要构建一个应用,展示所有作者的name,email和paper,因此在server端需要提供一个查询类,如清单2所示:

清单2.使用JenaAPI的SPARQL查询

packagetest;

importcom.hp.hpl.jena.query.Query;

importcom.hp.hpl.jena.query.QueryExecutionFactory;

importcom.hp.hpl.jena.query.QueryFactory;

importcom.hp.hpl.jena.query.QuerySolution;

importcom.hp.hpl.jena.query.ResultSet;

importde.fuberlin.wiwiss.d2rq.ModelD2RQ;

publicclassAcademicTest{

publicvoidqueryBySPARQL(){

ModelD2RQm=newModelD2RQ("file:

/D:

/Academic.n3");

StringSPARQLPrefix="PREFIXvocab:

http:

//localhost:

2020/vocab/resource/";

StringSPARQL=SPARQLPrefix+

"SELECT?

name?

email?

paperWHERE{"+

"?

authorvocab:

Name?

name."+

"?

authorvocab:

Email?

email."+

"?

authorvocab:

Paper2Author?

paper.}";

Queryquery=QueryFactory.create(SPARQL);

ResultSetrs=QueryExecutionFactory.create(query,m).execSelect();

while(rs.hasNext()){

QuerySolutionrow=rs.nextSolution();

System.out.println("name:

"+row.get("name")+",email:

"+row.get("email")+",

paper:

"+row.get("paper"));

}

}

}

从清单2可以看出,用SPARQL查询数据的步骤如下:

创建D2RQmodel。

该步骤需要注意的是,创建model时需要指定Mapping文件的路径,路径可以是绝对路径,也可以是基于工程根目录的相对路径,路径之前必须加上前缀“file:

/”。

执行SPARQL语言。

该SPARQL语句中?

author为主语,vocab:

Name,vocab:

Email以及vocab:

Paper2Author为谓语,查询结果?

name,?

email以及?

paper为宾语。

注意SPARQL语句需要有命名空间的前缀说明。

如在清单程序的使用了vocab:

Name,则在前缀需要声明vocab:

http:

//localhost:

2020/vocab/resource/,并且该声明必须与Mapping文件的前缀相一致。

有关SPARQL的详细语法,在此不作详细介绍,读者可以参阅 W3C关于SPARQL的详细说明。

在执行SPARQL语句时,需要指明要执行的语句,以及所依附的D2RQmodel。

处理查询结果(e.g.,输出到console)。

关于ResultSet的处理,jena提供了一些类似SQL的接口去获取每个查询结果项。

程序清单2的执行结果如下:

name:

JieBao,email:

baojie@cs.rpi.edu,paper:

file:

///D:

/Academic2.n3#ZJ.PAPER/1

name:

LiDing,email:

dingl@cs.rpi.edu,paper:

file:

///D:

/Academic2.n3#ZJ.PAPER/1

name:

DeborahMcGuinness,email:

dlm@cs.rpi.edu,paper:

file:

///D:

/Academic2.n3#ZJ.PAPER/1

name:

JamesHendler,email:

hendler@cs.rpi.edu,paper:

file:

///D:

/Academic2.n3#ZJ.PAPER/1

name:

JamesHendler,email:

hendler@cs.rpi.edu,paper:

file:

///D:

/Academic2.n3#ZJ.PAPER/3

name:

JamesHendler,email:

hendler@cs.rpi.edu,paper:

file:

///D:

/Academic2.n3#ZJ.PAPER

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1