莫城为,范冰冰
(华南师范大学计算机学院,广东 广州 510631)
IT时代,各个领域建设了大量的业务信息系统,大大提高了社会生产效率和服务能力,推动社会不断进步,与此同时,产生的数据呈指数型爆炸增长。互联网、移动互联网、云计算、社交网络等的发展促进了数据的多样化。回顾数据开放的发展历程发现,早期主要面向本地业务流程,存储于数据库的数据通过查询检索提供的共享,是一种小范围的面向人的共享。互联网Web发展,信息以网页形式链接和快速传播,实现了广泛的面向人的信息共享。Web-Service数据交换使得数据共享拓展到了协同的系统和设备间,但仅限于有限的业务目标和范围。在大数据DT时代下,就如文献[1]指出的人、机、物三元世界的数据若得不到整合就发挥不出大数据的价值。面向未来的数据价值、AI和智能服务,要求更大范围、关联数据的开放共享,数据用途将更灵活定义,研究的重点将是解决面向系统和设备智能的数据提供。
数据开放成为了大数据时代的必然趋势和基础。从2009年美国开始至今,近70个国家和地区实施了开放数据共享,最新的全球开放数据指数[2]排名前30位的国家中,除美国、加拿大和澳大利亚外,欧洲国家占了半数以上,开放数据程度处于领先水平,中国开放数据则处于起步阶段。虽然主要由政府倡导的国内外开放数据实践促进了数据开放共享,但是,针对数据开放的体系方法的研究,很多都停留在逻辑概念架构,工程化的实现框架和技术较少。因此,研究构建一套通用的工程化实施框架,能够较方便地实现数据集描述和开放,更好地发挥数据作为人类社会、物理世界和网络空间的纽带作用。
开放数据是能够被任何人、在任何时间以及以任何目的进行访问和使用的、机器可读的数据。因此涉及数据之间的关联表示和开放数据集的规范标记与统一描述尤为重要。目前基于Web、RDF[3]的方法和工具主要是基于链接数据[4]的思想,虽然通过数据间关联描述解决了网上业务系统之间的小范围交换共享,但不适合大数据时代的大范围的共享。开放数据使用面临查询检索、可理解性、溯源、更新和许可利用等一系列问题。如:数据从何处来,为何人所用,数据本身承载了何种信息,数据如何被使用,如何识别不同描述形式的同一份数据,如何辨别不同来源的数据的可靠性和权威性,如何确定不同版本的数据存在的前后关系和更新情况等。因此,开放的数据必须进行规范标记与统一描述,使其可被准确理解和精准定位,这通常需要元数据描述做支撑。元数据是描述某一资源的结构化数据,而描述一个领域的数据资源的元数据被称为元数据标准[5]。在开放政府数据中,国际上主流的元数据标准有美国的全球信息定位服务(GILS)、澳大利亚政府定位服务(AGLS)、都柏林核心元数据标准(DC)等。W3C基于Web和DC,构建了一套较为流行的开放数据的目录词典标准框架体系(DCAT)[6],并被应用到美国政府数据开放项目Project Open Data Metadata Schema V1.1[7]中。虽然DC凭借其广泛应用的通用性,成为了许多数据开放标准的元数据方案的基础参考,但是开放数据的很多信息在DC标准里没有定义。本文在DC元数据标准的基础上,根据应用拓展开放数据描述的主题、归属、权限、关键词、数据关系和数据调用格式等元数据,提高开放数据的可理解性,促进设备或系统对其进行自动化地分级利用,促进从传统的面向人的Web数据共享,过渡到面向设备与系统的数据集成与交互。
数据集是一定时间段内若干单体数据的集合,可以是来自对自然界的客观测量,如某一时期的大气监测记录;也可以是对人类社会关系及活动的记录,如某个地区的犯罪记录。从政府视角看,开放的数据集有农业、气候、消费、生态、教育、能源、财政、医疗、地方政府、制造、海洋、公共安全、科研等领域;从商业角度看,付费条件下开放的数据集的领域则更广,金融、社交、消费、交通、旅游、教育、电信、经济等则是其热点领域。
本文主要解决的问题有:1)开放数据集的元数据统一描述模型,因此本文提出“目录—数据集—发布”三层描述模型CDD(Catalog-Dataset-Distribution),在通用元数据标准上明确开放数据集的元数据要素、描述的层级结构,以提高开放数据集被检索发现和存储管理的能力,以及可理解性和易用性;2)考虑数据形态的多样性,例如CSV、XML、RDF、JSON等表格或文档文件作为开放数据的载体,实际上,图像、音频、视频等文件也是具有开放数据的趋势,应具备对数据集进行弹性存储和灵活治理的能力;3)提供免费数据服务,或有身份认证的服务方法,以及数据的隐私保护和分级许可共享。
数据集进行开放的整个生命周期里,数据首先从业务系统中抽取或从网络上其他数据源采集,进入开放平台后交由平台的元数据管理模块统一管理,如图1所示,这样既能向下实现数据定位,又能向上支撑数据检索与展现,还能为数据安全管控提供参照;在统一的元数据管理下,数据集可以作为“透明”的对象依托云存储设备进行存储,解决多种形态数据的弹性存储问题;数据采集发布完成后,可以通过平台的主动展现,供用户预览数据集的基本概况,也可以由检索模块被动筛选出用户需要的数据集;数据集被按需检索发现后,应进行隐私保护和分级管控,区分场景对象地释放数据集。
DOP框架中的数据集除了描述信息,一般包含一个或多个数据对象实体,即发布的数据。数据对象可以是一个文本文件、图像、音频、视频等二进制文件。数据目录指的是各种主题的数据集的分类索引,结合搜索引擎还能定制更精细的索引。元数据是数据目录、数据集、数据对象的描述,讨论元数据的数据时,数据指的是数据对象里的数据。DOP框架由数据接口模块、元数据管理模块、数据对象管理模块构成,如图1所示。
图1 DOP框架组成及模块功能示意图
DOP框架通过3个模块的协同,实现了数据开放的核心逻辑和基础功能。数据开放池DOP框架将元数据和数据分开存储管理,使数据生产者和数据使用者能够进行有效交互,同时也解决数据集弹性存储管理、数据自主采集发布和数据多元化搜索服务的问题,实现数据开放的完整性、可扩展性、安全性和可用性。
主要完成数据发布、数据检索、数据展现及数据安全控制的功能。
1)数据发布。
数据发布是将从业务系统中抽取或外部数据源采集的数据,经过该模块进行统一描述并生成特定数据格式的过程。数据集及其包含的所有发布的描述信息提交给元数据管理模块,而发布对应的数据对象则提交给数据对象管理模块,统一描述包含系统自动化模板和用户自定义2部分。
2)数据检索。
数据检索为用户提供了检索数据开放池中的资源接口,可以通过简单的数据库查询或搜索引擎实现。数据在发布时生成的元数据描述将建立关键信息索引,提交给该模块,当每次用户进行数据检索时该模块主要对关键信息进行匹配,关键信息可以是文本的关键词或音视频的关键帧等。
3)数据展现。
数据展现主要是通过汇总元数据管理模块中描述信息,形成数据资源地图,供用户对整个数据开放池进行粗放式地浏览。用户发现目标数据资源或者主动检索时,数据展现的是目标数据集的详细描述信息和数据对象访问接口。
4)数据安全。
数据安全主要完成访问控制和隐私安全处理,对于完全信任用户或者不敏感的数据资源,一般不作数据安全防护,完全开放使用。其他场景下,按照“特定用户—特定场景—特定资源”进行分级管控,特别是对敏感信息和可能因为大数据分析而泄露隐私的数据,必须采取差分隐私等方式进行隐私保护,此时该功能模块起到数据网关的作用。
元数据管理模块负责数据开放池平台产生的全部元数据的管理,小到数据对象、数据集的概要描述,大到数据目录、隐私防护策略等。元数据管理模块由关系型数据库存储数据目录、数据集的数据发布的描述信息,每条数据发布记录对应数据对象管理模块中的一个数据对象,实现数据存储与管理的解耦。元数据管理模块统一管理这些结构化信息,并随时更新来自数据接口模块进行数据发布时生成的元数据,定期将全平台的元数据索引信息更新到数据接口模块供数据检索和数据展现。数据安全进行访问控制和隐私安全处理时也要向该模块请求用户、场景、资源及隐私方案的信息。
数据存储模块负责所有数据对象的物理存储与管理。需要综合考虑不同数据源的不同数据形态,能够灵活管理关系型、非关系型数据,可以由本地存储服务实现或租用云平台服务商提供的云存储服务,如腾讯云的COS对象存储,通过标准的Restful API接口调用,实现任意数量和形式的非结构化数据对象的灵活管理与存取。数据管理主要是为了存储大量的数据对象而独立存在的业务逻辑,应当考虑数据传输过程中的带宽以及数据存储的弹性扩容等问题。
元数据描述是DOP框架中元数据管理模块的核心。元数据描述的好坏,决定了数据开放中的数据管理、查询的效率以及数据的可理解性和易用性。因此必须确立一套共同遵循的元数据描述模型。元数据是描述某一数据资源的结构化数据,以相对成熟的元数据标准为核心,根据应用的领域进行扩展和规范统一。多个数据集之间的关系主要通过数据目录的逻辑层次来体现,数据开放池DOP框架根据自身特点,为数据集开放构建了一种“目录—数据集—发布”三层描述模型CDD,如图2所示。其中,目录是数据集的分类索引标准;数据集是一个主题的数据发布集合的描述记录;数据发布是对数据对象的具体描述。该模型体现了数据的逻辑组织关系,与具体的数据对象存储解耦,对用户也是透明的。
图2 CDD模型及描述示意图
CDD模型分成三层描述逻辑——目录层、数据集层和数据发布层。CDD的特点是采用分层描述体系的机制,每层都具有各自特定的属性,可为各组织机构在实施数据开放时提供较好的参考。
1)数据目录层。
数据目录层是对数据较粗粒度的分类描述,也可理解为数据类目,比如按农业、气候、环境等领域进行分类,其主要的描述属性如图2所示。其中主页是一个数据展示时分配给该目录的一个网页链接;发布者一般为权威部门或机构实体;权限用于区分该类数据属于内部共享还是对公众公开,如国家安全数据对公众是不开放的;数据集(列表)是该类下属的数据集的索引。
2)数据集层。
数据集层是对某一主题数据集合的描述,与目录层有类似的描述信息,有唯一的标识符。发布者可以是个人或机构;联系点是该数据集所属机构或实体的联系方式,是一个结构化信息的索引;发布(列表)是该数据集包含的各种格式的数据对象。
3)数据发布层。
数据发布层是对用户可直接访问数据集的一个发布/数据对象的描述,可以是一个可下载文件,或者是一个可以使用的基于数据集的网络服务,如Restful API调用。与前述2层不同的是,该层聚焦到了具体数据对象这一细粒度的描述上,数据格式指的是数据对象的媒体类型;下载链接描述的该数据发布对应的数据的资源定位,通常是一个可下载的URL或者调用网络服务获取数据的API。
数据对象通过数据发布的定位元数据获取,经数据接口处理后呈现给用户。最简单的数据对象可以是一个文本文件,常见格式通常可以是CSV、RDF、JSON、XML、HTML等。文本类型的数据对象呈现给用户时,应当包含对象数据及其元数据描述。如表1所示,元数据和数据这2部分,元数据由基础描述、数据字段描述和附加描述构成。基础描述参照数据集和数据发布的描述信息,如该数据对象隶属的数据集标识号、名称、简介等,或对该份数据的统计描述,如总数据记录数等;数据字段描述可以对每个数据字段的名称、值类型、值域等描述;附加描述可指定数据文件的读写权限等。该统一描述同样适用于其他类型的数据对象,表1中的数据指的是数据集的引用,是结构化描述信息的外部参照字段。
表1 应用CDD对数据对象进行描述
数据文件元数据基础描述数据字段描述附加描述数据
使用数据开放池框架实施数据开放应用可以根据实际需求和能力进行部署。本文应用实例采用Node.js+MySQL+COS架构,其对象存储分别对应数据接口模块、元数据管理模块、数据对象管理模块,实现了简单的数据开放。Node.js主要实现网站服务和数据接口的业务逻辑,MySQL维护CDD中的目录、数据集、发布的查增删改信息,每一个发布对应的数据文件的存储通过Restful API提交到腾讯云COS对象存储上。
数据采集发布是实施数据开放的第一步。本文的实验对象是“中国裁判文书网”[8]裁决文书的数据。“中国裁判文书网”是中华人民共和国最高人民法院公开案件文书的权威渠道,目前已发布了1996年至今各级人民法院裁决的3638342份文书,该网站数百万的文书是采集发布开放犯罪数据集的数据来源。要完成发布一个犯罪数据集的数据开放实验,可以初步抽取每一份文书中的核心信息形成一条犯罪记录,如嫌疑人姓名、年龄、居住地、犯罪地点、犯罪类型这5个要素。
算法犯罪数据集数据发布
Input:裁判文书集
Output:犯罪数据集和元数据
1)Load MetadataTemplate
2)For文书in中国裁判文书网
3)Record←姓名&年龄&居住地&犯罪地点&类型
4)Add Record to DataList
5)End For each文书
6)Post DataList
7)Add Column Names to Metadata
8)Add DataList Address to Metadata
9)Post Metadata
数据接口模块发布完数据集后,可以将元数据主动展现给用户,如示例1所示。
示例1犯罪数据集的元数据描述
{
元数据:{
标识号:sd87we
标题:"中国最高人民法院判决犯罪数据集"
简介:"这是一份中国最高人民法院判决犯罪数据集"
关键词:["人民法院","犯罪"]
所有者:"中国最高人民法院"
发布者:"张三"
发布时间:"2017-05-05"
访问次数:"1"
对象标识:"21515155"
数据记录:"1000000"
字段描述:[{
列索引:"1"
字段名:"姓名"
数据类型:"文本"
数据描述:"罪犯的姓名"
},{…字段名:"年龄"…},{…字段名:"居住地"…},{…字段名:"犯罪地点"…},{
列索引:"5"
字段名:"犯罪类型"
数据类型:"文本"
数据描述:"罪犯所犯的罪行"
},]
…
}
}
根据用户后续的请求,数据接口模块可以被动地返回数据对象中的数据,如示例2所示。
示例2犯罪数据集的数据
{
数据:{
["李四","28","广州市天河区","广州市天河区","强奸罪"],
["王五","35","广州市越秀区","广州市天河区","故意杀人罪"],
["赵六","41","广州市荔湾区","广州市天河区","抢劫罪"],
["钱七","48","广州市萝岗区","广州市天河区","故意杀人罪"],
["蔡八","26","广州市黄埔区","广州市天河区","强奸罪"],
["陈九","38","广州市白云区","广州市天河区","故意杀人罪"],
…
}
}
根据数据开放技术和应用需求,结合国内外数据开放的特点和开放政府数据的实践,本文提出了数据集标记与描述模型以及数据开放池的框架,并实现了简单的数据开放应用。但应用部署实验中,仍存在一些问题。由于没有部署搜索引擎模块,数据集的搜索主要基于数据库查询,未来可以考虑使用专门的搜索应用服务器提高搜索效率和外部数据关联;数据集以文件打包方式存储,在一定意义上确保了访问获取可靠性,但是数据集增量更新的扩展能力有一定限制,新增数据不能以单个数据记录注入已发布数据集,下一步将对此加以研究解决。此外,开放数据池的数据集默认完全符合开放数据定义的“一类可以被任何人免费使用、再利用、再分发的数据”,但考虑到实际国情,数据访问的分级使用和隐私安全是根据实际应用需求进行扩展完善的。未来大数据开放中,现有对数据集结构化标记与描述需要加以扩展补充,既要保存基础的标记结构和核心元数据规范,还应当充分利用CDD模型描述数据集的灵活性,实现元数据方案的个性化定制,进一步适应流式数据、交互数据以及图式数据等特点。