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的輸出結果。