一种uri标识的csv片段的http检索方法

文档序号:9326920阅读:370来源:国知局
一种uri标识的csv片段的http检索方法
【技术领域】
[0001]本发明涉及互联网通信技术领域中的网络资源HTTP检索方法,尤其涉及一种URI标识的CSV片段的HTTP检索方法。
【背景技术】
[0002]科学领域和电子政务领域的开放数据运动(open data movements)使得万维网(World Wide Web 或简称 Web)上逗号分隔值(comma-separated values, CSV)格式的表列数据(tabular data)急剧增长,而且CSV文件往往具有巨大的尺寸(总字节数)。这就给需要处理或消费CSV文件中的一部分(a port1n of)数据或称片段(fragment)的Web客户端应用带来了很大挑战,因为从服务端检索并下载完整CSV文件后再提取其中片段的传统技术方案需要很大的网络带宽和时间代价。
[0003]在Web上使用CSV文件的格式及其互联网媒体类型(Internet media type)由RFC4180 规范(参见:Y.Shafranovich.Common Format and MIME Type for Comma-SeparatedValues(CSV)Files.1ETF RFC 4180,October 2005.http://tools, ietf.0rg/html/rfc4180.)所定义。根据这个规范,一个CSV文件以纯文本形式(常用US-ASCII或UTF-8字符编码)来存储由行(row)和列(column)所组成的表列数据;这种表列数据由任意多条记录(record)(即行)所组成,每条记录用换行符(CRLF)来分隔。在每条记录中,有若干个用逗号分隔的字段(field);每条记录包含的字段数必须相等。另外,一个CSV文件还可以包含(即可选的)一个头行(header)作为该文件的第一行,头行中的字段用来给出该CSV文件中其他数据记录的字段名称。
[0004]统一资源标识符(UniformResource Identifier, URI)是一种用来标识Web资源(包括CSV文件)的简单且可扩展的标准手段。根据URI的RFC 3986规范(参 JaL:T.Berners-Lee, R.Fielding, and L.Masinter.Uniform ResourceIdentifier (URI): Generic Syntax.1ETF RFC3986, January 2005.http://tools, ietf.0rg/html/rfc3986.), 一个 URI 可选地可包含一个片段标识符(fragment identifier),它以紧跟在主资源标识符(primary resource identifier)后面的来标示,用来标识主资源中的某一个部分(即片段)。一个包含片段标识符的URI语法格式如下:
[0005]<协议名>://<主机>/〈路径>#〈片段标识符>
[0006]其中,“〈协议名>://〈主机>/〈路径 >”是主资源标识符。
[0007]最近发布的RFC 7111 规范(参见:M.Hausenblas, E.Wilde, J.Tennison.URIFragment Identifiers for the text/csv Media Type.1ETF RFC 7111,January 2014.http://tools.1etf.0rg/html/rfc7111.)进一步定义了采用 URI 的 CSV 片段标识机制。根据RFC7111规范,CSV片段标识符可采用三种选择方式:行(row)、列(col)和单元格(cell) ο 例如,“http://example, org/data.csv#row = I ;400_10000” 这个 URI 米用了行选择方式,其标识了主资源(由“http://example, org/data.csv”所标识)中的一个CSV片段,该片段由主资源CSV文件(data, csv)中的第I行及第400-10000行所组成。
[0008]具体来说,CSV片段标识符中的行选择方式(〃row〃select1ns scheme)用来选择主资源CSV文件中的一个特定记录(如“row = 2”)或一个连续记录范围(如“row= 4-10”)。列选择方式(〃col〃select1ns scheme)用来选择主资源CSV文件中的一个特定列(如“col = 4”)或一个连续列范围(如“col = 6-10”)。单元格选择方式(〃cell〃select1ns scheme)用来选择主资源CSV文件中的一个特定单元格(如“cell =1,3”表示第I行、第3列所在的单元格)或一个单元格范围(如“cell = 5,7-10, 100”表示从左上单元格“cell = 5,7”到右下单元格“cell = 10, 100”的一个单元格范围)。除了单个的行、列和单元格选择,CSV片段标识符中还可以针对某种选择方式使用多选择(mult1-select1ns),此时需要用“;”来间隔单个的行选择或列选择或单元格选择(如:“row = 2 ;4-10”,“col = 4 ;6_10”,“cell = I, 3 ;5, 7-10, 100”)。
[0009]RFC 7111规范所定义的CSV片段标识机制使得数据发布者(Web服务器)可以用URI来标识一个(可能是具有巨大尺寸的)CSV文件中的一个片段,同时也使得数据消费者(Web客户端应用)有机会通过现有的HTTP协议(参见:R.Fielding, J.Reschke (Editors).Hypertext Transfer Protocol (HTTP/1.1):Message Syntax and Routing.1ETFRFC7230, June 2014.https://tools.1etf.0rg/html/rfc7230.)来直接检索 URI 标识的CSV片段,然后对获取的CSV片段作进一步处理(如:可视化、数据集成等)。这样,就不需要下载完整的CSV文件,从而降低了网络带宽和时间代价。然而,为了实现以上目标,必须构造出能解析处理URI标识符的CSV片段的客户端(即扩充的HTTP客户端),以及能提取CSV片段后返回请求客户端的服务端(即扩充的HTTP Web服务器)。不幸的是,目前还没有这方面的相关方法或技术方案实现。
[0010]因此,为了填补当前技术现状的空白,本发明要解决的技术问题是针对用符合RFC7111规范的URI来标识的CSV片段,提供一种HTTP检索CSV片段的方法(包括:HTTP客户端和服务端的相关处理方法与流程,以及客户端与服务端之间的交互方法)。本发明的方法与客户端下载完整CSV文件后再提取片段的传统技术方案相比,可大大节省网络带宽、缩短通信延时。同时,本发明的方法也无需对当前的HTTP/1.1协议进行扩充改造。

【发明内容】

[0011]本发明的目的旨在针对用符合RFC 7111国际规范《文本/CSV媒体类型URI片段标识符》的URI来标识的CSV片段,提供一种CSV片段的HTTP检索方法(包括:HTTP客户端和服务端的相关处理方法与流程,以及客户端与服务端之间的交互方法)。一方面,本方法无需扩充当前的HTTP/1.1协议;另一方面,本方法由客户端解析CSV片段的URI并把主资源标识符与片段选择参数发送给服务端,再由服务端从主资源中提取相应的CSV片段后返回给客户端,这种方法与客户端下载完整CSV文件后再提取片段的传统技术方案相比,大大节省了网络带宽、缩短了通信延时。
[0012]为了解决上述技术问题,本发明公开一种URI标识的CSV片段的HTTP检索方法,包括:步骤SI,客户端解析片段URI并获得主资源URI及CSV片段标识符;步骤S2,客户端将CSV片段的选择方式和范围发送给服务端;步骤S3,服务端根据CSV片段的选择方式和范围提取CSV片段;步骤S4,服务端将提取的CSV片段返回给客户端;步骤S5,客户端获取CSV片段并显示或保存。
[0013]所述步骤SI进一步包括:步骤S1-1,以片段URI中的“#”为分割点获取主资源URI和CSV片段标识符;步骤S1-2,判断主资源URI是否符合RFC-3986语法,若否,则报错并终止;步骤S1-3,判断CSV片段标识符是否符合RFC-7111语法,若否,则报错并终止;步骤S1-4,以CSV片段标识符中的“=”为分割点获取CSV片段的选择方式和范围。
[0014]所述步骤S3进一步包括:
[0015]服务端从客户端HTTP POST请求的消息体中读取CSV片段的选择方式(scheme)和范围(range)的参数值;若为“行(row) ”选择方式,则调用行提取算法获取CSV片段;若为“列(col) ”选择方式,则调用列提取算法获取CSV片段;若为“单元格(cell) ”选择方式,则调用单元格提取算法获取CSV片段。
[0016]所述行提取算法的处理步骤如下:
[0017](I)初始化变量fragment为空;
[0018](2)以CSV片段的范围中的“;”为分割点获取若干个行选择范围,并获取每个行选择范围的起始行和结束行参数;
[0019](3)依次针对每个行选择范围执行如下操作:从第一行开始逐行读取CSV文件直至读取到行选择范围的起始行;从该起始行开始逐行读取CSV文件的数据,将其添加到变量fragment中,直到读取完行选择范围的结束行为止;
[0020](4)变量fragment中存储了结果CSV片段。
[0021]所述列提取算法的处理步骤如下:
[0022](I)初始化变量fragment为空;
[0023](2)以CSV片段的范围中的“;”为分割点获取若干个列选择范围,并获取每个列选择范围的起始列和结束列参数;
[0
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1