ICS35.240.30
中华人民共和国国家标准
GB/T33994—2017/ISO28500:2009信息和文献
WARC文件格式
Information and documentationWARC file format(ISO28500.2009,IDT)
2017-07-12发布
中华人民共和国国家质量监督检验检疫总局中国国家标准化管理委员会
2018-02-01实施
本标准按照GB/T1.1一2009给出的规则起草。GB/T33994—2017/IS028500:2009本标准使用翻译法等同采用ISO28500:2009《信息和文献WARC文件格式》与本标准中规范性引用的国际文件有一致性对应关系的我国文件如下:GB/T7408一2005数据元和交换格式信息交换日期和时间表示法(ISO8601:2000,IDT)。
本标准做了下列编辑性修改:
增加了缩略语:LWS、MIME、US-ASCI(见3.2):一为了增强易读性,在保留国际标准中示例的基础上,将部分示例替换为国内示例(见附录B)。本标准由全国信息与文献标准化技术委员会(SAC/TC4)提出并归口。本标准起草单位:国家图书馆、中国科学院文献情报中心、中国国防科技信息中心、中国科技信息研究所、北京万方数据股份有限公司。本标准主要起草人:毛雅君、李春明、吴振新、真漆、曲云鹏、张晓丹、张兰、杨贺、敦文杰、张彪。I
HiiKAoNiKAca
GB/T339942017/IS028500:2009
每天,网站和网页从互联网上产生或消失。十多年来,记忆存储组织尝试用网络规模工具(如网络爬虫)寻找最适宜采集并跟踪记录海量的重要信息的方法。与此同时,记忆存储组织对保存非网络抓取的数字化资源的需求也与日俱增(如,整套电子期刊或环境感应设备生成的数据)。出现了一种需求,即希望能有一种文件格式,通过一个文件简单并安全地承载大量组成文件的数据对象,以便进行存储、管理和交换。
WARC(WebARChive,网络存档)文件格式提供了一个由多个资源记录(数据对象)连接成一个长文件的协议,其中每个资源记录由一组简单文本标头和任意数据内容块构成。WARC格式是ARC文件格式的扩展。WARC格式将作为组织、管理和储存采集来自网络和其他数以亿计的数字资源的一种标准,可用于构建收割(如Heritrix网络爬虫,一种开源软件)、管理、访问和交换内容等各种应用。除了用ARC记录的原始内容外,扩展的WARC格式还容纳相关的二次级内容,如分配的元数据、缩减的重复检测活动、后期转换及大型资源的切分等。H
HiiKAoNiKAca
1范围
信息和文献
bZxz.net本标准规定了WARC文件格式:
GB/T33994—2017/ISO28500:2009WARC文件格式
存储来自于主流互联网应用层协议(如HTTP、DNS和FTP)的有效载荷内容和控制信息;存储与其他已存储数据(如主题分类、语言、编码)相关的任意元数据:一支持数据压缩,且保证数据记录的完整性;存储来自收割协议的全部控制信息(如请求标头信息),而不仅仅是响应信息;存储与其他已存储数据相关的数据转换结果:存储与其他已存储数据相关的重复监测活动(当相同或者大体相似的资源出现时,可以减少存储消耗);
在不中断当前功能的情况下进行扩展;支持对超长记录在所需处进行截断或分段操作。2规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。ISO8601数据元和交换格式信息交换日期和时间表示法(Dataelementsandinterchangeformats-Information interchange-Representation of dates and times)RFC1o35域名实现及标准(Domainnames—Implementationandspecification)RFC1884IPV6地址架构(IPVersion6AddressingArchitecture)RFC2045
多用途互联网邮件扩展(MIME)第1部分:互联网消息正文的格式[MultipurposeInternet Mail Extensions(MIME) Part One:Format of InternetMessage Bodies分离域名解析系统(DNS)信息[DetachedDomainNameSystem(DNS)Information)RFC2540
RFC2616.超文本传输协议—HTTP/1.1(HypertextTransferProtocol—HTTP/1.1)RFC2822
RFC3629
RFC3986
RFC4027
W3CDTF
互联网消息格式(InternetMessageFormat)UTF-8——ISO10646的—种转换格式(UTF-8,atransformationformatofISO10646)统一资源标识符(URI):通用语法[UniformResourceIdentifier(URD):GenericSyntax域名解析系统媒体类型(DomainNameSystemMediaTypes)日期和时间格式:提交到W3C的注释(DateandTimeFormats:notesubmittedtothe3术语、定义和缩略语
3.1术语和定义
下列术语和定义适用于本文件。3.1.1
WARC记录WARCrecord
WARC文件的基本组成部分,WARC文件由一序列的WARC记录组成。1
iiKAoiKAca
GB/T33994—2017/ISO28500:20093.1.2
WARC记录内容块WARCrecordcontentblockWARC记录的一部分(O或多个八位字节),位于标头信息之后,是构成WARC记录的主体部分,3.1.3
WARC记录有效载荷WARCrecordpayloadWARC记录指向或者包含的数据对象,是内容块的有意义子集。3.1.4
WARC记录标头WARCrecordheaderWARC记录的开始部分,第一行声明了该记录是给定版本号的WARC格式,其后是多个命名字段行,以空行结束。
WARC命名字段WARCnamedfields
一套元素集合,包括一个名称、一个冒号和一个值。长值会以缩进行形式延续。3.1.6
WARC逻辑记录WARClogical record在分段的情况下,一个WARC逻辑记录由多个分段组成,每个分段用一个WARC记录表示。3.2缩略语
下列缩略语适用于本文件。
ABNF:扩充的巴克斯-诺尔表示式(augmentedBackus-Naurform)ARC:存档(archive)
CRLF:回车换行符(carriagereturnline feed)DNS:域名解析系统(domainnamesystem)FTP:文件传输协议(filetransferprotocol)HTTP:超文本传输协议(hypertexttransportprotocol)IANA:互联网地址分配机构(InternetAssignedNumbersAuthority)IESG:互联网工程指导委员会(InternetEngineeringSteeringGroup)LWS:连续空格符(linearwhitespace)MIME:多用途互联网邮件扩展(MultipurposeInternetMailExtensions)RFC:请求注解(requestforcomments)UR(I/L/N):统一资源(标识符/定位符/名称)[uniformresource(identifier/locator/name)US-ASCII:美国信息交换标准代码(AmericanStandardCodeforInformationInterchange)WARC:互联网存档(webarchive)4文件和记录模型
WARC格式文件由若干个WARC记录顺序构成。第一个记录通常用于描述后续的多个记录。通常,记录的内容或者是一次检索的直接结果(网页、内嵌图片,URL转向信息、DNS主机名查询结果、独立文件等),或者是为存档内容提供附加信息的综合资源(如元数据、转化后的内容)。每个WARC记录由一个记录标头,一个记录内容块和两个换行符构成。WARC记录标头的第一行,用于声明该记录采用的WARC格式的版本号,后接以空行结束的不定行数的命名字段。WARC记录标头的格式应遵循HTTP/1.1[RFC2616]和[RFC2822]标头的一般规则,特别之处是可以使用[RFC3629]中指定的UTF-8字符。2
HiiKAoNiKAca
GB/T33994—2017/ISO28500:2009WARC文件的项层视图可用ABNF(扩充的巴克斯-诺尔表示式)语法表述,复用HTTP/1.1[RFC2616]中2.1所定义的扩展概念(特别说明:为避免混滑,当WARC规则与[RFC2616]规则名称相同时,则定义也相同,除了在使用CHAR规则的情况下,WARC中包含多字节UTF-8字符)。warc-file
-1* warc-record
=headerCRLF
warc-record
,WARC文件至少包括1个WARC记录blockCRLFCRLF
;WARC记录包括标头和回车换行符内容块和2个回车换行符
header
version
warc-fields
=versionwarc-fields;标头包括版本和warc字段=\WARC/1.0CRLF;版本为“WARC/1.0”和回车换行符=*named-fieldCRLFWARC字段包括若干个命名字段和回车换行符=*OCTET
内容块包括若干个八位字节
记录版本应出现在每条记录的起始,也就是WARC文件的起始。WARC记录中命名字段非常重要。每个命名字段由名称、冒号(:)和字段值组成。字段名称不区分大小写。字段值前可以有连续空格,但是推荐只用一个空格。标头字段可扩展到多行,但每行前至少前置一个空格或tab字符。
命名字段可以任意顺序出现,其字段值可包含任意UTF-8字符。已定义字段和扩展字段都遵循通用的命名字段格式。扩展字段可用于核心格式的扩展。named-field=field-name\,\[field-value]命名字段为字段名“,\”[字段值]field-name=token
field-value
=*(field-content |LWS)
field-content=《构成字段值的多个OCTET,;字段名为token
字段值为若干个(字段内容|连续空格)包括若干个TEXT,或者token
分隔符和引用字符串的组合》
separators
=《任意8位序列的数据)
=1*《除CTL或者分隔符外的任意US-ASCII字符);至少包含一个除CTL或者分隔符外的任意US-ASCII字符
=\(\|\)\|\(\|\)\\@\分隔符|\,\|\,\\,\|\9|(\)
|\/\|\[\|\了\|\?\\”\I\{\|\}\ISP|HT
<除CTL外的任意OCTET,包括LWS)<除CTL外的任意八位字节,包括连续空格》
=(UTF-8字符;RFC3629)
:(0-191,194-244)
=《任意US-ASCII数字“o\到“g”三《任意US-ASCI控制字符
(八位字节0-31)和DEL(127))《ASCIICR,回车>
=ASCIILF,换行)
=《ASCISP,空格)
=(ASCIIHT,水平tab)
=[CRLF]1*(SP|HT)
;回车换行
;语义上与单独空格相同
HiiKAoiKAca
GB/T33994—2017/IS028500.2009quoted-string=(<\>*(qdtext|quoted-pair)<\>);qdtext
=《除《\>外的任意TEXT》
quoted-pair -\\ CHAR
;单字符引用
=\(\URI\perRFC3986)\)\
写WARC字段时可使用UTF-8字符,也可使用[RFC2047]中的“encoded-word'机制,并需要被WARC读取软件所解读。
WARC记录语法的其他部分还涉及已定义字段的参数,如记录标识符、记录类型、创建时间、内容长度和内容类型。
defined-field
=WARC-Type
I WARC-Record-ID
IWARC-Date
I Content-Length
I Content-Type
IWARC-Concurrent-To
I WARC-Block-Digest
IWARC-Payload-Digest
I WARC-IP-Address
IWARC-Refers-To
IWARC-Target-URI
IWARC-Truncated
IWARC-Warcinfo-ID
IWARC-Filename
IWARC-Profile
I WARC-Identified-Payload-TypeIWARC-Segment-Origin-ID
IWARC-Segment-Number
IWARC-Segment-Total-Length
已定义字段
;仅适用于warcinfo记录类型
;仅适用于revisit记录类型
;仅适用于continuation记录类型,仅适用于continuation记录类型每个WARC记录应有一个记录类型,在“WARC-Type字段中描述。本标准中定义了以下8种WARC记录类型:
warcinfo'.
“response\,
-“resource',
“request',
“metadata',
-‘revisit\
-“conversion',
\continuation'
其他的WARC记录类型可以在核心格式的基础之上进行扩展。每种记录类型的相关字段详见第6章,每个字段的意义和合法数值格式详见第5章。记录的内容块应包含基于记录类型和其他标头值解释的八位字节内容。所有的记录应包含一个内容长度(Content-Length)字段,用来指定内容块的长度。4
Hii KAoNi KAca
GB/T33994—2017/ISO28500:2009某些记录类型(以及将来可能出现的记录类型)定义了有效载荷,有效载荷可能是内容块有实际意义的一个部分,或是先前某个记录的内容。某些标头与记录的有效载荷相关,而与记录的内容块不直接相关。例如,在一个“response\记录中,其内容块由HTTP标头和一个数据对象组成,其有效载荷是数据对象。所有的“response”、“resource',request”,conversion和‘continuation”记录都可以有一个有效载荷。所有的“warcinfo”、“metadata”和“revisit'记录都不应带有有效载荷。符合warc-file规则的内容应该具有MIMEcontent-type“application/warc”,详见8.2中说明。仅符合warc-fields规则的内容作为一种简单的描述格式非常有用,并有MIMEcontent-type“ap-plication/warc-fields”,详见8.3中说明。5命名字段
5.1概述
WARC记录中的命名字段提供了有关当前记录的信息。WARC既可以复用来自其他标准的适当标头,也可以定义新标头。基于“WARC-”的特定目标,这些标头均以“WARC-”起始。同一个WARC记录中同一类型的WARC命名字段不可以重复(如,一个WARC记录中不可以有多个“WARC-Date\或“WARC-Target-URI\),除非另有注释(如WARC-Concurrent-To)。由于可以在WARC核心格式的扩展中定义新字段,因此,WARC处理软件应该忽略那些无法识别名称的字段。
5.2WARC-Record-ID(必备)
WARC-Record-ID是分配给当前记录的标识符,使用过程中全局唯一。本标准没有强制使用的标识符体系。每个WARC-Record-ID都应该是一个合法的URI,并能清楚地指明它遵循的记录与注册体系(如,一个URI体系前缀,“HTTP:”或者\URN:”)。注意,要确保该值中间没有空格。WARC-Record-ID-\WARC-Record-ID\\.\uri所有记录均应具备WARC-Record-ID字段。5.3Content-Length(必备)
Content-Length是内容块中八位字节的数量,类似于[RFC2616]中的定义。如果没有内容块,该值应为“0”。
Content-Length=\Content-Length\:\1*DIGIT所有记录均应具备Content-Length字段。5.4WARC-Date(必备)
WARC-Date是一个14位数字长的时间截,格式为YYYY-MM-DDThh:mm:ssZ。遵循ISO8601。时间截应代表数据抓取,记录创建的即时时间点。多条记录作为一个抓取事件(见5.7)记录时间时,应使用相同的WARC-Date,尽管这些记录并非严格意义上同时写入。WARC-Date=\WARC-Date\.\GB/T7408-2005GB/T7408—2005=(YYYY-MM-DDThh:mm:$sZ)所有记录均应具备WARC-Date字段。WARC-Date字段的使用示例参见附录A。5.5WARC-Type(必备)
WARC-Type是WARC记录的类型。本标准中定义的记录类型有:5
HiiKAoNiKAca
GB/T33994—2017/ISO28500:2009warcinfo'
-‘response',
“resource',
-request,
-'metadata',
‘revisit\
-\conversion',
-\continuation'
WARC记录的其他类型可在核心格式的扩展中定义。以上类型的详细描述见第6章。WARC文件不必包含任何特定的记录类型,但是推荐使用“warcinfo'记录作为所有WARC文件的开始。
e-\WARC-Type\\.\record-typeWARC-Type
record-type-\warcinfo\|\response\|\resource\I\request\|\metadata\「\revisit\I\conversion\I\continuation\|future-typefuture-type=token
所有记录均应具备WARC-Type字段。WARC处理软件应忽略那些无法识别类型的记录。WARC-Type字段的使用示例参见附录A。5.6 Content-Type
Content-Type字段是记录内容块中信息的MIME类型(在[RFC2045」中定义)。例如,在HTTP请求和响应记录中,该值是[RFC2616]的19.1中定义的“application/http\(或者分别为“application/http;msgtype=request'和“application/http;msgtype=response)。特殊情况下,content-type不是HTTP响应中HTTPContent-TyPe的标头值,而是一个用来描述完整的存档HTTP消息的MIME类型(如果内容块包含请求或者响应标头,则该值是“application/http\)。Content-Type -\Content-Type\\.\media-typemedia-type
subtype
parameter
attribute
=type\/\subtype*(\\parameter)=token
=token
-attribute\-\ value
=token
=tokenI quoted-string
除了“continuation\记录,所有内容块均不为空(Content-Length值不是零)的记录,均应具备Content-Type字段。仅当Content-Type字段未提供媒体类型时,读取软件才可能根据资源的内容和/或URI扩展名来猜测其媒体类型。如果仍不能识别其媒体类型,读取软件应将其视为“application/octet-stream”类型。
5.7WARC-Concurrent-To
一个或多个WARC-Concurrent-To字段包含了与当前记录同属一个抓取事件的某个或某些记录的WARC-Record-ID。一个抓取事件包括了检索某一WARC-Target-URI时自动收集的所有信息。例如,它可能是一个“response”或者“revisit”记录以及相关的“request\记录。WARC-Concurrent-To=\WARC-Concurrent-To\\uri6
GB/T33994—2017/IS028500:2009同一个抓取事件产生的“request”,“response”、resource”,“metadata”和“revisit”类型的记录,可通过WARC-Concurrent-To字段使其互联(这样使用时,即使标头只出现在一个记录中,但是WARCConcurrent-To关联均是双向的)。WARC-Concurrent-To字段不应用在“warcinfo”、“conversion”和“continuation”记录中。
作为一个特例,同一个WARC记录中WARC-Concurrent-To字段可重复。WARC-Concurrent-To字段的使用示例参见附录A。5.8 WARC-Block-Digest
WARC-Block-Digest是可选参数,表示应用于所有记录内容块摘要的算法名称和计算值。WARC-Block-Digest -\WARC-Block-Digest\\\labelled-digestlabelled-digest
algorithm
digest-value
-algorithm\\digest-value
=token
=token
下面是用SHA-1表示的Base32([RFC3548])值的示例:WARC-Block-Digest:shal:AB2CD3EF4GH5IJ6KL7MN8OPQ无推荐算法。
任何记录都可以有一个WARC-Block-Digest字段。5.9 WARC-Payload-Digest
WARC-Payload-Digest是可选参数,表示该记录指向或包含的有效载荷摘要的算法名称和计算值。该值不一定等于WARC-Block-Digest的值。WARC-Payload-Digest=\WARC-Payload-Digest\\\labelled-digest下面是用SHA-1表示的Base32([RFC3548)值的示例:WARC-Payload-Digest:shal:3EF4GH5IJ6KL7MN8OPQAB2CD无推荐算法。
一个“application/http”内容块的有效载荷是它的“entity-body(见[RFC2616])。与WARCBlock-Digest不同,WARC-Payload-Digest字段也可用于当前记录内容块中并未出现的数据。例如,当内容块按照“revisit\配置文件(见6.7)被丢弃时,或者当一个记录被分段时(分段记录的首个分段中记录的WARC-Payload-Digest应该是逻辑记录的有效载荷摘要)。WARC-Payload-Digest字段可用于具有明确界定有效载荷的WARC记录,不可用于无明确界定有效载荷的记录。
5.10WARC-IP-Address
WARC-IP-Address是检索所需内容的数字式互联网地址。IPv4地址是以点分段的四元组。IPv6地址应遵循[RFC1884定义书写。一次HTTP检索,就是检索target-URI中主机相对应的IP地址。WARC-IP-Address-\WARC-IP-Address\\.\(ipv4[ipv6)ipv4
=《\dotted quad\)
=
WARC-IP-Address字段可用于“response',“resource”,“request”,“metadata'和‘revisit”记录,但是不可用于“warcinfo”、“conversion'或continuation'记录。5.11WARC-Refers-To
若当前记录包含了某个WARC记录的附加内容,则当前记录的WARC-Refers-To字段包含了该7
GB/T33994—2017/ISO28500:2009记录的WARC-Record-id。
WARC-Refers-To-\WARC-Refers-To\\,\uriWARC-Refers-To字段可用于关联“metadata'记录和它所描述的其他记录。WARC-Refers-To字段也可用于关联“revisit\或“conversion类型的记录,这样有助于确定当前记录内容的前一个记录。WARC-Refers-To字段不得用于warcinfo”,“response”,resource”,“request'和continuation记录。WARC-Refers-To字段的使用示例参见附录A。5.12 WARC-Target-URI
WARC-Target-URI是指抓取本记录信息内容的原始URI。在进行网络收割时,它就是网络爬虫检索请求目标的URI。对“revisit记录来说,它是一个检索请求目标的URI。间接地看,对于“metadata或“conversion”记录来说,WARC-Target-URI复制与新记录相关的且在原始记录中出现的WARC-Target-URI。该URI值需遵循[RFC3986]定义书写。WARC-Target-URI\WARC-Target-URI\\.\uri所有‘response”“resource”,“request”,“revisit”,“conversion”和“continuation'记录都应具备一个WARC-Target-URI字段。“metadata\记录可以有一个WARC-Target-URI字段。“warinfo”记录则不应有WARC-Target-URI字段。
5.13 WARC-Truncated
出于实际需要,WARC格式的建立者在存档某一独立资源时,可能会限定其时间或存储空间。这样做的结果是,原始资源中可能只有一个截断部分被存人WARC记录。WARC-Truncated字段表明该记录的内容块被截断过,同时给出了截断原因。 -\WARC-Truncated\\.\reason-tokenWARC-Truncated
reason-token
future-reason
=\length\
\time\
I\disconnect\
[\unspecified\
I future-reason
=token
:超出最大长度限制
:超出最长时间限制
:网络断开
;原因不明
例如,当抓取一个几个GB大的资源时,当达到传输时间限制后,抓取会被中断,部分资源会被存人一条有本字段的WARC记录。
WARC-Truncated字段可用于任何WARC记录。WARCContent-Length字段仍应报告该记录内容块实际被截断的大小。
5.14WARC-Warcinfo-ID
WARC-Warcinfo-ID是指与本记录相关的warcinfo记录的WARC-Record-ID。通常情况下,当可用的warcinfo记录缺少语境时,会使用WARC-Warcinfo-ID参数,例如单记录被分散到儿个WARC文件的情况下。WARC写人软件(如网络爬虫)可选择始终记录这个参数。WARC-Warcinfo-ID-\WARC-Warcinfo-ID\\.\uriWARC-Warcinfo-ID字段值会重写与先前形成的warcinfo\记录的任何联系,因此,在不同的WARC文件记录被合并时,提供了一种方式来保护真正的联系。WARC-Warcinfo-ID字段可用于除“warcinfo\外的任何记录类型。5.15WARC-Filename
WARC-Filename是包含当前warcinfo记录的文件名。8
小提示:此标准内容仅展示完整标准里的部分截取内容,若需要完整标准请到上方自行免费下载完整标准文档。