EEP封装?METS封装?还是ZIP封装?

news2024/11/18 7:44:59

档案信息化行业的老兵想必对10多年前的EEP封装包印象深刻,其自包含、自描述、自证明的“洋葱结构”曾经火遍大江南北,为电子文件的真实性和完整性保证提供了一种重要手段,但其过分严谨刻板的封装结构也曾让很多档案从业人员抓狂。笔者曾经主导过国内第一款EEP封装工具的研发工作,那种又爱又恨的感觉至今难以忘怀。那为什么曾经这么火爆的EEP封装包现在销声匿迹了呢?我们今天就来聊聊这个话题。

#1:EEP封装

根据DA/T 48-2009《基于XML的电子文件封装规范》,封装、封装格式和封装包的定义如下:

这个标准中描述的“封装包”就是“EEP封装包”,即Electronic records Encapsulation Package(EEP)。

但实际上EEP封装包也不是由DA/T 48-2009首先提出的,它在很大程度上借鉴了当时国际上主流的两种电子文件封装方法之一的VEO(Victorian Encapsulation Object)封装格式(另一种是METS封装格式,Metadata Encoding and Transmission Standard)。而VEO封装格式是由1999年澳大利亚电子文件战略项目VERS(Victorian Electronic Records Strategy)提出的,可用于电子文件生命周期各个阶段的封装,例如捕获、归档、移交或长期保存阶段等。

EEP封装包最大的特点就是“洋葱结构”:采用层层包裹的方式实现对电子文件内容的封装。最外层是文件修订元数据(每次修订就在外面再包裹一层),中层是文件元数据,最里层才Base64编码之后的文件二进制内容,而且每一层都用数字签名进行锁定。“洋葱结构”如下图所示:

这个结构看上去非常完美,真正做到了自包含(洋葱结构)、自描述(元数据)、自证明(数字签名),但在实际操作过程中存在以下三个方面的问题:

01

洋葱结构层层包裹,哪怕是对封装包再小的修改也需要包裹一层,最终在整个文件生命周期会出现一个无比膨胀的EEP封装包,这给将来的追溯和利用带来很大困难;

02

文件内容经过Base64编码之后嵌入到XML中作为内核,Base64编码本身就存在膨胀问题,封装和编解码过程非常耗费资源,如果存在多个电子文件一起封装的情况(比如多个扫描影像文件),对计算资源的要求相当高

03

层层封装层层签名的方式看似完美,实则给电子文件套上了沉重的“枷锁”,由于数字签名存在证书过期、算法升级、责任人变更等后期维护问题,使封装包受制于CA认证机构,后期维护非常不便。

这就是笔者在文章一开始的时候所说的“又爱又恨”的感觉:一方面,EPP封装包是“完美的”,另一方面,EEP封装包又是“不接地气的”。最终的结局可想而知,到现在已经极少有档案部门还在继续采用EEP封装格式了。

#2:METS封装

下面我们再来看看METS封装。METS封装格式是1996年数字图书馆联盟在美国密歇根大学和康奈尔大学合作发起的MOA2(the Making Of America II)项目基础之上提出的,特点是集成描述、结构、管理元数据的一体式封装。

METS封装是一种“模块式”的封装格式:所有元数据统一记录在描述元数据块和管理元数据块中;所有编码的二进制文件内容统一封装在文件列表块中;文件的结构信息记录在结构图块中;采用链接的方式将描述元数据块和管理元数据块中的元数据链接到文件列表块和结构图块中对应文件编码上。如下图所示(以一份党委会议文件为例):

 

由于METS封装采用独立的模块来描述电子文件的元数据、编码二进制内容和层次关系,模块之间互不影响,相互之间采用“指针”的方式链接。因此,也可称之为“模块式”封装格式。另外,METS封装也没有强制要求对文件内容进行Base64编码,为了管理、利用和维护方便,也可以直接保存电子文件原始格式。另外,METS封装还存在一种“分体式”封装的变种,也就是将电子文件内容以外部文件的形式独立保存,而METS封装包中只封装元数据及指向外部电子文件的链接,这样处理大大降低了封装包的大小,但增加了封装包和文件之间指向关系的维护难度。

从上述封装格式的对比可以发现,由于METS封装采用了“指针”的方式实现元数据和文件内容的链接,是一种“松耦合”的封装方式,相对于EEP封装“紧耦合”的方式显然要灵活得多,因而也更加“接地气”。METS封装方法虽然起源于图书馆领域,但其应用已扩展到档案馆、博物馆、文献情报等领域,根据METS官方统计,截止2020年,已经在METS注册登记系统中登记的全球范围内使用METS封装格式的机构已经有几百家。

#3:ZIP封装

那么,还有没有比METS封装更加灵活方便的封装格式呢?答案是肯定的,那就是ZIP封装。当然采用ZIP压缩包方式叫做“封装”难免有些牵强,可能叫“打包”更加合适一些,也就是将电子文件元数据和内容数据按照一定的结构组织好之后打成ZIP的方式。这是一种“原汁原味”的封装方式。

当然,采用ZIP打包并不是说电子文件的元数据和内容数据就不重要了,实际上打包只是一个形式而已,电子文件的元数据和内容数据一个也不能少,而且还得按照一定的结构组织起来。比如GB/T 39362-2020《党政机关电子公文归档规范》中的电子公文归档信息包结构如下:

 

组织的过程是省不掉的,打包的操作则很简单。由于ZIP压缩格式是开源的,采用ZIP打包不用担心受制于特定技术或机构的问题。以后的维护和利用就更加方便了,什么时候要进行维护和利用了,只需要解包提取文件元数据和内容,处理完再重新打包即可。

最后,我们再来回答文章开头的问题,“为什么曾经那么火爆的EEP封装包现在销声匿迹了呢?”,就是因为它不接地气,把简单的问题复杂化了!并不是只有EEP才是封装包,电子文件的真实性和完整性也不是单单靠封装就能解决的。作为标准肯定需要考虑理论完美性,但更需要考虑实用性和可操作性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java开发 - 分页查询初体验

前言在上一篇,我们对es进行了深入讲解,相信看过的小伙伴已经能基本掌握es的使用方法,我们知道,es主要针对的是搜索条件,在这方面es具有无可比拟的优势,但我们也会注意到,有时候搜索条件过于宽泛…

基于JavaWeb实现的学生选课系统(源码+数据库+文档)

一、项目简介 本项目是一套基于JavaWeb实现的学生选课系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,e…

基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.2版已发布

关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、标准Java平台,服务端基于Netty编写。 工程开源地址是&…

Nuxt.js项目开发过程遇到的问题以及对Nuxt.js的学习与总结

文章目录📋前言💻Nuxtjs3快速了解🎯nuxtjs是什么?官网是这样介绍它的。🎯关于nuxtjs的SSR开发🧩SSR应用场景🧩nuxtjs的特性💻nuxtjs的初始目录结构🎯关于各个目录的解释&…

智能家居控制系统

🥁作者: 华丞臧. 📕​​​​专栏:【项目经验】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站…

MIGO 物料过账 创建物料凭证 BAPI_GOODSMVT_CREATE

文章目录1.前台操作2.需求分析2.1调用方式2.2分为两大概括:2.3业务逻辑细节图3.BAPI_GOODSMVT_CREATE4.RFC接口代码5.总结1.前台操作 SAP CO01(创建生产订单)/MIGO(发货投料)前台操作 这里面有migo的前台操作,首先了解前台操作后再去写RFC接口是比较容易理解的.!! 2.需求分析…

opencv读入图片注意事项

来源:投稿 作者:蓬蓬奇 编辑:学姐 深度学习数据预处理中常用opencv读入图片,一般在__getitem__函数中调用。本文主要介绍opencv读取图片的一些细节以及注意事项。本文中使用的图片见第6节“opencv测试使用的图片”。 1.如何通过o…

计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准)

计算机底层:储存器的性能指标(CPU和内存等硬件的性能以及 对比标准) 内存: MAR是存放地址的寄存器;MDR是存放数据的寄存器。 MAR是存放地址的寄存器,那么其中的二进制位一定是不能重复的,试想,如果有有两个…

《爆肝整理》保姆级系列教程python接口自动化测试框架(二十六)--批量执行用例 discover(详解)

简介  我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了。加载用例后,用 unittest 里面的 TextTestRunner 这里类的 run 方…

类和对象 - 上

本文已收录至《C语言》专栏! 作者:ARMCSKGT 目录 前言 正文 面向过程与面向对象 面向过程的解决方法 面向对象的解决方法 面向对象的优势 类的引入 早期C类的实现 class定义类 class定义规则 类成员的两种定义方式 类的访问限定符及封装 访…

在数字优先的世界中打击知识产权盗窃

在当今数据驱动的世界中,全球许多组织所面临的期望和需求正在达到前所未有的水平。 为了迎接挑战,数据驱动的方法是必要的,需要有效的数字化转型来提高运营效率、简化流程并从遗留技术中获得更多收益。 但是,虽然数字优先方法可…

Spring Boot+Vue前后端分离项目练习01之网盘项目的搭建

1.前期设计 一般看来,网盘系统主要实体包括:用户、存储信息、用户文件、文件、回收文件等基本功能点。 各实体对应的表结构如下所示: 表名:user(用户表) 字段名属性说明userIdbigint主键usernamevarcha…

数据结构与算法系列之顺序表的实现

这里写目录标题顺序表的优缺点:注意事项test.c(动态顺序表)SeqList.hSeqList.c各接口函数功能详解void SLInit(SL* ps);//定义void SLDestory(SL* ps);void SLPrint(SL* ps);void SLPushBack(SL* ps ,SLDataType * x );void SLPopBack(SL* ps…

[busybox] busybox生成一个最精简rootfs(下)

书接上回:[busybox] busybox生成一个最精简rootfs(上) 本篇介绍几个rootfs中用到的“不是那么重要的”几个文件。 9 /etc/shadow 和 /etc/passwd 曾经,/etc/passwd 文件用于存储独立 Linux 系统中的所有登录信息。 后来,由于以下原因&…

算法训练营 day63 单调栈 下一个更大元素II 接雨水

算法训练营 day63 单调栈 下一个更大元素II 接雨水 下一个更大元素II 503. 下一个更大元素 II - 力扣(LeetCode) 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的…

2023软件测试工程师涨薪攻略,3年如何达到30K

1.软件测试如何实现涨薪 首先涨薪并不是从8000涨到9000这种涨薪,而是从8000涨到15K加到25K的涨薪。基本上三年之内就可以实现。 如果我们只是普通的有应届毕业生或者是普通本科那我们就只能从小公司开始慢慢往上走。 有些同学想去做测试,是希望能够日…

Vue3 关于 provide、inject 的用法

前言: 在前端项目中牵扯的最多的莫过于组件之间的传值了,除了最最常用的 props 和 emit,其实在 Vue 中还额外提供了另外几种方法。今天分享一种组件之间通信的方法。 一. 场景再现 先别着急考虑标题这个 api 的含义。在这里我先动手写一个比较…

如何使用Codecepticon对C#、VBA宏和PowerShell源代码进行混淆处理

关于Codecepticon Codecepticon是一款功能强大的代码混淆处理工具,该工具专为红队和紫队渗透测试安全活动而开发,在该工具的帮助下,广大研究人员可以轻松对C#、VBA5/VBA6(宏)和PowerShell源代码进行混淆处理。Codecep…

【Datawhale图机器学习】图神经网络

图神经网络 GNN是一种连接模型,通过网络中节点之间的信息传递的方式来获取图中的依存关系,GNN通过从节点任意深度的邻居来更新该节点状态,这个状态能够表示状态信息。第一次在论文 The graph neural network model 中提出 与传统NN的区别&a…

UnsupportedOperationException深层探究

在调试程序的时候发现一个奇怪的问题,代码都是写过的很常见的代码,但是看日志会报错,报错信息如下:Exception in thread "main" java.lang.UnsupportedOperationExceptionat java.util.AbstractList.set(AbstractList.j…