海量RDF数据的管理.pdf
《海量RDF数据的管理.pdf》由会员分享,可在线阅读,更多相关《海量RDF数据的管理.pdf(16页珍藏版)》请在冰豆网上搜索。
6海量海量RDFRDF数据数据的的管理管理邹磊,陈跃国1.语义网和语义网和RDF数据数据语义网是万维网之父蒂姆伯纳斯-李(TimBerners-Lee)在1998年提出的概念,它提供了一种在不同的应用和个体之间共享和重用数据的整体框架1,其核心是构建以数据为中心的网络,即WebofData。
我们将目前的万维网称之为WebofPages。
众所周知,万维网是利用超链接技术将不同的文档链接起来,从而方便用户的浏览和文档的共享。
例如HTML文档的语法在于告诉浏览器按照何种格式来显示该文档,而并不是告诉计算机文档中的数据分别表示什么语义信息。
语义网的核心是让计算机能够理解文档中的数据,以及数据和数据之间的语义关联关系,从而使得机器可以更加智能化地处理这些信息。
因此我们可以把语义网想象成是一个全球性的数据库系统,也就是我们通常所提到的WebofData。
由于语义网技术涉及面较广,本文仅涉及语义网框架中的一项核心概念RDF(ResourceDescriptionFramework,资源描述框架)。
RDF是一种数据模型,是由W3C组织的ResourceDescriptionFramework工作组为了构建一个综合性的框架来整合不同领域的元数据,实现Web上互相交换元数据,促进网络资源的自动化处理而提出的。
随着因特网的发展和信息的丰富,对元数据的研究逐步深入,出现了多种元数据标准,如DC3(DublinCore)、PICS5(PlatformofInternetContentSelection)等等。
这些元数据描述、组织和重新整理了网络信息,使得用户可以更方便地利用网络数据。
RDF6是W3C于1999年提出的一个解决方案,并于2004年2月正式成为W3C推荐标准。
RDF的目标是为元数据在Web上的各种应用提供一个基础架构,使应用程序能够在Web上互相交换元数据,促进网络资源的自动化处理。
RDF的基本数据模型包括了三个对象类型,资源(Resource)、属性(Property)及陈述(Statements)。
资源资源:
所有能够使用RDF表示的对象都称之为资源,包括所有网络上的信息、虚拟概念、现实事物等等。
资源以唯一的URI(统一资源标识UniformResourceIdentifiers,通常使用的URL是它的一个子集)来表示,不同的资源拥有不同的URI。
属性属性:
属性描述资源的特征或资源间的关系。
每一个属性都有其意义,用于定义资源在属性上的属性值(PropertyValue)、描述属性所属的资源形态、和其他属性或资源的关系。
陈述陈述:
一条陈述包含三个部分,通常称之为RDF三元组。
其中主体一定是一个被描述的资源,由URI来表示。
客体表示主体在属性上的取值,它可以是另外一个资源(由URI来表示)或者是文本。
总的来说,RDF是语义网框架中的基础数据模型。
要实现从WebofPages到语义网所提出的WebofData的转变,构建海量和分布式的RDF数据集是一项重要而且是不可或缺的步骤,为此W3C组织提出了LinkedOpenData(LOD)项目7将各个零散的RDF数据集链接起来从而构成未来语义网7的基础。
目前的LOD项目已经从2009年的89个数据集增长到2012年的325个数据集,总规模超过了250亿条三元组。
RDF数据的获取和构建目前有人工编辑,和基于信息抽取方法构建和基于Web2.0的协同编辑三种方法。
传统的人工编辑只限定于单个领域的小规模RDF数据的构建;基于目前信息抽取技术,可以实现自动地从大规模非结构化数据中抽取和构建开放领域的RDF数据。
例如Barton8抽取自MIT图书馆数据,YAGO9和DBpeida10都是从维基百科上通过信息抽取的方法来构建RDF数据集合;另外利用类似于维基百科的协同编辑方法,由一个网络社区的用户共同构建一个RDF数据集也是构建高质量RDF数据的一种可行的方法,典型的项目例如Freebase11等。
2.RDF数据管理研究现状数据管理研究现状目前海量RDF数据的存储和查询的方案分为两种:
一种是将三元组数据映射成关系数据库中的表结构,利用现有的RDBMS(关系数据库系统)来完成面向RDF查询检索;另外一种是基于图结构的存储方式。
因为RDF数据本身就是基于图结构的,因此可以利用图数据库中的操作来完成对于RDF数据的查询。
我们首先在2.1节介绍面向RDF的查询语言SPARQL,同时引入一个SPARQL查询的例子。
在2.2节中将详细介绍基于关系模型的存储和检索RDF数据的几种代表性的方法。
2.3节将介绍现有基于图模型的RDF数据的管理方法。
2.1SPARQL查询语言查询语言SPARQL查询语言是由W3C的“RDFDataAccess”工作组(DAWG)开发的一种面向RDF数据的查询语言,目前已经成为W3C的RDF查询语言的推荐标准。
SPARQL语言与目前关系数据库中的SQL语言是很相近的,这方便了用户对于SPARQL语言的使用。
例如在SPARQL语法中,也是在SELECT部分指定查询变量,在WHERE部分指定查询条件,而查询条件通常由三元组来构成,其中三元组的某一项或者某几项可以由变量来表示。
我们用一个例子来介绍SPARQL,具体的语法细节请参考文献20。
主体属性客体y:
Abraham_LincolnhasName“AbrahamLincoln”y:
Abraham_LincolnBornOnDate“1809-02-12”y:
Abraham_LincolnDiedOnDate1865-04-15y:
Abraham_LincolnDiedIny:
Washington_D.Cy:
Washington_D.ChasName“WashingtonD.C.”y:
Washington_D.CFoundYear1790y:
United_StateshasName“UnitedStates”y:
United_StateshasCapitaly:
Washington_D.Cy:
United_Statesrdf:
typeCountryy:
Washington_D.Crdf:
typey:
cityy:
Reese_Witherspoonrdf:
typey:
Actory:
Reese_WitherspoonBornOnDate“1976-03-22”y:
Reese_WitherspoonBornIny:
New_Orleans,_Louisianay:
Reese_WitherspoonhasName“ReeseWitherspoon”y:
New_Orleans,_LouisianaFoundYear1718y:
New_Orleans,_Louisianardf:
typey:
cityy:
New_Orleans,_LouisianalocatedIny:
United_StatesPrefix:
y=http:
/en.wikipedia.org/wiki/图1RDF例子8图1给出了一个RDF数据集的例子。
假设我们需要在上面的RDF数据中查询“在1809年2月12日出生,并且在1865年4月15日逝世的人的姓名?
”这个自然语言的问题,可以表示成如图2的SPARQL语句。
SELECT?
name/查询返回的变量值WHERE?
m?
name./查询条件?
m“1809-02-12”.?
m“1865-04-15”.图2SPARQL查询的例子我们也可以将RDF和SPARQL分别表示成图的形式。
例如在RDF中,主体和客体可以分别表示成RDF图中的节点,一条RDF三元组可以表示成一条边,其中属性是边的标签。
SPARQL语句同样可以表示成一个查询图。
图3显示了上例所对应的RDF图和SPARQL查询图结构。
回答SPARQL查询本质上就是在RDF图中找到SPARQL查询图的子图匹配的位置,这就是基于图数据库的回答SPARQL查询的理论基础。
hasNameBornOnDateDiedOnDateDiedIn“AbrahamLincoln”“1809-02-12”“1865-04-15”http:
/en.wikipedia.org/wiki/Abraham_Lincolnhttp:
/en.wikipedia.org/wiki/Washington_D.C.FoundYear“1790”“WashingtonD.C.”hasNamehttp:
/en.wikipedia.org/wiki/United_StateshasCapitalhttp:
/en.wikipedia.org/wiki/Countryrdf:
typehttp:
/en.wikipedia.org/wiki/Cityrdf:
typehttp:
/en.wikipedia.org/wiki/Reese_Witherspoonhttp:
/en.wikipedia.org/wiki/New_Orleans,_LouisianalocatedInhttp:
/en.wikipedia.org/wiki/Actor“1976-03-22”BornOnDaterdf:
typeBornInFoundYear“1718”rdf:
type005008004003006001007002“UnitedStates”hasName“ReeseWitherspoon”hasName009010011012013014015016017?
m“1809-02-12”?
name“1865-04-15”BornOnDateDiedOnDatehasName(a)RDF图(b)SPARQL查询图图3RDF图和SPARQL查询图2.2基于关系数据模型基于关系数据模型的方法的方法由于RDBMS在数据管理方面的巨大成功以及成熟的商业软件产品,同时RDF数据的三元组模9型可以很容易映射成关系模型,因此大量研究者尝试了使用关系数据模型来设计RDF存储和检索的方案21,22,23。
根据所设计的表结构的不同,相应的存储和查询方法也各异,下面介绍几种经典的方法。
简单三列表简单三列表一种最为简单的将RDF数据映射到关系数据库表的方法是构建一张只有三列表(Subject,Property,Object),将所有的RDF三元组都放在这个表中。
给定一个SPARQL查询,我们设计查询重写机制将SPARQL转化为对应的SQL语句,由关系数据库来回答此SQL语句。
例如我们可以将图2中的SPARQL查询转换为图4中的SQL语句。
SELECTT3.SubjectFROMTasT1,TasT2,TasT3WHERET1.Property=“BornOnDate”andT1.Object=“1809-02-12”andT2.Property=“DiedOnDate”andT2.Object=“1865-04-15”andT3.Property=“hasName”andT1.Subject=T2.SubjectandT2.Subject=T3.subject图4转换以后的SQL查询虽然这种方法具有很好的通用性,但最大的问题是查询性能差。
首先这张三列表的规模可能非常庞大。
如图4所示的SQL语句中有多个表的自连接操作,将严重地影响其查询性能。
水平存储水平存储文献24中提到的水平方法(HorizontalSchema)是将一个RDF主体(subject)表示为数据库表中的一行。
表中的列包括该RD