CN104933162A - 一种从元数据标注的csv数据到rdf数据的转换方法 - Google Patents
一种从元数据标注的csv数据到rdf数据的转换方法 Download PDFInfo
- Publication number
- CN104933162A CN104933162A CN201510364084.1A CN201510364084A CN104933162A CN 104933162 A CN104933162 A CN 104933162A CN 201510364084 A CN201510364084 A CN 201510364084A CN 104933162 A CN104933162 A CN 104933162A
- Authority
- CN
- China
- Prior art keywords
- data
- rdf
- csv
- metadata
- data structure
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
Abstract
本发明公开了一种从元数据标注的CSV数据到RDF数据的转换方法,包括:读取并解析CSV文件,获得表列数据并存入内存数据结构;读取并解析元数据描述文件,获得元数据并存入内存数据结构;结合已获得的表列数据与元数据,生成RDF三元组集并存入内存数据结构;将生成的RDF三元组集输出为Turtle语法格式的RDF数据文件。本发明公开的数据格式转换方法能将用W3C技术规范《Web表列数据与元数据模型》定义的元数据模型词汇进行标注的CSV数据转换为语义上等价的RDF数据,这样就可以利用现有软件工具方便地将转换所得的RDF数据发布到关联数据网,供各式各样的语义万维网应用共享、复用与处理来自CSV文件中的表列数据,使得量大面广的CSV数据能发挥最大潜能。
Description
技术领域
本发明涉及数据管理领域中的一种数据格式转换方法,尤其是一种从元数据标注的CSV数据到RDF数据的转换方法。
背景技术
在科学领域和电子政务领域的开放数据运动(open data movements)使得万维网(World Wide Web)上逗号分隔值(comma-separated values,CSV)格式的数据显著增长。CSV是常用的表列数据(tabular data)文件格式,虽然简单实用,但是难以表达数据世系(provenance)、数据域含义、数据域/表之间的关系、用户访问权限等元数据(metadata)或标注(annotations)信息。有鉴于此,国际万维网联盟(W3C)的数据行动计划(Data Activity:http://www.w3.org/2013/data/)最近成立了称为“CSV on the Web”的工作组(http://www.w3.org/2013/csvw/),旨在将原有非标准CSV格式(参见:Y.Shafranovich,Common Format and MIME Type for Comma-Separated Values(CSV)Files.IETF RFC 4180,October 2005.http://tools.ietf.org/html/rfc4180)进行扩充,形成CSV标准(俗称CSV+),并制订相关技术规范,以方便CSV数据的操纵、可视化、解释、多表数据结合、数据格式转换等Web高级应用。
CSV+标准中,W3C正在制订的《Web表列数据与元数据模型》技术规范(参见:JeniTennison,Gregg Kellogg(Editors).Model for Tabular Data and Metadata on the Web.W3CWorking Draft 16 April 2015.http://www.w3.org/TR/tabular-data-model/.[访问日期:2015/6/26])以及《表列数据的元数据词汇》技术规范(参见:Jeni Tennison,Gregg Kellogg(Editors).Metadata Vocabulary for Tabular Data.W3C Working Draft 16 April 2015.http://www.w3.org/TR/tabular-metadata/.[访问日期:2015/6/26])可用来对CSV数据进行建模、描述与标注,形成所谓的“元数据标注的CSV数据”。
另一方面,资源描述框架(Resource Description Framework,RDF)(参见:RichardCyganiak,David Wood,Markus Lanthaler(Editors).RDF 1.1 Concepts and Abstract Syntax.W3C Recommendation 25 February 2014.http://www.w3.org/TR/rdf11-concepts/.)是表示Web信息的一种公共框架和格式;RDF数据模型是一种称为RDF图的有向标记图(directed,labeled graph)语义模型,已成为万维网尤其是语义万维网(Semantic Web)或数据网(Webof Data)上的标准数据模型和数据表示格式。当前流行的关联数据(Linked Data)或关联开发数据(Linked Open Data)就是以RDF作为数据模型与表示格式的。
基于以上背景,如何实现从元数据标注的CSV数据到RDF数据的转换,是亟待解决的关键技术问题。由于CSV+标准正在制订过程中(已接近完成),因此,目前国内外尚未出现从元数据标注的CSV数据到RDF数据的完整转换方法及其详细实现技术。
本发明旨在提供一种数据格式的转换方法,该方法能将用W3C技术规范《Web表列数据与元数据模型》定义的元数据模型词汇进行标注的CSV数据转换为语义上等价的RDF数据。RDF有多种语义上相互等价的语法格式(参见:Guus Schreiber,Yves Raimond(Editors).RDF 1.1 Primer.W3C Working Group Note 24 June 2014.http://www.w3.org/TR/rdf11-primer/.),本发明技术方案的具体实施方式中用Turtle语法(参见:Eric Prud'hommeaux,Gavin Carothers(Editors).RDF 1.1 Turtle:Terse RDF TripleLanguage.W3C Recommendation 25 February 2014,http://www.w3.org/TR/turtle/.)来表示RDF数据。
发明内容
本发明旨在提供一种数据格式的转换方法,该方法能将用W3C技术规范《Web表列数据与元数据模型》定义的元数据模型词汇进行标注的CSV数据转换为语义上等价的RDF数据(本发明技术方案的具体实施方式中用Turtle语法来表示RDF数据)。
为了解决上述技术问题,本发明公开一种从元数据标注的CSV数据到RDF数据的转换方法,包括:步骤S1,读取并解析CSV文件,获得表列数据并存入内存数据结构;步骤S2,读取并解析元数据描述文件,获得元数据并存入内存数据结构;步骤S3,结合已获得的表列数据与元数据,生成RDF三元组集并存入内存数据结构;步骤S4,将生成的RDF三元组集输出为Turtle语法格式的RDF数据文件。
所述步骤S1进一步包括:步骤S1-1,逐行读取CSV文件中的表列数据,生成输入流;步骤S1-2,解析输入流,并将解析结果存入表列数据内存数据结构。
所述步骤S2进一步包括:步骤S2-1,读取元数据描述文件并生成JSON对象;步骤S2-2,创建存储元数据的内存数据结构;步骤S2-3,解析JSON对象,提取CSV表描述信息后存入元数据内存数据结构;步骤S2-4,解析JSON对象,提取CSV模式描述信息后存入元数据内存数据结构;步骤S2-5,解析JSON对象,提取CSV列描述信息后存入元数据内存数据结构。
所述步骤S3进一步包括:步骤S3-1,创建存储RDF三元组的内存数据结构;步骤S3-2,从元数据内存数据结构中提取CSV表描述信息,生成RDF三元组后存入RDF三元组内存数据结构;步骤S3-3,从元数据内存数据结构中提取CSV列描述信息,生成RDF三元组后存入RDF三元组内存数据结构;步骤S3-4,结合CSV数据和元数据中列描述信息,生成RDF三元组后存入RDF三元组内存数据结构。
所述步骤S3-4进一步包括:步骤S3-4-1,根据元数据中列描述信息确定CSV列名所对应的RDF属性名以及该列值的XML模式数据类型;步骤S3-4-2,逐个提取CSV数据中的列值,转换成RDF三元组。
所述步骤S4进一步包括:步骤S4-1,将名空间前缀定义添加到RDF三元组内存数据结构;步骤S4-2,将RDF三元组内存数据结构输出为RDF数据文件。
本发明的技术方案能将元数据标注的CSV数据转换为语义上等价的RDF数据(本发明技术方案的具体实施方式中用Turtle语法来表示RDF数据),这样就可以利用现有软件工具方便地将转换所得的RDF数据发布到关联数据网(the Web of Linked Data),供各式各样的语义万维网(Semantic Web)应用共享、复用与处理来自CSV文件中的表列数据,使得量大面广的CSV数据能发挥最大潜能。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
图1示出了根据本发明技术方案的从元数据标注的CSV数据到RDF数据的转换方法的流程示意图;
图2示出了根据本发明技术方案的读取并解析元数据描述文件、获得元数据并存入内存数据结构的处理流程示意图;
图3示出了根据本发明技术方案的结合已获得的表列数据与元数据、生成RDF三元组集并存入内存数据结构的处理流程示意图。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的概念、对象、要素等或具有相同或类似功能的概念、对象、要素等。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
图1示出了根据本发明技术方案的从元数据标注的CSV数据到RDF数据的转换方法的流程示意图。图2示出了根据本发明技术方案的读取并解析元数据描述文件、获得元数据并存入内存数据结构的处理流程示意图。图3示出了根据本发明技术方案的结合已获得的表列数据与元数据、生成RDF三元组集并存入内存数据结构的处理流程示意图。
本发明技术方案的具体实施方式以Java程序设计语言为例来描述。
为便于理解技术方案中的处理步骤,表1列出了用于存储元数据的内存数据结构(自定义的Java公共类TableMetaData),表2列出了名空间前缀定义。
表1 用于存储元数据的内存数据结构(自定义的Java公共类TableMetaData)
表2 名空间前缀定义
为了解决上述技术问题,本发明是通过以下技术方案实现的:
如图1所示,一种从元数据标注的CSV数据到RDF数据的转换方法,包括如下步骤:
步骤S1,读取并解析CSV文件,获得表列数据并存入内存数据结构,具体包括:
步骤S1-1,逐行读取CSV文件中的表列数据,生成输入流,具体如下:
首先,逐行读取CSV文件中的表列数据,并将输入流存入到字符串中。
其次,设变量dataList,其数据类型为Java数组列表(ArrayList<E>)。
步骤S1-2,解析输入流,并将解析结果存入表列数据内存数据结构,具体如下:
根据逗号对CSV数据中的每一行进行分割后转换成一个字符串数组,并将其添加到dataList中。
步骤S2,读取并解析元数据描述文件,获得元数据并存入内存数据结构,如图2所示,具体包括:
步骤S2-1,读取元数据描述文件并生成JSON对象,具体如下:
首先,读取元数据描述文件,生成输入字符串流。
其次,调用第三方JSON开源解析jar包,将输入字符串流转换为JSON对象。
步骤S2-2,创建存储元数据的内存数据结构,具体如下:
设变量tableMD,其类型为自定义的Java公共类TableMetadata,具体的数据结构见表1,用于存储解析后的元数据信息。
步骤S2-3,解析JSON对象,提取CSV表描述信息后存入元数据内存数据结构,具体如下:
根据JSON对象的关键词提取元数据中关于表描述的信息,其中包括:CSV文件名称(“dc:title”)、CSV数据的关键词(“dc:keywords”)、CSV文件的发布者信息(“dc:publisher”)、CSV文件的修改信息(“dc:modified”)等,并将这些信息存入tableMD。
步骤S2-4,解析JSON对象,提取CSV模式描述信息后存入元数据内存数据结构,具体如下:
根据JSON对象的关键词提取元数据中关于模式描述的信息,其中包括:主键信息(“primaryKey”)、URL模版信息(“urlTemplate”)等,并将这些信息存入tableMD。
步骤S2-5,解析JSON对象,提取CSV列描述信息后存入元数据内存数据结构,具体如下:
设置变量columnMD,其类型为自定义的Java公共类ColumnMetadata,用于存储相应的列描述信息。
根据JSON对象的关键词提取元数据中关于列描述的信息,其中包括:某一列在CSV中显示的名称(“title”),该列在RDF中显示的名称(“name”),该列中值的数据类型(“datatype”),对于该列的语言描述(“dc:description”),等,并将这些信息存入到columnMD的相应属性中。
重复步骤S2-5的以上操作并将columnMD存入tableMD的相应属性中,直至列描述信息解析完毕。
步骤S3,结合已获得的表列数据与元数据,生成RDF三元组集并存入内存数据结构,如图3所示,具体包括:
步骤S3-1,创建存储RDF三元组的内存数据结构,具体如下:
设变量为strBuffer,定义其为Java的StringBuffer的实例。该实例主要用来存储RDF三元组数据集(本具体实施方式中用Turtle语法来表示RDF数据)。
步骤S3-2,从元数据内存数据结构中提取CSV表描述信息,生成RDF三元组后存入RDF三元组内存数据结构,具体如下:
RDF三元组的主语统一为<CSVFileURL:table>,其中,CSVFileURL是CSV源文件的绝对URL,table是终极符。
RDF三元组的谓语和宾语的设置方法为:从tableMD对象中提取表的描述信息,由于元数据文件和RDF文件使用的是相同的名空间前缀(具体见表2),因此可让描述某一信息的RDF三元组的谓语与描述该信息的元数据中的关键词保持相同,如CSV的表名“dc:title”的谓语为“dc:title”,宾语为其值;CSV的表的行信息“csvw:row”的谓语为“csvw:row”,宾语为其值。
特别地,根据W3C的规范,对于CSV表中的每一行信息(csvw:row),均需生成相应的RDF三元组,具体如下:
csvw:row a csvw:Table
csvw:row csvw:rownum num
csvw:row csvw:url <#row=num+1>
csvw:row csvw:describes value
其中,num表示该行的行号,value为元数据中对该行的描述。
根据主语、谓语、宾语生成相应的RDF三元组,将RDF三元组的Turtle语法格式存入strBuffer中。
步骤S3-3,从元数据内存数据结构中提取CSV列描述信息,生成RDF三元组后存入RDF三元组内存数据结构,具体如下:
从tableMD对象中提取列属性的描述信息,如:列在CSV中显示的名称“title”、列在RDF中显示的名称“name”,对于该列的语言描述“dc:description”,等。对于列属性描述的RDF三元组共有三组,具体设置如下:
首先,设置主语,具体方法为:三组RDF三元组共用一个主语,主语的设置分两种情况:
(1)若该列表头不为空,则每一列的RDF三元组设置RDF主语为<CSVFileURL:Name>,其中,CSVFileURL是CSV源文件的绝对URL,Name为元数据中定义的列的“name”属性值。
(2)若该列表头值为空,则每一列的RDF三元组设置RDF主语为<CSVFileURL:_col=numOfColumn>,其中,CSVFileURL是CSV源文件的绝对URL,numOfColumn为该列的列数。
其次,设置谓语与宾语,具体方法为:三组RDF三元组采用的是不同的谓语与宾语,具体对应关系如下:
<CSVFileURL:Name> a rdf:Property
<CSVFileURL:Name> rdfs:label Title
<CSVFileURL:Name> dc:description Description
其中,Title表示从tableMD中提取的与Name对应的“title”信息,Description表示从tableMD中提取的与Name对应的“description”信息,其中名空间前缀含义见表2。
最后,将逐列生成的RDF三元组的Turtle语法格式存入strBuffer中。
步骤S3-4,结合CSV数据和元数据中列描述信息,生成RDF三元组后存入RDF三元组内存数据结构,具体包括:
步骤S3-4-1,根据元数据中列描述信息确定CSV列名所对应的RDF属性名以及该列值的XML模式数据类型,具体如下:
首先,初始化变量字符串数组headerLine[]和dataType[]。具体方法为:提取dataList首个元素(即为CSV的表头信息),赋值给字符串数组headerLine[];新建字符串数组dataType[headerLine().length],用以存储相应的RDF宾语的数据类型。
然后,为每列添加name和datatype信息。具体方法为:将headerLine[i](i从0至headLine().length)与tableMD对象的title属性值进行匹配,将匹配成功的title对应的name属性值赋值给headerLine[i],同时将title对应的datatype属性值赋值给datatype[i];按以上方法重复为每列添加name和datatype信息,直至i达到headLine().length。
步骤S3-4-2,逐个提取CSV数据中的列值,转换成RDF三元组,具体如下:
首先,设置主语,具体方法为:对于每一行元素,其主语是一致的。解析tableMD中的属性urlTemplate,提取以“{}”包含的字符串,逐个与表头信息进行匹配,匹配成功后,用该行的相对应的具体列值替换urlTemplate的字符串,生成该行的RDF主语,主语前缀为CSVFileURL。
其次,设置谓语和宾语,谓语的设置主要分为两种情况:
(1)若元数据中定义了谓词模版predicateUrl,则解析predicateUrl,生成该列对应的谓词CSVFileURL:{predicateUrl},其中CSVFileURL为CSV源文件的绝对URL。RDF主语、谓语、宾语的对应关系如下所示:
<urlTemplate> <#CSVFileURL:{predicateUrl}> <dataList.get(numOfRow)[i]>
其中,numOfRow表示行数,dataList.get(numOfRow)[i]表示该行下第i列的值。
(2)若元数据中未定义谓词模版predicateUrl,则RDF三元组的谓语设置为CSVFileURL:headLine[i],其中headLine[i]表示第i列的名称。RDF三元组的宾语即为该列在该行下的值。RDF主语、谓语、宾语的对应关系如下所示:
<urlTemplate> <#CSVFileURL:headLine[i]> <dataList.get(numOfRow)[i]>
其中,numOfRow表示行数,dataList.get(numOfRow)[i]表示该行下第i列的值。
然后,对于每个宾语,要附上值的相应数据类型,结合上一步,得到RDF三元组整体对应关系如下:
<urlTemplate> <#CSVFileURL:headLine[i]>
<dataList.get(numOfRow)[i]>^^<http://www.w3.org/2001/XMLSchema/dataType[i]>
其中,dataType[i]表示第i列数据的数据类型。
按以上方法重复设置谓语和宾语,直至i达到headLine().length。
最后,将该行生成的RDF三元组的Turtle语法格式存入strBuffer中。重复步骤S3-4-2的以上操作,直至dataList数据处理完毕。
步骤S4,将生成的RDF三元组集输出为Turtle语法格式的RDF数据文件,具体包括:
步骤S4-1,将名空间前缀定义添加到RDF三元组内存数据结构,具体如下:
名空间在RDF数据集中具体格式如下所示:
prefix:<CSVFileURL#>.
prefix csvw:<http://www.w3.org/ns/csvw#>.
prefix dcat:<http://www.w3.org/ns/dcat#>.
prefix prov:<http://www.w3.org/ns/prov#>.
prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
prefix dc:<http://purl.org/dc/terms#>.
prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
prefix xsd:<http://www.w3.org/2001/XMLSchema#>.
prefix sch:<http://schema.org#>
步骤S4-2,将RDF三元组内存数据结构输出为RDF数据文件,具体如下:
调用Java文件类,根据指定路径生成RDF数据文件。然后将strBuffer输出至该RDF文件中。
下文以一个具体的数据格式转换例子来进一步描述本发明技术方案的具体实施方法。
给定待转换的CSV数据例子如下:
GID,On Street,Species,Trim Cycle,Inventory Date
1,ADDISON AV,Celtis australis,Large Tree Routine Prune,10/18/2010
2,EMERSON ST,Liquidambar styraciflua,Large Tree Routine Prune,6/2/2010
3,EMERSON ST,Liquidambar styraciflua,Large Tree Routine Prune,6/2/2010
该CSV文件为4行5列的表列数据,CSV的绝对URL为http://example.org/tree-ops.csv。
给定CSV数据的标注元数据例子如下:
本发明的技术方案已在Java SE 8平台上编程实现,并用以下方式来具体实施。
如图1所示,一种从元数据标注的CSV数据到RDF数据的转换方法,包括如下步骤:
步骤S1,读取并解析CSV文件,获得表列数据并存入内存数据结构,具体包括:
步骤S1-1,逐行读取CSV文件中的表列数据,生成输入流,具体如下:
首先,逐行读取CSV文件中的表列数据,并将输入流存入到字符串中。
其次,设变量dataList,其数据类型为Java数组列表(ArrayList<E>)。
步骤S1-2,解析输入流,并将解析结果存入表列数据内存数据结构,具体如下:
根据逗号对CSV数据中的每一行进行分割后转换成一个字符串数组,并将其添加到dataList中。
步骤S2,读取并解析元数据描述文件,获得元数据并存入内存数据结构,如图2所示,具体包括:
步骤S2-1,读取元数据描述文件并生成JSON对象,具体如下:
首先,读取元数据描述文件,生成输入字符串流。
其次,调用第三方JSON开源解析jar包,将输入字符串流转换为JSON对象。
步骤S2-2,创建存储元数据的内存数据结构,具体如下:
设变量tableMD,其类型为自定义的Java公共类TableMetadata,具体的数据结构见表1,用于存储解析后的元数据信息。
步骤S2-3,解析JSON对象,提取CSV表描述信息后存入元数据内存数据结构,具体如下:
根据JSON对象的关键词提取元数据中关于表描述的信息,其中包括:CSV文件名称(“dc:title”)的值为“Tree Operations”;CSV数据的关键词(“dc:keywords”)的值为“tree”、“street”、“maintenance”;CSV文件的发布者信息(“dc:publisher”),包括两个属性:发布者姓名(“publisherName”)的值为“Example Municipality”,发布者网址(“publisherWebsite”)的值为“http://example.org”;CSV文件的修改信息(“dc:modified”)的值为“2010-12-31”,等,并将这些信息存入tableMD的相应属性中。
步骤S2-4,解析JSON对象,提取CSV模式描述信息后存入元数据内存数据结构,具体如下:
根据JSON对象的关键词提取元数据中关于模式描述的信息,其中包括:主键信息(“primaryKey”)的值为“GID”、URL模版信息(“urlTemplate”)的值为“#gid-{GID}”,等,并将这些信息存入tableMD的相应属性中。
步骤S2-5,解析JSON对象,提取CSV列描述信息后存入元数据内存数据结构,具体如下:
设置变量columnMD,其类型为自定义的Java公共类ColumnMetadata,用于存储相应的列描述信息。
根据JSON对象的关键词提取元数据中关于列描述的信息,以第一列为例,该列在CSV中显示的名称(“title”)的值为“GID”,该列在RDF中显示的名称(“name”)的值为“GID”,该列中值的数据类型(“datatype”)的值为“string”,对于该列的语言描述(“dc:description”)的值为“An identifier for the operation on a tree.”,等,并将这些信息存入到columnMD的相应属性中。
重复步骤S2-5的以上操作并将columnMD存入tableMD的相应属性中,直至列描述信息解析完毕。
步骤S3,结合已获得的表列数据与元数据,生成RDF三元组集并存入内存数据结构,如图3所示,具体包括:
步骤S3-1,创建存储RDF三元组的内存数据结构,具体如下:
设变量为strBuffer,定义其为Java的StringBuffer的实例。该实例主要用来存储RDF三元组数据集(本具体实施方式中用Turtle语法来表示RDF数据)。
步骤S3-2,从元数据内存数据结构中提取CSV表描述信息,生成RDF三元组后存入RDF三元组内存数据结构,具体如下:
RDF三元组的主语统一为<http://example.org/tree-ops.csv/table>,其中前部http://example.org/tree-ops.csv是CSV文件的绝对URL。
RDF三元组的谓语和宾语的设置方法为:从tableMD对象中提取表的描述信息,由于元数据文件和RDF文件使用的是相同的名空间前缀(具体见表2),所以可以设置描述某一信息的RDF三元组的谓语与描述该信息的元数据中的关键词相同,如CSV的表名“dc:title”的谓语为“dc:title”,宾语为其值;CSV的表的行信息“csvw:row”的谓语为“csvw:row”,宾语为其值。
表描述信息生成的RDF三元组如下所示:
特别地,根据W3C的规范,对于CSV表中的每一行信息(csvw:row),均需生成相应的RDF三元组。以第一行为例,生成的RDF三元组如下:
csvw:row a csvw:Table.
csvw:row csvw:rownum 1.
csvw:row csvw:url <#row=2>.
csvw:row csvw:describes <http://example.org/tree-ops.csv/gid-1>.
根据主语、谓语、宾语生成相应的RDF三元组,将RDF三元组的Turtle语法格式存入strBuffer中。
步骤S3-3,从元数据内存数据结构中提取CSV列描述信息,生成RDF三元组后存入RDF三元组内存数据结构,具体如下:
从tableMD对象中提取列属性的描述信息,如:列在CSV中显示的名称“title”、列在RDF中显示的名称“name”,对于该列的语言描述“dc:description”,该列值的数据类型“datatype”,等。对于列属性描述的RDF三元组共有三组,具体设置如下:
首先,设置主语。具体方法为:三组RDF三元组共用一个主语,主语的设置分两种情况。由于该CSV表的表头不为空,故采用其中一种设置方法,每一列的RDF三元组设置RDF主语具体如下所示:
第一列主语:<http://example.org/tree-ops.csv/GID>
第二列主语:<http://example.org/tree-ops.csv/on-street>
第三列主语:<http://example.org/tree-ops.csv/species>
第四列主语:<http://example.org/tree-ops.csv/trim-cycle>
第五列主语:<http://example.org/tree-ops.csv/inventory-date>
其次,设置谓语与宾语,具体方法为:三组RDF三元组采用的是不同的谓语与宾语,以第一列为例,生成的RDF三元组如下所示:
<http://example.org/tree-ops.csv/GID> a rdf:Property.
<http://example.org/tree-ops.csv/GID> rdfs:label "GID".
<http://example.org/tree-ops.csv/GID> dc:description "An identifier for the operationon a tree.".
最后,将逐列生成的RDF三元组的Turtle语法格式存入strBuffer中。
步骤S3-4,结合CSV数据和元数据中列描述信息,生成RDF三元组后存入RDF三元组内存数据结构,具体包括:
步骤S3-4-1,根据元数据中列描述信息确定CSV列名所对应的RDF属性名以及该列值的XML模式数据类型,具体如下:
首先,初始化变量字符串数组headerLine[]和dataType[]。具体方法为:提取dataList首个元素(即为CSV的表头信息),该例中为GID、On Street、Species、Trim Cycle、InventoryDate,赋值给字符串数组headerLine[];新建字符串数组dataType[headerLine().length],用以存储相应的RDF宾语的数据类型。
然后,为每列添加name和datatype信息。具体方法为:将headerLine[i](i从0至headLine().length)与tableMD对象的title属性值进行匹配,将匹配成功的title对应的name属性值赋值给headerLine[i],同时将title对应的datatype属性值赋值给datatype[i];按以上方法重复为每列添加name和datatype信息,直至i达到headLine().length,最终得到headerLine的值分别为:GID、on-street、species、trim-cycle、inventory-date,以及datatype的值分别为:string、string、string、string、date。
步骤S3-4-2,逐个提取CSV数据中的列值,转换成RDF三元组,具体如下:
首先,设置主语,具体方法为:对于每一行元素,其主语是一致的。解析tableMD中的属性urlTemplate,其值为#gid-{GID},提取以“{}”包含的字符串GID,逐个与表头信息进行匹配,匹配成功后,用该行的相对应的具体列值替换urlTemplate的字符串,生成该行的RDF主语,以第一行为例,生成的主语为<http://example.org/tree-ops.csv/gid-1>。
其次,设置谓语和宾语,谓语的设置主要分为两种情况。由于该例元数据没有定义predicateUrl,故属于第二种情况,即RDF三元组的谓语设置为CSVFileURL:headLine[i],其中headLine[i]表示第i列的名称。RDF三元组的宾语即为该列在该行下的值。以第一行为例,RDF主语、谓语、宾语的对应关系如下所示:
然后,对于每个宾语,要附上值的相应数据类型。同样以第一行为例,结合上步,得到RDF三元组整体对应关系如下:
按以上方法重复设置谓语和宾语,直至i达到headLine().length。
最后,将该行生成的RDF三元组的Turtle语法格式存入strBuffer中。重复步骤S3-4-2的以上操作,直至dataList数据处理完毕。
步骤S4,将生成的RDF三元组集输出为Turtle语法格式的RDF数据文件,具体包括:
步骤S4-1,将名空间前缀定义添加到RDF三元组内存数据结构,具体如下:
命名空间在RDF数据集中具体格式如下所示:
prefix:<http://example.org/tree-ops.csv#>.
prefix csvw:<http://www.w3.org/ns/csvw#>.
prefix dcat:<http://www.w3.org/ns/dcat#>.
prefix prov:<http://www.w3.org/ns/prov#>.
prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
prefix dc:<http://purl.org/dc/terms#>.
prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
prefix xsd:<http://www.w3.org/2001/XMLSchema#>.
prefix sch:<http://schema.org#>.
步骤S4-2,将RDF三元组内存数据结构输出为RDF数据文件,具体如下:
调用Java文件类,根据指定路径生成RDF数据文件。然后将strBuffer输出至该RDF文件中。
生成的RDF数据如下所示:
prefix:<http://example.org/tree-ops.csv#>.
prefix csvw:<http://www.w3.org/ns/csvw#>.
prefix dc:<http://purl.org/dc/terms/>.
prefix dcat:<http://www.w3.org/ns/dcat#>.
prefix prov:<http://www.w3.org/ns/prov#>.
prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
prefix schema:<http://schema.org/>.
prefix xsd:<http://www.w3.org/2001/XMLSchema#>.
:gid-1
<#GID>"1"^^xsd:string;
<#on-street>"ADDISON AV"^^xsd:string;
<#species>"Celtis australis"^^xsd:string;
<#trim-cycle>"Large Tree Routine Prune"^^xsd:string;
<#inventory-date>"2010-10-18"^^xsd:date.
:gid-2
<#GID>"2"^^xsd:string;
<#on-street>"EMERSON ST"^^xsd:string;
<#species>"Liquidambar styraciflua"^^xsd:string;
<#trim-cycle>"Large Tree Routine Prune"^^xsd:string;
<#inventory-date>"2010-06-02"^^xsd:date.
:gid-3
<#GID>"3"^^xsd:string;
<#on-street>"EMERSON ST"^^xsd:string;
<#species>"Liquidambar styraciflua"^^xsd:string;
<#trim-cycle>"Large Tree Routine Prune"^^xsd:string;
<#inventory-date>"2010-06-02"^^xsd:date.
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (6)
1.一种从元数据标注的CSV数据到RDF数据的转换方法,其特征在于,包括:
步骤S1,读取并解析CSV文件,获得表列数据并存入内存数据结构;
步骤S2,读取并解析元数据描述文件,获得元数据并存入内存数据结构;
步骤S3,结合已获得的表列数据与元数据,生成RDF三元组集并存入内存数据结构;
步骤S4,将生成的RDF三元组集输出为Turtle语法格式的RDF数据文件。
2.如权利要求1所述的方法,其特征在于,所述步骤S1进一步包括:
步骤S1-1,逐行读取CSV文件中的表列数据,生成输入流;
步骤S1-2,解析输入流,并将解析结果存入表列数据内存数据结构。
3.如权利要求1所述的方法,其特征在于,所述步骤S2进一步包括:
步骤S2-1,读取元数据描述文件并生成JSON对象;
步骤S2-2,创建存储元数据的内存数据结构;
步骤S2-3,解析JSON对象,提取CSV表描述信息后存入元数据内存数据结构;
步骤S2-4,解析JSON对象,提取CSV模式描述信息后存入元数据内存数据结构;
步骤S2-5,解析JSON对象,提取CSV列描述信息后存入元数据内存数据结构。
4.如权利要求1所述的方法,其特征在于,所述步骤S3进一步包括:
步骤S3-1,创建存储RDF三元组的内存数据结构;
步骤S3-2,从元数据内存数据结构中提取CSV表描述信息,生成RDF三元组后存入RDF三元组内存数据结构;
步骤S3-3,从元数据内存数据结构中提取CSV列描述信息,生成RDF三元组后存入RDF三元组内存数据结构;
步骤S3-4,结合CSV数据和元数据中列描述信息,生成RDF三元组后存入RDF三元组内存数据结构。
5.如权利要求4所述的方法,其特征在于,所述步骤S3-4进一步包括:
步骤S3-4-1,根据元数据中列描述信息确定CSV列名所对应的RDF属性名以及该列值的XML模式数据类型;
步骤S3-4-2,逐个提取CSV数据中的列值,转换成RDF三元组。
6.如权利要求1所述的方法,其特征在于,所述步骤S4进一步包括:
步骤S4-1,将名空间前缀定义添加到RDF三元组内存数据结构;
步骤S4-2,将RDF三元组内存数据结构输出为RDF数据文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510364084.1A CN104933162B (zh) | 2015-06-26 | 2015-06-26 | 一种从元数据标注的csv数据到rdf数据的转换方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510364084.1A CN104933162B (zh) | 2015-06-26 | 2015-06-26 | 一种从元数据标注的csv数据到rdf数据的转换方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104933162A true CN104933162A (zh) | 2015-09-23 |
CN104933162B CN104933162B (zh) | 2018-03-09 |
Family
ID=54120329
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510364084.1A Active CN104933162B (zh) | 2015-06-26 | 2015-06-26 | 一种从元数据标注的csv数据到rdf数据的转换方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104933162B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649310A (zh) * | 2015-10-29 | 2017-05-10 | 北京国双科技有限公司 | 数据获取的方法及装置 |
CN107704479A (zh) * | 2017-02-08 | 2018-02-16 | 上海壹账通金融科技有限公司 | 文件生成方法和装置 |
CN109299154A (zh) * | 2018-11-30 | 2019-02-01 | 长城计算机软件与系统有限公司 | 一种大数据的数据存储系统及方法 |
CN110851400A (zh) * | 2018-07-25 | 2020-02-28 | 北京国双科技有限公司 | 文本数据的处理方法及装置 |
CN111310414A (zh) * | 2020-01-13 | 2020-06-19 | 陕西心像信息科技有限公司 | Rdf格式文件的解析方法及生成方法 |
CN113138781A (zh) * | 2020-01-19 | 2021-07-20 | 福建省天奕网络科技有限公司 | Csv配置更新方法、存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040205611A1 (en) * | 2002-02-12 | 2004-10-14 | Minninger Michele C. | Data transformation system |
CN103353898A (zh) * | 2013-07-24 | 2013-10-16 | 成都瑞科电气有限公司 | 一种系统数据向cim模型xml格式转化的处理系统 |
CN103577568A (zh) * | 2013-10-30 | 2014-02-12 | 北京邮电大学 | 一种跨平台的移动安全综合信息聚合系统及其方法 |
CN103793372A (zh) * | 2012-10-30 | 2014-05-14 | 国际商业机器公司 | 从电子文档中的表格结构提取语义关系 |
-
2015
- 2015-06-26 CN CN201510364084.1A patent/CN104933162B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040205611A1 (en) * | 2002-02-12 | 2004-10-14 | Minninger Michele C. | Data transformation system |
CN103793372A (zh) * | 2012-10-30 | 2014-05-14 | 国际商业机器公司 | 从电子文档中的表格结构提取语义关系 |
CN103353898A (zh) * | 2013-07-24 | 2013-10-16 | 成都瑞科电气有限公司 | 一种系统数据向cim模型xml格式转化的处理系统 |
CN103577568A (zh) * | 2013-10-30 | 2014-02-12 | 北京邮电大学 | 一种跨平台的移动安全综合信息聚合系统及其方法 |
Non-Patent Citations (1)
Title |
---|
陈彦: ""应用SPARQL进行RDF数据查询"", 《企业技术开发》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649310A (zh) * | 2015-10-29 | 2017-05-10 | 北京国双科技有限公司 | 数据获取的方法及装置 |
CN106649310B (zh) * | 2015-10-29 | 2020-04-24 | 北京国双科技有限公司 | 数据获取的方法及装置 |
CN107704479A (zh) * | 2017-02-08 | 2018-02-16 | 上海壹账通金融科技有限公司 | 文件生成方法和装置 |
CN107704479B (zh) * | 2017-02-08 | 2020-06-30 | 深圳壹账通智能科技有限公司 | 文件生成方法和装置 |
US10802804B2 (en) | 2017-02-08 | 2020-10-13 | One Connect Smart Technology Co., Ltd. | File generation method, device, server, and storage medium |
CN110851400A (zh) * | 2018-07-25 | 2020-02-28 | 北京国双科技有限公司 | 文本数据的处理方法及装置 |
CN109299154A (zh) * | 2018-11-30 | 2019-02-01 | 长城计算机软件与系统有限公司 | 一种大数据的数据存储系统及方法 |
CN111310414A (zh) * | 2020-01-13 | 2020-06-19 | 陕西心像信息科技有限公司 | Rdf格式文件的解析方法及生成方法 |
CN111310414B (zh) * | 2020-01-13 | 2023-06-09 | 陕西心像信息科技有限公司 | Rdf格式文件的解析方法及生成方法 |
CN113138781A (zh) * | 2020-01-19 | 2021-07-20 | 福建省天奕网络科技有限公司 | Csv配置更新方法、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104933162B (zh) | 2018-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104933162A (zh) | 一种从元数据标注的csv数据到rdf数据的转换方法 | |
Liu et al. | XWRAP: An XML-enabled wrapper construction system for web information sources | |
Sahuguet et al. | Building intelligent web applications using lightweight wrappers | |
CN103500196B (zh) | 多并发大数据量环境下excel数据导出方法及其导出装置 | |
CN102722542B (zh) | 一种资源描述框架图模式匹配方法 | |
Sahuguet et al. | Wysiwyg web wrapper factory (w4f) | |
CN103473224B (zh) | 基于问题求解过程的习题语义化方法 | |
CN102693310A (zh) | 一种基于关系数据库的资源描述框架查询方法和系统 | |
CN101872350A (zh) | 网页正文抽取方法和装置 | |
Ji et al. | Tag tree template for Web information and schema extraction | |
Sequeda et al. | Relational Database to RDF Mapping Patterns. | |
Hazber et al. | Integration mapping rules: Transforming relational database to semantic web ontology | |
CN109885569A (zh) | 基于配置文件对xml数据进行字段提取及结构化方法 | |
CN115358200A (zh) | 一种基于SysML元模型的模板化文档自动生成方法 | |
CN101350028A (zh) | 一种基于SQL结构化查询语言的XML数据XPath查询方法 | |
CN103902651B (zh) | 一种基于MongoDB的云端代码查询方法与装置 | |
Liu et al. | An XML-enabled data extraction toolkit for web sources | |
Elmasri et al. | Conceptual modeling for customized XML schemas | |
Elmasri et al. | Conceptual modeling for customized XML schemas | |
CN1326078C (zh) | 包装器的生成方法 | |
Chang et al. | Supporting unified interface to wrapper generator in Integrated Information Retrieval | |
CN102332013A (zh) | 基于owl的互联网语言本体学习系统 | |
Jaglan et al. | LOD: Linking and querying shared data on web | |
Dos Santos et al. | A semantical change detection algorithm for XML | |
JP2002297601A (ja) | 構造化文書管理方法および構造化文書管理装置およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |