SoftWare Heritage持久ID标识符(SWHID) #
概述 #
目录 目录 修订 发布 快照
上下文限定符: 携带有关给定上下文的信息 物体是要被看见的。 这一点尤其重要,因为 对象可以在Merkle图中按不同的 路径 从不同节点开始(或 锚 ),它可能已被检索到 来自不同的 起源 ,可能会在不同的 访问 片段限定符: 允许精确定位对象的特定子部分
语法 #
< 标识符 > ::= < 标识符_核心 > [ < 限定符 > ] ; < 标识符_核心 > ::= “swh”“:” < 方案_版本 > ":" < 对象类型 > ":" < 对象id > ; < 方案_版本 > ::= “1”; < 对象类型 > ::= “snp”(*快照*) |“rel”(*发布*) |“版本”(*修订版*) |“目录”(*目录*) |“cnt”(*内容*) ; < 对象id > ::= 40 * < 六进制数字 > ; (*内部对象id,作为十六进制编码的SHA1*) < 十进制(_D) > ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; < 十六进制数字 > ::= < 十进制(_D) > |“a”|“b”|“c”|“d”|“e”|“f”; < 限定符 > := ";" < 限定符 > [ < 限定符 > ] ; < 限定符 > ::=
< 上下文限定符 > | < 片段限定符 > ; < 上下文限定符 > ::=
< 原始_文本 > | < 访问ctxt > | < 主持人_ ctxt > | < 路径文本 > ; < 原始_文本 > ::= “原点”“=” < url转义 > ; < 访问ctxt > ::= “访问”“=” < 标识符_核心 > ; < 主持人_ ctxt > ::= “锚”“=” < 标识符_核心 > ; < 路径_文本 > ::= “路径”“=” < 路径绝对覆盖 > ; < 片段限定符 > ::= “行”“=” < 行号 > ["-" < 行号(_N) > ] ; < 行号(_N) > ::= < 十进制(_D) > + ; < url转义 > ::= (*RFC 3987 IRI*) < 路径绝对覆盖 > ::= (*RFC 3987绝对路径*)
语义学 #
核心标识符 #
snp公司 到 快照 , 相对 到 发布 , 转速 到 修订 , 目录 到 目录 , 碳纳米管 到 目录 .
对于 快照 ,内部标识符是根据计算的清单的SHA1哈希 swh.模型.git_objects.snapshot_git_object() 对于 发布 ,根据 swh.模型.git_objects.release_git_object() 产生与git发布哈希相同的结果 对于 修订 ,根据 swh.模型.git_objects.revision_git_object() 生成与git提交哈希相同的结果 对于 目录 ,根据 swh.模型.git_objects.directory_git_object() 生成与git树散列相同的结果 对于 目录 ,内部标识符是 沙吉特 返回的哈希 swh.hashutil。 MultiHash.digest() ,即字节的SHA1 通过并列ASCII字符串获得的序列 “blob” (没有 引号)、空格、内容长度(十进制数字)、NULL字节、, 以及文件的实际内容。
限定符 #
来源: 这个 软件来源 发现或观察到物体的地方 在野外,作为URI; 访问: 的核心标识符 快照 对应于特定 参观 包含指定对象的存储库; 锚: 一 指定的节点 在Merkle DAG中,相对于 路径 到对象 指定为目录的核心标识符 修订、发布或快照; 路径: 这个 绝对文件路径 ,来自 根目录 关联到 这个 锚节点 对象; 当锚表示目录或 修订版,几乎每次发布时,根目录都是 唯一确定; 当锚表示快照时,根目录 是被指的那个吗 头部 (可能是间接的),如果 缺少此类参考;
行数: 行号 感兴趣,通常在内容对象中
互操作性 #
URI方案 #
Git兼容性 #
自动修复无效的SWHID #
示例 #
核心标识符 #
swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2 指向内容 包含GPL3许可证全文的文件的 swh:1:目录:d198bc9d7a6bcf6db04f476d29314f157507d505 指向目录 包含Darktable摄影应用程序的源代码 2017年5月4日 swh:1:版本:309cf2674ee7a0749978cf8265ab91a60aea0f7d 指向提交 Darktable的发展历史,日期为2017年1月16日 掩码的撤消/重做支持 swh:1:rel:22ece559cc7cc2364edc5e5593d63ae8bd229f9f 指向Darktable 2.3.0版,2016年12月24日 swh:1:snp:c7c108084bc0bf3d81436bf980b46e98bd338453 指向快照 2017年5月4日从GitHub获取的整个Darktable Git存储库的
带限定符的标识符 #
以下内容 SWHID公司 表示可以在绝对位置找到的文件内容的第9行到第15行 路径 /示例/SimpleFarm/SimpleFarm.ml 从的根目录 修订 swh:1:版本:2db189928c94d62a3b4757b3eec68f0a4d4113f0 那就是 包含在快照中 密码:1:snp:d7f1b9eb7ccb596c2622c4780febaa02549830f9 取自原产地 https://gitorious.org/ocamlp3l/ocamlp3l_cvs.git : 瑞士法郎 : 1 : 碳纳米管 : 4 d99d2d18326621ccdd70f5ea66c2e2ac236ad8b ; 起源 = https(https) : // 滑稽的 . 组织 / ocamlp3l基因 / ocamlp3l_cvs . 吉特 ; 参观 = 瑞士法郎 : 1 : snp公司 : d7f1b9eb7ccb596c2622c4780febaa02549830f9 ; 锚 = 瑞士法郎 : 1 : 转速 : 2 数据库189928c94d62a3b4757b3eec68f0a4d4113f0 ; 路径 =/ 示例 / SimpleFarm(简单农场) / 单纯形 . 毫升 ; 线 = 9 - 15 下面是一个示例 SWHID公司 文件路径需要百分比扫描: 瑞士法郎 : 1 : 碳纳米管 : f10371aa7b8ccabca8479196d6cd640676fd4a04 ; 起源 = https(https) : // github . 通用域名格式 / 网状物 - 平台 - 测验 / 湿性粉剂 ; 参观 = 瑞士法郎 : 1 : snp公司 : b37d435721bbd450624165f334724e3585346499 ; 锚 = 瑞士法郎 : 1 : 转速 : 259 d0612af038d14f2cd889a14a3adb6c9e96d96 ; 路径 =/ html格式 / 语义学 / 文件 - 元数据 / 这个 - 元 - 要素 / 杂注 - 指令 / 属性 - 元 - http协议 - 相等的 - 刷新 / 支持 / x个 % 三 伯尔 = foo公司 /
实施 #
计算 #
当通过解析 SWHID,很容易验证它是否正是预期的: 只需从工件本身计算核心标识符,并检查它 与SHWID的核心标识符部分相同 可以计算软件工件的核心标识符 之前 它的 软件遗产档案
选择要使用的SWHID类型 #
解析器 #
软件遗产解析程序 #
第三方解析器 #
标识符.org ; 请参见: http://identifiers.org/swh/ (注册表标识符 MIR:000000655 ).
https://identifiers.org/swh:1:cnt:94a9ed024d3859793618152ea559a168bbcbb5e2 https://identifiers.org/swh:1:dir:d198bc9d7a6bcf6db04f476d29314f157507d505 https://identifiers.org/swh:1:rev:309cf2674ee7a0749978cf8265ab91a60aea0f7d https://n2t.net/swh:1:rel:22ece559cc7cc2364edc5e5593d63ae8bd229f9f https://n2t.net/swh:1:snp:c7c108084bc0bf3d81436bf980b46e98bd338453
工具书类 #
罗伯特·迪·科斯莫(Roberto Di Cosmo)、莫兰·格伦彼得(Morane Gruenpeter)、斯特凡诺·扎奇罗利(Stefano Zacchiroli)。 标识符 数字对象:软件源代码保存案例 .在 iPRES公司 2018 :第15届国际数字会议 保存,马萨诸塞州波士顿,美国,2018年9月,共9页。 罗伯特·迪·科斯莫(Roberto Di Cosmo)、莫兰·格伦彼得(Morane Gruenpeter)、斯特凡诺·扎奇罗利(Stefano Zacchiroli)。 引用源 代码工件:软件引用中的一个单独关注点 在科学计算和 工程,第22卷,第2期,第33-43页。 ISSN 1521-9615, 电气与电子工程师协会。 2020年3月。