@prefix SchemaDefRequirement: <https://w3id.org/cwl/cwl#SchemaDefRequirement/> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix Process: <https://w3id.org/cwl/cwl#Process/> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix CommandOutputBinding: <https://w3id.org/cwl/cwl#CommandOutputBinding/> .
@prefix ns2:   <https://schema.org/> .
@prefix ns1:   <http://commonwl.org/cwltool#> .
@prefix NetworkAccess: <https://w3id.org/cwl/cwl#NetworkAccess/> .
@prefix FieldBase: <https://w3id.org/cwl/cwl#FieldBase/> .
@prefix EnvironmentDef: <https://w3id.org/cwl/cwl#EnvironmentDef/> .
@prefix CommandLineTool: <https://w3id.org/cwl/cwl#CommandLineTool/> .
@prefix ExpressionTool: <https://w3id.org/cwl/cwl#ExpressionTool/> .
@prefix CommandLineBinding: <https://w3id.org/cwl/cwl#CommandLineBinding/> .
@prefix EnvVarRequirement: <https://w3id.org/cwl/cwl#EnvVarRequirement/> .
@prefix DockerRequirement: <https://w3id.org/cwl/cwl#DockerRequirement/> .
@prefix Workflow: <https://w3id.org/cwl/cwl#Workflow/> .
@prefix InlineJavascriptRequirement: <https://w3id.org/cwl/cwl#InlineJavascriptRequirement/> .
@prefix sld:   <https://w3id.org/cwl/salad#> .
@prefix ToolTimeLimit: <https://w3id.org/cwl/cwl#ToolTimeLimit/> .
@prefix SecondaryFileSchema: <https://w3id.org/cwl/cwl#SecondaryFileSchema/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix WorkReuse: <https://w3id.org/cwl/cwl#WorkReuse/> .
@prefix ScatterMethod: <https://w3id.org/cwl/cwl#ScatterMethod/> .
@prefix cwl:   <https://w3id.org/cwl/cwl#> .
@prefix ResourceRequirement: <https://w3id.org/cwl/cwl#ResourceRequirement/> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_parameters>
        rdfs:comment  "Custom record type (SchemaDefRequirement) grouping dependent parameters." ;
        rdfs:label    "Search pattern + case sensitivity" ;
        sld:type      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl>
        a                        cwl:CommandLineTool ;
        rdfs:comment             "Extracts all `.txt` reports from the checksum-verified tar.gz corpus\narchive. Demonstrates: baseCommand as an array (fixed leading arguments),\nResourceRequirement, array-of-File outputs via glob, and capturing the\ntool's own stdout as a log file.\n" ;
        rdfs:label               "Extract corpus archive" ;
        ns1:original_cwlVersion  "v1.2" ;
        cwl:baseCommand          ( "tar" "--extract" "--gzip" "--verbose" ) ;
        cwl:cwlVersion           cwl:v1.2 ;
        cwl:hints                [ a                             cwl:DockerRequirement ;
                                   DockerRequirement:dockerPull  "alpine:3.20"
                                 ] ;
        cwl:inputs               <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl#archive> ;
        cwl:outputs              <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl#extraction_log> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl#extracted_files> ;
        cwl:requirements         [ a                              cwl:ResourceRequirement ;
                                   ResourceRequirement:coresMin   1 ;
                                   ResourceRequirement:outdirMin  512 ;
                                   ResourceRequirement:ramMin     256 ;
                                   ResourceRequirement:tmpdirMin  512
                                 ] ;
        cwl:stdout               "extraction.log" .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#send_notification>
        rdfs:label   "Whether to attempt the (demo-only) webhook notification" ;
        sld:default  false ;
        sld:type     xsd:boolean .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#total_matches>
        rdfs:label        "Total matches across the whole corpus" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/total_matches> ;
        sld:type          xsd:int .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#ref_names>
        rdfs:label  "Not used directly - only read by the workflow step's sibling valueFrom" ;
        sld:type    [ sld:items  xsd:string ;
                      sld:type   sld:array
                    ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/search_parameters>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search_parameters> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#summary>
        rdfs:label  "Rendered summary (text or JSON, per output_format)" ;
        sld:type    xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#total_matches>
        rdfs:label  "Sum of all match counts" ;
        sld:type    xsd:int .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract>
        rdfs:label  "Extract the corpus archive" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract/archive> ;
        cwl:out     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract/extracted_files> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract/extraction_log> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#reference_dir>
        rdfs:comment  "Directory whose contents are listed (not searched) for context." ;
        rdfs:label    "Reference materials directory" ;
        sld:type      cwl:Directory .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/compress_threshold>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress_threshold> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/search_parameters>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_parameters> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate>
        rdfs:label  "Sum match counts and render the summary" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/match_counts> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/output_format> ;
        cwl:out     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/summary> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/total_matches> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl>
        a                        cwl:CommandLineTool ;
        rdfs:comment             "Gzips the persisted summary file. Only runs when the workflow step's\n`when` condition is true (see main-workflow.cwl). `total_matches` and\n`compress_threshold` are declared here with no `inputBinding` purely so\nthe workflow's `when` expression can read them - they never reach the\nactual command line. Demonstrates: ToolTimeLimit, WorkReuse, and\n\"control-only\" step inputs.\n" ;
        rdfs:label               "Compress the summary report" ;
        ns1:original_cwlVersion  "v1.2" ;
        cwl:arguments            ( "--keep" "--force" ) ;
        cwl:baseCommand          ( "gzip" ) ;
        cwl:cwlVersion           cwl:v1.2 ;
        cwl:hints                [ a                             cwl:DockerRequirement ;
                                   DockerRequirement:dockerPull  "alpine:3.20"
                                 ] ;
        cwl:inputs               <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#summary_file> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#total_matches> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#compress_threshold> ;
        cwl:outputs              <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#compressed_summary> ;
        cwl:requirements         [ a                              cwl:ResourceRequirement ;
                                   ResourceRequirement:coresMin   1 ;
                                   ResourceRequirement:ramMin     128 ;
                                   ResourceRequirement:tmpdirMin  256
                                 ] ;
        cwl:requirements         [ a            cwl:InitialWorkDirRequirement ;
                                   cwl:listing  "$(inputs.summary_file)"
                                 ] ;
        cwl:requirements         [ a                      cwl:WorkReuse ;
                                   WorkReuse:enableReuse  true
                                 ] ;
        cwl:requirements         [ a                        cwl:ToolTimeLimit ;
                                   ToolTimeLimit:timelimit  60
                                 ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract/archive>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum/verified_archive> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl#archive>
        rdfs:label        "Checksum-verified corpus archive" ;
        cwl:format        <https://www.iana.org/assignments/media-types/application/gzip> ;
        cwl:inputBinding  [ CommandLineBinding:position  1 ;
                            CommandLineBinding:prefix    "--file=" ;
                            CommandLineBinding:separate  false
                          ] ;
        sld:type          cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/list-reference-dir.cwl#reference_dir>
        rdfs:label  "Reference materials directory" ;
        sld:type    cwl:Directory .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#send_notification>
        rdfs:label  "Not passed on the command line - read only by the workflow's `when`" ;
        sld:type    xsd:boolean .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl>
        a                        cwl:CommandLineTool ;
        rdfs:comment             "Confirms the SHA-256 checksum of the corpus archive matches its\naccompanying `.sha256` sidecar file (declared via `secondaryFiles`) before\nextraction proceeds. On success it passes the *same* File object through as\n`verified_archive`, which the workflow uses to force a real data\ndependency (extraction only starts once verification has succeeded).\n\nDemonstrates: secondaryFiles, successCodes default (mismatch = real\nfailure), simple parameter references with array indexing\n(`secondaryFiles[0].path`, no InlineJavascriptRequirement needed), and an\n`outputEval` that passes an input straight through as an output.\n" ;
        rdfs:label               "Verify archive checksum" ;
        ns1:original_cwlVersion  "v1.2" ;
        cwl:arguments            ( [ CommandLineBinding:position  1 ;
                                     cwl:valueFrom                "set -e\nexpected=`cat \"$(inputs.archive.secondaryFiles[0].path)\"`\nactual=`sha256sum \"$(inputs.archive.path)\" | cut -d ' ' -f 1`\nif [ \"$expected\" != \"$actual\" ]; then\n  echo \"Checksum mismatch: expected $expected, got $actual\" 1>&2\n  exit 1\nfi\necho \"Checksum OK: $actual\"\n"
                                   ]
                                 ) ;
        cwl:baseCommand          ( "sh" "-c" ) ;
        cwl:cwlVersion           cwl:v1.2 ;
        cwl:hints                [ a                             cwl:DockerRequirement ;
                                   DockerRequirement:dockerPull  "alpine:3.20"
                                 ] ;
        cwl:inputs               <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl#archive> ;
        cwl:outputs              <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl#verified_archive> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl#verification_log> ;
        cwl:stdout               "checksum-verification.log" .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl#extracted_files>
        rdfs:label         "Extracted text reports" ;
        cwl:format         <https://www.iana.org/assignments/media-types/text/plain> ;
        cwl:outputBinding  [ CommandOutputBinding:glob
                          "*.txt" ] ;
        sld:type           [ sld:items  cwl:File ;
                             sld:type   sld:array
                           ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search_parameters>
        rdfs:label  "Search pattern + case sensitivity (custom record type)" ;
        sld:type    <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/base_summary>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/summary> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/ref_names>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#list_reference/reference_file_names> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#text_files>
        rdfs:label  "Extracted text reports to search" ;
        sld:type    [ sld:items  cwl:File ;
                      sld:type   sld:array
                    ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat>
        rdfs:comment  "Controls how the aggregated summary is rendered. Using an enum instead of\na free-form string is a documented CWL best practice for fixed value sets.\nKept in its own external file, one type per file, per CWL User Guide best\npractice.\n" ;
        sld:symbols   <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat/json> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat/text> ;
        sld:type      sld:enum .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/extract-archive.cwl#extraction_log>
        rdfs:label         "tar --verbose output" ;
        cwl:outputBinding  [ CommandOutputBinding:glob
                          "extraction.log" ] ;
        sld:type           cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#notification_log>
        rdfs:label         "wget output (only produced if this step actually runs)" ;
        cwl:outputBinding  [ CommandOutputBinding:glob
                          "notification.log" ] ;
        sld:type           cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl>
        a                        cwl:Workflow ;
        rdfs:comment             "End-to-end example workflow used to teach CWL concepts. It verifies and\nextracts a tar.gz text corpus, searches every extracted file for a\npattern (as a scattered sub-workflow), lists a reference directory,\nwrites and conditionally compresses a summary report, and (only if\nexplicitly requested) would send a webhook notification.\n\nSee diagrams/cwl-conceptual-overview.md and\npresentation/CWL-Example-Walkthrough.pptx for a guided explanation.\n" ;
        rdfs:label               "CWL Example - Text Corpus Search Pipeline" ;
        ns1:original_cwlVersion  "v1.2" ;
        ns2:author               [ a         ns2:Person ;
                                   ns2:name  "CWL Example Maintainers"
                                 ] ;
        ns2:dateCreated          "2026-09-25" ;
        ns2:license              "https://spdx.org/licenses/Apache-2.0" ;
        Process:intent           <https://edamontology.org/operation_0306> ;
        Workflow:steps           <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notify> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#list_reference> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract> ;
        cwl:cwlVersion           cwl:v1.2 ;
        cwl:inputs               <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notification_message> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress_threshold> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#corpus_archive> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#reference_dir> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_parameters> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#send_notification> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#output_format> ;
        cwl:outputs              <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#total_matches> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#match_reports> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#final_report> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#summary> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verification_log> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extraction_log> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#reference_file_names> ;
        cwl:requirements         [ a                           cwl:SchemaDefRequirement ;
                                   SchemaDefRequirement:types  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters>
                                 ] ;
        cwl:requirements         [ a  cwl:SubworkflowFeatureRequirement ] ;
        cwl:requirements         [ a  cwl:InlineJavascriptRequirement ] ;
        cwl:requirements         [ a  cwl:MultipleInputFeatureRequirement ] ;
        cwl:requirements         [ a  cwl:StepInputExpressionRequirement ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/list-reference-dir.cwl#reference_file_names>
        rdfs:label  "Names of every file found under reference_dir" ;
        sld:type    [ sld:items  xsd:string ;
                      sld:type   sld:array
                    ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl>
        a                          cwl:ExpressionTool ;
        rdfs:comment               "Sums the scattered `match_count` outputs from search-tool.cwl and renders a\nhuman- or machine-readable summary string. Demonstrates: ExpressionTool\nwith array inputs, SchemaDefRequirement (enum custom type), and\nInlineJavascriptRequirement.expressionLib loaded from an external file via\n`$include`.\n" ;
        rdfs:label                 "Aggregate per-file match counts into a summary" ;
        ns1:original_cwlVersion    "v1.2" ;
        ExpressionTool:expression  "${\n  var total = 0;\n  for (var i = 0; i < inputs.match_counts.length; i++) {\n    total += inputs.match_counts[i];\n  }\n  return {\n    \"total_matches\": total,\n    \"summary\": renderSummary(total, inputs.match_counts, inputs.output_format)\n  };\n}\n" ;
        cwl:cwlVersion             cwl:v1.2 ;
        cwl:inputs                 <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#match_counts> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#output_format> ;
        cwl:outputs                <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#total_matches> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#summary> ;
        cwl:requirements           [ a       cwl:InlineJavascriptRequirement ;
                                     InlineJavascriptRequirement:expressionLib
                                             "/**\n * Shared JavaScript helpers loaded via InlineJavascriptRequirement.expressionLib\n * ($include) in example/steps/aggregate-results.cwl. Demonstrates keeping\n * reusable expression logic out of inline `$(...)`/`${...}` blocks, as\n * suggested in the CWL User Guide \"Expressions\" topic.\n */\n\nfunction pluralize(count, singular, plural) {\n  return count === 1 ? singular : (plural || (singular + \"s\"));\n}\n\nfunction renderSummary(totalMatches, perFileCounts, outputFormat) {\n  if (outputFormat === \"json\") {\n    return JSON.stringify({\n      total_matches: totalMatches,\n      per_file_matches: perFileCounts\n    });\n  }\n  return totalMatches + \" \" + pluralize(totalMatches, \"match\", \"matches\") +\n    \" found across \" + perFileCounts.length + \" \" +\n    pluralize(perFileCounts.length, \"file\") + \".\";\n}\n"
                                   ] ;
        cwl:requirements           [ a                           cwl:SchemaDefRequirement ;
                                     SchemaDefRequirement:types  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat>
                                   ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notify/webhook_message>
        cwl:source     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notification_message> ;
        cwl:valueFrom  "$(self || \"CWL example pipeline completed\")" .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/summary_text>
        cwl:valueFrom  "$(inputs.base_summary + \" Reference files available: \" + inputs.ref_names.join(\", \") + \".\")\n" .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary>
        rdfs:label  "Persist the combined summary as a file" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/summary_text> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/ref_names> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/base_summary> ;
        cwl:out     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/summary_file> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extraction_log>
        rdfs:label        "Archive extraction log" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract/extraction_log> ;
        sld:type          cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl#verification_log>
        rdfs:label         "Verification log" ;
        cwl:outputBinding  [ CommandOutputBinding:glob
                          "checksum-verification.log" ] ;
        sld:type           cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search>
        rdfs:label         "Search every text file (scattered)" ;
        cwl:in             <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/text_file> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/search_parameters> ;
        cwl:out            <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/match_count> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/match_report> ;
        cwl:run            <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl> ;
        cwl:scatter        ( <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/text_file> ) ;
        cwl:scatterMethod  ScatterMethod:dotproduct .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#list_reference/reference_dir>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#reference_dir> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/output_format>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#output_format> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow>
        rdfs:label  "Search every extracted file (nested sub-workflow)" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/text_files> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/output_format> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/search_parameters> ;
        cwl:out     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/match_reports> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/summary> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/total_matches> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#output_format>
        rdfs:label  "Rendering mode for the summary (custom enum type)" ;
        sld:type    <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/total_matches>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/total_matches> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl#verified_archive>
        rdfs:label         "Same archive, checksum-verified" ;
        cwl:format         <https://www.iana.org/assignments/media-types/application/gzip> ;
        cwl:outputBinding  [ CommandOutputBinding:outputEval
                          "$(inputs.archive)" ] ;
        sld:type           cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#summary_text>
        rdfs:label  "Full summary text to persist" ;
        sld:type    xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#match_report>
        rdfs:label            "Matching lines, one per line" ;
        FieldBase:streamable  true ;
        cwl:format            <https://www.iana.org/assignments/media-types/text/plain> ;
        cwl:outputBinding     [ CommandOutputBinding:glob
                          "$(inputs.text_file.nameroot).matches.txt" ] ;
        sld:type              cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#webhook_message>
        rdfs:label        "Message body for the (never actually called, by default) webhook" ;
        cwl:inputBinding  [ CommandLineBinding:position  2 ;
                            CommandLineBinding:prefix    "--post-data=" ;
                            CommandLineBinding:separate  false
                          ] ;
        sld:type          xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#corpus_archive>
        rdfs:comment        "A tar.gz archive of .txt reports, with a .sha256 sidecar as a secondaryFile." ;
        rdfs:label          "Text corpus archive" ;
        cwl:format          <https://www.iana.org/assignments/media-types/application/gzip> ;
        cwl:secondaryFiles  [ SecondaryFileSchema:pattern   ".sha256" ;
                              SecondaryFileSchema:required  true
                            ] ;
        sld:type            cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl>
        a                        cwl:CommandLineTool ;
        rdfs:comment             "Materializes a runtime string (`summary_text`) into a real file using\nInitialWorkDirRequirement, then copies it to a stable output name.\nDemonstrates the \"Creating Files at Runtime\" pattern from the CWL User\nGuide: `entry: $(inputs.summary_text)` writes the parameter reference's\nvalue verbatim into `entryname`.\n" ;
        rdfs:label               "Persist the summary text as a file" ;
        ns1:original_cwlVersion  "v1.2" ;
        cwl:baseCommand          ( "cp" "summary.txt" "final-summary.txt" ) ;
        cwl:cwlVersion           cwl:v1.2 ;
        cwl:hints                [ a                             cwl:DockerRequirement ;
                                   DockerRequirement:dockerPull  "alpine:3.20"
                                 ] ;
        cwl:inputs               <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#summary_text> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#ref_names> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#base_summary> ;
        cwl:outputs              <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#summary_file> ;
        cwl:requirements         [ a            cwl:InitialWorkDirRequirement ;
                                   cwl:listing  [ cwl:entry      "$(inputs.summary_text)" ;
                                                  cwl:entryname  "summary.txt"
                                                ]
                                 ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#summary>
        rdfs:label        "Rendered summary text" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/summary> ;
        sld:type          xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notification_message>
        rdfs:comment  "If omitted, notify-webhook.cwl falls back to its own default message\nvia the `self || \"...\"` pattern documented in the CWL User Guide\n\"Inputs\" topic (Inclusive and Exclusive Inputs).\n" ;
        rdfs:label    "Optional custom notification message" ;
        sld:type      xsd:string , sld:null .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#webhook_url>
        rdfs:label        "Placeholder webhook endpoint (never resolved in the default demo)" ;
        cwl:inputBinding  [ CommandLineBinding:position
                          3 ] ;
        sld:default       "https://example.invalid/notify" ;
        sld:type          xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/summary_file>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/summary_file> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#match_counts>
        rdfs:label  "Per-file match counts from the scattered search step" ;
        sld:type    [ sld:items  xsd:int ;
                      sld:type   sld:array
                    ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#list_reference>
        rdfs:label  "List the reference directory" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#list_reference/reference_dir> ;
        cwl:out     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#list_reference/reference_file_names> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/list-reference-dir.cwl> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#summary_file>
        rdfs:label         "Persisted summary report" ;
        cwl:format         <https://www.iana.org/assignments/media-types/text/plain> ;
        cwl:outputBinding  [ CommandOutputBinding:glob
                          "final-summary.txt" ] ;
        sld:type           cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#compress_threshold>
        rdfs:label  "Not passed on the command line - read only by the workflow's `when`" ;
        sld:type    xsd:int .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl>
        a                        cwl:CommandLineTool ;
        rdfs:comment             "Illustrates NetworkAccess. Gated by `send_notification` (default false) at\nthe workflow-step level via `when` (see main-workflow.cwl), so with the\nbundled sample job this step is always skipped and no network call is ever\nattempted. `send_notification` is declared here with no `inputBinding`\npurely so the workflow's `when` expression can read it.\n" ;
        rdfs:label               "Send a demo-only webhook notification" ;
        ns1:original_cwlVersion  "v1.2" ;
        cwl:arguments            ( [ CommandLineBinding:position  1 ;
                                     cwl:valueFrom                "--quiet"
                                   ]
                                   [ CommandLineBinding:position  1 ;
                                     cwl:valueFrom                "--output-document=-"
                                   ]
                                 ) ;
        cwl:baseCommand          ( "wget" ) ;
        cwl:cwlVersion           cwl:v1.2 ;
        cwl:hints                [ a                             cwl:DockerRequirement ;
                                   DockerRequirement:dockerPull  "alpine:3.20"
                                 ] ;
        cwl:inputs               <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#webhook_url> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#send_notification> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#webhook_message> ;
        cwl:outputs              <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl#notification_log> ;
        cwl:requirements         [ a                             cwl:ResourceRequirement ;
                                   ResourceRequirement:coresMin  1 ;
                                   ResourceRequirement:ramMin    64
                                 ] ;
        cwl:requirements         [ a                            cwl:NetworkAccess ;
                                   NetworkAccess:networkAccess  true
                                 ] ;
        cwl:stdout               "notification.log" .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress>
        rdfs:label  "Compress the summary if enough matches were found" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/summary_file> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/total_matches> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/compress_threshold> ;
        cwl:out     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/compressed_summary> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl> ;
        cwl:when    "$(inputs.total_matches >= inputs.compress_threshold)" .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum/archive>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#corpus_archive> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/text_files>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#extract/extracted_files> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#summary>
        rdfs:label        "Rendered summary (text or JSON)" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/summary> ;
        sld:type          xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#summary_file>
        rdfs:label        "Summary file to compress" ;
        cwl:inputBinding  [ CommandLineBinding:position
                          1 ] ;
        sld:type          cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#total_matches>
        rdfs:label  "Not passed on the command line - read only by the workflow's `when`" ;
        sld:type    xsd:int .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#total_matches>
        rdfs:label        "Sum of all match counts" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/total_matches> ;
        sld:type          xsd:int .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/match_counts>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/match_count> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum>
        rdfs:label  "Verify the corpus archive checksum" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum/archive> ;
        cwl:out     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum/verification_log> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum/verified_archive> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#output_format>
        rdfs:label   "Summary rendering mode" ;
        sld:default  "text" ;
        sld:type     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#final_report>
        rdfs:label        "Final report (compressed if the threshold was met, plain otherwise)" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress/compressed_summary> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#write_summary/summary_file> ;
        cwl:pickValue     "first_non_null" ;
        sld:type          cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl>
        a                             cwl:CommandLineTool ;
        rdfs:comment                  "Runs `grep` over a single input text file using parameters supplied as a\n`SearchParameters` record (custom type via SchemaDefRequirement). Writes\nmatches to a report file via shell redirection, then separately counts\nthem by loading the report's contents back with loadContents +\noutputEval. `grep` exits 1 when there are no matches, which is expected\n(not an error) here, so it is added to `successCodes`.\n\nDemonstrates: ShellCommandRequirement + shellQuote, EnvVarRequirement,\nSchemaDefRequirement (record + enum custom types), successCodes,\nstreamable, format, intent, and loadContents/outputEval.\n" ;
        rdfs:label                    "Search a text file for a pattern" ;
        ns1:original_cwlVersion       "v1.2" ;
        CommandLineTool:successCodes  1 , 0 ;
        Process:intent                <https://edamontology.org/operation_0346> ;
        cwl:arguments                 ( [ CommandLineBinding:position  1 ;
                                          cwl:valueFrom                "-n"
                                        ]
                                        [ CommandLineBinding:position  2 ;
                                          cwl:valueFrom                "$(inputs.search_parameters.case_insensitive ? \"-i\" : null)"
                                        ]
                                        [ CommandLineBinding:position  3 ;
                                          cwl:valueFrom                "-e"
                                        ]
                                        [ CommandLineBinding:position  4 ;
                                          cwl:valueFrom                "$(inputs.search_parameters.pattern)"
                                        ]
                                        [ CommandLineBinding:position    6 ;
                                          CommandLineBinding:shellQuote  false ;
                                          cwl:valueFrom                  ">"
                                        ]
                                        [ CommandLineBinding:position    7 ;
                                          CommandLineBinding:shellQuote  false ;
                                          cwl:valueFrom                  "$(inputs.text_file.nameroot).matches.txt"
                                        ]
                                      ) ;
        cwl:baseCommand               ( "grep" ) ;
        cwl:cwlVersion                cwl:v1.2 ;
        cwl:hints                     [ a                             cwl:DockerRequirement ;
                                        DockerRequirement:dockerPull  "alpine:3.20"
                                      ] ;
        cwl:inputs                    <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#search_parameters> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#text_file> ;
        cwl:outputs                   <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#match_report> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#match_count> ;
        cwl:requirements              [ a                             cwl:ResourceRequirement ;
                                        ResourceRequirement:coresMin  1 ;
                                        ResourceRequirement:ramMin    128
                                      ] ;
        cwl:requirements              [ a  cwl:InlineJavascriptRequirement ] ;
        cwl:requirements              [ a                         cwl:EnvVarRequirement ;
                                        EnvVarRequirement:envDef  [ EnvironmentDef:envName   "LC_ALL" ;
                                                                    EnvironmentDef:envValue  "C"
                                                                  ]
                                      ] ;
        cwl:requirements              [ a  cwl:ShellCommandRequirement ] ;
        cwl:requirements              [ a                           cwl:SchemaDefRequirement ;
                                        SchemaDefRequirement:types  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters>
                                      ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/write-summary.cwl#base_summary>
        rdfs:label  "Not used directly - only read by the workflow step's sibling valueFrom" ;
        sld:type    xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/aggregate-results.cwl#output_format>
        rdfs:label  "Rendering mode for the summary (custom enum type)" ;
        sld:type    <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#search_parameters>
        rdfs:label  "Search pattern + case sensitivity (custom record type)" ;
        sld:type    <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verification_log>
        rdfs:label        "Checksum verification log" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#verify_checksum/verification_log> ;
        sld:type          cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/compress-report.cwl#compressed_summary>
        rdfs:label         "Gzip-compressed summary report" ;
        cwl:format         <https://www.iana.org/assignments/media-types/application/gzip> ;
        cwl:outputBinding  [ CommandOutputBinding:glob
                          "$(inputs.summary_file.basename).gz" ] ;
        sld:type           cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl>
        a                        cwl:Workflow ;
        rdfs:comment             "Nested Workflow used as a single step of main-workflow.cwl (requires the\nparent to declare SubworkflowFeatureRequirement). Scatters search-tool.cwl\nover every extracted text file, then aggregates the per-file counts.\nDemonstrates: ScatterFeatureRequirement + scatterMethod, and a Workflow\nwhose own inputs/outputs use SchemaDefRequirement custom types.\n" ;
        rdfs:label               "Search sub-workflow (scatter + aggregate)" ;
        ns1:original_cwlVersion  "v1.2" ;
        Workflow:steps           <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate> ;
        cwl:cwlVersion           cwl:v1.2 ;
        cwl:inputs               <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#text_files> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#output_format> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search_parameters> ;
        cwl:outputs              <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#total_matches> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#summary> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#match_reports> ;
        cwl:requirements         [ a  cwl:ScatterFeatureRequirement ] ;
        cwl:requirements         [ a                           cwl:SchemaDefRequirement ;
                                   SchemaDefRequirement:types  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/output-format.yml#OutputFormat> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters>
                                 ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#reference_file_names>
        rdfs:label        "Names of files found under reference_dir" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#list_reference/reference_file_names> ;
        sld:type          [ sld:items  xsd:string ;
                            sld:type   sld:array
                          ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/list-reference-dir.cwl>
        a                          cwl:ExpressionTool ;
        rdfs:comment               "Recursively lists the contents of the `reference_dir` Directory input and\nreturns the file names as a string array, without running any external\ncommand. Demonstrates: ExpressionTool, Directory input,\nLoadListingRequirement (deep_listing), and a multi-line `${...}` JS\nexpression with a helper function.\n" ;
        rdfs:label                 "List reference directory contents" ;
        ns1:original_cwlVersion    "v1.2" ;
        ExpressionTool:expression  "${\n  function collect(dir) {\n    var names = [];\n    for (var i = 0; i < dir.listing.length; i++) {\n      var entry = dir.listing[i];\n      if (entry.class === \"Directory\") {\n        names = names.concat(collect(entry));\n      } else {\n        names.push(entry.basename);\n      }\n    }\n    return names;\n  }\n  return { \"reference_file_names\": collect(inputs.reference_dir) };\n}\n" ;
        cwl:cwlVersion             cwl:v1.2 ;
        cwl:inputs                 <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/list-reference-dir.cwl#reference_dir> ;
        cwl:outputs                <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/list-reference-dir.cwl#reference_file_names> ;
        cwl:requirements           [ a                cwl:LoadListingRequirement ;
                                     cwl:loadListing  "deep_listing"
                                   ] ;
        cwl:requirements           [ a  cwl:InlineJavascriptRequirement ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#text_file>
        rdfs:label            "Text file to search" ;
        FieldBase:streamable  true ;
        cwl:format            <https://www.iana.org/assignments/media-types/text/plain> ;
        cwl:inputBinding      [ CommandLineBinding:position
                          5 ] ;
        sld:type              cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#match_reports>
        rdfs:label        "One match report per corpus file" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#search_subworkflow/match_reports> ;
        sld:type          [ sld:items  cwl:File ;
                            sld:type   sld:array
                          ] .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/text_file>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#text_files> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters/case_insensitive>
        rdfs:comment  "Whether the search should ignore letter case." ;
        sld:type      xsd:boolean .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notify>
        rdfs:label  "Send the demo-only webhook notification" ;
        cwl:in      <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notify/send_notification> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notify/webhook_message> ;
        cwl:run     <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/notify-webhook.cwl> ;
        cwl:when    "$(inputs.send_notification)" .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-tool.cwl#match_count>
        rdfs:label         "Number of matching lines" ;
        cwl:outputBinding  [ CommandOutputBinding:glob  "$(inputs.text_file.nameroot).matches.txt" ;
                             CommandOutputBinding:outputEval
                                     "${\n  var text = self[0].contents.trim();\n  return text === \"\" ? 0 : text.split(\"\\n\").length;\n}\n" ;
                             cwl:loadContents           true
                           ] ;
        sld:type           xsd:int .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#compress_threshold>
        rdfs:label   "Minimum total matches required to compress the summary" ;
        sld:default  3 ;
        sld:type     xsd:int .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/verify-checksum.cwl#archive>
        rdfs:comment        "The .tar.gz archive to verify, with its .sha256 sidecar as a secondaryFile." ;
        rdfs:label          "Corpus archive" ;
        cwl:format          <https://www.iana.org/assignments/media-types/application/gzip> ;
        cwl:secondaryFiles  [ SecondaryFileSchema:pattern   ".sha256" ;
                              SecondaryFileSchema:required  true
                            ] ;
        sld:type            cwl:File .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters/pattern>
        rdfs:comment  "Regular expression (grep -E compatible) to search for in each text file." ;
        sld:type      xsd:string .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#aggregate/output_format>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#output_format> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters>
        rdfs:comment  "Groups the two parameters that must always be provided together when\nrunning a text search step (demonstrates a \"dependent parameters\" record,\nas recommended in the CWL User Guide \"Inputs\" topic). Kept in its own\nexternal file, one type per file, per CWL User Guide best practice.\n" ;
        sld:fields    <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters/pattern> , <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/types/search-parameters.yml#SearchParameters/case_insensitive> ;
        sld:type      sld:record .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#notify/send_notification>
        cwl:source  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/main-workflow.cwl#send_notification> .

<https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#match_reports>
        rdfs:label        "One match report per input text file" ;
        cwl:outputSource  <https://w3id.org/cwl/view/git/82e29a8c71a6dcbf3b0993bf26d2e42817bb39e5/example/steps/search-subworkflow.cwl#search/match_report> ;
        sld:type          [ sld:items  cwl:File ;
                            sld:type   sld:array
                          ] .
