Page 430 - 《软件学报》2025年第12期
P. 430
黄小龙 等: ReproLink: 面向可复现性的科研数据管理系统 5811
在复现执行完成后将其加入 Done 集合, 并更新 Ready 集合, 从而以拓扑序依次执行每个复现单元. 伪代码中的
GetCode、GetDatasets 和 GetInputReproductionUnits 函数均使用对象检索引擎基于单跳路径匹配的搜索实现. 在
每个复现单元执行完成后, 复现执行引擎都会调用数据管理模块创建结果数据集对象和复现单元之间的关系对
象. 在复现完成后, 其他用户就可以使用对象检索引擎从新数据集检索到输入数据集, 或根据输入数据集查询衍生
的新数据集, 从而实现了基于关系的数据溯源和数据发现.
算法 1. 代码执行.
D
C
1. function ExecuteCode( I , I ,..., I )
D
1 n
C
C
I
2. O ← DoManager.RetrieveDo( )
3. for i=1 to n do
4. O ← DoManager.RetrieveDo( I )
D
D
i
i
5. end for
D
← CreateContainer( π EE (O ), π EC (O ), π E (O ),..., π D (O ))
C
D
C
6. container 1 n
7. StartContainer(container)
8. WaitAndMonitor(container)
9. D ← GetResults(container)
′
10. O ← DoManager.CreateDo( D )
D ′
′
11. return O D ′
12. end function
算法 2. 复现执行.
1. function GetDependentObjects(r)
2. R ← {r}
3. for r ∈ GetInputReproductionUnits(r) do
4. R ← R ∪ GetDependentObjects(r)
5. end for
6. return R
7. end function
8. function ExecuteOneReproductionUnit(r, Results)
9. C ← GetCode(r)
10. D ← GetDatasets(r)
′
11. for r ∈ GetInputReproductionUnits(r) do
12. D ← D∪{Results[r ]}
′
13. end for
14. output ← ExecuteCode(C,D)
15. return output
16. end function
17. function ExecuteReproductionUnits(reproductionUnit)
18. R ← GetDependentObjects(reproductionUnit)
19. Results,Ready,Done ← ∅,∅,∅
20. for r ∈ R do

