WDL中文教程
WDL中文教程
原文连接:https://github.com/openwdl/wdl/blob/main/versions/1.1/SPEC.md#workflow-description-language-wdl
该教程基于工作流描述语言(Workflow Description Language,WDL)1.1版本。相较于1.0版本,新增特性以✨符号标注。后续版本会移除的特征以🗑符号标注。
引言
工作流描述语言(Workflow Description Language),简称WDL,是一门开源的、标准化的以及人类可读写的用于描述任务和工作流的编程语言。WDL设计的初衷是作为一种通用的工作流程语言,但它在生物信息学领域应用最为广泛。WDL社区用户会在Dockstore上分享他们的工作流程实例。
该文档提供WDL的详细技术细节,WDL的新用户可能更适合类似learn-wdl这样更加友好的教程。
该部分展示一个WDL的简短例子,随后的章节为WDL用户提供介绍相关细节:
一个WDL工作流的例子
task hello {
input {
File infile
String pattern
}
command <<<
egrep '~{pattern}' '~{infile}'
>>>
runtime {
container: "my_image:latest"
}
output {
Array[String] matches = read_lines(stdout())
}
}
workflow wf {
input {
File infile
String pattern
}
call hello {
input: infile, pattern
}
output {
Array[String] matches = hello.matches
}
}
上述WDL文件描述一个称为hello
的task
,和一个称为wf
的workflow
。
-
task
封装了一个Bash脚本和一个UNIX环境,并将它们表示为一个可复用的函数。 -
workflow
封装用于指定任务调用的有向、无循环图,该图将输入数据转换为所需的输出。
workflows和tasks都能接收输入参数,也都能产生输出结果。例如,workflow wf
有两个输入参数:File infile
和String pattern
,有一个输出参数:Array[String] matches
。这个简单的workflow调用task hello
,该调用过程将workflow的输入传递为task的输入,并将call hello
的调用结果作为workflow的输出结果。