关联数据发布技术的发展趋势分析

 

1、引言

互联网上存在着大量非结构化数据和采用不同标准的结构化数据,关联数据是一种简单的语义网实现技术,其重要价值在于通过资源描述框架(简称RDF,下同)数据模型,将网络上的非结构化数据和采用不同标准的结构化数据转换成遵循统一标准的结构化数据,以便机器理解。图书馆界如美国国会图书馆,大型媒体公司如BBC、纽约时报,商业巨头如百思买(Best Buy)都纷纷试水关联数据,大量传统网页上的数据(包括维基百科)正在被自动半自动地转换成关联数据,甚至英国政府也有意提供语义网(关联数据)信息服务[1]。可以认为,关联数据使互联网迈开了向语义网(Semantic Web)进化过程中重要的一步。“文档的网络(the Web of Document)”向“数据的网络(the Web of Data)”转变,已经是大势所趋[2]。

仅从技术上看,关联数据的实现并不复杂。但是,要让当前互联网上海量的基于超链接的“文档的网络”转换成基于关联数据的“数据的网络”,是一项浩大的工程,需要简便可行的模式和方法。众多的内容管理系统(简称CMS,下同)是目前网络资源发布的主力,其中Drupal是一款技术领先、用户众多、特色鲜明的开源软件,它基于完全开源的XAMPP架构,具有高度模块化、优良的用户友好性等特点,并拥有庞大的网络社区支持,成为Web2.0时代的翘楚和CMS中的佼佼者。难能可贵的是,它很早就开始了对语义网技术的支持,使得它在新时代得以引领潮流。2009年,Drupal已形成了一整套支持关联数据发布(publish)和消费(consume)的完整机制。2011年1月,Drupal7正式发布,已经将关联数据作为核心模块[3]。本文对关联数据的原理、实现技术和工具作了较为全面的梳理,主要以Drupal为工具,通过案例,详细阐述关联数据的发布思路、技术和流程。

 

2、关联数据及其实现

2.1 概述:如何在Web上发布关联数据
Tim Berners-Lee于2006年在Linked Data[4]一文中提出了“关联数据”(Linked Data)的概念和关联数据的四原则①,成为“关联数据”理念的基石。

2007年7月,How to Publish Linked Data on the Web[2]一文发布,成为关联数据实现技术的经典,后来这篇技术报告又被原作者扩展为一本专著。文中将关联数据定义为“一种在万维网上发布和链接结构化数据的方式”,作者认为,“关联数据是利用万维网来创建来自不同数据源的语义链接”,“数据价值和效用随着其链接到其他数据的增多而大大增加”[5]。也就是说,数据之间的关联越是丰富,数据则越有价值,数据的价值就越是得到体现。[本文转自:lunwen.1kejian.com]

从技术上看,关联数据是语义网的一种轻量级的实现方式,它可以让Web代理通过简单通用的HTTP URI规范直接访问文档中的“数据”,是实现“数据的网络”的关键技术。发布关联数据从技术上来说是很简单的,只需要遵守两条基本准则:
     第一,利用资源描述框架数据模型在万维网上发布结构化数据;
     第二,利用RDF链接不同数据源的数据。
W3C的RDF[6]是指由“主体(subject)一谓词(predicate)—客体(object)”三部分(称为“三元组”[7])组成的资源描述通用模型。其中“主体”是有统一标识符(URI)的资源,也可以是没有命名空间的空白节点如DOI、ISBN等;“客体”可以是有URI的资源、空白节点、也可以是字串值;而“谓词”表示了主体和客体的关系,即第二条原则中的RDF链接(RDF Links)[2]。根据关联数据的原则,关联数据的三元组都应该尽可能地以URI来表达,以RDF来编码。尤其是主体,必须能够以开放的HTTP方式来存取,数据的RDF描述中应包含其他更多数据的链接。

