saladVersion: v1.1
$base: "https://w3id.org/cwl/cwl#"

$namespaces:
  cwl: "https://w3id.org/cwl/cwl#"

$graph:

- name: OperationInputParameter
  type: record
  extends: InputParameter
  docParent: "#Operation"
  doc: |
    Describe an input parameter of an operation.
  fields:
    - name: type
      type:
        - CWLType
        - InputRecordSchema
        - InputEnumSchema
        - InputArraySchema
        - string
        - type: array
          items:
            - CWLType
            - InputRecordSchema
            - InputEnumSchema
            - InputArraySchema
            - string
      jsonldPredicate:
        "_id": "sld:type"
        "_type": "@vocab"
        refScope: 2
        typeDSL: True
      doc: |
        Specify valid types of data that may be assigned to this parameter.

- name: OperationOutputParameter
  type: record
  extends: OutputParameter
  docParent: "#Operation"
  doc: |
    Describe an output parameter of an operation.
  fields:
    - name: type
      type:
        - CWLType
        - OutputRecordSchema
        - OutputEnumSchema
        - OutputArraySchema
        - string
        - type: array
          items:
            - CWLType
            - OutputRecordSchema
            - OutputEnumSchema
            - OutputArraySchema
            - string
      jsonldPredicate:
        "_id": "sld:type"
        "_type": "@vocab"
        refScope: 2
        typeDSL: True
      doc: |
        Specify valid types of data that may be assigned to this parameter.

- type: record
  name: Operation
  extends: Process
  documentRoot: true
  specialize:
    - specializeFrom: InputParameter
      specializeTo: OperationInputParameter
    - specializeFrom: OutputParameter
      specializeTo: OperationOutputParameter
  doc: |
    This record describes an abstract operation.  It is a potential
    step of a workflow that has not yet been bound to a concrete
    implementation.  It specifies an input and output signature, but
    does not provide enough information to be executed.  An
    implementation (or other tooling) may provide a means of binding
    an Operation to a concrete process (such as Workflow,
    CommandLineTool, or ExpressionTool) with a compatible signature.

  fields:
    - name: class
      jsonldPredicate:
        "_id": "@type"
        "_type": "@vocab"
      type: string
