实验室把原始测量文件、处理脚本、环境说明和结果图交给另一机构。接收者能下载并打开文件,却不知道清单是否覆盖全部对象、每个校验值对应哪一版,也无法从结果图回到生成它的输入和运行。
传输清单不是文件名目录,而是一份双方可独立核验的交付契约:它必须区分对象与说明、完整与有效、字节一致与研究可解释,并记录版本、校验范围、来源关系、权限和接收结果。
实验资料交付要分别证明收齐、未变、可解释和可继续使用。清单应覆盖对象、校验、版本、来源、权限和接收回执。
实验室把原始测量文件、处理脚本、环境说明和结果图交给另一机构。接收者能下载并打开文件,却不知道清单是否覆盖全部对象、每个校验值对应哪一版,也无法从结果图回到生成它的输入和运行。
传输清单不是文件名目录,而是一份双方可独立核验的交付契约:它必须区分对象与说明、完整与有效、字节一致与研究可解释,并记录版本、校验范围、来源关系、权限和接收结果。
常见交付清单只有文件名、大小和一句说明。它便于浏览,却不能证明目录已经覆盖全部交付对象,也不能说明校验值使用什么算法、针对哪个版本生成,更无法描述结果图由哪次运行产生。
真正的清单要回答六类问题:交付对象是什么;是否全部收齐;收到的字节是否与发送版本一致;对象怎样产生;谁可以使用;接收者实际检查了什么。
这六类问题不能压成一个“已完成”。上传进度到100%只表示传输工具结束当前任务。压缩包能解开,也不表示内部对象没有遗漏或版本混用。
RFC 8493描述的BagIt格式把任意数字内容放在payload目录,把用于记录存储和传输的元数据放在tag文件。规格对payload内容视为不解释的字节,因此可以装原始测量、图像、脚本、环境文件和结果,却不会替团队理解它们的科学含义。
实验交付可以借用这项分层。对象层包含真正要保存或处理的文件;说明层包含对象清单、校验表、数据字典、版本关系、许可、联系人和接收回执。说明层不是装饰,它决定后来者能否解释对象。
BagIt以payload保存数字对象,并用tag文件记录传输与保存元数据。即使不采用BagIt目录名,也应保留同样的逻辑边界:数据文件不承担全部说明,说明文件也要成为可校验对象。
BagIt要求至少存在一份payload manifest,而且每份manifest都要恰好列出每个payload文件一次。每行将相对路径与指定算法计算的十六进制校验值连接起来。
这比只给整个压缩包一个哈希更适合跨机构排错。压缩包总哈希验证单一容器,逐文件manifest定位具体遗漏或变化;两者的故障定位能力不同。总哈希失败时只能知道容器不同,逐文件表可以指出是哪一个对象缺失或变化。
清单固定使用相对路径,明确算法名称和字符编码。新交付可采用双方工具都支持的SHA-256或SHA-512。算法名称不能省略,同一串字符在没有算法时无法验证。
BagIt要求manifest逐一列出全部payload文件及其校验值。接收端不仅重算值,还要比较目录与manifest的差集:清单有而目录没有、目录有而清单没有、路径重复、大小写冲突都分别报告。
RFC把complete和valid分开。完整包需要具备必需元素、列出的文件实际存在、全部payload都被manifest列出,且结构符合版本要求。有效包先要完整,再要求每个manifest校验值都与对应文件验证成功。
BagIt把对象收齐定义为complete,把所有校验值验证成功定义为valid。交付回执也应分两栏:对象覆盖检查和字节校验检查。只写“验证成功”会让人不知道它验证了数量、路径还是哈希。
说明文件自身也可能被改动。可建立tag manifest或等价的说明文件校验表,把payload manifest、数据字典、环境清单和交接说明纳入校验。否则攻击者或误操作可以改掉校验表,而对象值看起来仍有记录。
完整和有效都不解释payload内容。文件完整回答收到的字节是否一致,研究可解释回答这些字节代表什么以及如何产生。两项都需要,不能互相替代。
FAIR原则要求数据与元数据具有持久唯一标识,并由丰富元数据描述。机构内部不一定要为每个文件申请公开标识,但应分配不会因移动目录或改文件名而改变的object ID。
对象表记录object ID、相对路径、角色、格式、版本、创建时间、大小、哈希和责任者。原始数据、清洁数据、脚本、环境、结果和展示图分别标识,不让“final2”承担版本关系。
版本更新不覆盖旧对象。修正版使用新version ID,记录修订原因、影响范围和替代关系。若只修改说明而数据字节不变,也明确标为metadata revision,避免接收者误以为结果重算。
稳定ID使目录迁移后仍能识别对象,哈希使同一版本的字节变化可被发现。ID不是哈希的别名:同一研究对象可以有多个版本,每版有自己的哈希。
W3C PROV-O用实体、活动和责任者描述来源。可以把原始文件、脚本、环境和结果视为实体,把一次数据处理视为活动,把执行人、审核人或自动系统记录为责任者。
每次运行分配run ID,列出实际使用的输入object ID与版本、脚本、参数、环境、开始和结束时间、退出状态,以及生成的输出object ID。结果图引用具体run ID,不只写“由analysis.py生成”。
FAIR和PROV-O分别提供稳定标识要求与输入—活动—输出关系。逐文件manifest发现遗漏或字节变化,稳定ID与来源关系再把文件连接回版本、运行和责任者。
交接前选择一张正式结果图,从output ID回到run ID,再找到输入数据、脚本、参数和环境。任何一步断开,都在清单中标为来源缺口,不用一句“方法见论文”掩盖。
实验文件的语义常依赖仪器、校准、采集参数、时间基准、样本状态和环境条件。清单至少记录仪器或数据源ID、采集开始与结束时间、配置版本、单位、坐标或通道定义、缺失值规则和已知异常。
处理结果还要记录过滤、转换、校正、随机种子、参考库和软件环境。只交脚本而不交环境和参数,接收者无法判断脚本是否就是生成当前结果的状态。
对大文件可以把数据分块,但分块ID、顺序、大小、逐块校验和整体对象关系要明确。恢复传输前先确认源对象未变化;若源文件变化,旧分块不能继续拼成新版本。
来源和许可也随对象记录。FAIR把详细属性、清楚许可、详细来源和领域标准列为可再利用条件。能下载的文件不一定允许再次分发,能打开的数据也不一定适合新的研究问题。
RFC明确说明,manifest主要针对传输或保存中的数据损坏,不设计为抵御主动攻击。校验通过只能说明收到的字节与manifest声称的值一致;若manifest和文件同时来自不可信渠道,它不会证明发送者身份。
需要来源认证时,机构还要使用经过约定的数字签名、受控传输渠道、身份和权限记录。签名验证谁发布某个对象,哈希比较对象是否变化,两者作用不同。
接收端也要按安全政策扫描和隔离未知脚本、宏、可执行文件及外部下载链接。文件签名不替代恶意内容检查,反过来,安全扫描通过也不证明实验内容正确。
校验通过不能证明来源认证、文件安全、测量正确或研究结论有效。清单应把“字节完整”“来源已认证”“安全检查”“科学复核”列成独立状态。
RFC还提醒大小写、Unicode规范化、路径分隔符和保留文件名的差异。macOS、Windows和Linux可能对视觉相同的文件名采用不同字符序列,或对大小写有不同处理。
交付前避免只在大小写上不同的两个名称,统一Unicode规范化策略,并测试最长路径和特殊字符。manifest内部使用明确的相对路径形式,接收工具在比较前按约定进行同一规范化,同时保留原始路径供审计。
如果文件看起来存在却验证器报缺失,不要立即重命名或删除。先导出文件系统实际名称的编码与manifest条目比较,记录修复动作,并重新生成相应版本的manifest。
发送方可以声明交付完成,最终回执应由接收方独立产生。回执记录收到时间、接收者、工具版本、manifest算法、对象总数、总字节数、差集、校验结果、异常和处理决定。
接收者先比较对象差集,再独立重算校验。通过后,从一张结果图反向找到输入、脚本和运行记录,并打开一个代表性数据对象确认格式、字段和单位与说明一致。
若某个低影响说明文件暂缺,可以把包状态写成“字节有效、研究语境待补”,并限制用途。不要为了尽快关闭任务,把有例外的交付写成无条件通过。
回执也分版本。补交文件、修订说明或重新打包后,产生新的receipt ID并关联原回执,保留差异。双方以后讨论的是同一个交付版本,而不是各自电脑里的“最新文件夹”。
清单第一次启用时,不要直接拿真实项目判断它是否可靠。复制一个小型测试包,分别删除一个payload文件、修改一个字节、增加一个未登记文件,再把一个路径中的大小写或Unicode形式改掉。接收工具应把四类问题分开报告,而不是只返回笼统的“失败”。
然后测试说明层:修改数据字典或环境清单,确认tag manifest或等价校验表能够发现变化;更换一个run ID,确认结果图到输入的反向链路会中断。这样的演练验证的是清单与工具的配合,不是研究结论本身。
测试记录要保存工具版本、操作系统、算法和预期结果。若发送端与接收端使用不同工具,也要对同一测试包得到一致的对象集合与校验判断。只有发送端能通过的清单,不足以作为跨机构交付契约。
正式交付时可以按数据规模抽查语义,但对象差集和校验不能抽样。逐文件验证的成本可以自动化,若只抽查若干文件,就无法声称整个包已经valid。大对象可以分批验证并保存进度,但每批必须绑定同一个manifest版本。
第一张表是对象表:object ID、路径、角色、版本、格式、大小、哈希、创建时间和责任者。第二张表是来源表:数据源、采集条件、许可、限制和领域字段。
第三张表是运行表:run ID、输入、脚本、环境、参数、时间和输出。第四张表是权限表:谁可读、谁可修改、有效期和再分发限制。第五张表是接收表:差集、校验、代表性复核、异常和签发人。
这套清单不要求每个项目采用同一软件。关键是发送与接收两端对字段、算法、状态和例外有相同理解,并能独立重做关键核验。
清单完整不等于实验能够科学复现。它的价值是把问题定位到对象、版本、传输、来源、环境或方法中的具体一层,使后续复核从同一个事实起点开始。