关联数据完全建立在已有的Web技术(HTTP、URL和HTML)基础上,以四个基本原则对Web技术规范作了进一步的规范和限定。关联数据的发布可简单概括为如下步骤:
   ①用RDF数据模型描述要发布的数据资源,为其生成HTTP URI(通常是一个Cool URI),并生成资源的RDF描述文档。
   ②在数据与数据之间建立RDF链接。
   ③在Web上发布RDF文档,可采用以下两种方法之一:支持HTTP的内容协商机制(Content Negotiation),能根据客户端信息请求的类型(text/html还是application/rdf+xml)决定返回HTML的表示形式还是RDF的表示形式;或支持采用带“#”号(hash)的URI方式定位到RDF中具体的数据资源。
   ④提供一个标准开放的访问接口,支持使用RDF的标准化检索语言SPARQL[8]对RDF数据库进行检索,供远程调用本地数据。

2.2 现状:关联数据的实现技术和工具
关联数据是一种新兴的技术,大部分工具尚在发展之中,关联数据的四原则决定了关联数据的实现独立于任何具体的技术和工具,只和相关的Web标准有关。因此,在多数情况下,关联数据的生成、发布和消费无需改变原有的内容发布系统,只需在原有系统之上架构一层支持关联数据的应用模块即可。

华东师范大学娄秀明的硕士论文《用关联数据技术实现网络知识组织系统的研究》[9]对发布关联数据的技术方案作了综述;沈志宏、张晓林在《关联数据及其应用现状综述》[10]一文中也总结了一些关联数据发布的技术方案。

根据数据量的大小、数据的更新频率、数据的存储方式和访问方式的不同,一般可考虑采用以下几种方式来发布关联数据:①发布静态的RDF文件,适用于数据量很小的情况。②将RDF文件存储在RDF数据库中,并采用Pubby等服务器作为关联数据服务的前端,适用于数据量大的情况。③在请求数据时根据原始数据在线生成RDF数据,适用于更新频率大的情况。④D2R方式,即从关系数据库到RDF数据转换,适用于将关系数据库存储的数据内容发布成关联数据。笔者将这四种方式总结为:静态发布、批量存储、调用时生成、事后转换。

W3C在其“图书馆关联数据应用孵化小组”的官方网站[11]上总结了一些主要的关联数据实现技术、工具和资源,可资参考:

   ①描述关联数据集的VoID词表。虽然通过Cool URI获取的RDF数据能够很容易转化为可读的HTML格式,但无法应对大规模的网络检索。VoID词表[12]是一个RDF Schema词表,是描述关联数据集的元数据,作为关联数据集和用户(人或机器)之间的桥梁,它包含数据发现、数据目录和数据存档,用于帮助用户发现如DBPedia这样的海量关联数据集中的可用信息。
   ②传统数据库的前端转换工具。可将关系数据库中的数据加装为关联数据的软件D2R Server,关系数据库中的内容可借此在浏览器上浏览,并支持SPARQL语言查询。该软件还可以利用Apache的rewrite规则,从已有的SRU数据库中生成关联数据,如果某些信息可通过一个SPARQL endpoint获取,那么像Pubby这样的关联数据前端工具可以自动生成资源的URIs。
   ③OWL及SKOS相关工具。OWL本体语言[13]和简单知识管理系统SKOS[14]是关联数据发展的两个重要推动力。OWL是一套RDFS词表,扩展了RDF/RDFS的描述能力。OWL和SKOS的相关技术发展较为成熟,许多OWL工具[15]和SKOS工具[16]都可为关联数据所用。[本文转自:lunwen.1kejian.com]
   ④用于关联数据的Web services。理论上说,大部分基于特定领域的Web服务API都可以经过二次处理支持关联数据,但即使在原有数据库的前端植入关联数据URI,使后台数据库支持SPARQL检索也绝非易事,性能和健壮性方面的考虑也是一种阻碍。而Web services技术可以提供一种可选的解决方案,为了方便第三方代理的接入,它有着规范的服务描述文档。已经有少数关联数据应用开始利用Web services进行资源的发现和重用了,通常都是以API的形式,如W3C正在开发之中的Linked Data API,OCLC的VIAF,美国国会图书馆的技术中心搜索服务等。
   ⑤Web应用框架。典型的Web应用框架通常采用流行的Model-View-Controller(MVC)模式、REST Architectural Style和面向资源架构(Resource Oriented Architecture, ROA)等,这些架构能很好地支持应用的创建、维护和重用。他们通常都包含一个通用的组件,即实现URI路由机制的模块,允许软件开发者定义一个HTTP形式的URI,并将其映射到控制层,而后使用合适的视图(views)和模式(models)生成一个HTTP响应。这一点促进了Cool URIs的应用,并迫使开发者将资源发布在Web上。关联数据正是用HTTP URI来命名资源,对人和机器分别使用不同的显示方式,如对人输出HTML格式,对机器输出RDF格式,这一点与Web应用框架的特点不谋而合。因而可以利用Web应用框架,方便生成RDF格式的数据,并不比生成HTML、XML和JSON复杂。目前基于不同程序语言和不同操作系统的Web应用框架已经得到了十分广泛的应用。
   ⑥CMS及RDFa。CMS通常建立在一个成熟的Web应用框架之上,对于URI的支持自然应该不在话下,又由于CMS对内容结构的定义有着完善的支持,其后台数据库中存在着大量的结构化信息。而RDFa技术可让这些数据表达为RDF格式并嵌入HTML,对人和机器提供服务。

 

