comparison env/lib/python3.9/site-packages/cwltool/schemas/v1.1/Workflow.yml @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 saladVersion: v1.1
2 $base: "https://w3id.org/cwl/cwl#"
3
4 $namespaces:
5 cwl: "https://w3id.org/cwl/cwl#"
6 rdfs: "http://www.w3.org/2000/01/rdf-schema#"
7
8 $graph:
9
10 - name: "WorkflowDoc"
11 type: documentation
12 doc:
13 - |
14 # Common Workflow Language (CWL) Workflow Description, v1.1
15
16 This version:
17 * https://w3id.org/cwl/v1.1/
18
19 Current version:
20 * https://w3id.org/cwl/
21 - "\n\n"
22 - {$include: contrib.md}
23 - "\n\n"
24 - |
25 # Abstract
26
27 One way to define a workflow is: an analysis task represented by a
28 directed graph describing a sequence of operations that transform an
29 input data set to output. This specification defines the Common Workflow
30 Language (CWL) Workflow description, a vendor-neutral standard for
31 representing workflows intended to be portable across a variety of
32 computing platforms.
33
34 - {$include: intro.md}
35
36 - |
37
38 ## Introduction to CWL Workflow standard v1.1
39
40 This specification represents the latest stable release from the
41 CWL group. Since the v1.0 release, v1.1 introduces the
42 following updates to the CWL Workflow standard.
43 Documents should to use `cwlVersion: v1.1` to make use of new
44 syntax and features introduced in v1.1. Existing v1.0 documents
45 should be trivially updatable by changing `cwlVersion`, however
46 CWL documents that relied on previously undefined or
47 underspecified behavior may have slightly different behavior in
48 v1.1.
49
50 ## Changelog
51
52 * Clarify intent of ExpressionTool and clarify that they can be run standalone.
53 * Clarify how Requirements are inherited by step processes.
54 * Clarify behavior around step inputs not consumed by the target
55 run process.
56 * Document explicitly that CWL allows pass-through of workflow inputs to outputs.
57 * Added optional name and doc fields to `OutputRecordSchema`.
58 * Default values for some fields are now expressed in the schema.
59 * When defining record types, fields of type `File` may now include
60 `format`, `secondaryFiles`, and `streamable`.
61 * The `Input` schemas (`Record`, `Array`, `Enum`), now permits a `doc` field.
62 * Any `doc` field may be an array of strings in addition to the
63 previously allowed single string.
64 * The `run` field now introduces a subscope so that embedded
65 definitions do not have identifier conflicts with the
66 outer workflow.
67 * `Workflow.inputs` and `ExpressionTool.inputs` now refer to the type
68 `WorkflowInputParameter` instead of `InputParameter`; the only syntax
69 difference from v1.0 is that `inputBinding` is now deprecated (as
70 there is no command line to bind input values to) and `inputBinding`
71 in a `Workflow` context will be removed in v2.0. Use the new
72 `WorkflowInputParameter.loadContents` instead.
73 * The presence of `OutputRecordField.outputBinding` in v1.0 was due to
74 a technical error and as it makes no semantic sense it was removed.
75 * `WorkflowStepInput` now has a `label` field.
76 * [Addition](#Requirements_and_hints) of `cwl:requirements` field to
77 input object documents.
78 * `secondaryFiles` can now be explicitly marked as `required` or not.
79 * Add note that undefined details related to execution are left open to
80 the platform.
81 * [Added](#WorkReuse) `WorkReuse` feature, allowing to enable or disable the reuse
82 behavior for a particular tool or step for implementations that
83 support reusing output from past work.
84 * [Added](#NetworkAccess) `NetworkAccess` feature, allowing to indicate whether a
85 process requires outgoing network access.
86 * [Added](#InplaceUpdateRequirement) `InplaceUpdateRequirement` feature, allowing tools to directly
87 update files with `writable: true` in `InitialWorkDirRequirement`.
88 * [Added](#LoadListingRequirement) `LoadListingRequirement`
89 and [loadListing](#LoadContents) to control whether and how
90 `Directory` listings should be loaded for use in expressions.
91 * [Better explain](#map) the `map<…>` notation that has existed since v1.0.
92 * Fixed schema error where the `type` field inside the `inputs` and
93 `outputs` fields for both `Workflow` and `ExpressionTool` was
94 incorrectly listed as optional.
95 * For multi-Process CWL documents, if no particular process is named then
96 the process with the `id` of `#main` is chosen.
97 * [Made explicit](#Generic_execution_process) that the `$namespaces` of
98 the top level CWL document are also available to the input object as
99 well.
100 * Fields with type "Expression" no longer include "string" in
101 the type union unless a string is semantically valid. Where
102 a bare string is not semantically valid, these fields must
103 contain either a non-string value accepted by the field
104 type, or a valid expression which returns a value having one
105 of the the other types defined for that field.
106
107 See also the [CWL Command Line Tool Description, v1.1 changelog](CommandLineTool.html#Changelog).
108
109 ## Purpose
110
111 The Common Workflow Language Command Line Tool Description express
112 workflows for data-intensive science, such as Bioinformatics, Chemistry,
113 Physics, and Astronomy. This specification is intended to define a data
114 and execution model for Workflows that can be implemented on top of a
115 variety of computing platforms, ranging from an individual workstation to
116 cluster, grid, cloud, and high performance computing systems. Details related
117 to execution of these workflow not laid out in this specification are open to
118 interpretation by the computing platform implementing this specification.
119
120 - {$include: concepts.md}
121
122 - name: ExpressionToolOutputParameter
123 type: record
124 extends: OutputParameter
125 fields:
126 - name: type
127 type:
128 - CWLType
129 - OutputRecordSchema
130 - OutputEnumSchema
131 - OutputArraySchema
132 - string
133 - type: array
134 items:
135 - CWLType
136 - OutputRecordSchema
137 - OutputEnumSchema
138 - OutputArraySchema
139 - string
140 jsonldPredicate:
141 "_id": "sld:type"
142 "_type": "@vocab"
143 refScope: 2
144 typeDSL: True
145 doc: |
146 Specify valid types of data that may be assigned to this parameter.
147
148
149 - name: WorkflowInputParameter
150 type: record
151 extends: InputParameter
152 docParent: "#Workflow"
153 fields:
154 - name: type
155 type:
156 - CWLType
157 - InputRecordSchema
158 - InputEnumSchema
159 - InputArraySchema
160 - string
161 - type: array
162 items:
163 - CWLType
164 - InputRecordSchema
165 - InputEnumSchema
166 - InputArraySchema
167 - string
168 jsonldPredicate:
169 "_id": "sld:type"
170 "_type": "@vocab"
171 refScope: 2
172 typeDSL: True
173 doc: |
174 Specify valid types of data that may be assigned to this parameter.
175 - name: inputBinding
176 type: InputBinding?
177 doc: |
178 Deprecated. Preserved for v1.0 backwards compatability. Will be removed in
179 CWL v2.0. Use `WorkflowInputParameter.loadContents` instead.
180 jsonldPredicate: "cwl:inputBinding"
181
182
183 - type: record
184 name: ExpressionTool
185 extends: Process
186 specialize:
187 - specializeFrom: InputParameter
188 specializeTo: WorkflowInputParameter
189 - specializeFrom: OutputParameter
190 specializeTo: ExpressionToolOutputParameter
191 documentRoot: true
192 doc: |
193 An ExpressionTool is a type of Process object that can be run by itself
194 or as a Workflow step. It executes a pure Javascript expression that has
195 access to the same input parameters as a workflow. It is meant to be used
196 sparingly as a way to isolate complex Javascript expressions that need to
197 operate on input data and produce some result; perhaps just a
198 rearrangement of the inputs. No Docker software container is required
199 or allowed.
200 fields:
201 - name: class
202 jsonldPredicate:
203 "_id": "@type"
204 "_type": "@vocab"
205 type: string
206 - name: expression
207 type: Expression
208 doc: |
209 The expression to execute. The expression must return a JSON object which
210 matches the output parameters of the ExpressionTool.
211
212 - name: LinkMergeMethod
213 type: enum
214 docParent: "#WorkflowStepInput"
215 doc: The input link merge method, described in [WorkflowStepInput](#WorkflowStepInput).
216 symbols:
217 - merge_nested
218 - merge_flattened
219
220
221 - name: WorkflowOutputParameter
222 type: record
223 extends: OutputParameter
224 docParent: "#Workflow"
225 doc: |
226 Describe an output parameter of a workflow. The parameter must be
227 connected to one or more parameters defined in the workflow that
228 will provide the value of the output parameter. It is legal to
229 connect a WorkflowInputParameter to a WorkflowOutputParameter.
230 fields:
231 - name: outputSource
232 doc: |
233 Specifies one or more workflow parameters that supply the value of to
234 the output parameter.
235 jsonldPredicate:
236 "_id": "cwl:outputSource"
237 "_type": "@id"
238 refScope: 0
239 type:
240 - string?
241 - string[]?
242 - name: linkMerge
243 type: ["null", LinkMergeMethod]
244 jsonldPredicate: "cwl:linkMerge"
245 default: merge_nested
246 doc: |
247 The method to use to merge multiple sources into a single array.
248 If not specified, the default method is "merge_nested".
249 - name: type
250 type:
251 - CWLType
252 - OutputRecordSchema
253 - OutputEnumSchema
254 - OutputArraySchema
255 - string
256 - type: array
257 items:
258 - CWLType
259 - OutputRecordSchema
260 - OutputEnumSchema
261 - OutputArraySchema
262 - string
263 jsonldPredicate:
264 "_id": "sld:type"
265 "_type": "@vocab"
266 refScope: 2
267 typeDSL: True
268 doc: |
269 Specify valid types of data that may be assigned to this parameter.
270
271
272 - name: Sink
273 type: record
274 abstract: true
275 fields:
276 - name: source
277 doc: |
278 Specifies one or more workflow parameters that will provide input to
279 the underlying step parameter.
280 jsonldPredicate:
281 "_id": "cwl:source"
282 "_type": "@id"
283 refScope: 2
284 type:
285 - string?
286 - string[]?
287 - name: linkMerge
288 type: LinkMergeMethod?
289 jsonldPredicate: "cwl:linkMerge"
290 default: merge_nested
291 doc: |
292 The method to use to merge multiple inbound links into a single array.
293 If not specified, the default method is "merge_nested".
294
295
296 - type: record
297 name: WorkflowStepInput
298 extends: [Identified, Sink, LoadContents, Labeled]
299 docParent: "#WorkflowStep"
300 doc: |
301 The input of a workflow step connects an upstream parameter (from the
302 workflow inputs, or the outputs of other workflows steps) with the input
303 parameters of the process specified by the `run` field. Only input parameters
304 declared by the target process will be passed through at runtime to the process
305 though additonal parameters may be specified (for use within `valueFrom`
306 expressions for instance) - unconnected or unused parameters do not represent an
307 error condition.
308
309 ## Input object
310
311 A WorkflowStepInput object must contain an `id` field in the form
312 `#fieldname` or `#prefix/fieldname`. When the `id` field contains a slash
313 `/` the field name consists of the characters following the final slash
314 (the prefix portion may contain one or more slashes to indicate scope).
315 This defines a field of the workflow step input object with the value of
316 the `source` parameter(s).
317
318 ## Merging
319
320 To merge multiple inbound data links,
321 [MultipleInputFeatureRequirement](#MultipleInputFeatureRequirement) must be specified
322 in the workflow or workflow step requirements.
323
324 If the sink parameter is an array, or named in a [workflow
325 scatter](#WorkflowStep) operation, there may be multiple inbound data links
326 listed in the `source` field. The values from the input links are merged
327 depending on the method specified in the `linkMerge` field. If not
328 specified, the default method is "merge_nested".
329
330 * **merge_nested**
331
332 The input must be an array consisting of exactly one entry for each
333 input link. If "merge_nested" is specified with a single link, the value
334 from the link must be wrapped in a single-item list.
335
336 * **merge_flattened**
337
338 1. The source and sink parameters must be compatible types, or the source
339 type must be compatible with single element from the "items" type of
340 the destination array parameter.
341 2. Source parameters which are arrays are concatenated.
342 Source parameters which are single element types are appended as
343 single elements.
344
345 fields:
346 - name: default
347 type: ["null", Any]
348 doc: |
349 The default value for this parameter to use if either there is no
350 `source` field, or the value produced by the `source` is `null`. The
351 default must be applied prior to scattering or evaluating `valueFrom`.
352 jsonldPredicate:
353 _id: "sld:default"
354 noLinkCheck: true
355 - name: valueFrom
356 type:
357 - "null"
358 - string
359 - Expression
360 jsonldPredicate: "cwl:valueFrom"
361 doc: |
362 To use valueFrom, [StepInputExpressionRequirement](#StepInputExpressionRequirement) must
363 be specified in the workflow or workflow step requirements.
364
365 If `valueFrom` is a constant string value, use this as the value for
366 this input parameter.
367
368 If `valueFrom` is a parameter reference or expression, it must be
369 evaluated to yield the actual value to be assiged to the input field.
370
371 The `self` value in the parameter reference or expression must be
372 1. `null` if there is no `source` field
373 2. the value of the parameter(s) specified in the `source` field when this
374 workflow input parameter **is not** specified in this workflow step's `scatter` field.
375 3. an element of the parameter specified in the `source` field when this workflow input
376 parameter **is** specified in this workflow step's `scatter` field.
377
378 The value of `inputs` in the parameter reference or expression must be
379 the input object to the workflow step after assigning the `source`
380 values, applying `default`, and then scattering. The order of
381 evaluating `valueFrom` among step input parameters is undefined and the
382 result of evaluating `valueFrom` on a parameter must not be visible to
383 evaluation of `valueFrom` on other parameters.
384
385
386 - type: record
387 name: WorkflowStepOutput
388 docParent: "#WorkflowStep"
389 extends: Identified
390 doc: |
391 Associate an output parameter of the underlying process with a workflow
392 parameter. The workflow parameter (given in the `id` field) be may be used
393 as a `source` to connect with input parameters of other workflow steps, or
394 with an output parameter of the process.
395
396 A unique identifier for this workflow output parameter. This is
397 the identifier to use in the `source` field of `WorkflowStepInput`
398 to connect the output value to downstream parameters.
399
400
401 - name: ScatterMethod
402 type: enum
403 docParent: "#WorkflowStep"
404 doc: The scatter method, as described in [workflow step scatter](#WorkflowStep).
405 symbols:
406 - dotproduct
407 - nested_crossproduct
408 - flat_crossproduct
409
410
411 - name: WorkflowStep
412 type: record
413 extends: [Identified, Labeled, sld:Documented]
414 docParent: "#Workflow"
415 doc: |
416 A workflow step is an executable element of a workflow. It specifies the
417 underlying process implementation (such as `CommandLineTool` or another
418 `Workflow`) in the `run` field and connects the input and output parameters
419 of the underlying process to workflow parameters.
420
421 # Scatter/gather
422
423 To use scatter/gather,
424 [ScatterFeatureRequirement](#ScatterFeatureRequirement) must be specified
425 in the workflow or workflow step requirements.
426
427 A "scatter" operation specifies that the associated workflow step or
428 subworkflow should execute separately over a list of input elements. Each
429 job making up a scatter operation is independent and may be executed
430 concurrently.
431
432 The `scatter` field specifies one or more input parameters which will be
433 scattered. An input parameter may be listed more than once. The declared
434 type of each input parameter is implicitly becomes an array of items of the
435 input parameter type. If a parameter is listed more than once, it becomes
436 a nested array. As a result, upstream parameters which are connected to
437 scattered parameters must be arrays.
438
439 All output parameter types are also implicitly wrapped in arrays. Each job
440 in the scatter results in an entry in the output array.
441
442 If any scattered parameter runtime value is an empty array, all outputs are
443 set to empty arrays and no work is done for the step, according to
444 applicable scattering rules.
445
446 If `scatter` declares more than one input parameter, `scatterMethod`
447 describes how to decompose the input into a discrete set of jobs.
448
449 * **dotproduct** specifies that each of the input arrays are aligned and one
450 element taken from each array to construct each job. It is an error
451 if all input arrays are not the same length.
452
453 * **nested_crossproduct** specifies the Cartesian product of the inputs,
454 producing a job for every combination of the scattered inputs. The
455 output must be nested arrays for each level of scattering, in the
456 order that the input arrays are listed in the `scatter` field.
457
458 * **flat_crossproduct** specifies the Cartesian product of the inputs,
459 producing a job for every combination of the scattered inputs. The
460 output arrays must be flattened to a single level, but otherwise listed in the
461 order that the input arrays are listed in the `scatter` field.
462
463 # Subworkflows
464
465 To specify a nested workflow as part of a workflow step,
466 [SubworkflowFeatureRequirement](#SubworkflowFeatureRequirement) must be
467 specified in the workflow or workflow step requirements.
468
469 It is a fatal error if a workflow directly or indirectly invokes itself as
470 a subworkflow (recursive workflows are not allowed).
471
472 fields:
473 - name: in
474 type: WorkflowStepInput[]
475 jsonldPredicate:
476 _id: "cwl:in"
477 mapSubject: id
478 mapPredicate: source
479 doc: |
480 Defines the input parameters of the workflow step. The process is ready to
481 run when all required input parameters are associated with concrete
482 values. Input parameters include a schema for each parameter which is
483 used to validate the input object. It may also be used build a user
484 interface for constructing the input object.
485 - name: out
486 type:
487 - type: array
488 items: [string, WorkflowStepOutput]
489 jsonldPredicate:
490 _id: "cwl:out"
491 _type: "@id"
492 identity: true
493 doc: |
494 Defines the parameters representing the output of the process. May be
495 used to generate and/or validate the output object.
496 - name: requirements
497 type: ProcessRequirement[]?
498 jsonldPredicate:
499 _id: "cwl:requirements"
500 mapSubject: class
501 doc: |
502 Declares requirements that apply to either the runtime environment or the
503 workflow engine that must be met in order to execute this workflow step. If
504 an implementation cannot satisfy all requirements, or a requirement is
505 listed which is not recognized by the implementation, it is a fatal
506 error and the implementation must not attempt to run the process,
507 unless overridden at user option.
508 - name: hints
509 type: Any[]?
510 jsonldPredicate:
511 _id: "cwl:hints"
512 noLinkCheck: true
513 mapSubject: class
514 doc: |
515 Declares hints applying to either the runtime environment or the
516 workflow engine that may be helpful in executing this workflow step. It is
517 not an error if an implementation cannot satisfy all hints, however
518 the implementation may report a warning.
519 - name: run
520 type: [string, Process]
521 jsonldPredicate:
522 _id: "cwl:run"
523 _type: "@id"
524 subscope: run
525 doc: |
526 Specifies the process to run.
527 - name: scatter
528 type:
529 - string?
530 - string[]?
531 jsonldPredicate:
532 "_id": "cwl:scatter"
533 "_type": "@id"
534 "_container": "@list"
535 refScope: 0
536 - name: scatterMethod
537 doc: |
538 Required if `scatter` is an array of more than one element.
539 type: ScatterMethod?
540 jsonldPredicate:
541 "_id": "cwl:scatterMethod"
542 "_type": "@vocab"
543
544
545 - name: Workflow
546 type: record
547 extends: "#Process"
548 documentRoot: true
549 specialize:
550 - specializeFrom: InputParameter
551 specializeTo: WorkflowInputParameter
552 - specializeFrom: OutputParameter
553 specializeTo: WorkflowOutputParameter
554 doc: |
555 A workflow describes a set of **steps** and the **dependencies** between
556 those steps. When a step produces output that will be consumed by a
557 second step, the first step is a dependency of the second step.
558
559 When there is a dependency, the workflow engine must execute the preceeding
560 step and wait for it to successfully produce output before executing the
561 dependent step. If two steps are defined in the workflow graph that
562 are not directly or indirectly dependent, these steps are **independent**,
563 and may execute in any order or execute concurrently. A workflow is
564 complete when all steps have been executed.
565
566 Dependencies between parameters are expressed using the `source` field on
567 [workflow step input parameters](#WorkflowStepInput) and [workflow output
568 parameters](#WorkflowOutputParameter).
569
570 The `source` field expresses the dependency of one parameter on another
571 such that when a value is associated with the parameter specified by
572 `source`, that value is propagated to the destination parameter. When all
573 data links inbound to a given step are fufilled, the step is ready to
574 execute.
575
576 ## Workflow success and failure
577
578 A completed step must result in one of `success`, `temporaryFailure` or
579 `permanentFailure` states. An implementation may choose to retry a step
580 execution which resulted in `temporaryFailure`. An implementation may
581 choose to either continue running other steps of a workflow, or terminate
582 immediately upon `permanentFailure`.
583
584 * If any step of a workflow execution results in `permanentFailure`, then
585 the workflow status is `permanentFailure`.
586
587 * If one or more steps result in `temporaryFailure` and all other steps
588 complete `success` or are not executed, then the workflow status is
589 `temporaryFailure`.
590
591 * If all workflow steps are executed and complete with `success`, then the
592 workflow status is `success`.
593
594 # Extensions
595
596 [ScatterFeatureRequirement](#ScatterFeatureRequirement) and
597 [SubworkflowFeatureRequirement](#SubworkflowFeatureRequirement) are
598 available as standard [extensions](#Extensions_and_Metadata) to core
599 workflow semantics.
600
601 fields:
602 - name: "class"
603 jsonldPredicate:
604 "_id": "@type"
605 "_type": "@vocab"
606 type: string
607 - name: steps
608 doc: |
609 The individual steps that make up the workflow. Each step is executed when all of its
610 input data links are fufilled. An implementation may choose to execute
611 the steps in a different order than listed and/or execute steps
612 concurrently, provided that dependencies between steps are met.
613 type:
614 - type: array
615 items: "#WorkflowStep"
616 jsonldPredicate:
617 mapSubject: id
618
619
620 - type: record
621 name: SubworkflowFeatureRequirement
622 extends: ProcessRequirement
623 doc: |
624 Indicates that the workflow platform must support nested workflows in
625 the `run` field of [WorkflowStep](#WorkflowStep).
626 fields:
627 - name: "class"
628 type: "string"
629 doc: "Always 'SubworkflowFeatureRequirement'"
630 jsonldPredicate:
631 "_id": "@type"
632 "_type": "@vocab"
633
634 - name: ScatterFeatureRequirement
635 type: record
636 extends: ProcessRequirement
637 doc: |
638 Indicates that the workflow platform must support the `scatter` and
639 `scatterMethod` fields of [WorkflowStep](#WorkflowStep).
640 fields:
641 - name: "class"
642 type: "string"
643 doc: "Always 'ScatterFeatureRequirement'"
644 jsonldPredicate:
645 "_id": "@type"
646 "_type": "@vocab"
647
648 - name: MultipleInputFeatureRequirement
649 type: record
650 extends: ProcessRequirement
651 doc: |
652 Indicates that the workflow platform must support multiple inbound data links
653 listed in the `source` field of [WorkflowStepInput](#WorkflowStepInput).
654 fields:
655 - name: "class"
656 type: "string"
657 doc: "Always 'MultipleInputFeatureRequirement'"
658 jsonldPredicate:
659 "_id": "@type"
660 "_type": "@vocab"
661
662 - type: record
663 name: StepInputExpressionRequirement
664 extends: ProcessRequirement
665 doc: |
666 Indicate that the workflow platform must support the `valueFrom` field
667 of [WorkflowStepInput](#WorkflowStepInput).
668 fields:
669 - name: "class"
670 type: "string"
671 doc: "Always 'StepInputExpressionRequirement'"
672 jsonldPredicate:
673 "_id": "@type"
674 "_type": "@vocab"