关联数据发布流程与关键问题研究——以科技文献、科学数据发布为例,本文主要内容关键词为:数据论文,为例论文,文献论文,流程论文,关键论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
1 引言
随着关联数据理念的推广和关联开放数据运动的不断深入,越来越多的信息库采取了关联数据的形式对外发布并提供访问服务。发布关联数据的途径往往因资源内容的特征分成三种[1]:如果数据量很小(几百条RDF三元组或者更少),可以直接采用静态的RDF文件(静态发布);如果数据量很大,则需要将它们放进RDF库中,并选择Pubby[2]服务器作为关联数据服务的前端;如果数据的更新频率很大,就需要引入更新机制,或者在请求数据的时候再根据原始数据在线生成(on-the-fly translation)RDF。其中的第三种方式,即在线映射,往往会借助于一些映射工具,如:D2RQ平台[3]、Virtuoso RDF Views[4]、Sparqlify[5]等。此外,W3C还有一个RDB2RDF工作组[6],从事R2RML映射语言的研究[7]。
很多传统的信息都借助于关系型数据库进行存储,另外由于D2RQ的使用简单方便,因此DZRQ在很多场合都得到了应用。作为关联数据发布的标准教程,文献How to Publish Linked Data on the Web就重点推荐了D2RQ,并介绍了它的软件架构和使用方法。D2RQ平台包括D2R Engine、D2R Server以及D2RQ映射语言,基于D2R Server,目前已经有很多数据源对外开放了关联数据的接口(即变成了关联数据的数据集),如DBLP书目库[8]、CIA Factbook[9]、欧洲国家地区统计信息库[10]等。
采用D2R Server将关系型数据发布成关联数据,软件操作流程如下:
①准备Java环境,下载某个版本的D2R Server,如:d2rq-0.8;
②执行generate-mapping工具,连接至数据库,生成映射文件,如:mapping.n3;
③根据发布需求,在以上生成的mapping.n3文件基础上进行修改与完善;
④以mapping.n3为参数,启动d2r-server。
经过以上简单四步,D2R Server即可提供关联数据的访问服务,这些服务包括:用户可以浏览某类实体的列表(directory),并通过每个URI访问到某一条实体的网页描述和RDF描述。同时,D2R Server还提供了SPARQL查询接口,并提供了一个Web化的执行界面(SPKRQL Explorer),用户可以在该界面输入SPARQL查询语句,并查看到执行结果。
在多年的科研活动中,科研人员和科研设备产生了大量宝贵的科技文献资源和科学数据资源。近年来出版界对科学数据出版(data publication)、语义出版(semantic publishing)的关注,也突出了科研人员对科学数据的开放访问以及与科技文献互操作的强烈需求。可以看到,在关联开放数据的环境下,大量的图书馆资源和科学数据及其描述信息开始以关联数据的方式提供开放访问服务,图书馆资源如美国国会图书馆发布的LCSH的SKOS版本[11]、瑞典联合目录LIBRIS[12]、德国国家图书馆发布的规范文档[13]等,科学数据资源如Linked Life Data[14]、Diseasome Map[15]、Linked Sensor Data[16]等。作为知识的不同载体,科技文献与科学数据无论在内容上还是在语义描述模型上都有各自的特点,另外科学数据还带有强烈的学科领域特征。在这种背景下,如何基于关联数据机制,研究以标准化流程完成这些科研资源的发布,并推广至其他类型的科研资源,具有切实的指导意义。本文以科技文献和科学数据的发布为例,研究基于D2R Server发布关联数据的流程和其中的关键问题。其中,科技文献选取了中国科学引文数据库(Chinese Science Citation Database,CSCD)[17]的部分论文元数据(以下简称CSCD-SW),科学数据选取了中国生态系统研究网络(Chinese Ecosystem Research Network,CERN)[18]的长期观测通量数据的描述信息(以下简称FLUX-SW)。
2 关联数据发布
2.1 发布原则与流程
Tim Berners-Lee制订了关联数据关于内容描述的四项基本原则[19]:
①使用URI来标识事物;
②使用HTTP URI使人们可以访问到这些标识;
③当有人访问到标识时,提供有用的信息;
④尽可能提供关联的URI,以使人们可以发现更多的事物。
对应四项要求,本文认为,包括科技文献和科学数据在内,各类信息的关联数据化发布,可以分解成六个关键步骤,即数据建模、实体命名、实体RDF化、实体关联化、实体发布、开放查询,每个步骤的含义解释如下:
①数据建模:选取待发布的实体,选择或设计RDF词表(RDF vocabulary),定义待发布实体之间的语义关系;
②实体命名:为每个实体赋予一个永久的URI(Cool URI)[20];
③实体RDF化:采用RDF来描述每一个实体;
④实体关联化:采用RDF link来描述实体之间的关联;
⑤实体发布:配置发布服务器,负责解析每个实体的URI,并根据内容协商原则(Content Negotiation)返回正确的网页描述和RDF描述;
⑥开放查询:配置SPARQL服务端(SPARQL endpoint),对外开放SPARQL语义查询接口[21];
各步骤的实现目标及该步骤的阶段性产出如表1所示。
2.2 词表、值词表、RDF词表
在各内容对象RDF化的过程中,常常需要用到一些标准化的词汇,这些词汇可以来源于多个词表(mixed vocabularies)。在发布RDF数据的时候,应尽量采用一些已经为人熟知的RDF词表所定义的词汇,如:dc:title。然后在这些已有词表的基础上,根据实际需求进行扩展。
图书馆关联数据孵化小组(Library Linked Data Incubator Group)[22]明确将词表区分成值词表(value vocabulary)和RDF词表(RDF vocabulary),值词表即传统的“词表”,如:LCSH主题词表、AGROVOC叙词表、GeoNames给出的地理位置名称等。发布RDF属性值的时候会用到值词表,图书馆管理数据符号小组的报告列举出已发布成关联数据的不同用途的值词表[22](见表2)。
与图书馆领域中传统的“词表”不同,RDF词表用以指定在采用RDF描述实体信息时所使用的词汇。W3C给出RDF词表的定义23]:在语义网中,RDF词表用来描述和代表关注领域的概念和关系(即RDF类名和属性名)。并且认为:词表和本体之间并没有严格的区别,通常采用本体来指代复杂的、比较正式的词汇集,而词表则意味着较为宽松的要求。
RDF词表大部分来自于各元数据元素集,通常采用RDF Schema(RDFS)和OWL本体语言(OWL Web Ontology Language)建模语言提供的结构进行描述。比较常用的RDF词表如Dublin-Core、SKOS、FOAF、FRBR等,图1表示常见的RDF词表标签云图[24]。
2.3 CSCD-SW信息的发布
参照上文总结的关联数据发布流程,CSCDSW信息的发布流程如下:
①数据建模
选取的实体内容主要包括:论文、人员、机构、基金项目、地址、期刊。
关于文献信息的元数据标准比较丰富,CSCDSW采用了Dublin-Core、DC-TERMS、PRISM多个词表描述论文信息,另外采用了VCARD和FOAF词表描述人员和地址信息,采用了ARPFO[25]词表描述基金项目的信息。此外,CSCD-SW还自定义了一个ARA词表,用以描述论文与基金项目之间的产出关系。
CSCD-SW各实体之间的关联关系如图2所示。
图2 CSCD-SW实体关联模型
②实体命名
分配每个实体的URI格式如下:
〈baseUri〉/〈entityTypeName〉/〈entityId〉
确定基地址(baseUri)为http://semweb.csdb.cn/cscd,因此,ID为3490804的论文(entity-TypeName为article)具有如下URI:
http://semweb.csdb.cn/cscd/resource/article/3490804
③实体RDF化
以论文的元数据为例,其包含的基本信息包括标题、摘要、关键字等,图3表示(见下页)某篇论文的RDF图。
图3 CSCD论文描述的RDF图
④实体关联化
根据图2添加实体之间的RDF link。基金项目与论文、论文与人员之间的关系主要通过关系型数据库E-R模型中的主外键关联关系映射得到。
此外,CSCD-SW同时将每篇论文的分类代码描述成RDF link,如:原分类代码Q948被改造成一个指向http://semweb.csdb.cn/cs/resource/clc/Q948的链接。图4(见下页)表示添加了多个RDF link的论文元数据RDF图。
图4 包含RDF链接的论文基本信息
⑤实体发布
选取D2R Server,开放每一个实体的访问接口。CSCD-SW严格遵循了内容协商的原则:当发现HTTP请求头中包含Accept:text/html(通常由网页浏览器发出)时,返回普通的HTML页面;而当发现HTIP请求头中包含Accept:application/rdf+xml(通常由关联数据的消费程序发出)时,返回RDF/XML为描述语言的RDF描述。
⑥开放查询
CSCD-SW开放了SPARQL查询接口,地址如下:
http://semweb.csdb.cn/cscd/sparql
作为例子,如下查询可以得到在“西北师范大学”以“NCET-05-0886”为基金项目发表的论文及作者列表:
SELECT ?article ?author WHERE{
?article dc:creator ?author.
?funding ara:result ?article.
?funditag dc:title ?fundName.
?author vcard:org ?org.
?org vcard:organisation-name ?orgName.
filter(REGEX(?orgName,‘西北师范大学’)&®EX(?fundName,'NCET-05-0886'))
}
2.4 FLUX-SW信息的发布
FLUX-SW信息的发布流程如下:
①数据建模
选取的实体内容包括:野外观测台站、通量塔、监测指标、数据实体、数据属性。其中,数据实体与数据属性分别对应于某项科学数据实体(一张关系型数据表,或者一个数据文件)的基本元数据及其数据结构描述,数据实体元数据往往还包含一项dc:source属性,指向原始的数据表或者数据文件的HTTP URL。
在RDF词表上,FLUX-SW主要采用了国家生态系统观测研究网络、中国生态系统研究网络行业标准“长期生态学数据资源元数据标准”[26],同时还采用了Dublin-Core、DC-TERMS、PRISM等词表。此外,由于包含了空间信息,FLUX-SW采用了GEO词表[27],用以描述台站和通量塔的空间位置信息。
FLUX-SW各实体之间的关联关系如图5所示。
图5 FLUX-SW实体关联模型
②实体命名
分配每个实体的URI格式如下:
〈baseUri〉/〈entityTypeName〉/〈entityId〉
确定基地址(baseUri)为http://semweb.csdb.cn/flux,因此ID为“CBS”(长白山)的台站(entityTypeName为station)具有如下URI:
http://semweb.csdh.cn/flux/resource/station/CBS
③实体RDF化
添加每一条实体的属性内容,以长白山台站的记录为例,发布的属性包括台站名称、空间信息、气候特征、土壤种类、植被等。
④实体关联化
根据图5添加实体之间的RDF link。台站与数据实体、台站与通量塔、数据实体与数据属性、通量塔与监测指标之间的关系主要通过关系型数据库E-R模型中的主外键关联关系映射得到。
⑤实体发布
选取D2R Server,开放每一个实体的访问接口。FLUX-SW同样严格遵循了内容协商的原则。
⑥开放查询
FLUX-SW开放了SPARQL查询接口,地址如下:
http://semweb.csdb.cn/flux/sparql
作为例子,如下查询可以得到可监测到“CO2通量”的台站列表:
SELECT distinct(?station) ?stationName
WHERE{
?measurement flux:varname ?varname.
?measurement flux:tower ?tower.
?tower flux:station ?station.
?station dc:title ?stationName.
filter(regex(?varname,'CO2通量'))
}
3 关键问题
3.1 多语种属性
科技文献和科学数据的描述中常常会包含多语种信息,如:CSCD-SW论文的标题、关键词、摘要具有中英文两种语言描述。同样,FLUX-SW中数据实体的标题、测量指标的变量名称,也具有多语种的属性值。表3表示FLUX-SW测量指标变量名称的中英文两
本文认为:不管变量名称的文本值采用什么语种,“变量名称”该谓词都应该采用一致的“flux:varname”(因为它们的语义是一致的)。这也就意味着,在FLUX-SW中不会分别定义flux:varname_en和flux:varname_zh这样的谓词。相反通过采用XML的xml:lang属性来指定属性文本的语种。如下RDF/XML:
〈flux:varname xml:lang="en"〉CO2 flux〈/flux:varname〉
〈flux:Varname xml:lang="zh"〉CO2通量〈/flux:varname〉
构造SPARQL查询时,可以采用类似于@LANG的表达方式来匹配指定语种的属性值,如下查询将匹配varname属性文本为英文版本的“CO2 flux”:
SELECT ?measurement ?varname
WHERE{
?measurement flux:varname ?varname.
filter(?varname='CO2 flux'@en)
}
由于正则匹配函数REGEX()可以匹配不同语种的文本,因此如下查询可以同时匹配到“CO2 flux”和“CO2通量”文本:
SELECT ?measurement ?varname WHERE{
?measurement flux:varname ?varname.
filter(REGEX(?vamame,'CO2'))
}
当然,也可以利用LANG()函数设定指定的语种:
SELECT ?measurement ?varname WHERE{
?measurement flux:varname ?varname.
filter(REGEX(?varname,'CO2') && LANG(?varname)='en')
}
3.2 值词表的发布
如2.2小节所述,在Web上已经有越来越多的分类体系、主题词表等资源以关联数据的方式发布。但对于中文资源来说,目前可用的关联数据资源非常有限。因此在从事数据内容的发布之前往往还需要做一些额外准备,值词表的发布就是其中的一个步骤。
本研究基于互联网上开放的《学科分类与代码》(国标GB/T 13745)与《中国图书馆分类法》(第四版)资源,通过数据整理入库,基于D2RQ提供了分类代码的关联数据版本(简称CS-SW),仅限研究与学术交流之用[28]。
值词表的发布同样需要遵循2.1小节所提出的流程,其中比较重要的是RDF词表的选择。CS-SW采用SKOS[29]作为RDF词表,SKOS可以理解成一种编码方式[30],它定义了skos:Concept来表达一个词汇概念,并定义该概念可以具有的属性,如:skos:prefLabel、skos:altLabel、skos:hiddenLabel等,SKOS同时定义了两个概念之间的语义关系,如:skos:broader、skos:narrower、skos:related等。
如下是针对“A1马克思、恩格斯著作”的RDF描述(语言采用N3):
〈http://semweb.esdb.cn/cs/resource/clc/A1〉
a cs:clc,skos:Concept;
rdfs:label "A1马克思、恩格斯著作";
dc:identifier "A1";
skos:broader〈http://semweb.csdb.cn/cs/resource/clc/A〉;
skos:narrower〈http://semweb.csdb.cn/cs/resource/clc/A12〉,〈http://semweb.csdb.cn/cs/resource/clc/A11〉,〈http://semweb.csdb.cn/cs/resource/clc/A16〉,〈http://semweb.csdb.cn/cs/resource/clc/A18〉,〈http://semweb.csdb.cn/cs/resource/clc/A15〉,〈http://semweb.csdb.cn/cs/resource/clc/A13〉,〈http://semweb.csdb.cn/cs/resource/clc/A14〉;
skos:prefLabel "马克思、恩格斯著作".
可以看出,其中不仅描述了该分类的标签文本、所属的RDF类,还给出了该类的上位分类A、下位分类A11~A18的链接。
3.3 RDF词表的发布
在发布关联数据的同时,除了采用通用的RDF词表之外,往往还需要创建新的词汇(包括类名和属性名),根据关联数据的四项基本原则,这些RDF词表也需要发布成关联数据。
D2RQ默认会发布用户新建的RDF词表,一个RDF词汇会具有如下形式的URI:
http://semweb.csdb.cn/flux/vocab/resource/〈RDF词汇〉
在制定RDF词表时,本文建议RDF类名采取首字母大写的约定,如:Station、JournalIssue等;RDF属性名采取首字母小写的约定,如:author、isPartOf等。如下表示在FLUX-SW中台站Station类的RDF描述:
flux:Station
a rdfs:Class;
rdfs:comment "represents a station";
rdfs:label "station"@en,"观测台站"@zh.
其对应的映射文件代码为:
map:station a d2rq:ClassMap;
d2rq:dataStorage map:database;
d2rq:uriPattern "station/@@station.S_CODE|urlify@@";
d2rq:class flux:Station;
d2rq:classDefinitionLabel "starion"@en;
d2rq:classDefinitionComment "represents a station";
d2rq:classDefinitionLabel "观测台站"@zh.
3.4 其他D2R Server发布建议
在采用D2R Server发布关系型记录的时候,为了简化工作量并提高发布数据的质量,可遵循如下建议:
①不要采用空白节点(blank node)。尽管D2R配置文件提供了d2rq:bNodeIdColumns用以指定哪些列可以用来映射成空白节点,但建议避免使用空白节点。由于空白节点的局域性,会造成跨数据集的空白节点无法关联,同时在多数据集的数据合并(如:溯源信息的回溯)时,空白节点也会带来其他问题。
②尽量做好关系型数据库的前期设计。在执行generate-mapping工具之前,建议构建好数据库中的主外键关联关系,这样generate-mapping会在生成映射文件的过程中自动将这种关联映射成RDF链接的生成规则。另外,D2R Server对数据库的设计还具有一些额外的要求,如:D2R Server不允许用于生成URI的主键值中包含下划线等特殊字符,这时候往往需要通过新增一个自动增长的列作为主键来解决。
③指定非文本属性的数据类型。generate-mapping通常会忽略数据库的列值类型,而统一将各种列值视为文本类型处理,这样发布出来的数据在SPARQL查询时则无法支持数值的比较和运算。因此,建议采用d2rq:datatype来指定数值、日期属性的类型。
④适当进行实体表的拆分与合并。由于数据组织的灵活性,原始的数据模型与RDF数据模型往往会存在着不匹配,如在CSCD中,论文的期刊、卷信息与论文元数据的原始记录存储在一张表中。另外一个相反的例子,分类类目(skos:Concept对象)的信息会分别存储在不同的表(学科分类表、中图分类代码表)里,这时候又需要合并来自多张表的数据。针对这种情况,建议充分进行数据建模,不要拘泥于原有物理表的存储结构,而应该根据RDF实体之间的关系重新组织,并通过映射规则完成这种转换。
4 结语
本文结合中国科学引文数据库和中国生态系统研究网络通量数据的发布,提出了关联数据发布流程中的六个关键步骤,并结合多语种问题、值词表的发布、RDF词表的发布等关键问题进行了详细的分析,最后给出利用D2R Server发布数据的建议。由于关联数据还没有引起国内数据库领域足够的关注,关联数据在国内尚没有形成有影响力的或者成熟的应用,基本处于起步探索阶段,因此本研究具有较强的实践意义。
当然,在关联数据的发布过程中,也暴露出D2RQ的一些不足,如:在跨越多张表进行SPARQL关联查询的时候,D2R Server的性能会比较慢;HTML发布界面过于简单,不够美观,缺乏分页控制,用户体验不够友好;无法在映射之前进行有效的数据转换处理等。再以科学数据为例,由于其内容除了关系型记录外,大部分体现为数据文件,因此除了D2RQ之外还需要寻找一种高效的文件系统RDF映射框架,同时还应考虑到两者之间的无缝集成。此外,考虑到D2RQ仅仅用以显式的映射,因此还需要采取类似于Silk[31]等关联发现框架,来发现不同实体之间的隐性关联。
尽管如此,作为一种致力于关系型数据库的RDF映射框架,D2RQ由于其对环境(操作系统、数据库版本等)的适应性、操作简便性以及灵活的可配置性,仍不失为对现有数据内容完成关联数据化发布的最佳选择。
(收稿日期:2012-07-06)