3、Drupal对关联数据的支持

3.1 Drupal与语义网
早在Drupal诞生之初的2001年,Drupal的创始人就在Drupal核心代码中引入了支持RDF的功能[17],在Drupal核心代码包中导入了一个名为rdf.php的源文件,提供了面向对象的、基于RDF的XML解析器和一个RDF标题生成器,为Drupal支持语义网奠定了基础。在2007年的Drupal年会上,Drupal的拥趸者们在Drupal开源社区上建立了语义网群组,致力于为Drupal增添语义功能。当关联数据概念提出时,Drupal的开发团队反应迅捷,很快于2007年10月成立了RDF项目组。2008年Drupal年会上正式推出了Drupal对关联数据的支持功能[18]。随后在不到一年的时间里,Drupal6上支持关联数据的模块就陆续发布,2009年的Drupal年会上,这些模块已能够全面、规模化地支撑关联数据的生成、发布和利用[19]。2011年1月,Drupal7正式版发布,更是把RDF相关模块作为Drupal的核心。
     
3.2 Drupal支持关联数据的原理
3.2.1 Drupal利用RDF数据模型在万维网上发布结构化数据
Drupal对关联数据的支持是从对自身结构化数据的RDF化开始的。在用Drupal建立的网站中,存在着大量的结构化数据。Drupal作为一个内容管理系统,可管理任意不同的内容类型(content type),每一种内容类型都有自己的结构化数据,包含一个字段集(content field),如博客(blog)是Drupal的一种常见的内容类型,包含“标题”、“创建者”、“创建时间”、“内容”这些字段。不同的内容类型包含不同的字段集。利用Drupal的CCK模块,可自定义任意新的内容类型,包含任意组合的字段集。Drupal站点的所有内容类型及其字段构成了站点的内容模型(site content model)。在Drupal中,基于某个内容类型创建的实例叫做节点(node),例如,博客在Drupal中作为一种内容类型,博客的标题是这种内容类型的一个字段,某作者写的一篇博文则是一个节点。Drupal提供了一种方式,使内容类型、字段和节点分别映射到RDF三元组模型中的“类”、“属性”和“对象”,即主体、谓词、客体,如图1所示。
    
     图1 RDF数据模型与Drupal内容模型的映射关系
     这样,Drupal的站点内容模型就可以映射到基于RDFS的本地词汇表(Vocabulary):
     site: Blog a rdfs: Class; rdfs: label"Blog";
     site: Title a rdf: Property; rdfs: label"Title";
当定义好站点的内容模型后,系统会自动生成基于RDFS的本地词汇表(Vocabulary),命名空间(Namespace)的前缀默认为“site”,地址默认为“http://siteurl/ns#”,当一个节点创建之后,系统会自动赋予一个http URI,一般默认为:http://siteurl/node/nodeno(siteurl为站点的URL地址,nodeno为系统按内容节点创建时间顺序自动生成的流水号),指向该博文的html文档。同时,系统也会自动生成该博文的RDF数据,RDF数据中术语的命名空间为“site: http: //siteurl/ns#”,RDF数据也自动获得一个http URI,一般默认为“http://siterul/node/nodeno/rdf”,Drupal的Web服务器Apache支持接收和发送application/rdf+xml类型的指令,因而在关联数据浏览器上访问http://siteurl/nodo/nodeno/rdf,可返回RDF数据,并可人工浏览RDF数据的全貌。有了这样的机制,Drupal站点中的所有内容都可以自动转换成基于RDF数据模型的语义数据,并自动获得http URI,发布在互联网上。

将站点内容模型映射到RDF数据模型是Drupal支持关联数据的第一步,仅仅如此是远远不够的。RDF数据模型是关联数据的基础,但在具体应用中,难免会用到一些领域本体(Ontology),如FOAF,DublinCore,SKOS,OWL,SIOC等等。Drupal也支持导入外部本体,并使站点管理员可以定义这些外部本体与本地站点内容模型之间的映射关系。

3.2.2 Drupal利用RDF链接将来自不同数据源的数据联系起来
仅仅生成本地站点的RDF数据对于关联数据的应用来说显然是不够的,还必须能够将本地站点的RDF数据以标准化的形式开放给远程站点,同时整合其他数据源的RDF数据,并在各类RDF数据之间建立关联关系。RDF数据的特性就是可开放、可利用、可关联。目前,Web上最常用的开放利用RDF数据的方式是Web上公开的SPARQL查询终端(public SPARQL Endpoint),如DBPedia的SPARQL查询终端,在Web上可公开访问,支持人机查询。可人工在SPARQL查询终端的Web界面上输入SPARQL查询语句,返回结果可以html格式显示在传统浏览器上,也可以N3、JASON、XML/RDF等格式的文档导出。SPARQL查询终端也支持机器查询,SPARQL语句可嵌入程序代码之中,返同结果也可编程选择、提取、分析。Drupal可为本地站点提供SPARQL查询终端,公开发布后供人机调用。另一种利用RDF数据集的方式是批量导出和导入RDF数据,Drupal同样也提供这种方式,在本地站点管理后台,可导入来自其他数据源的RDF数据,N3、JASON、XML/RDF等常用的格式都支持,也可将本地站点的RDF数据导出为上述格式的文件。

如果说超文本链接是传统的“文档的Web”链接机制,那么,对于“数据的Web”来说,这种机制即是RDF链接。RDF链接能使用户在不同的数据源之间有目的地穿行。Drupal同样也提供了这样一种链接机制。在Drupal原有内容模型中,就支持字段值为站点内的另一个节点,也就是说,节点A和节点B之间的关系,可用字段指示。因此,当字段被映射为一个RDF属性,而节点被转换成RDF数据实例之后,一个由节点转换而成的RDF数据实例A和另一个由节点转换而成的RDF数据实例B之间,就由RDF属性来定义它们之间的关系,同时建立它们之间的关联。如下所示:
     节点A——字段——节点B
     RDF数据实例A——RDF属性——RDF数据实例B
     另外,在Drupal管理后台,可批量处理存储在RDF仓储中的数据,在它们之间建立RDF链接。

 

4、如何利用Drupal发布关联数据

4.1 Drupal发布与消费关联数据的总体思路
Drupal的RDF项目开发团队以自己建立的Demo站点(PROJECT BLOGS),说明了Drupal发布与消费关联数据的总体思路。

首先,新建了“Person”这一内容类型,自定义了“姓”、“名”、“个人主页”等字段,同时导入著名的FOAF本体,定义好“Person”的内容模型与FOAF本体之间的RDF映射,为团队中的每一个人创建一个“Person”类型的节点,系统自动生成了每个人的html文档及其URL以及RDF数据及其http URI,所有人的RDF数据都存储在后台的RDF仓储之中。

其次,站点建立了自己的SPAQL Endpoint接口,可向远程站点(REMOTE DRUPAL SITE)提供关联数据服务。

同时,站点也消费互联网上开放的关联数据集如DBPedia中的关联数据。从DBPedia中提取所需的关联数据,用RDF links链接到本地站点中(见图2)。
    
     图2 Drupal发布与消费关联数据的总体思路[20]

4.2 Drupal支持关联数据的模块
Drupal对关联数据的支持,得益于它的模块化设计思想。模块化的设计思想,最早源于管理信息系统(MIS)开发中的“原型法”,在Web2.0时代,则与“永远的Beta版”这种思维方式有异曲同工之妙。但Drupal的模块化设计思想,远不止如此简单。Drupal的每一项特定功能,是以模块的形式开发的,也是以模块的形式管理的。系统管理员可以通过启用或关闭某一模块来决定某一功能是否可用,也可以导入一个新模块来增加一个新功能。作为一个开放源代码软件,Drupal具有标图2Drupal发布与消费关联数据的总体思路[20]化的开发框架,新的功能可以模块的形式封装起来,提供遵循Drupal开发标准的接口,以即插即用的方式融入Drupal的核心模块。有了核心模块的支持,针对特定功能开发的模块一般都有轻量、简洁的特征,易于开发和维护。

Drupal支持RDF的模块,根据其功能的不同,大致分为以下几组:

   第一组:RDF, ARC2。RDF模块和ARC2系统为Drupal提供最根本的支持,是Drupal的内容模型向RDF数据模型转换的关键。在Drupal中安装并启用了RDF模块和ARC2系统后,Drupal的内容模型就可以自动转换成RDF数据模型。当节点被创建后,系统自动生成的RDF数据则存储在ARC2系统中,ACR2是存储RDF数据的仓储。
   第二组:RDF CCK, evoc。RDF CCK和evoe这两个模块使Drupal具备了将Drupal的内容模型转换成各种领域本体的功能。RDF CCK模块建立在Drupal的另一个重要模块——CCK模块的基础之上,CCK模块支持管理员自定义任何类型的内容类型,是Drupal之所以具备强大可扩展性的灵魂,也是Drupal应用如此广泛的主要原因之一。RDF CCK模块是RDF模块的补充,它提供一个Web管理界面,利用CCK模块扩展的内容类型和自定义字段,可以在这个管理界面上设置与各种领域本体之间的映射。而evoc模块则负责为本地站点导入外部本体。安装和启用这两个模块后,管理员可以将某个内容类型映射到一个本体的Class,让字段映射到Class的Property。这里用到的Class和Propery则需要依赖evoe模块导入已有的外部本体。这两个模块为Drupal的CCK模块插上了语义的翅膀。
   第三组:SPARQL,RDF SPARQL Endpoint。SPARQL和SPARQL Endpoint这两个模块为Drupal站点中的RDF数据提供检索支持,SPARQL语言是RDF数据的查询语言,Drupal的SPARQL模块在Drupal站点里内置了RDF数据的搜索引擎,更重要的是,SPARQL Endpoint模块即是上文提到的SPARQL查询终端,其功能与DBPedia的SPARQL查询终端一致,为本地站点的RDF数据向互联网开放提供了人机可用的标准化支持。
   第四组:RDF Proxy。RDF Proxy模块从其他提供关联数据的站点获取关联数据。如果说RDF SPARQL Endpoint模块为Drupal站点提供了一个供外界(人或机器)访问的接口,那么RDF Proxy模块则是由外而内吸纳RDF数据的通道。

4.3 将“中国历史纪年和公元纪年对照表”发布成关联数据

笔者基于对Drupal发布和消费关联数据的了解以及对历史文献数字化资源利用的考虑,利用Drupal和W3C的OWL时间本体[21]将“中国历史纪年和公元纪年对照表”发布成关联数据。在中文历史文献数字化资源的利用中,不可避免地要处理中国历史纪年和公元纪年对照的问题。“中国历史纪年和公元纪年对照表”是一种典型的结构化数据,规则清晰,非常适合作为关联数据发布,也很有利用价值,W3C的OWL时间本体包含了多种与时间相关的类和属性以及处理时间问题的规则和方法,而Drupal提供了一个易操作的平台,支持本体的重用,因而没有必要再“重新发明轮子”来自定义本体。

首先,根据需求定义内容模型和本体映射方案,利用CCK模块自定义“公元年”和“中国历史纪年”两种内容类型,利用evoc模块导入OWL时间本体,OWL时间本体包含一个全面的类和属性集,实际使用时可以只选取所需的部分。对于中国历史纪年中的“朝代”如“明”、“清”,年号如“康熙”、“雍正”等,都可以作为一个“时间段”来处理,而对于公元年如“1644”,则可以作为“时间点”来对待,时间段与时间段之间、时间点与时间点之间,存在着包含与被包含、先与后的关系。在OWL时间本体中,“时间段”对应的类有“Interval”及其子类“ProperInterval”,“时间点”对应的类为“Instant”,由于“ProperInterval”表示一个有起点和终点的时间段,并且有“hasBeginning”、“hasEnd”、“intervalBefore”、“intervalEnd”这样的属性来表示关系,因此选择将“中国历史纪年”映射到OWL时间本体的“ProperInterval”,而非其父类“Interval”。定义好类的对应关系,同时也定义好字段与属性之间的对应关系,具体见图3。
    
     图3 定义内容结构和本体映射方案
     其次,利用RDF CCK模块在Drupal站点中作好两种内容类型与时间本体之间的映射(见图4)。
    
     图4 定义内容模型和RDF数据模型之间的映射

最后,创建“对照表”中所有中国历史纪年和公元纪年的节点,系统自动为其生成RDF数据。至此,“中国历史纪年和公元纪年www.lwxz8.com 北京代写论文对照表”已作为关联数据发布在Drupal站点之上,并可利用SPARQL Endpoint模块向远程站点提供数据开放的接口,远程站点可编写SPARQL语句查询并获取本站RDF数据(见图5)。
    
     图5 创建内容节点生成RDF数据

 

5、结语

有别于RDF数据的静态发布、批量存储、调用时生成、事后转换(D2R)这几种发布方式,Drupal为关联数据的发布提供了另一种思路和模式,具体表现在:①可事先定义好本地内容模型与RDF数据模型的映射,支持本体的重用;②在内容创建时即生成RDF数据,受数据量大小和更新频率的影响不大;③RDF数据保存在专用的RDF数据库中,与原有系统的关系数据库之间在物理上彼此独立,在逻辑上相互映射;④以SPARQL Endpoint模块提供对外的数据访问接口,不依赖第三方D2R工具,更重要的是,它以各种相互独立又密切配合的模块、遵循关联数据的基本原则来实现关联数据的发布和消费,不影响原有内容模型和系统架构。

作为一个CMS平台,Drupal对关联数据的支持为Web2.7时代的遗留系统向语义网进化作出了贡献。但如果作为一个专用的关联数据发布的工具,Drupal还存在着一定的不足,它必须依赖于自身的内容模型,依赖于在内容模型和本体之间建立的映射关系,而在这种映射的过程中,难免会损失部分语义。

随着关联数据应用范围的扩大,关联数据的应用效果日益显现,其实现技术和工具也会越来越成熟和易于应用。

 

posted @ 2013-02-03 20:42  bluepoint2009  阅读(1492)  评论(0编辑  收藏  举报