diff --git a/package.json b/package.json
index 30a9d98..071ca22 100644
--- a/package.json
+++ b/package.json
@@ -43,11 +43,12 @@
     "chai-as-promised": "^7.1.1",
     "mocha": "^9.1.3",
     "nyc": "^15.1.0",
-    "rimraf": "^3.0.2",
     "sinon": "^12.0.1",
     "ts-node": "^10.4.0",
     "typedoc": "^0.22.10",
-    "typescript": "^4.4.4"
+    "typescript": "^4.4.4",
+    "codecov.io": "^0.1.6",
+    "rimraf": "^3.0.2"
   },
   "dependencies": {
     "js-yaml": "^4.1.0",
diff --git a/src/ArraySchema.ts b/src/ArraySchema.ts
index 9600dc6..abc122a 100644
--- a/src/ArraySchema.ts
+++ b/src/ArraySchema.ts
@@ -24,12 +24,12 @@ export class ArraySchema extends Saveable implements Internal.ArraySchemaPropert
   /**
    * Defines the type of the array elements.
    */
-  items: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string>
+  items: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
 
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
 
   constructor ({loadingOptions, extensionFields, items, type} : {loadingOptions?: LoadingOptions} & Internal.ArraySchemaProperties) {
@@ -57,7 +57,7 @@ export class ArraySchema extends Saveable implements Internal.ArraySchemaPropert
             
     let items
     try {
-      items = await loadField(_doc.items, LoaderInstances.typedslunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype2,
+      items = await loadField(_doc.items, LoaderInstances.uriunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeFalseTrue2None,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -71,7 +71,7 @@ export class ArraySchema extends Saveable implements Internal.ArraySchemaPropert
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslArray_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -120,7 +120,11 @@ export class ArraySchema extends Saveable implements Internal.ArraySchemaPropert
     }
 
     if (this.items != null) {
-      r.items = save(this.items, false, baseUrl, relativeUris)
+      const u = saveRelativeUri(this.items, baseUrl, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.items = u
+      }
     }
                 
     if (this.type != null) {
diff --git a/src/ArraySchemaProperties.ts b/src/ArraySchemaProperties.ts
index bf4ac9c..ce92fd8 100644
--- a/src/ArraySchemaProperties.ts
+++ b/src/ArraySchemaProperties.ts
@@ -12,10 +12,10 @@ export interface ArraySchemaProperties  {
   /**
    * Defines the type of the array elements.
    */
-  items: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string>
+  items: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
 
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 }
\ No newline at end of file
diff --git a/src/Array_name.ts b/src/Array_name.ts
new file mode 100644
index 0000000..50abe24
--- /dev/null
+++ b/src/Array_name.ts
@@ -0,0 +1,4 @@
+
+export enum Array_name {
+  ARRAY='array',
+}
diff --git a/src/CWLArraySchema.ts b/src/CWLArraySchema.ts
new file mode 100644
index 0000000..4a173f3
--- /dev/null
+++ b/src/CWLArraySchema.ts
@@ -0,0 +1,146 @@
+
+import {
+  Dictionary,
+  expandUrl,
+  loadField,
+  LoaderInstances,
+  LoadingOptions,
+  Saveable,
+  ValidationException,
+  prefixUrl,
+  save,
+  saveRelativeUri
+} from './util/Internal'
+import { v4 as uuidv4 } from 'uuid'
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated class implementation for https://w3id.org/cwl/cwl#CWLArraySchema
+ */
+export class CWLArraySchema extends Saveable implements Internal.CWLArraySchemaProperties {
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Defines the type of the array elements.
+   */
+  items: Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string | Array<Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string>
+
+  /**
+   * Must be `array`
+   */
+  type: Internal.Array_name
+
+
+  constructor ({loadingOptions, extensionFields, items, type} : {loadingOptions?: LoadingOptions} & Internal.CWLArraySchemaProperties) {
+    super(loadingOptions)
+    this.extensionFields = extensionFields ?? {}
+    this.items = items
+    this.type = type
+  }
+
+  /**
+   * Used to construct instances of {@link CWLArraySchema }.
+   *
+   * @param __doc                           Document fragment to load this record object from.
+   * @param baseuri                         Base URI to generate child document IDs against.
+   * @param loadingOptions                  Context for loading URIs and populating objects.
+   * @param docRoot                         ID at this position in the document (if available)
+   * @returns                               An instance of {@link CWLArraySchema }
+   * @throws {@link ValidationException}    If the document fragment is not a
+   *                                        {@link Dictionary} or validation of fields fails.
+   */
+  static override async fromDoc (__doc: any, baseuri: string, loadingOptions: LoadingOptions,
+    docRoot?: string): Promise<Saveable> {
+    const _doc = Object.assign({}, __doc)
+    const __errors: ValidationException[] = []
+            
+    let items
+    try {
+      items = await loadField(_doc.items, LoaderInstances.uriunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeFalseTrue2None,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `items` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    let type
+    try {
+      type = await loadField(_doc.type, LoaderInstances.typedslArray_nameLoader2,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `type` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    const extensionFields: Dictionary<any> = {}
+    for (const [key, value] of Object.entries(_doc)) {
+      if (!CWLArraySchema.attr.has(key)) {
+        if ((key as string).includes(':')) {
+          const ex = expandUrl(key, '', loadingOptions, false, false)
+          extensionFields[ex] = value
+        } else {
+          __errors.push(
+            new ValidationException(`invalid field ${key as string}, \
+            expected one of: \`items\`,\`type\``)
+          )
+          break
+        }
+      }
+    }
+
+    if (__errors.length > 0) {
+      throw new ValidationException("Trying 'CWLArraySchema'", __errors)
+    }
+
+    const schema = new CWLArraySchema({
+      extensionFields: extensionFields,
+      loadingOptions: loadingOptions,
+      items: items,
+      type: type
+    })
+    return schema
+  }
+        
+  save (top: boolean = false, baseUrl: string = '', relativeUris: boolean = true)
+  : Dictionary<any> {
+    const r: Dictionary<any> = {}
+    for (const ef in this.extensionFields) {
+      r[prefixUrl(ef, this.loadingOptions.vocab)] = this.extensionFields.ef
+    }
+
+    if (this.items != null) {
+      const u = saveRelativeUri(this.items, baseUrl, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.items = u
+      }
+    }
+                
+    if (this.type != null) {
+      r.type = save(this.type, false, baseUrl, relativeUris)
+    }
+                
+    if (top) {
+      if (this.loadingOptions.namespaces != null) {
+        r.$namespaces = this.loadingOptions.namespaces
+      }
+      if (this.loadingOptions.schemas != null) {
+        r.$schemas = this.loadingOptions.schemas
+      }
+    }
+    return r
+  }
+            
+  static attr: Set<string> = new Set(['items','type'])
+}
diff --git a/src/CWLArraySchemaProperties.ts b/src/CWLArraySchemaProperties.ts
new file mode 100644
index 0000000..d476b6c
--- /dev/null
+++ b/src/CWLArraySchemaProperties.ts
@@ -0,0 +1,21 @@
+
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated interface for https://w3id.org/cwl/cwl#CWLArraySchema
+ */
+export interface CWLArraySchemaProperties extends Internal.ArraySchemaProperties {
+                    
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Defines the type of the array elements.
+   */
+  items: Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string | Array<Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string>
+
+  /**
+   * Must be `array`
+   */
+  type: Internal.Array_name
+}
\ No newline at end of file
diff --git a/src/CWLRecordField.ts b/src/CWLRecordField.ts
new file mode 100644
index 0000000..e620b36
--- /dev/null
+++ b/src/CWLRecordField.ts
@@ -0,0 +1,188 @@
+
+import {
+  Dictionary,
+  expandUrl,
+  loadField,
+  LoaderInstances,
+  LoadingOptions,
+  Saveable,
+  ValidationException,
+  prefixUrl,
+  save,
+  saveRelativeUri
+} from './util/Internal'
+import { v4 as uuidv4 } from 'uuid'
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated class implementation for https://w3id.org/cwl/cwl#CWLRecordField
+ */
+export class CWLRecordField extends Saveable implements Internal.CWLRecordFieldProperties {
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * The name of the field
+   * 
+   */
+  name: string
+
+  /**
+   * A documentation string for this object, or an array of strings which should be concatenated.
+   */
+  doc?: undefined | string | Array<string>
+
+  /**
+   * The field type
+   * 
+   */
+  type: Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string | Array<Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string>
+
+
+  constructor ({loadingOptions, extensionFields, name, doc, type} : {loadingOptions?: LoadingOptions} & Internal.CWLRecordFieldProperties) {
+    super(loadingOptions)
+    this.extensionFields = extensionFields ?? {}
+    this.name = name
+    this.doc = doc
+    this.type = type
+  }
+
+  /**
+   * Used to construct instances of {@link CWLRecordField }.
+   *
+   * @param __doc                           Document fragment to load this record object from.
+   * @param baseuri                         Base URI to generate child document IDs against.
+   * @param loadingOptions                  Context for loading URIs and populating objects.
+   * @param docRoot                         ID at this position in the document (if available)
+   * @returns                               An instance of {@link CWLRecordField }
+   * @throws {@link ValidationException}    If the document fragment is not a
+   *                                        {@link Dictionary} or validation of fields fails.
+   */
+  static override async fromDoc (__doc: any, baseuri: string, loadingOptions: LoadingOptions,
+    docRoot?: string): Promise<Saveable> {
+    const _doc = Object.assign({}, __doc)
+    const __errors: ValidationException[] = []
+            
+    let name
+    if ('name' in _doc) {
+      try {
+        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNoneNone,
+          baseuri, loadingOptions)
+      } catch (e) {
+        if (e instanceof ValidationException) {
+          __errors.push(
+            new ValidationException('the `name` field is not valid because: ', [e])
+          )
+        } else {
+          throw e
+        }
+      }
+    }
+
+    const originalnameIsUndefined = (name === undefined)
+    if (originalnameIsUndefined ) {
+      if (docRoot != null) {
+        name = docRoot
+      } else {
+        throw new ValidationException("Missing name")
+      }
+    } else {
+      baseuri = name as string
+    }
+            
+    let doc
+    if ('doc' in _doc) {
+      try {
+        doc = await loadField(_doc.doc, LoaderInstances.unionOfundefinedtypeOrstrtypeOrarrayOfstrtype,
+          baseuri, loadingOptions)
+      } catch (e) {
+        if (e instanceof ValidationException) {
+          __errors.push(
+            new ValidationException('the `doc` field is not valid because: ', [e])
+          )
+        } else {
+          throw e
+        }
+      }
+    }
+
+    let type
+    try {
+      type = await loadField(_doc.type, LoaderInstances.typedslunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype2,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `type` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    const extensionFields: Dictionary<any> = {}
+    for (const [key, value] of Object.entries(_doc)) {
+      if (!CWLRecordField.attr.has(key)) {
+        if ((key as string).includes(':')) {
+          const ex = expandUrl(key, '', loadingOptions, false, false)
+          extensionFields[ex] = value
+        } else {
+          __errors.push(
+            new ValidationException(`invalid field ${key as string}, \
+            expected one of: \`doc\`,\`name\`,\`type\``)
+          )
+          break
+        }
+      }
+    }
+
+    if (__errors.length > 0) {
+      throw new ValidationException("Trying 'CWLRecordField'", __errors)
+    }
+
+    const schema = new CWLRecordField({
+      extensionFields: extensionFields,
+      loadingOptions: loadingOptions,
+      doc: doc,
+      name: name,
+      type: type
+    })
+    return schema
+  }
+        
+  save (top: boolean = false, baseUrl: string = '', relativeUris: boolean = true)
+  : Dictionary<any> {
+    const r: Dictionary<any> = {}
+    for (const ef in this.extensionFields) {
+      r[prefixUrl(ef, this.loadingOptions.vocab)] = this.extensionFields.ef
+    }
+
+    if (this.name != null) {
+      const u = saveRelativeUri(this.name, baseUrl, true,
+                                relativeUris, undefined)
+      if (u != null) {
+        r.name = u
+      }
+    }
+                
+    if (this.doc != null) {
+      r.doc = save(this.doc, false, this.name, relativeUris)
+    }
+                
+    if (this.type != null) {
+      r.type = save(this.type, false, this.name, relativeUris)
+    }
+                
+    if (top) {
+      if (this.loadingOptions.namespaces != null) {
+        r.$namespaces = this.loadingOptions.namespaces
+      }
+      if (this.loadingOptions.schemas != null) {
+        r.$schemas = this.loadingOptions.schemas
+      }
+    }
+    return r
+  }
+            
+  static attr: Set<string> = new Set(['doc','name','type'])
+}
diff --git a/src/CWLRecordFieldProperties.ts b/src/CWLRecordFieldProperties.ts
new file mode 100644
index 0000000..11c5ab9
--- /dev/null
+++ b/src/CWLRecordFieldProperties.ts
@@ -0,0 +1,28 @@
+
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated interface for https://w3id.org/cwl/cwl#CWLRecordField
+ */
+export interface CWLRecordFieldProperties extends Internal.RecordFieldProperties {
+                    
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * The name of the field
+   * 
+   */
+  name: string
+
+  /**
+   * A documentation string for this object, or an array of strings which should be concatenated.
+   */
+  doc?: undefined | string | Array<string>
+
+  /**
+   * The field type
+   * 
+   */
+  type: Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string | Array<Internal.PrimitiveType | Internal.CWLRecordSchema | Internal.EnumSchema | Internal.CWLArraySchema | string>
+}
\ No newline at end of file
diff --git a/src/CWLRecordSchema.ts b/src/CWLRecordSchema.ts
new file mode 100644
index 0000000..c88bb61
--- /dev/null
+++ b/src/CWLRecordSchema.ts
@@ -0,0 +1,144 @@
+
+import {
+  Dictionary,
+  expandUrl,
+  loadField,
+  LoaderInstances,
+  LoadingOptions,
+  Saveable,
+  ValidationException,
+  prefixUrl,
+  save,
+  saveRelativeUri
+} from './util/Internal'
+import { v4 as uuidv4 } from 'uuid'
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated class implementation for https://w3id.org/cwl/cwl#CWLRecordSchema
+ */
+export class CWLRecordSchema extends Saveable implements Internal.CWLRecordSchemaProperties {
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Defines the fields of the record.
+   */
+  fields?: undefined | Array<Internal.CWLRecordField>
+
+  /**
+   * Must be `record`
+   */
+  type: Internal.Record_name
+
+
+  constructor ({loadingOptions, extensionFields, fields, type} : {loadingOptions?: LoadingOptions} & Internal.CWLRecordSchemaProperties) {
+    super(loadingOptions)
+    this.extensionFields = extensionFields ?? {}
+    this.fields = fields
+    this.type = type
+  }
+
+  /**
+   * Used to construct instances of {@link CWLRecordSchema }.
+   *
+   * @param __doc                           Document fragment to load this record object from.
+   * @param baseuri                         Base URI to generate child document IDs against.
+   * @param loadingOptions                  Context for loading URIs and populating objects.
+   * @param docRoot                         ID at this position in the document (if available)
+   * @returns                               An instance of {@link CWLRecordSchema }
+   * @throws {@link ValidationException}    If the document fragment is not a
+   *                                        {@link Dictionary} or validation of fields fails.
+   */
+  static override async fromDoc (__doc: any, baseuri: string, loadingOptions: LoadingOptions,
+    docRoot?: string): Promise<Saveable> {
+    const _doc = Object.assign({}, __doc)
+    const __errors: ValidationException[] = []
+            
+    let fields
+    if ('fields' in _doc) {
+      try {
+        fields = await loadField(_doc.fields, LoaderInstances.idmapfieldsunionOfundefinedtypeOrarrayOfCWLRecordFieldLoader,
+          baseuri, loadingOptions)
+      } catch (e) {
+        if (e instanceof ValidationException) {
+          __errors.push(
+            new ValidationException('the `fields` field is not valid because: ', [e])
+          )
+        } else {
+          throw e
+        }
+      }
+    }
+
+    let type
+    try {
+      type = await loadField(_doc.type, LoaderInstances.typedslRecord_nameLoader2,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `type` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    const extensionFields: Dictionary<any> = {}
+    for (const [key, value] of Object.entries(_doc)) {
+      if (!CWLRecordSchema.attr.has(key)) {
+        if ((key as string).includes(':')) {
+          const ex = expandUrl(key, '', loadingOptions, false, false)
+          extensionFields[ex] = value
+        } else {
+          __errors.push(
+            new ValidationException(`invalid field ${key as string}, \
+            expected one of: \`fields\`,\`type\``)
+          )
+          break
+        }
+      }
+    }
+
+    if (__errors.length > 0) {
+      throw new ValidationException("Trying 'CWLRecordSchema'", __errors)
+    }
+
+    const schema = new CWLRecordSchema({
+      extensionFields: extensionFields,
+      loadingOptions: loadingOptions,
+      fields: fields,
+      type: type
+    })
+    return schema
+  }
+        
+  save (top: boolean = false, baseUrl: string = '', relativeUris: boolean = true)
+  : Dictionary<any> {
+    const r: Dictionary<any> = {}
+    for (const ef in this.extensionFields) {
+      r[prefixUrl(ef, this.loadingOptions.vocab)] = this.extensionFields.ef
+    }
+
+    if (this.fields != null) {
+      r.fields = save(this.fields, false, baseUrl, relativeUris)
+    }
+                
+    if (this.type != null) {
+      r.type = save(this.type, false, baseUrl, relativeUris)
+    }
+                
+    if (top) {
+      if (this.loadingOptions.namespaces != null) {
+        r.$namespaces = this.loadingOptions.namespaces
+      }
+      if (this.loadingOptions.schemas != null) {
+        r.$schemas = this.loadingOptions.schemas
+      }
+    }
+    return r
+  }
+            
+  static attr: Set<string> = new Set(['fields','type'])
+}
diff --git a/src/CWLRecordSchemaProperties.ts b/src/CWLRecordSchemaProperties.ts
new file mode 100644
index 0000000..dbaea09
--- /dev/null
+++ b/src/CWLRecordSchemaProperties.ts
@@ -0,0 +1,21 @@
+
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated interface for https://w3id.org/cwl/cwl#CWLRecordSchema
+ */
+export interface CWLRecordSchemaProperties extends Internal.RecordSchemaProperties {
+                    
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Defines the fields of the record.
+   */
+  fields?: undefined | Array<Internal.CWLRecordField>
+
+  /**
+   * Must be `record`
+   */
+  type: Internal.Record_name
+}
\ No newline at end of file
diff --git a/src/CommandInputArraySchema.ts b/src/CommandInputArraySchema.ts
index bac4a64..59eb1a7 100644
--- a/src/CommandInputArraySchema.ts
+++ b/src/CommandInputArraySchema.ts
@@ -34,7 +34,7 @@ export class CommandInputArraySchema extends Saveable implements Internal.Comman
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
@@ -82,7 +82,7 @@ export class CommandInputArraySchema extends Saveable implements Internal.Comman
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -108,7 +108,7 @@ export class CommandInputArraySchema extends Saveable implements Internal.Comman
             
     let items
     try {
-      items = await loadField(_doc.items, LoaderInstances.typedslunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtype2,
+      items = await loadField(_doc.items, LoaderInstances.uriunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeFalseTrue2None,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -122,7 +122,7 @@ export class CommandInputArraySchema extends Saveable implements Internal.Comman
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslArray_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -231,7 +231,11 @@ export class CommandInputArraySchema extends Saveable implements Internal.Comman
     }
                 
     if (this.items != null) {
-      r.items = save(this.items, false, this.name, relativeUris)
+      const u = saveRelativeUri(this.items, this.name, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.items = u
+      }
     }
                 
     if (this.type != null) {
diff --git a/src/CommandInputArraySchemaProperties.ts b/src/CommandInputArraySchemaProperties.ts
index 0c6ee0d..1d4064f 100644
--- a/src/CommandInputArraySchemaProperties.ts
+++ b/src/CommandInputArraySchemaProperties.ts
@@ -22,7 +22,7 @@ export interface CommandInputArraySchemaProperties extends Internal.InputArraySc
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/CommandInputEnumSchema.ts b/src/CommandInputEnumSchema.ts
index c0ed41f..939daf8 100644
--- a/src/CommandInputEnumSchema.ts
+++ b/src/CommandInputEnumSchema.ts
@@ -34,7 +34,7 @@ export class CommandInputEnumSchema extends Saveable implements Internal.Command
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
@@ -82,7 +82,7 @@ export class CommandInputEnumSchema extends Saveable implements Internal.Command
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -108,7 +108,7 @@ export class CommandInputEnumSchema extends Saveable implements Internal.Command
             
     let symbols
     try {
-      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNone,
+      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -122,7 +122,7 @@ export class CommandInputEnumSchema extends Saveable implements Internal.Command
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d961d79c225752b9fadb617367615ab176b47d77Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslEnum_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -191,7 +191,7 @@ export class CommandInputEnumSchema extends Saveable implements Internal.Command
         } else {
           __errors.push(
             new ValidationException(`invalid field ${key as string}, \
-            expected one of: \`symbols\`,\`type\`,\`label\`,\`doc\`,\`name\`,\`inputBinding\``)
+            expected one of: \`name\`,\`symbols\`,\`type\`,\`label\`,\`doc\`,\`inputBinding\``)
           )
           break
         }
@@ -205,11 +205,11 @@ export class CommandInputEnumSchema extends Saveable implements Internal.Command
     const schema = new CommandInputEnumSchema({
       extensionFields: extensionFields,
       loadingOptions: loadingOptions,
+      name: name,
       symbols: symbols,
       type: type,
       label: label,
       doc: doc,
-      name: name,
       inputBinding: inputBinding
     })
     return schema
@@ -265,5 +265,5 @@ export class CommandInputEnumSchema extends Saveable implements Internal.Command
     return r
   }
             
-  static attr: Set<string> = new Set(['symbols','type','label','doc','name','inputBinding'])
+  static attr: Set<string> = new Set(['name','symbols','type','label','doc','inputBinding'])
 }
diff --git a/src/CommandInputEnumSchemaProperties.ts b/src/CommandInputEnumSchemaProperties.ts
index a283b22..a381dc3 100644
--- a/src/CommandInputEnumSchemaProperties.ts
+++ b/src/CommandInputEnumSchemaProperties.ts
@@ -22,7 +22,7 @@ export interface CommandInputEnumSchemaProperties extends Internal.InputEnumSche
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/CommandInputParameter.ts b/src/CommandInputParameter.ts
index 54d2db3..3c0461d 100644
--- a/src/CommandInputParameter.ts
+++ b/src/CommandInputParameter.ts
@@ -141,7 +141,7 @@ export class CommandInputParameter extends Saveable implements Internal.CommandI
    * (e.g. dependent `valueFrom` fields).
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
@@ -192,7 +192,7 @@ export class CommandInputParameter extends Saveable implements Internal.CommandI
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -283,7 +283,7 @@ export class CommandInputParameter extends Saveable implements Internal.CommandI
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -331,7 +331,7 @@ export class CommandInputParameter extends Saveable implements Internal.CommandI
     let default_
     if ('default' in _doc) {
       try {
-        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrFileLoaderOrDirectoryLoaderOranyType,
+        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrCWLObjectTypeLoader,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/CommandInputParameterProperties.ts b/src/CommandInputParameterProperties.ts
index 9ba94da..539b6a6 100644
--- a/src/CommandInputParameterProperties.ts
+++ b/src/CommandInputParameterProperties.ts
@@ -129,7 +129,7 @@ export interface CommandInputParameterProperties extends Internal.InputParameter
    * (e.g. dependent `valueFrom` fields).
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
diff --git a/src/CommandInputRecordField.ts b/src/CommandInputRecordField.ts
index 830e9d3..62a49b2 100644
--- a/src/CommandInputRecordField.ts
+++ b/src/CommandInputRecordField.ts
@@ -179,7 +179,7 @@ export class CommandInputRecordField extends Saveable implements Internal.Comman
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -284,7 +284,7 @@ export class CommandInputRecordField extends Saveable implements Internal.Comman
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/CommandInputRecordSchema.ts b/src/CommandInputRecordSchema.ts
index a65f046..1acfb4a 100644
--- a/src/CommandInputRecordSchema.ts
+++ b/src/CommandInputRecordSchema.ts
@@ -34,7 +34,7 @@ export class CommandInputRecordSchema extends Saveable implements Internal.Comma
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
@@ -82,7 +82,7 @@ export class CommandInputRecordSchema extends Saveable implements Internal.Comma
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -124,7 +124,7 @@ export class CommandInputRecordSchema extends Saveable implements Internal.Comma
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslRecord_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/CommandInputRecordSchemaProperties.ts b/src/CommandInputRecordSchemaProperties.ts
index 1bfac94..c439452 100644
--- a/src/CommandInputRecordSchemaProperties.ts
+++ b/src/CommandInputRecordSchemaProperties.ts
@@ -22,7 +22,7 @@ export interface CommandInputRecordSchemaProperties extends Internal.InputRecord
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/CommandLineTool.ts b/src/CommandLineTool.ts
index c7abf30..984e627 100644
--- a/src/CommandLineTool.ts
+++ b/src/CommandLineTool.ts
@@ -96,8 +96,9 @@ export class CommandLineTool extends Saveable implements Internal.CommandLineToo
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
@@ -247,7 +248,7 @@ export class CommandLineTool extends Saveable implements Internal.CommandLineToo
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -273,7 +274,7 @@ export class CommandLineTool extends Saveable implements Internal.CommandLineToo
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriCommandLineTool_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriCommandLineTool_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -380,7 +381,7 @@ export class CommandLineTool extends Saveable implements Internal.CommandLineToo
     let cwlVersion
     if ('cwlVersion' in _doc) {
       try {
-        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNone,
+        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -396,7 +397,7 @@ export class CommandLineTool extends Saveable implements Internal.CommandLineToo
     let intent
     if ('intent' in _doc) {
       try {
-        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNone,
+        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/CommandLineToolProperties.ts b/src/CommandLineToolProperties.ts
index 60e1b29..61e670a 100644
--- a/src/CommandLineToolProperties.ts
+++ b/src/CommandLineToolProperties.ts
@@ -84,8 +84,9 @@ export interface CommandLineToolProperties extends Internal.ProcessProperties {
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
diff --git a/src/CommandOutputArraySchema.ts b/src/CommandOutputArraySchema.ts
index 870f8a1..629318c 100644
--- a/src/CommandOutputArraySchema.ts
+++ b/src/CommandOutputArraySchema.ts
@@ -34,7 +34,7 @@ export class CommandOutputArraySchema extends Saveable implements Internal.Comma
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class CommandOutputArraySchema extends Saveable implements Internal.Comma
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -102,7 +102,7 @@ export class CommandOutputArraySchema extends Saveable implements Internal.Comma
             
     let items
     try {
-      items = await loadField(_doc.items, LoaderInstances.typedslunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype2,
+      items = await loadField(_doc.items, LoaderInstances.uriunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeFalseTrue2None,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -116,7 +116,7 @@ export class CommandOutputArraySchema extends Saveable implements Internal.Comma
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslArray_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -208,7 +208,11 @@ export class CommandOutputArraySchema extends Saveable implements Internal.Comma
     }
                 
     if (this.items != null) {
-      r.items = save(this.items, false, this.name, relativeUris)
+      const u = saveRelativeUri(this.items, this.name, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.items = u
+      }
     }
                 
     if (this.type != null) {
diff --git a/src/CommandOutputArraySchemaProperties.ts b/src/CommandOutputArraySchemaProperties.ts
index c3528eb..ccadb3c 100644
--- a/src/CommandOutputArraySchemaProperties.ts
+++ b/src/CommandOutputArraySchemaProperties.ts
@@ -22,7 +22,7 @@ export interface CommandOutputArraySchemaProperties extends Internal.OutputArray
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/CommandOutputEnumSchema.ts b/src/CommandOutputEnumSchema.ts
index 066f8e1..408a4b2 100644
--- a/src/CommandOutputEnumSchema.ts
+++ b/src/CommandOutputEnumSchema.ts
@@ -34,7 +34,7 @@ export class CommandOutputEnumSchema extends Saveable implements Internal.Comman
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class CommandOutputEnumSchema extends Saveable implements Internal.Comman
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -102,7 +102,7 @@ export class CommandOutputEnumSchema extends Saveable implements Internal.Comman
             
     let symbols
     try {
-      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNone,
+      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -116,7 +116,7 @@ export class CommandOutputEnumSchema extends Saveable implements Internal.Comman
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d961d79c225752b9fadb617367615ab176b47d77Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslEnum_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -169,7 +169,7 @@ export class CommandOutputEnumSchema extends Saveable implements Internal.Comman
         } else {
           __errors.push(
             new ValidationException(`invalid field ${key as string}, \
-            expected one of: \`symbols\`,\`type\`,\`label\`,\`doc\`,\`name\``)
+            expected one of: \`name\`,\`symbols\`,\`type\`,\`label\`,\`doc\``)
           )
           break
         }
@@ -183,11 +183,11 @@ export class CommandOutputEnumSchema extends Saveable implements Internal.Comman
     const schema = new CommandOutputEnumSchema({
       extensionFields: extensionFields,
       loadingOptions: loadingOptions,
+      name: name,
       symbols: symbols,
       type: type,
       label: label,
-      doc: doc,
-      name: name
+      doc: doc
     })
     return schema
   }
@@ -238,5 +238,5 @@ export class CommandOutputEnumSchema extends Saveable implements Internal.Comman
     return r
   }
             
-  static attr: Set<string> = new Set(['symbols','type','label','doc','name'])
+  static attr: Set<string> = new Set(['name','symbols','type','label','doc'])
 }
diff --git a/src/CommandOutputEnumSchemaProperties.ts b/src/CommandOutputEnumSchemaProperties.ts
index eb88dd9..bc71358 100644
--- a/src/CommandOutputEnumSchemaProperties.ts
+++ b/src/CommandOutputEnumSchemaProperties.ts
@@ -22,7 +22,7 @@ export interface CommandOutputEnumSchemaProperties extends Internal.OutputEnumSc
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/CommandOutputParameter.ts b/src/CommandOutputParameter.ts
index bd8da3f..fae7e7c 100644
--- a/src/CommandOutputParameter.ts
+++ b/src/CommandOutputParameter.ts
@@ -148,7 +148,7 @@ export class CommandOutputParameter extends Saveable implements Internal.Command
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -239,7 +239,7 @@ export class CommandOutputParameter extends Saveable implements Internal.Command
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/CommandOutputRecordField.ts b/src/CommandOutputRecordField.ts
index a12a67a..9bb5c02 100644
--- a/src/CommandOutputRecordField.ts
+++ b/src/CommandOutputRecordField.ts
@@ -149,7 +149,7 @@ export class CommandOutputRecordField extends Saveable implements Internal.Comma
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -254,7 +254,7 @@ export class CommandOutputRecordField extends Saveable implements Internal.Comma
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/CommandOutputRecordSchema.ts b/src/CommandOutputRecordSchema.ts
index 052d8aa..f3b71c9 100644
--- a/src/CommandOutputRecordSchema.ts
+++ b/src/CommandOutputRecordSchema.ts
@@ -34,7 +34,7 @@ export class CommandOutputRecordSchema extends Saveable implements Internal.Comm
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class CommandOutputRecordSchema extends Saveable implements Internal.Comm
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -118,7 +118,7 @@ export class CommandOutputRecordSchema extends Saveable implements Internal.Comm
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslRecord_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/CommandOutputRecordSchemaProperties.ts b/src/CommandOutputRecordSchemaProperties.ts
index a05306b..e931f00 100644
--- a/src/CommandOutputRecordSchemaProperties.ts
+++ b/src/CommandOutputRecordSchemaProperties.ts
@@ -22,7 +22,7 @@ export interface CommandOutputRecordSchemaProperties extends Internal.OutputReco
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/Directory.ts b/src/Directory.ts
index 4fe2d62..f289b22 100644
--- a/src/Directory.ts
+++ b/src/Directory.ts
@@ -23,8 +23,8 @@ import * as Internal from './util/Internal'
  * Directories are represented as objects with `class` of `Directory`.  Directory objects have
  * a number of properties that provide metadata about the directory.
  * 
- * The `location` property of a Directory is a URI that uniquely identifies
- * the directory.  Implementations must support the file:// URI scheme and may
+ * The `location` property of a Directory is a IRI that uniquely identifies
+ * the directory.  Implementations must support the file:// IRI scheme and may
  * support other schemes such as http://.  Alternately to `location`,
  * implementations must also accept the `path` property on Directory, which
  * must be a filesystem path available on the same host as the CWL runner (for
@@ -53,7 +53,7 @@ import * as Internal from './util/Internal'
  * first and have local values of `path` assigned.
  * 
  * Directory objects in CommandLineTool output must provide either a
- * `location` URI or a `path` property in the context of the tool execution
+ * `location` IRI or a `path` property in the context of the tool execution
  * runtime (local to the compute node, or within the executing container).
  * 
  * An ExpressionTool may forward file references from input to output by using
@@ -167,7 +167,7 @@ export class Directory extends Saveable implements Internal.DirectoryProperties
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriDirectory_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriDirectory_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -182,7 +182,7 @@ export class Directory extends Saveable implements Internal.DirectoryProperties
     let location
     if ('location' in _doc) {
       try {
-        location = await loadField(_doc.location, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNone,
+        location = await loadField(_doc.location, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -198,7 +198,7 @@ export class Directory extends Saveable implements Internal.DirectoryProperties
     let path
     if ('path' in _doc) {
       try {
-        path = await loadField(_doc.path, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNone,
+        path = await loadField(_doc.path, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/DirectoryProperties.ts b/src/DirectoryProperties.ts
index cfe4c7d..fa1c66c 100644
--- a/src/DirectoryProperties.ts
+++ b/src/DirectoryProperties.ts
@@ -10,8 +10,8 @@ import * as Internal from './util/Internal'
  * Directories are represented as objects with `class` of `Directory`.  Directory objects have
  * a number of properties that provide metadata about the directory.
  * 
- * The `location` property of a Directory is a URI that uniquely identifies
- * the directory.  Implementations must support the file:// URI scheme and may
+ * The `location` property of a Directory is a IRI that uniquely identifies
+ * the directory.  Implementations must support the file:// IRI scheme and may
  * support other schemes such as http://.  Alternately to `location`,
  * implementations must also accept the `path` property on Directory, which
  * must be a filesystem path available on the same host as the CWL runner (for
@@ -40,7 +40,7 @@ import * as Internal from './util/Internal'
  * first and have local values of `path` assigned.
  * 
  * Directory objects in CommandLineTool output must provide either a
- * `location` URI or a `path` property in the context of the tool execution
+ * `location` IRI or a `path` property in the context of the tool execution
  * runtime (local to the compute node, or within the executing container).
  * 
  * An ExpressionTool may forward file references from input to output by using
diff --git a/src/DockerRequirement.ts b/src/DockerRequirement.ts
index 1ba4b1a..cb49987 100644
--- a/src/DockerRequirement.ts
+++ b/src/DockerRequirement.ts
@@ -149,7 +149,7 @@ export class DockerRequirement extends Saveable implements Internal.DockerRequir
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriDockerRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriDockerRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/EnumSchema.ts b/src/EnumSchema.ts
index d8b39c8..6e6a9be 100644
--- a/src/EnumSchema.ts
+++ b/src/EnumSchema.ts
@@ -23,6 +23,7 @@ import * as Internal from './util/Internal'
  */
 export class EnumSchema extends Saveable implements Internal.EnumSchemaProperties {
   extensionFields?: Internal.Dictionary<any>
+  name?: undefined | string
 
   /**
    * Defines the set of valid symbols.
@@ -32,12 +33,13 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
 
-  constructor ({loadingOptions, extensionFields, symbols, type} : {loadingOptions?: LoadingOptions} & Internal.EnumSchemaProperties) {
+  constructor ({loadingOptions, extensionFields, name, symbols, type} : {loadingOptions?: LoadingOptions} & Internal.EnumSchemaProperties) {
     super(loadingOptions)
     this.extensionFields = extensionFields ?? {}
+    this.name = name
     this.symbols = symbols
     this.type = type
   }
@@ -58,9 +60,36 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
     const _doc = Object.assign({}, __doc)
     const __errors: ValidationException[] = []
             
+    let name
+    if ('name' in _doc) {
+      try {
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
+          baseuri, loadingOptions)
+      } catch (e) {
+        if (e instanceof ValidationException) {
+          __errors.push(
+            new ValidationException('the `name` field is not valid because: ', [e])
+          )
+        } else {
+          throw e
+        }
+      }
+    }
+
+    const originalnameIsUndefined = (name === undefined)
+    if (originalnameIsUndefined ) {
+      if (docRoot != null) {
+        name = docRoot
+      } else {
+        name = "_" + uuidv4()
+      }
+    } else {
+      baseuri = name as string
+    }
+            
     let symbols
     try {
-      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNone,
+      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -74,7 +103,7 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d961d79c225752b9fadb617367615ab176b47d77Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslEnum_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -95,7 +124,7 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
         } else {
           __errors.push(
             new ValidationException(`invalid field ${key as string}, \
-            expected one of: \`symbols\`,\`type\``)
+            expected one of: \`name\`,\`symbols\`,\`type\``)
           )
           break
         }
@@ -109,6 +138,7 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
     const schema = new EnumSchema({
       extensionFields: extensionFields,
       loadingOptions: loadingOptions,
+      name: name,
       symbols: symbols,
       type: type
     })
@@ -122,8 +152,16 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
       r[prefixUrl(ef, this.loadingOptions.vocab)] = this.extensionFields.ef
     }
 
+    if (this.name != null) {
+      const u = saveRelativeUri(this.name, baseUrl, true,
+                                relativeUris, undefined)
+      if (u != null) {
+        r.name = u
+      }
+    }
+                
     if (this.symbols != null) {
-      const u = saveRelativeUri(this.symbols, baseUrl, true,
+      const u = saveRelativeUri(this.symbols, this.name, true,
                                 relativeUris, undefined)
       if (u != null) {
         r.symbols = u
@@ -131,7 +169,7 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
     }
                 
     if (this.type != null) {
-      r.type = save(this.type, false, baseUrl, relativeUris)
+      r.type = save(this.type, false, this.name, relativeUris)
     }
                 
     if (top) {
@@ -145,5 +183,5 @@ export class EnumSchema extends Saveable implements Internal.EnumSchemaPropertie
     return r
   }
             
-  static attr: Set<string> = new Set(['symbols','type'])
+  static attr: Set<string> = new Set(['name','symbols','type'])
 }
diff --git a/src/EnumSchemaProperties.ts b/src/EnumSchemaProperties.ts
index 7669154..6d0ff3b 100644
--- a/src/EnumSchemaProperties.ts
+++ b/src/EnumSchemaProperties.ts
@@ -11,6 +11,7 @@ import * as Internal from './util/Internal'
 export interface EnumSchemaProperties  {
                     
   extensionFields?: Internal.Dictionary<any>
+  name?: undefined | string
 
   /**
    * Defines the set of valid symbols.
@@ -20,5 +21,5 @@ export interface EnumSchemaProperties  {
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 }
\ No newline at end of file
diff --git a/src/Enum_name.ts b/src/Enum_name.ts
new file mode 100644
index 0000000..64471c7
--- /dev/null
+++ b/src/Enum_name.ts
@@ -0,0 +1,4 @@
+
+export enum Enum_name {
+  ENUM='enum',
+}
diff --git a/src/EnvVarRequirement.ts b/src/EnvVarRequirement.ts
index 2a33080..07cb617 100644
--- a/src/EnvVarRequirement.ts
+++ b/src/EnvVarRequirement.ts
@@ -61,7 +61,7 @@ export class EnvVarRequirement extends Saveable implements Internal.EnvVarRequir
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriEnvVarRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriEnvVarRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/ExpressionTool.ts b/src/ExpressionTool.ts
index 0b6ce37..d2b0928 100644
--- a/src/ExpressionTool.ts
+++ b/src/ExpressionTool.ts
@@ -102,8 +102,9 @@ export class ExpressionTool extends Saveable implements Internal.ExpressionToolP
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
@@ -162,7 +163,7 @@ export class ExpressionTool extends Saveable implements Internal.ExpressionToolP
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -188,7 +189,7 @@ export class ExpressionTool extends Saveable implements Internal.ExpressionToolP
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriExpressionTool_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriExpressionTool_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -295,7 +296,7 @@ export class ExpressionTool extends Saveable implements Internal.ExpressionToolP
     let cwlVersion
     if ('cwlVersion' in _doc) {
       try {
-        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNone,
+        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -311,7 +312,7 @@ export class ExpressionTool extends Saveable implements Internal.ExpressionToolP
     let intent
     if ('intent' in _doc) {
       try {
-        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNone,
+        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/ExpressionToolOutputParameter.ts b/src/ExpressionToolOutputParameter.ts
index 4f5dbf9..593dcd0 100644
--- a/src/ExpressionToolOutputParameter.ts
+++ b/src/ExpressionToolOutputParameter.ts
@@ -104,6 +104,8 @@ export class ExpressionToolOutputParameter extends Saveable implements Internal.
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
+   * Note that this field just acts as a hint, as the outputs of an
+   * ExpressionTool process are always considered valid.
    * 
    */
   type: Internal.CWLType | Internal.OutputRecordSchema | Internal.OutputEnumSchema | Internal.OutputArraySchema | string | Array<Internal.CWLType | Internal.OutputRecordSchema | Internal.OutputEnumSchema | Internal.OutputArraySchema | string>
@@ -140,7 +142,7 @@ export class ExpressionToolOutputParameter extends Saveable implements Internal.
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -231,7 +233,7 @@ export class ExpressionToolOutputParameter extends Saveable implements Internal.
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/ExpressionToolOutputParameterProperties.ts b/src/ExpressionToolOutputParameterProperties.ts
index ceb0166..a2a6a97 100644
--- a/src/ExpressionToolOutputParameterProperties.ts
+++ b/src/ExpressionToolOutputParameterProperties.ts
@@ -92,6 +92,8 @@ export interface ExpressionToolOutputParameterProperties extends Internal.Output
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
+   * Note that this field just acts as a hint, as the outputs of an
+   * ExpressionTool process are always considered valid.
    * 
    */
   type: Internal.CWLType | Internal.OutputRecordSchema | Internal.OutputEnumSchema | Internal.OutputArraySchema | string | Array<Internal.CWLType | Internal.OutputRecordSchema | Internal.OutputEnumSchema | Internal.OutputArraySchema | string>
diff --git a/src/ExpressionToolProperties.ts b/src/ExpressionToolProperties.ts
index 4cea95b..4c44db2 100644
--- a/src/ExpressionToolProperties.ts
+++ b/src/ExpressionToolProperties.ts
@@ -90,8 +90,9 @@ export interface ExpressionToolProperties extends Internal.ProcessProperties {
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
diff --git a/src/File.ts b/src/File.ts
index 22f28b8..ca04955 100644
--- a/src/File.ts
+++ b/src/File.ts
@@ -25,10 +25,10 @@ import * as Internal from './util/Internal'
  * Files are represented as objects with `class` of `File`.  File objects have
  * a number of properties that provide metadata about the file.
  * 
- * The `location` property of a File is a URI that uniquely identifies the
- * file.  Implementations must support the `file://` URI scheme and may support
+ * The `location` property of a File is a IRI that uniquely identifies the
+ * file.  Implementations must support the `file://` IRI scheme and may support
  * other schemes such as `http://` and `https://`.  The value of `location` may also be a
- * relative reference, in which case it must be resolved relative to the URI
+ * relative reference, in which case it must be resolved relative to the IRI
  * of the document it appears in.  Alternately to `location`, implementations
  * must also accept the `path` property on File, which must be a filesystem
  * path available on the same host as the CWL runner (for inputs) or the
@@ -71,7 +71,7 @@ import * as Internal from './util/Internal'
  * modified by `outputEval`.  Alternately, if the file `cwl.output.json` is
  * present in the output, `outputBinding` is ignored.
  * 
- * File objects in the output must provide either a `location` URI or a `path`
+ * File objects in the output must provide either a `location` IRI or a `path`
  * property in the context of the tool execution runtime (local to the compute
  * node, or within the executing container).
  * 
@@ -295,7 +295,7 @@ export class File extends Saveable implements Internal.FileProperties {
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriFile_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriFile_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -310,7 +310,7 @@ export class File extends Saveable implements Internal.FileProperties {
     let location
     if ('location' in _doc) {
       try {
-        location = await loadField(_doc.location, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNone,
+        location = await loadField(_doc.location, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -326,7 +326,7 @@ export class File extends Saveable implements Internal.FileProperties {
     let path
     if ('path' in _doc) {
       try {
-        path = await loadField(_doc.path, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNone,
+        path = await loadField(_doc.path, LoaderInstances.uriunionOfundefinedtypeOrstrtypeFalseFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -454,7 +454,7 @@ export class File extends Saveable implements Internal.FileProperties {
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/FileProperties.ts b/src/FileProperties.ts
index cd947c4..5bee224 100644
--- a/src/FileProperties.ts
+++ b/src/FileProperties.ts
@@ -12,10 +12,10 @@ import * as Internal from './util/Internal'
  * Files are represented as objects with `class` of `File`.  File objects have
  * a number of properties that provide metadata about the file.
  * 
- * The `location` property of a File is a URI that uniquely identifies the
- * file.  Implementations must support the `file://` URI scheme and may support
+ * The `location` property of a File is a IRI that uniquely identifies the
+ * file.  Implementations must support the `file://` IRI scheme and may support
  * other schemes such as `http://` and `https://`.  The value of `location` may also be a
- * relative reference, in which case it must be resolved relative to the URI
+ * relative reference, in which case it must be resolved relative to the IRI
  * of the document it appears in.  Alternately to `location`, implementations
  * must also accept the `path` property on File, which must be a filesystem
  * path available on the same host as the CWL runner (for inputs) or the
@@ -58,7 +58,7 @@ import * as Internal from './util/Internal'
  * modified by `outputEval`.  Alternately, if the file `cwl.output.json` is
  * present in the output, `outputBinding` is ignored.
  * 
- * File objects in the output must provide either a `location` URI or a `path`
+ * File objects in the output must provide either a `location` IRI or a `path`
  * property in the context of the tool execution runtime (local to the compute
  * node, or within the executing container).
  * 
diff --git a/src/InitialWorkDirRequirement.ts b/src/InitialWorkDirRequirement.ts
index bc83161..2bc8c93 100644
--- a/src/InitialWorkDirRequirement.ts
+++ b/src/InitialWorkDirRequirement.ts
@@ -84,7 +84,7 @@ export class InitialWorkDirRequirement extends Saveable implements Internal.Init
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriInitialWorkDirRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriInitialWorkDirRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/InlineJavascriptRequirement.ts b/src/InlineJavascriptRequirement.ts
index 9219496..bccb8c9 100644
--- a/src/InlineJavascriptRequirement.ts
+++ b/src/InlineJavascriptRequirement.ts
@@ -65,7 +65,7 @@ export class InlineJavascriptRequirement extends Saveable implements Internal.In
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriInlineJavascriptRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriInlineJavascriptRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/InplaceUpdateRequirement.ts b/src/InplaceUpdateRequirement.ts
index 1270a7f..6bb680d 100644
--- a/src/InplaceUpdateRequirement.ts
+++ b/src/InplaceUpdateRequirement.ts
@@ -85,7 +85,7 @@ export class InplaceUpdateRequirement extends Saveable implements Internal.Inpla
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriInplaceUpdateRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriInplaceUpdateRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/InputArraySchema.ts b/src/InputArraySchema.ts
index 8591ff3..db02115 100644
--- a/src/InputArraySchema.ts
+++ b/src/InputArraySchema.ts
@@ -34,7 +34,7 @@ export class InputArraySchema extends Saveable implements Internal.InputArraySch
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class InputArraySchema extends Saveable implements Internal.InputArraySch
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -102,7 +102,7 @@ export class InputArraySchema extends Saveable implements Internal.InputArraySch
             
     let items
     try {
-      items = await loadField(_doc.items, LoaderInstances.typedslunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtype2,
+      items = await loadField(_doc.items, LoaderInstances.uriunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtypeFalseTrue2None,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -116,7 +116,7 @@ export class InputArraySchema extends Saveable implements Internal.InputArraySch
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslArray_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -208,7 +208,11 @@ export class InputArraySchema extends Saveable implements Internal.InputArraySch
     }
                 
     if (this.items != null) {
-      r.items = save(this.items, false, this.name, relativeUris)
+      const u = saveRelativeUri(this.items, this.name, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.items = u
+      }
     }
                 
     if (this.type != null) {
diff --git a/src/InputArraySchemaProperties.ts b/src/InputArraySchemaProperties.ts
index 49ebd66..f415773 100644
--- a/src/InputArraySchemaProperties.ts
+++ b/src/InputArraySchemaProperties.ts
@@ -5,7 +5,7 @@ import * as Internal from './util/Internal'
 /**
  * Auto-generated interface for https://w3id.org/cwl/cwl#InputArraySchema
  */
-export interface InputArraySchemaProperties extends Internal.ArraySchemaProperties, Internal.InputSchemaProperties {
+export interface InputArraySchemaProperties extends Internal.CWLArraySchemaProperties, Internal.InputSchemaProperties {
                     
   extensionFields?: Internal.Dictionary<any>
 
@@ -22,7 +22,7 @@ export interface InputArraySchemaProperties extends Internal.ArraySchemaProperti
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/InputEnumSchema.ts b/src/InputEnumSchema.ts
index 08c0a80..e8652f0 100644
--- a/src/InputEnumSchema.ts
+++ b/src/InputEnumSchema.ts
@@ -34,7 +34,7 @@ export class InputEnumSchema extends Saveable implements Internal.InputEnumSchem
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class InputEnumSchema extends Saveable implements Internal.InputEnumSchem
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -102,7 +102,7 @@ export class InputEnumSchema extends Saveable implements Internal.InputEnumSchem
             
     let symbols
     try {
-      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNone,
+      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -116,7 +116,7 @@ export class InputEnumSchema extends Saveable implements Internal.InputEnumSchem
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d961d79c225752b9fadb617367615ab176b47d77Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslEnum_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -169,7 +169,7 @@ export class InputEnumSchema extends Saveable implements Internal.InputEnumSchem
         } else {
           __errors.push(
             new ValidationException(`invalid field ${key as string}, \
-            expected one of: \`symbols\`,\`type\`,\`label\`,\`doc\`,\`name\``)
+            expected one of: \`name\`,\`symbols\`,\`type\`,\`label\`,\`doc\``)
           )
           break
         }
@@ -183,11 +183,11 @@ export class InputEnumSchema extends Saveable implements Internal.InputEnumSchem
     const schema = new InputEnumSchema({
       extensionFields: extensionFields,
       loadingOptions: loadingOptions,
+      name: name,
       symbols: symbols,
       type: type,
       label: label,
-      doc: doc,
-      name: name
+      doc: doc
     })
     return schema
   }
@@ -238,5 +238,5 @@ export class InputEnumSchema extends Saveable implements Internal.InputEnumSchem
     return r
   }
             
-  static attr: Set<string> = new Set(['symbols','type','label','doc','name'])
+  static attr: Set<string> = new Set(['name','symbols','type','label','doc'])
 }
diff --git a/src/InputEnumSchemaProperties.ts b/src/InputEnumSchemaProperties.ts
index c31e853..14d1de7 100644
--- a/src/InputEnumSchemaProperties.ts
+++ b/src/InputEnumSchemaProperties.ts
@@ -22,7 +22,7 @@ export interface InputEnumSchemaProperties extends Internal.EnumSchemaProperties
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/InputParameterProperties.ts b/src/InputParameterProperties.ts
index 83045ee..8e06a3b 100644
--- a/src/InputParameterProperties.ts
+++ b/src/InputParameterProperties.ts
@@ -125,5 +125,5 @@ export interface InputParameterProperties extends Internal.ParameterProperties,
    * (e.g. dependent `valueFrom` fields).
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 }
\ No newline at end of file
diff --git a/src/InputRecordField.ts b/src/InputRecordField.ts
index 0c1be1a..a8cf49d 100644
--- a/src/InputRecordField.ts
+++ b/src/InputRecordField.ts
@@ -173,7 +173,7 @@ export class InputRecordField extends Saveable implements Internal.InputRecordFi
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -278,7 +278,7 @@ export class InputRecordField extends Saveable implements Internal.InputRecordFi
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/InputRecordFieldProperties.ts b/src/InputRecordFieldProperties.ts
index a2a8185..5bded11 100644
--- a/src/InputRecordFieldProperties.ts
+++ b/src/InputRecordFieldProperties.ts
@@ -5,7 +5,7 @@ import * as Internal from './util/Internal'
 /**
  * Auto-generated interface for https://w3id.org/cwl/cwl#InputRecordField
  */
-export interface InputRecordFieldProperties extends Internal.RecordFieldProperties, Internal.FieldBaseProperties, Internal.InputFormatProperties, Internal.LoadContentsProperties {
+export interface InputRecordFieldProperties extends Internal.CWLRecordFieldProperties, Internal.FieldBaseProperties, Internal.InputFormatProperties, Internal.LoadContentsProperties {
                     
   extensionFields?: Internal.Dictionary<any>
 
diff --git a/src/InputRecordSchema.ts b/src/InputRecordSchema.ts
index cddbabd..87565dd 100644
--- a/src/InputRecordSchema.ts
+++ b/src/InputRecordSchema.ts
@@ -34,7 +34,7 @@ export class InputRecordSchema extends Saveable implements Internal.InputRecordS
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class InputRecordSchema extends Saveable implements Internal.InputRecordS
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -118,7 +118,7 @@ export class InputRecordSchema extends Saveable implements Internal.InputRecordS
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslRecord_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/InputRecordSchemaProperties.ts b/src/InputRecordSchemaProperties.ts
index ab76a8f..b1428a4 100644
--- a/src/InputRecordSchemaProperties.ts
+++ b/src/InputRecordSchemaProperties.ts
@@ -5,7 +5,7 @@ import * as Internal from './util/Internal'
 /**
  * Auto-generated interface for https://w3id.org/cwl/cwl#InputRecordSchema
  */
-export interface InputRecordSchemaProperties extends Internal.RecordSchemaProperties, Internal.InputSchemaProperties {
+export interface InputRecordSchemaProperties extends Internal.CWLRecordSchemaProperties, Internal.InputSchemaProperties {
                     
   extensionFields?: Internal.Dictionary<any>
 
@@ -22,7 +22,7 @@ export interface InputRecordSchemaProperties extends Internal.RecordSchemaProper
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/LoadListingRequirement.ts b/src/LoadListingRequirement.ts
index d550112..69b2695 100644
--- a/src/LoadListingRequirement.ts
+++ b/src/LoadListingRequirement.ts
@@ -57,7 +57,7 @@ export class LoadListingRequirement extends Saveable implements Internal.LoadLis
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriLoadListingRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriLoadListingRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/MapSchema.ts b/src/MapSchema.ts
new file mode 100644
index 0000000..e428ed5
--- /dev/null
+++ b/src/MapSchema.ts
@@ -0,0 +1,146 @@
+
+import {
+  Dictionary,
+  expandUrl,
+  loadField,
+  LoaderInstances,
+  LoadingOptions,
+  Saveable,
+  ValidationException,
+  prefixUrl,
+  save,
+  saveRelativeUri
+} from './util/Internal'
+import { v4 as uuidv4 } from 'uuid'
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated class implementation for https://w3id.org/cwl/salad#MapSchema
+ */
+export class MapSchema extends Saveable implements Internal.MapSchemaProperties {
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Must be `map`
+   */
+  type: Internal.Map_name
+
+  /**
+   * Defines the type of the map elements.
+   */
+  values: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
+
+
+  constructor ({loadingOptions, extensionFields, type, values} : {loadingOptions?: LoadingOptions} & Internal.MapSchemaProperties) {
+    super(loadingOptions)
+    this.extensionFields = extensionFields ?? {}
+    this.type = type
+    this.values = values
+  }
+
+  /**
+   * Used to construct instances of {@link MapSchema }.
+   *
+   * @param __doc                           Document fragment to load this record object from.
+   * @param baseuri                         Base URI to generate child document IDs against.
+   * @param loadingOptions                  Context for loading URIs and populating objects.
+   * @param docRoot                         ID at this position in the document (if available)
+   * @returns                               An instance of {@link MapSchema }
+   * @throws {@link ValidationException}    If the document fragment is not a
+   *                                        {@link Dictionary} or validation of fields fails.
+   */
+  static override async fromDoc (__doc: any, baseuri: string, loadingOptions: LoadingOptions,
+    docRoot?: string): Promise<Saveable> {
+    const _doc = Object.assign({}, __doc)
+    const __errors: ValidationException[] = []
+            
+    let type
+    try {
+      type = await loadField(_doc.type, LoaderInstances.typedslMap_nameLoader2,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `type` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    let values
+    try {
+      values = await loadField(_doc.values, LoaderInstances.uriunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeFalseTrue2None,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `values` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    const extensionFields: Dictionary<any> = {}
+    for (const [key, value] of Object.entries(_doc)) {
+      if (!MapSchema.attr.has(key)) {
+        if ((key as string).includes(':')) {
+          const ex = expandUrl(key, '', loadingOptions, false, false)
+          extensionFields[ex] = value
+        } else {
+          __errors.push(
+            new ValidationException(`invalid field ${key as string}, \
+            expected one of: \`type\`,\`values\``)
+          )
+          break
+        }
+      }
+    }
+
+    if (__errors.length > 0) {
+      throw new ValidationException("Trying 'MapSchema'", __errors)
+    }
+
+    const schema = new MapSchema({
+      extensionFields: extensionFields,
+      loadingOptions: loadingOptions,
+      type: type,
+      values: values
+    })
+    return schema
+  }
+        
+  save (top: boolean = false, baseUrl: string = '', relativeUris: boolean = true)
+  : Dictionary<any> {
+    const r: Dictionary<any> = {}
+    for (const ef in this.extensionFields) {
+      r[prefixUrl(ef, this.loadingOptions.vocab)] = this.extensionFields.ef
+    }
+
+    if (this.type != null) {
+      r.type = save(this.type, false, baseUrl, relativeUris)
+    }
+                
+    if (this.values != null) {
+      const u = saveRelativeUri(this.values, baseUrl, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.values = u
+      }
+    }
+                
+    if (top) {
+      if (this.loadingOptions.namespaces != null) {
+        r.$namespaces = this.loadingOptions.namespaces
+      }
+      if (this.loadingOptions.schemas != null) {
+        r.$schemas = this.loadingOptions.schemas
+      }
+    }
+    return r
+  }
+            
+  static attr: Set<string> = new Set(['type','values'])
+}
diff --git a/src/MapSchemaProperties.ts b/src/MapSchemaProperties.ts
new file mode 100644
index 0000000..6b179f3
--- /dev/null
+++ b/src/MapSchemaProperties.ts
@@ -0,0 +1,21 @@
+
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated interface for https://w3id.org/cwl/salad#MapSchema
+ */
+export interface MapSchemaProperties  {
+                    
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Must be `map`
+   */
+  type: Internal.Map_name
+
+  /**
+   * Defines the type of the map elements.
+   */
+  values: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
+}
\ No newline at end of file
diff --git a/src/Map_name.ts b/src/Map_name.ts
new file mode 100644
index 0000000..4e5eb00
--- /dev/null
+++ b/src/Map_name.ts
@@ -0,0 +1,4 @@
+
+export enum Map_name {
+  MAP='map',
+}
diff --git a/src/MultipleInputFeatureRequirement.ts b/src/MultipleInputFeatureRequirement.ts
index 1b7d8ca..3308c87 100644
--- a/src/MultipleInputFeatureRequirement.ts
+++ b/src/MultipleInputFeatureRequirement.ts
@@ -55,7 +55,7 @@ export class MultipleInputFeatureRequirement extends Saveable implements Interna
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriMultipleInputFeatureRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriMultipleInputFeatureRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/NetworkAccess.ts b/src/NetworkAccess.ts
index 4aed45d..1fd686d 100644
--- a/src/NetworkAccess.ts
+++ b/src/NetworkAccess.ts
@@ -70,7 +70,7 @@ export class NetworkAccess extends Saveable implements Internal.NetworkAccessPro
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriNetworkAccess_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriNetworkAccess_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/Operation.ts b/src/Operation.ts
index aa8f1cb..5411f8f 100644
--- a/src/Operation.ts
+++ b/src/Operation.ts
@@ -102,8 +102,9 @@ export class Operation extends Saveable implements Internal.OperationProperties
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
@@ -153,7 +154,7 @@ export class Operation extends Saveable implements Internal.OperationProperties
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -179,7 +180,7 @@ export class Operation extends Saveable implements Internal.OperationProperties
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriOperation_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriOperation_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -286,7 +287,7 @@ export class Operation extends Saveable implements Internal.OperationProperties
     let cwlVersion
     if ('cwlVersion' in _doc) {
       try {
-        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNone,
+        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -302,7 +303,7 @@ export class Operation extends Saveable implements Internal.OperationProperties
     let intent
     if ('intent' in _doc) {
       try {
-        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNone,
+        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/OperationInputParameter.ts b/src/OperationInputParameter.ts
index 22828ce..cb11f44 100644
--- a/src/OperationInputParameter.ts
+++ b/src/OperationInputParameter.ts
@@ -142,7 +142,7 @@ export class OperationInputParameter extends Saveable implements Internal.Operat
    * (e.g. dependent `valueFrom` fields).
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
@@ -185,7 +185,7 @@ export class OperationInputParameter extends Saveable implements Internal.Operat
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -276,7 +276,7 @@ export class OperationInputParameter extends Saveable implements Internal.Operat
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -324,7 +324,7 @@ export class OperationInputParameter extends Saveable implements Internal.Operat
     let default_
     if ('default' in _doc) {
       try {
-        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrFileLoaderOrDirectoryLoaderOranyType,
+        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrCWLObjectTypeLoader,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/OperationInputParameterProperties.ts b/src/OperationInputParameterProperties.ts
index c9028f0..b554f0d 100644
--- a/src/OperationInputParameterProperties.ts
+++ b/src/OperationInputParameterProperties.ts
@@ -130,7 +130,7 @@ export interface OperationInputParameterProperties extends Internal.InputParamet
    * (e.g. dependent `valueFrom` fields).
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
diff --git a/src/OperationOutputParameter.ts b/src/OperationOutputParameter.ts
index 6c31e1e..aba6a49 100644
--- a/src/OperationOutputParameter.ts
+++ b/src/OperationOutputParameter.ts
@@ -143,7 +143,7 @@ export class OperationOutputParameter extends Saveable implements Internal.Opera
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -234,7 +234,7 @@ export class OperationOutputParameter extends Saveable implements Internal.Opera
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/OperationProperties.ts b/src/OperationProperties.ts
index 3eac568..9c0ca0d 100644
--- a/src/OperationProperties.ts
+++ b/src/OperationProperties.ts
@@ -90,8 +90,9 @@ export interface OperationProperties extends Internal.ProcessProperties {
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
diff --git a/src/OutputArraySchema.ts b/src/OutputArraySchema.ts
index e4f3077..f280389 100644
--- a/src/OutputArraySchema.ts
+++ b/src/OutputArraySchema.ts
@@ -34,7 +34,7 @@ export class OutputArraySchema extends Saveable implements Internal.OutputArrayS
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class OutputArraySchema extends Saveable implements Internal.OutputArrayS
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -102,7 +102,7 @@ export class OutputArraySchema extends Saveable implements Internal.OutputArrayS
             
     let items
     try {
-      items = await loadField(_doc.items, LoaderInstances.typedslunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtype2,
+      items = await loadField(_doc.items, LoaderInstances.uriunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtypeFalseTrue2None,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -116,7 +116,7 @@ export class OutputArraySchema extends Saveable implements Internal.OutputArrayS
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslArray_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -208,7 +208,11 @@ export class OutputArraySchema extends Saveable implements Internal.OutputArrayS
     }
                 
     if (this.items != null) {
-      r.items = save(this.items, false, this.name, relativeUris)
+      const u = saveRelativeUri(this.items, this.name, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.items = u
+      }
     }
                 
     if (this.type != null) {
diff --git a/src/OutputArraySchemaProperties.ts b/src/OutputArraySchemaProperties.ts
index f348110..f519d0d 100644
--- a/src/OutputArraySchemaProperties.ts
+++ b/src/OutputArraySchemaProperties.ts
@@ -5,7 +5,7 @@ import * as Internal from './util/Internal'
 /**
  * Auto-generated interface for https://w3id.org/cwl/cwl#OutputArraySchema
  */
-export interface OutputArraySchemaProperties extends Internal.ArraySchemaProperties, Internal.OutputSchemaProperties {
+export interface OutputArraySchemaProperties extends Internal.CWLArraySchemaProperties, Internal.OutputSchemaProperties {
                     
   extensionFields?: Internal.Dictionary<any>
 
@@ -22,7 +22,7 @@ export interface OutputArraySchemaProperties extends Internal.ArraySchemaPropert
   /**
    * Must be `array`
    */
-  type: Internal.enum_d062602be0b4b8fd33e69e29a841317b6ab665bc
+  type: Internal.Array_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/OutputEnumSchema.ts b/src/OutputEnumSchema.ts
index 9dfe780..4616822 100644
--- a/src/OutputEnumSchema.ts
+++ b/src/OutputEnumSchema.ts
@@ -34,7 +34,7 @@ export class OutputEnumSchema extends Saveable implements Internal.OutputEnumSch
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class OutputEnumSchema extends Saveable implements Internal.OutputEnumSch
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -102,7 +102,7 @@ export class OutputEnumSchema extends Saveable implements Internal.OutputEnumSch
             
     let symbols
     try {
-      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNone,
+      symbols = await loadField(_doc.symbols, LoaderInstances.uriarrayOfstrtypeTrueFalseNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -116,7 +116,7 @@ export class OutputEnumSchema extends Saveable implements Internal.OutputEnumSch
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d961d79c225752b9fadb617367615ab176b47d77Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslEnum_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -169,7 +169,7 @@ export class OutputEnumSchema extends Saveable implements Internal.OutputEnumSch
         } else {
           __errors.push(
             new ValidationException(`invalid field ${key as string}, \
-            expected one of: \`symbols\`,\`type\`,\`label\`,\`doc\`,\`name\``)
+            expected one of: \`name\`,\`symbols\`,\`type\`,\`label\`,\`doc\``)
           )
           break
         }
@@ -183,11 +183,11 @@ export class OutputEnumSchema extends Saveable implements Internal.OutputEnumSch
     const schema = new OutputEnumSchema({
       extensionFields: extensionFields,
       loadingOptions: loadingOptions,
+      name: name,
       symbols: symbols,
       type: type,
       label: label,
-      doc: doc,
-      name: name
+      doc: doc
     })
     return schema
   }
@@ -238,5 +238,5 @@ export class OutputEnumSchema extends Saveable implements Internal.OutputEnumSch
     return r
   }
             
-  static attr: Set<string> = new Set(['symbols','type','label','doc','name'])
+  static attr: Set<string> = new Set(['name','symbols','type','label','doc'])
 }
diff --git a/src/OutputEnumSchemaProperties.ts b/src/OutputEnumSchemaProperties.ts
index 1d07165..5224f2c 100644
--- a/src/OutputEnumSchemaProperties.ts
+++ b/src/OutputEnumSchemaProperties.ts
@@ -22,7 +22,7 @@ export interface OutputEnumSchemaProperties extends Internal.EnumSchemaPropertie
   /**
    * Must be `enum`
    */
-  type: Internal.enum_d961d79c225752b9fadb617367615ab176b47d77
+  type: Internal.Enum_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/OutputRecordField.ts b/src/OutputRecordField.ts
index c43c0be..1ba8736 100644
--- a/src/OutputRecordField.ts
+++ b/src/OutputRecordField.ts
@@ -141,7 +141,7 @@ export class OutputRecordField extends Saveable implements Internal.OutputRecord
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -246,7 +246,7 @@ export class OutputRecordField extends Saveable implements Internal.OutputRecord
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/OutputRecordFieldProperties.ts b/src/OutputRecordFieldProperties.ts
index 82d8a3a..cd02590 100644
--- a/src/OutputRecordFieldProperties.ts
+++ b/src/OutputRecordFieldProperties.ts
@@ -5,7 +5,7 @@ import * as Internal from './util/Internal'
 /**
  * Auto-generated interface for https://w3id.org/cwl/cwl#OutputRecordField
  */
-export interface OutputRecordFieldProperties extends Internal.RecordFieldProperties, Internal.FieldBaseProperties, Internal.OutputFormatProperties {
+export interface OutputRecordFieldProperties extends Internal.CWLRecordFieldProperties, Internal.FieldBaseProperties, Internal.OutputFormatProperties {
                     
   extensionFields?: Internal.Dictionary<any>
 
diff --git a/src/OutputRecordSchema.ts b/src/OutputRecordSchema.ts
index 9cf203c..e33f366 100644
--- a/src/OutputRecordSchema.ts
+++ b/src/OutputRecordSchema.ts
@@ -34,7 +34,7 @@ export class OutputRecordSchema extends Saveable implements Internal.OutputRecor
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
@@ -76,7 +76,7 @@ export class OutputRecordSchema extends Saveable implements Internal.OutputRecor
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -118,7 +118,7 @@ export class OutputRecordSchema extends Saveable implements Internal.OutputRecor
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslRecord_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/OutputRecordSchemaProperties.ts b/src/OutputRecordSchemaProperties.ts
index 50fde87..8bb8e39 100644
--- a/src/OutputRecordSchemaProperties.ts
+++ b/src/OutputRecordSchemaProperties.ts
@@ -5,7 +5,7 @@ import * as Internal from './util/Internal'
 /**
  * Auto-generated interface for https://w3id.org/cwl/cwl#OutputRecordSchema
  */
-export interface OutputRecordSchemaProperties extends Internal.RecordSchemaProperties, Internal.OutputSchemaProperties {
+export interface OutputRecordSchemaProperties extends Internal.CWLRecordSchemaProperties, Internal.OutputSchemaProperties {
                     
   extensionFields?: Internal.Dictionary<any>
 
@@ -22,7 +22,7 @@ export interface OutputRecordSchemaProperties extends Internal.RecordSchemaPrope
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
   /**
    * A short, human-readable label of this object.
diff --git a/src/ProcessProperties.ts b/src/ProcessProperties.ts
index 82ba7a7..e2937ee 100644
--- a/src/ProcessProperties.ts
+++ b/src/ProcessProperties.ts
@@ -84,8 +84,9 @@ export interface ProcessProperties extends Internal.IdentifiedProperties, Intern
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
diff --git a/src/RecordField.ts b/src/RecordField.ts
index df6bcf9..9e0c2c8 100644
--- a/src/RecordField.ts
+++ b/src/RecordField.ts
@@ -35,10 +35,12 @@ export class RecordField extends Saveable implements Internal.RecordFieldPropert
   doc?: undefined | string | Array<string>
 
   /**
-   * The field type
+   * The field type. If it is an array, it indicates
+   * that the field type is a union type of its elements.
+   * Its elements may be duplicated.
    * 
    */
-  type: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string>
+  type: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
 
 
   constructor ({loadingOptions, extensionFields, name, doc, type} : {loadingOptions?: LoadingOptions} & Internal.RecordFieldProperties) {
@@ -68,7 +70,7 @@ export class RecordField extends Saveable implements Internal.RecordFieldPropert
     let name
     if ('name' in _doc) {
       try {
-        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNone,
+        name = await loadField(_doc.name, LoaderInstances.uristrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -110,7 +112,7 @@ export class RecordField extends Saveable implements Internal.RecordFieldPropert
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype2,
+      type = await loadField(_doc.type, LoaderInstances.typedslunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/RecordFieldProperties.ts b/src/RecordFieldProperties.ts
index d03be01..7ce4397 100644
--- a/src/RecordFieldProperties.ts
+++ b/src/RecordFieldProperties.ts
@@ -23,8 +23,10 @@ export interface RecordFieldProperties extends Internal.DocumentedProperties {
   doc?: undefined | string | Array<string>
 
   /**
-   * The field type
+   * The field type. If it is an array, it indicates
+   * that the field type is a union type of its elements.
+   * Its elements may be duplicated.
    * 
    */
-  type: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | string>
+  type: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
 }
\ No newline at end of file
diff --git a/src/RecordSchema.ts b/src/RecordSchema.ts
index 1966d42..de1ef97 100644
--- a/src/RecordSchema.ts
+++ b/src/RecordSchema.ts
@@ -29,7 +29,7 @@ export class RecordSchema extends Saveable implements Internal.RecordSchemaPrope
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 
 
   constructor ({loadingOptions, extensionFields, fields, type} : {loadingOptions?: LoadingOptions} & Internal.RecordSchemaProperties) {
@@ -73,7 +73,7 @@ export class RecordSchema extends Saveable implements Internal.RecordSchemaPrope
 
     let type
     try {
-      type = await loadField(_doc.type, LoaderInstances.typedslenum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader2,
+      type = await loadField(_doc.type, LoaderInstances.typedslRecord_nameLoader2,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/RecordSchemaProperties.ts b/src/RecordSchemaProperties.ts
index 89f9083..8717bbd 100644
--- a/src/RecordSchemaProperties.ts
+++ b/src/RecordSchemaProperties.ts
@@ -17,5 +17,5 @@ export interface RecordSchemaProperties  {
   /**
    * Must be `record`
    */
-  type: Internal.enum_d9cba076fca539106791a4f46d198c7fcfbdb779
+  type: Internal.Record_name
 }
\ No newline at end of file
diff --git a/src/Record_name.ts b/src/Record_name.ts
new file mode 100644
index 0000000..e9f4721
--- /dev/null
+++ b/src/Record_name.ts
@@ -0,0 +1,4 @@
+
+export enum Record_name {
+  RECORD='record',
+}
diff --git a/src/ResourceRequirement.ts b/src/ResourceRequirement.ts
index 40b0e51..c9cca83 100644
--- a/src/ResourceRequirement.ts
+++ b/src/ResourceRequirement.ts
@@ -67,7 +67,7 @@ export class ResourceRequirement extends Saveable implements Internal.ResourceRe
    * do not exceed the capacity of the node.
    * 
    * Processes sharing a core must have the same level of isolation
-   * (typically a container or VM) that they would normally.
+   * (typically a container or VM) that they would normally have.
    * 
    * The reported number of CPU cores reserved for the process,
    * which is available to expressions on the CommandLineTool as
@@ -184,7 +184,7 @@ export class ResourceRequirement extends Saveable implements Internal.ResourceRe
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriResourceRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriResourceRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/ResourceRequirementProperties.ts b/src/ResourceRequirementProperties.ts
index 7cacaf3..6fe4f36 100644
--- a/src/ResourceRequirementProperties.ts
+++ b/src/ResourceRequirementProperties.ts
@@ -55,7 +55,7 @@ export interface ResourceRequirementProperties extends Internal.ProcessRequireme
    * do not exceed the capacity of the node.
    * 
    * Processes sharing a core must have the same level of isolation
-   * (typically a container or VM) that they would normally.
+   * (typically a container or VM) that they would normally have.
    * 
    * The reported number of CPU cores reserved for the process,
    * which is available to expressions on the CommandLineTool as
diff --git a/src/ScatterFeatureRequirement.ts b/src/ScatterFeatureRequirement.ts
index a29bec3..ce356ee 100644
--- a/src/ScatterFeatureRequirement.ts
+++ b/src/ScatterFeatureRequirement.ts
@@ -55,7 +55,7 @@ export class ScatterFeatureRequirement extends Saveable implements Internal.Scat
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriScatterFeatureRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriScatterFeatureRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/SchemaDefRequirement.ts b/src/SchemaDefRequirement.ts
index 7857d8f..fc62758 100644
--- a/src/SchemaDefRequirement.ts
+++ b/src/SchemaDefRequirement.ts
@@ -71,7 +71,7 @@ export class SchemaDefRequirement extends Saveable implements Internal.SchemaDef
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriSchemaDefRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriSchemaDefRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/ShellCommandRequirement.ts b/src/ShellCommandRequirement.ts
index 226e9bf..0c3918a 100644
--- a/src/ShellCommandRequirement.ts
+++ b/src/ShellCommandRequirement.ts
@@ -21,7 +21,7 @@ import * as Internal from './util/Internal'
  * Modify the behavior of CommandLineTool to generate a single string
  * containing a shell command line.  Each item in the `arguments` list must
  * be joined into a string separated by single spaces and quoted to prevent
- * intepretation by the shell, unless `CommandLineBinding` for that argument
+ * interpretation by the shell, unless `CommandLineBinding` for that argument
  * contains `shellQuote: false`.  If `shellQuote: false` is specified, the
  * argument is joined into the command string without quoting, which allows
  * the use of shell metacharacters such as `|` for pipes.
@@ -60,7 +60,7 @@ export class ShellCommandRequirement extends Saveable implements Internal.ShellC
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriShellCommandRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriShellCommandRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/ShellCommandRequirementProperties.ts b/src/ShellCommandRequirementProperties.ts
index 6193d5b..1279933 100644
--- a/src/ShellCommandRequirementProperties.ts
+++ b/src/ShellCommandRequirementProperties.ts
@@ -8,7 +8,7 @@ import * as Internal from './util/Internal'
  * Modify the behavior of CommandLineTool to generate a single string
  * containing a shell command line.  Each item in the `arguments` list must
  * be joined into a string separated by single spaces and quoted to prevent
- * intepretation by the shell, unless `CommandLineBinding` for that argument
+ * interpretation by the shell, unless `CommandLineBinding` for that argument
  * contains `shellQuote: false`.  If `shellQuote: false` is specified, the
  * argument is joined into the command string without quoting, which allows
  * the use of shell metacharacters such as `|` for pipes.
diff --git a/src/SoftwarePackage.ts b/src/SoftwarePackage.ts
index 473fe74..d7275c5 100644
--- a/src/SoftwarePackage.ts
+++ b/src/SoftwarePackage.ts
@@ -140,7 +140,7 @@ export class SoftwarePackage extends Saveable implements Internal.SoftwarePackag
     let specs
     if ('specs' in _doc) {
       try {
-        specs = await loadField(_doc.specs, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeFalseFalseNone,
+        specs = await loadField(_doc.specs, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeFalseFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/SoftwareRequirement.ts b/src/SoftwareRequirement.ts
index 9e3b898..9416476 100644
--- a/src/SoftwareRequirement.ts
+++ b/src/SoftwareRequirement.ts
@@ -61,7 +61,7 @@ export class SoftwareRequirement extends Saveable implements Internal.SoftwareRe
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriSoftwareRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriSoftwareRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/StepInputExpressionRequirement.ts b/src/StepInputExpressionRequirement.ts
index 3e3b2e5..c6592ed 100644
--- a/src/StepInputExpressionRequirement.ts
+++ b/src/StepInputExpressionRequirement.ts
@@ -55,7 +55,7 @@ export class StepInputExpressionRequirement extends Saveable implements Internal
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriStepInputExpressionRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriStepInputExpressionRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/SubworkflowFeatureRequirement.ts b/src/SubworkflowFeatureRequirement.ts
index 35263d0..7cbc5c4 100644
--- a/src/SubworkflowFeatureRequirement.ts
+++ b/src/SubworkflowFeatureRequirement.ts
@@ -55,7 +55,7 @@ export class SubworkflowFeatureRequirement extends Saveable implements Internal.
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriSubworkflowFeatureRequirement_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriSubworkflowFeatureRequirement_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/ToolTimeLimit.ts b/src/ToolTimeLimit.ts
index bc8aa38..ac003b9 100644
--- a/src/ToolTimeLimit.ts
+++ b/src/ToolTimeLimit.ts
@@ -68,7 +68,7 @@ export class ToolTimeLimit extends Saveable implements Internal.ToolTimeLimitPro
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriToolTimeLimit_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriToolTimeLimit_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/UnionSchema.ts b/src/UnionSchema.ts
new file mode 100644
index 0000000..fe17908
--- /dev/null
+++ b/src/UnionSchema.ts
@@ -0,0 +1,146 @@
+
+import {
+  Dictionary,
+  expandUrl,
+  loadField,
+  LoaderInstances,
+  LoadingOptions,
+  Saveable,
+  ValidationException,
+  prefixUrl,
+  save,
+  saveRelativeUri
+} from './util/Internal'
+import { v4 as uuidv4 } from 'uuid'
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated class implementation for https://w3id.org/cwl/salad#UnionSchema
+ */
+export class UnionSchema extends Saveable implements Internal.UnionSchemaProperties {
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Defines the type of the union elements.
+   */
+  names: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
+
+  /**
+   * Must be `union`
+   */
+  type: Internal.Union_name
+
+
+  constructor ({loadingOptions, extensionFields, names, type} : {loadingOptions?: LoadingOptions} & Internal.UnionSchemaProperties) {
+    super(loadingOptions)
+    this.extensionFields = extensionFields ?? {}
+    this.names = names
+    this.type = type
+  }
+
+  /**
+   * Used to construct instances of {@link UnionSchema }.
+   *
+   * @param __doc                           Document fragment to load this record object from.
+   * @param baseuri                         Base URI to generate child document IDs against.
+   * @param loadingOptions                  Context for loading URIs and populating objects.
+   * @param docRoot                         ID at this position in the document (if available)
+   * @returns                               An instance of {@link UnionSchema }
+   * @throws {@link ValidationException}    If the document fragment is not a
+   *                                        {@link Dictionary} or validation of fields fails.
+   */
+  static override async fromDoc (__doc: any, baseuri: string, loadingOptions: LoadingOptions,
+    docRoot?: string): Promise<Saveable> {
+    const _doc = Object.assign({}, __doc)
+    const __errors: ValidationException[] = []
+            
+    let names
+    try {
+      names = await loadField(_doc.names, LoaderInstances.uriunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeFalseTrue2None,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `names` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    let type
+    try {
+      type = await loadField(_doc.type, LoaderInstances.typedslUnion_nameLoader2,
+        baseuri, loadingOptions)
+    } catch (e) {
+      if (e instanceof ValidationException) {
+        __errors.push(
+          new ValidationException('the `type` field is not valid because: ', [e])
+        )
+      } else {
+        throw e
+      }
+    }
+
+    const extensionFields: Dictionary<any> = {}
+    for (const [key, value] of Object.entries(_doc)) {
+      if (!UnionSchema.attr.has(key)) {
+        if ((key as string).includes(':')) {
+          const ex = expandUrl(key, '', loadingOptions, false, false)
+          extensionFields[ex] = value
+        } else {
+          __errors.push(
+            new ValidationException(`invalid field ${key as string}, \
+            expected one of: \`names\`,\`type\``)
+          )
+          break
+        }
+      }
+    }
+
+    if (__errors.length > 0) {
+      throw new ValidationException("Trying 'UnionSchema'", __errors)
+    }
+
+    const schema = new UnionSchema({
+      extensionFields: extensionFields,
+      loadingOptions: loadingOptions,
+      names: names,
+      type: type
+    })
+    return schema
+  }
+        
+  save (top: boolean = false, baseUrl: string = '', relativeUris: boolean = true)
+  : Dictionary<any> {
+    const r: Dictionary<any> = {}
+    for (const ef in this.extensionFields) {
+      r[prefixUrl(ef, this.loadingOptions.vocab)] = this.extensionFields.ef
+    }
+
+    if (this.names != null) {
+      const u = saveRelativeUri(this.names, baseUrl, false,
+                                relativeUris, 2)
+      if (u != null) {
+        r.names = u
+      }
+    }
+                
+    if (this.type != null) {
+      r.type = save(this.type, false, baseUrl, relativeUris)
+    }
+                
+    if (top) {
+      if (this.loadingOptions.namespaces != null) {
+        r.$namespaces = this.loadingOptions.namespaces
+      }
+      if (this.loadingOptions.schemas != null) {
+        r.$schemas = this.loadingOptions.schemas
+      }
+    }
+    return r
+  }
+            
+  static attr: Set<string> = new Set(['names','type'])
+}
diff --git a/src/UnionSchemaProperties.ts b/src/UnionSchemaProperties.ts
new file mode 100644
index 0000000..84b7d6d
--- /dev/null
+++ b/src/UnionSchemaProperties.ts
@@ -0,0 +1,21 @@
+
+import * as Internal from './util/Internal'
+
+
+/**
+ * Auto-generated interface for https://w3id.org/cwl/salad#UnionSchema
+ */
+export interface UnionSchemaProperties  {
+                    
+  extensionFields?: Internal.Dictionary<any>
+
+  /**
+   * Defines the type of the union elements.
+   */
+  names: Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string | Array<Internal.PrimitiveType | Internal.RecordSchema | Internal.EnumSchema | Internal.ArraySchema | Internal.MapSchema | Internal.UnionSchema | string>
+
+  /**
+   * Must be `union`
+   */
+  type: Internal.Union_name
+}
\ No newline at end of file
diff --git a/src/Union_name.ts b/src/Union_name.ts
new file mode 100644
index 0000000..77418ef
--- /dev/null
+++ b/src/Union_name.ts
@@ -0,0 +1,4 @@
+
+export enum Union_name {
+  UNION='union',
+}
diff --git a/src/WorkReuse.ts b/src/WorkReuse.ts
index 56f0506..d3e8c8a 100644
--- a/src/WorkReuse.ts
+++ b/src/WorkReuse.ts
@@ -64,7 +64,7 @@ export class WorkReuse extends Saveable implements Internal.WorkReuseProperties
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriWorkReuse_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriWorkReuse_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
diff --git a/src/Workflow.ts b/src/Workflow.ts
index 5cce976..b960ba2 100644
--- a/src/Workflow.ts
+++ b/src/Workflow.ts
@@ -146,8 +146,9 @@ export class Workflow extends Saveable implements Internal.WorkflowProperties {
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
@@ -207,7 +208,7 @@ export class Workflow extends Saveable implements Internal.WorkflowProperties {
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -233,7 +234,7 @@ export class Workflow extends Saveable implements Internal.WorkflowProperties {
             
     let class_
     try {
-      class_ = await loadField(_doc.class, LoaderInstances.uriWorkflow_classLoaderFalseTrueNone,
+      class_ = await loadField(_doc.class, LoaderInstances.uriWorkflow_classLoaderFalseTrueNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -340,7 +341,7 @@ export class Workflow extends Saveable implements Internal.WorkflowProperties {
     let cwlVersion
     if ('cwlVersion' in _doc) {
       try {
-        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNone,
+        cwlVersion = await loadField(_doc.cwlVersion, LoaderInstances.uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -356,7 +357,7 @@ export class Workflow extends Saveable implements Internal.WorkflowProperties {
     let intent
     if ('intent' in _doc) {
       try {
-        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNone,
+        intent = await loadField(_doc.intent, LoaderInstances.uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/WorkflowInputParameter.ts b/src/WorkflowInputParameter.ts
index 9fa9fc8..a41eff4 100644
--- a/src/WorkflowInputParameter.ts
+++ b/src/WorkflowInputParameter.ts
@@ -139,7 +139,7 @@ export class WorkflowInputParameter extends Saveable implements Internal.Workflo
    * (e.g. dependent `valueFrom` fields).
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
@@ -190,7 +190,7 @@ export class WorkflowInputParameter extends Saveable implements Internal.Workflo
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -281,7 +281,7 @@ export class WorkflowInputParameter extends Saveable implements Internal.Workflo
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -329,7 +329,7 @@ export class WorkflowInputParameter extends Saveable implements Internal.Workflo
     let default_
     if ('default' in _doc) {
       try {
-        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrFileLoaderOrDirectoryLoaderOranyType,
+        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrCWLObjectTypeLoader,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/WorkflowInputParameterProperties.ts b/src/WorkflowInputParameterProperties.ts
index 4ff4e7d..a092aa3 100644
--- a/src/WorkflowInputParameterProperties.ts
+++ b/src/WorkflowInputParameterProperties.ts
@@ -127,7 +127,7 @@ export interface WorkflowInputParameterProperties extends Internal.InputParamete
    * (e.g. dependent `valueFrom` fields).
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * Specify valid types of data that may be assigned to this parameter.
diff --git a/src/WorkflowOutputParameter.ts b/src/WorkflowOutputParameter.ts
index 9aec04a..afe1b3f 100644
--- a/src/WorkflowOutputParameter.ts
+++ b/src/WorkflowOutputParameter.ts
@@ -175,7 +175,7 @@ export class WorkflowOutputParameter extends Saveable implements Internal.Workfl
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -266,7 +266,7 @@ export class WorkflowOutputParameter extends Saveable implements Internal.Workfl
     let format
     if ('format' in _doc) {
       try {
-        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNone,
+        format = await loadField(_doc.format, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNoneTrue,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -282,7 +282,7 @@ export class WorkflowOutputParameter extends Saveable implements Internal.Workfl
     let outputSource
     if ('outputSource' in _doc) {
       try {
-        outputSource = await loadField(_doc.outputSource, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse1,
+        outputSource = await loadField(_doc.outputSource, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse1None,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/WorkflowProperties.ts b/src/WorkflowProperties.ts
index 1c45e61..2752c65 100644
--- a/src/WorkflowProperties.ts
+++ b/src/WorkflowProperties.ts
@@ -134,8 +134,9 @@ export interface WorkflowProperties extends Internal.ProcessProperties {
 
   /**
    * An identifier for the type of computational operation, of this Process.
-   * Especially useful for "class: Operation", but can also be used for
-   * CommandLineTool, Workflow, or ExpressionTool.
+   * Especially useful for [`Operation`](Workflow.html#Operation), but can also be used for
+   * [`CommandLineTool`](CommandLineTool.html#CommandLineTool),
+   * [`Workflow`](Workflow.html#Workflow), or [ExpressionTool](Workflow.html#ExpressionTool).
    * 
    * If provided, then this must be an IRI of a concept node that
    * represents the type of operation, preferably defined within an ontology.
diff --git a/src/WorkflowStep.ts b/src/WorkflowStep.ts
index eefe46d..47092f9 100644
--- a/src/WorkflowStep.ts
+++ b/src/WorkflowStep.ts
@@ -36,7 +36,7 @@ import * as Internal from './util/Internal'
  * 
  * The `scatter` field specifies one or more input parameters which will be
  * scattered.  An input parameter may be listed more than once.  The declared
- * type of each input parameter is implicitly becomes an array of items of the
+ * type of each input parameter implicitly becomes an array of items of the
  * input parameter type.  If a parameter is listed more than once, it becomes
  * a nested array.  As a result, upstream parameters which are connected to
  * scattered parameters must be arrays.
@@ -212,7 +212,7 @@ export class WorkflowStep extends Saveable implements Internal.WorkflowStepPrope
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -284,7 +284,7 @@ export class WorkflowStep extends Saveable implements Internal.WorkflowStepPrope
 
     let out
     try {
-      out = await loadField(_doc.out, LoaderInstances.uriunionOfarrayOfunionOfstrtypeOrWorkflowStepOutputLoaderTrueFalseNone,
+      out = await loadField(_doc.out, LoaderInstances.uriunionOfarrayOfunionOfstrtypeOrWorkflowStepOutputLoaderTrueFalseNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -330,7 +330,7 @@ export class WorkflowStep extends Saveable implements Internal.WorkflowStepPrope
 
     let run
     try {
-      run = await loadField(_doc.run, LoaderInstances.uriunionOfstrtypeOrCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoaderFalseFalseNone,
+      run = await loadField(_doc.run, LoaderInstances.uriunionOfstrtypeOrCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoaderFalseFalseNoneNone,
         baseuri, loadingOptions)
     } catch (e) {
       if (e instanceof ValidationException) {
@@ -361,7 +361,7 @@ export class WorkflowStep extends Saveable implements Internal.WorkflowStepPrope
     let scatter
     if ('scatter' in _doc) {
       try {
-        scatter = await loadField(_doc.scatter, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse0,
+        scatter = await loadField(_doc.scatter, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse0None,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -377,7 +377,7 @@ export class WorkflowStep extends Saveable implements Internal.WorkflowStepPrope
     let scatterMethod
     if ('scatterMethod' in _doc) {
       try {
-        scatterMethod = await loadField(_doc.scatterMethod, LoaderInstances.uriunionOfundefinedtypeOrScatterMethodLoaderFalseTrueNone,
+        scatterMethod = await loadField(_doc.scatterMethod, LoaderInstances.uriunionOfundefinedtypeOrScatterMethodLoaderFalseTrueNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/WorkflowStepInput.ts b/src/WorkflowStepInput.ts
index a2136fa..2fe5f57 100644
--- a/src/WorkflowStepInput.ts
+++ b/src/WorkflowStepInput.ts
@@ -195,7 +195,7 @@ export class WorkflowStepInput extends Saveable implements Internal.WorkflowStep
    * default must be applied prior to scattering or evaluating `valueFrom`.
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * To use valueFrom, [StepInputExpressionRequirement](#StepInputExpressionRequirement) must
@@ -258,7 +258,7 @@ export class WorkflowStepInput extends Saveable implements Internal.WorkflowStep
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -285,7 +285,7 @@ export class WorkflowStepInput extends Saveable implements Internal.WorkflowStep
     let source
     if ('source' in _doc) {
       try {
-        source = await loadField(_doc.source, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse2,
+        source = await loadField(_doc.source, LoaderInstances.uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse2None,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
@@ -381,7 +381,7 @@ export class WorkflowStepInput extends Saveable implements Internal.WorkflowStep
     let default_
     if ('default' in _doc) {
       try {
-        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrFileLoaderOrDirectoryLoaderOranyType,
+        default_ = await loadField(_doc.default, LoaderInstances.unionOfundefinedtypeOrCWLObjectTypeLoader,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/WorkflowStepInputProperties.ts b/src/WorkflowStepInputProperties.ts
index e65e39c..3f8896f 100644
--- a/src/WorkflowStepInputProperties.ts
+++ b/src/WorkflowStepInputProperties.ts
@@ -183,7 +183,7 @@ export interface WorkflowStepInputProperties extends Internal.IdentifiedProperti
    * default must be applied prior to scattering or evaluating `valueFrom`.
    * 
    */
-  default_?: undefined | Internal.File | Internal.Directory | any
+  default_?: undefined | any
 
   /**
    * To use valueFrom, [StepInputExpressionRequirement](#StepInputExpressionRequirement) must
diff --git a/src/WorkflowStepOutput.ts b/src/WorkflowStepOutput.ts
index 6244e02..fb72b16 100644
--- a/src/WorkflowStepOutput.ts
+++ b/src/WorkflowStepOutput.ts
@@ -62,7 +62,7 @@ export class WorkflowStepOutput extends Saveable implements Internal.WorkflowSte
     let id
     if ('id' in _doc) {
       try {
-        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNone,
+        id = await loadField(_doc.id, LoaderInstances.uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone,
           baseuri, loadingOptions)
       } catch (e) {
         if (e instanceof ValidationException) {
diff --git a/src/WorkflowStepProperties.ts b/src/WorkflowStepProperties.ts
index 3c63809..e42b082 100644
--- a/src/WorkflowStepProperties.ts
+++ b/src/WorkflowStepProperties.ts
@@ -23,7 +23,7 @@ import * as Internal from './util/Internal'
  * 
  * The `scatter` field specifies one or more input parameters which will be
  * scattered.  An input parameter may be listed more than once.  The declared
- * type of each input parameter is implicitly becomes an array of items of the
+ * type of each input parameter implicitly becomes an array of items of the
  * input parameter type.  If a parameter is listed more than once, it becomes
  * a nested array.  As a result, upstream parameters which are connected to
  * scattered parameters must be arrays.
diff --git a/src/index.ts b/src/index.ts
index 9e6a506..c42294e 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -6,6 +6,13 @@ export {
   Any,
   ArraySchema,
   ArraySchemaProperties,
+  Array_name,
+  CWLArraySchema,
+  CWLArraySchemaProperties,
+  CWLRecordField,
+  CWLRecordFieldProperties,
+  CWLRecordSchema,
+  CWLRecordSchemaProperties,
   CWLType,
   CWLVersion,
   CommandInputArraySchema,
@@ -49,6 +56,7 @@ export {
   DocumentedProperties,
   EnumSchema,
   EnumSchemaProperties,
+  Enum_name,
   EnvVarRequirement,
   EnvVarRequirementProperties,
   EnvVarRequirement_class,
@@ -95,6 +103,9 @@ export {
   LoadListingRequirement,
   LoadListingRequirementProperties,
   LoadListingRequirement_class,
+  MapSchema,
+  MapSchemaProperties,
+  Map_name,
   MultipleInputFeatureRequirement,
   MultipleInputFeatureRequirementProperties,
   MultipleInputFeatureRequirement_class,
@@ -128,6 +139,7 @@ export {
   RecordFieldProperties,
   RecordSchema,
   RecordSchemaProperties,
+  Record_name,
   ResourceRequirement,
   ResourceRequirementProperties,
   ResourceRequirement_class,
@@ -158,6 +170,9 @@ export {
   ToolTimeLimit,
   ToolTimeLimitProperties,
   ToolTimeLimit_class,
+  UnionSchema,
+  UnionSchemaProperties,
+  Union_name,
   WorkReuse,
   WorkReuseProperties,
   WorkReuse_class,
@@ -174,9 +189,6 @@ export {
   WorkflowStepOutputProperties,
   WorkflowStepProperties,
   Workflow_class,
-  enum_d062602be0b4b8fd33e69e29a841317b6ab665bc,
-  enum_d961d79c225752b9fadb617367615ab176b47d77,
-  enum_d9cba076fca539106791a4f46d198c7fcfbdb779,
   stderr,
   stdin,
   stdout
diff --git a/src/test/LoadingOptions.spec.ts b/src/test/LoadingOptions.spec.ts
new file mode 100644
index 0000000..17c2c8f
--- /dev/null
+++ b/src/test/LoadingOptions.spec.ts
@@ -0,0 +1,29 @@
+import { assert } from 'chai'
+import { Fetcher, LoadingOptions } from '../util/Internal'
+
+class TestFetcher implements Fetcher {
+  checkExists(url: string): boolean {
+    return true
+  }
+  async fetchText(url: string, contentTypes?: string[] | undefined): Promise<string> {
+    return "TestFetcher"
+  }
+  urljoin(baseUrl: string, url: string): string {
+    return `${baseUrl}/${url}`
+  }
+}
+
+describe('Test LoadingOptions', () => {
+  describe('copyFrom', () => {
+    const original = new LoadingOptions({fetcher: new TestFetcher()})
+    it('should have the same Fetcher as the original', async () => {
+      const copy = new LoadingOptions({copyFrom:original})
+      assert.equal(copy.fetcher,original.fetcher)
+    })
+    it('fetcher should take precedence over copyFrom', async () => {
+      const fetcher = new TestFetcher()
+      const copy = new LoadingOptions({fetcher,copyFrom:original})
+      assert.equal(copy.fetcher,fetcher)
+    })
+  })
+})
diff --git a/src/util/Internal.ts b/src/util/Internal.ts
index d47c02e..bac31e7 100644
--- a/src/util/Internal.ts
+++ b/src/util/Internal.ts
@@ -8,6 +8,7 @@ export * from './loaders/ExpressionLoader'
 export * from './Fetcher'
 export * from './loaders/IdMapLoader'
 export * from './loaders/Loader'
+export * from './loaders/MapLoader'
 export * from './LoadingOptions'
 export * from './loaders/AnyLoader'
 export * from './loaders/PrimitiveLoader'
@@ -22,6 +23,13 @@ export * from './Vocabs'
 export * from '../Any'
 export * from '../ArraySchema'
 export * from '../ArraySchemaProperties'
+export * from '../Array_name'
+export * from '../CWLArraySchema'
+export * from '../CWLArraySchemaProperties'
+export * from '../CWLRecordField'
+export * from '../CWLRecordFieldProperties'
+export * from '../CWLRecordSchema'
+export * from '../CWLRecordSchemaProperties'
 export * from '../CWLType'
 export * from '../CWLVersion'
 export * from '../CommandInputArraySchema'
@@ -65,6 +73,7 @@ export * from '../DockerRequirement_class'
 export * from '../DocumentedProperties'
 export * from '../EnumSchema'
 export * from '../EnumSchemaProperties'
+export * from '../Enum_name'
 export * from '../EnvVarRequirement'
 export * from '../EnvVarRequirementProperties'
 export * from '../EnvVarRequirement_class'
@@ -111,6 +120,9 @@ export * from '../LoadListingEnum'
 export * from '../LoadListingRequirement'
 export * from '../LoadListingRequirementProperties'
 export * from '../LoadListingRequirement_class'
+export * from '../MapSchema'
+export * from '../MapSchemaProperties'
+export * from '../Map_name'
 export * from '../MultipleInputFeatureRequirement'
 export * from '../MultipleInputFeatureRequirementProperties'
 export * from '../MultipleInputFeatureRequirement_class'
@@ -144,6 +156,7 @@ export * from '../RecordField'
 export * from '../RecordFieldProperties'
 export * from '../RecordSchema'
 export * from '../RecordSchemaProperties'
+export * from '../Record_name'
 export * from '../ResourceRequirement'
 export * from '../ResourceRequirementProperties'
 export * from '../ResourceRequirement_class'
@@ -174,6 +187,9 @@ export * from '../SubworkflowFeatureRequirement_class'
 export * from '../ToolTimeLimit'
 export * from '../ToolTimeLimitProperties'
 export * from '../ToolTimeLimit_class'
+export * from '../UnionSchema'
+export * from '../UnionSchemaProperties'
+export * from '../Union_name'
 export * from '../WorkReuse'
 export * from '../WorkReuseProperties'
 export * from '../WorkReuse_class'
@@ -190,9 +206,6 @@ export * from '../WorkflowStepOutput'
 export * from '../WorkflowStepOutputProperties'
 export * from '../WorkflowStepProperties'
 export * from '../Workflow_class'
-export * from '../enum_d062602be0b4b8fd33e69e29a841317b6ab665bc'
-export * from '../enum_d961d79c225752b9fadb617367615ab176b47d77'
-export * from '../enum_d9cba076fca539106791a4f46d198c7fcfbdb779'
 export * from '../stderr'
 export * from '../stdin'
 export * from '../stdout'
diff --git a/src/util/LoaderInstances.ts b/src/util/LoaderInstances.ts
index 9e4ef98..edff258 100644
--- a/src/util/LoaderInstances.ts
+++ b/src/util/LoaderInstances.ts
@@ -8,12 +8,20 @@ import {
   _ArrayLoader,
   _EnumLoader,
   _IdMapLoader,
+  _MapLoader,
   _TypeDSLLoader,
   _SecondaryDSLLoader,
   TypeGuards,
   Any,
   ArraySchema,
   ArraySchemaProperties,
+  Array_name,
+  CWLArraySchema,
+  CWLArraySchemaProperties,
+  CWLRecordField,
+  CWLRecordFieldProperties,
+  CWLRecordSchema,
+  CWLRecordSchemaProperties,
   CWLType,
   CWLVersion,
   CommandInputArraySchema,
@@ -57,6 +65,7 @@ import {
   DocumentedProperties,
   EnumSchema,
   EnumSchemaProperties,
+  Enum_name,
   EnvVarRequirement,
   EnvVarRequirementProperties,
   EnvVarRequirement_class,
@@ -103,6 +112,9 @@ import {
   LoadListingRequirement,
   LoadListingRequirementProperties,
   LoadListingRequirement_class,
+  MapSchema,
+  MapSchemaProperties,
+  Map_name,
   MultipleInputFeatureRequirement,
   MultipleInputFeatureRequirementProperties,
   MultipleInputFeatureRequirement_class,
@@ -136,6 +148,7 @@ import {
   RecordFieldProperties,
   RecordSchema,
   RecordSchemaProperties,
+  Record_name,
   ResourceRequirement,
   ResourceRequirementProperties,
   ResourceRequirement_class,
@@ -166,6 +179,9 @@ import {
   ToolTimeLimit,
   ToolTimeLimitProperties,
   ToolTimeLimit_class,
+  UnionSchema,
+  UnionSchemaProperties,
+  Union_name,
   WorkReuse,
   WorkReuseProperties,
   WorkReuse_class,
@@ -182,9 +198,6 @@ import {
   WorkflowStepOutputProperties,
   WorkflowStepProperties,
   Workflow_class,
-  enum_d062602be0b4b8fd33e69e29a841317b6ab665bc,
-  enum_d961d79c225752b9fadb617367615ab176b47d77,
-  enum_d9cba076fca539106791a4f46d198c7fcfbdb779,
   stderr,
   stdin,
   stdout
@@ -198,115 +211,142 @@ export const undefinedtype = new _PrimitiveLoader(TypeGuards.Undefined);
 export const anyType = new _AnyLoader();
 export const PrimitiveTypeLoader = new _EnumLoader((Object.keys(PrimitiveType) as Array<keyof typeof PrimitiveType>).map(key => PrimitiveType[key]));
 export const AnyLoader = new _EnumLoader((Object.keys(Any) as Array<keyof typeof Any>).map(key => Any[key]));
-export const RecordFieldLoader = new _RecordLoader(RecordField.fromDoc);
-export const RecordSchemaLoader = new _RecordLoader(RecordSchema.fromDoc);
-export const EnumSchemaLoader = new _RecordLoader(EnumSchema.fromDoc);
-export const ArraySchemaLoader = new _RecordLoader(ArraySchema.fromDoc);
-export const CWLVersionLoader = new _EnumLoader((Object.keys(CWLVersion) as Array<keyof typeof CWLVersion>).map(key => CWLVersion[key]));
+export const RecordFieldLoader = new _RecordLoader(RecordField.fromDoc, undefined, undefined);
+export const RecordSchemaLoader = new _RecordLoader(RecordSchema.fromDoc, undefined, undefined);
+export const EnumSchemaLoader = new _RecordLoader(EnumSchema.fromDoc, undefined, undefined);
+export const ArraySchemaLoader = new _RecordLoader(ArraySchema.fromDoc, undefined, undefined);
+export const MapSchemaLoader = new _RecordLoader(MapSchema.fromDoc, undefined, undefined);
+export const UnionSchemaLoader = new _RecordLoader(UnionSchema.fromDoc, undefined, undefined);
 export const CWLTypeLoader = new _EnumLoader((Object.keys(CWLType) as Array<keyof typeof CWLType>).map(key => CWLType[key]));
-export const FileLoader = new _RecordLoader(File.fromDoc);
-export const DirectoryLoader = new _RecordLoader(Directory.fromDoc);
+export const CWLArraySchemaLoader = new _RecordLoader(CWLArraySchema.fromDoc, undefined, undefined);
+export const CWLRecordFieldLoader = new _RecordLoader(CWLRecordField.fromDoc, undefined, undefined);
+export const CWLRecordSchemaLoader = new _RecordLoader(CWLRecordSchema.fromDoc, undefined, undefined);
+export const FileLoader = new _RecordLoader(File.fromDoc, undefined, undefined);
+export const DirectoryLoader = new _RecordLoader(Directory.fromDoc, undefined, undefined);
+export const CWLObjectTypeLoader = new _UnionLoader([]);
+export const unionOfundefinedtypeOrCWLObjectTypeLoader = new _UnionLoader([undefinedtype, CWLObjectTypeLoader]);
+export const arrayOfunionOfundefinedtypeOrCWLObjectTypeLoader = new _ArrayLoader([unionOfundefinedtypeOrCWLObjectTypeLoader]);
+export const mapOfunionOfundefinedtypeOrCWLObjectTypeLoader = new _MapLoader([unionOfundefinedtypeOrCWLObjectTypeLoader], undefined, undefined);
+export const InlineJavascriptRequirementLoader = new _RecordLoader(InlineJavascriptRequirement.fromDoc, undefined, undefined);
+export const SchemaDefRequirementLoader = new _RecordLoader(SchemaDefRequirement.fromDoc, undefined, undefined);
+export const LoadListingRequirementLoader = new _RecordLoader(LoadListingRequirement.fromDoc, undefined, undefined);
+export const DockerRequirementLoader = new _RecordLoader(DockerRequirement.fromDoc, undefined, undefined);
+export const SoftwareRequirementLoader = new _RecordLoader(SoftwareRequirement.fromDoc, undefined, undefined);
+export const InitialWorkDirRequirementLoader = new _RecordLoader(InitialWorkDirRequirement.fromDoc, undefined, undefined);
+export const EnvVarRequirementLoader = new _RecordLoader(EnvVarRequirement.fromDoc, undefined, undefined);
+export const ShellCommandRequirementLoader = new _RecordLoader(ShellCommandRequirement.fromDoc, undefined, undefined);
+export const ResourceRequirementLoader = new _RecordLoader(ResourceRequirement.fromDoc, undefined, undefined);
+export const WorkReuseLoader = new _RecordLoader(WorkReuse.fromDoc, undefined, undefined);
+export const NetworkAccessLoader = new _RecordLoader(NetworkAccess.fromDoc, undefined, undefined);
+export const InplaceUpdateRequirementLoader = new _RecordLoader(InplaceUpdateRequirement.fromDoc, undefined, undefined);
+export const ToolTimeLimitLoader = new _RecordLoader(ToolTimeLimit.fromDoc, undefined, undefined);
+export const SubworkflowFeatureRequirementLoader = new _RecordLoader(SubworkflowFeatureRequirement.fromDoc, undefined, undefined);
+export const ScatterFeatureRequirementLoader = new _RecordLoader(ScatterFeatureRequirement.fromDoc, undefined, undefined);
+export const MultipleInputFeatureRequirementLoader = new _RecordLoader(MultipleInputFeatureRequirement.fromDoc, undefined, undefined);
+export const StepInputExpressionRequirementLoader = new _RecordLoader(StepInputExpressionRequirement.fromDoc, undefined, undefined);
+export const unionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader = new _UnionLoader([InlineJavascriptRequirementLoader, SchemaDefRequirementLoader, LoadListingRequirementLoader, DockerRequirementLoader, SoftwareRequirementLoader, InitialWorkDirRequirementLoader, EnvVarRequirementLoader, ShellCommandRequirementLoader, ResourceRequirementLoader, WorkReuseLoader, NetworkAccessLoader, InplaceUpdateRequirementLoader, ToolTimeLimitLoader, SubworkflowFeatureRequirementLoader, ScatterFeatureRequirementLoader, MultipleInputFeatureRequirementLoader, StepInputExpressionRequirementLoader]);
+export const arrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader = new _ArrayLoader([unionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader]);
+export const unionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOrCWLObjectTypeLoader = new _UnionLoader([undefinedtype, arrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader, CWLObjectTypeLoader]);
+export const mapOfunionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOrCWLObjectTypeLoader = new _MapLoader([unionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOrCWLObjectTypeLoader], '@list', true);
+export const CWLVersionLoader = new _EnumLoader((Object.keys(CWLVersion) as Array<keyof typeof CWLVersion>).map(key => CWLVersion[key]));
 export const LoadListingEnumLoader = new _EnumLoader((Object.keys(LoadListingEnum) as Array<keyof typeof LoadListingEnum>).map(key => LoadListingEnum[key]));
 export const ExpressionLoader = new _ExpressionLoader();
-export const InputBindingLoader = new _RecordLoader(InputBinding.fromDoc);
-export const InputRecordFieldLoader = new _RecordLoader(InputRecordField.fromDoc);
-export const InputRecordSchemaLoader = new _RecordLoader(InputRecordSchema.fromDoc);
-export const InputEnumSchemaLoader = new _RecordLoader(InputEnumSchema.fromDoc);
-export const InputArraySchemaLoader = new _RecordLoader(InputArraySchema.fromDoc);
-export const OutputRecordFieldLoader = new _RecordLoader(OutputRecordField.fromDoc);
-export const OutputRecordSchemaLoader = new _RecordLoader(OutputRecordSchema.fromDoc);
-export const OutputEnumSchemaLoader = new _RecordLoader(OutputEnumSchema.fromDoc);
-export const OutputArraySchemaLoader = new _RecordLoader(OutputArraySchema.fromDoc);
-export const InlineJavascriptRequirementLoader = new _RecordLoader(InlineJavascriptRequirement.fromDoc);
-export const SchemaDefRequirementLoader = new _RecordLoader(SchemaDefRequirement.fromDoc);
-export const SecondaryFileSchemaLoader = new _RecordLoader(SecondaryFileSchema.fromDoc);
-export const LoadListingRequirementLoader = new _RecordLoader(LoadListingRequirement.fromDoc);
-export const EnvironmentDefLoader = new _RecordLoader(EnvironmentDef.fromDoc);
-export const CommandLineBindingLoader = new _RecordLoader(CommandLineBinding.fromDoc);
-export const CommandOutputBindingLoader = new _RecordLoader(CommandOutputBinding.fromDoc);
-export const CommandLineBindableLoader = new _RecordLoader(CommandLineBindable.fromDoc);
-export const CommandInputRecordFieldLoader = new _RecordLoader(CommandInputRecordField.fromDoc);
-export const CommandInputRecordSchemaLoader = new _RecordLoader(CommandInputRecordSchema.fromDoc);
-export const CommandInputEnumSchemaLoader = new _RecordLoader(CommandInputEnumSchema.fromDoc);
-export const CommandInputArraySchemaLoader = new _RecordLoader(CommandInputArraySchema.fromDoc);
-export const CommandOutputRecordFieldLoader = new _RecordLoader(CommandOutputRecordField.fromDoc);
-export const CommandOutputRecordSchemaLoader = new _RecordLoader(CommandOutputRecordSchema.fromDoc);
-export const CommandOutputEnumSchemaLoader = new _RecordLoader(CommandOutputEnumSchema.fromDoc);
-export const CommandOutputArraySchemaLoader = new _RecordLoader(CommandOutputArraySchema.fromDoc);
-export const CommandInputParameterLoader = new _RecordLoader(CommandInputParameter.fromDoc);
-export const CommandOutputParameterLoader = new _RecordLoader(CommandOutputParameter.fromDoc);
+export const InputBindingLoader = new _RecordLoader(InputBinding.fromDoc, undefined, undefined);
+export const InputRecordFieldLoader = new _RecordLoader(InputRecordField.fromDoc, undefined, undefined);
+export const InputRecordSchemaLoader = new _RecordLoader(InputRecordSchema.fromDoc, undefined, undefined);
+export const InputEnumSchemaLoader = new _RecordLoader(InputEnumSchema.fromDoc, undefined, undefined);
+export const InputArraySchemaLoader = new _RecordLoader(InputArraySchema.fromDoc, undefined, undefined);
+export const OutputRecordFieldLoader = new _RecordLoader(OutputRecordField.fromDoc, undefined, undefined);
+export const OutputRecordSchemaLoader = new _RecordLoader(OutputRecordSchema.fromDoc, undefined, undefined);
+export const OutputEnumSchemaLoader = new _RecordLoader(OutputEnumSchema.fromDoc, undefined, undefined);
+export const OutputArraySchemaLoader = new _RecordLoader(OutputArraySchema.fromDoc, undefined, undefined);
+export const SecondaryFileSchemaLoader = new _RecordLoader(SecondaryFileSchema.fromDoc, undefined, undefined);
+export const EnvironmentDefLoader = new _RecordLoader(EnvironmentDef.fromDoc, undefined, undefined);
+export const CommandLineBindingLoader = new _RecordLoader(CommandLineBinding.fromDoc, undefined, undefined);
+export const CommandOutputBindingLoader = new _RecordLoader(CommandOutputBinding.fromDoc, undefined, undefined);
+export const CommandLineBindableLoader = new _RecordLoader(CommandLineBindable.fromDoc, undefined, undefined);
+export const CommandInputRecordFieldLoader = new _RecordLoader(CommandInputRecordField.fromDoc, undefined, undefined);
+export const CommandInputRecordSchemaLoader = new _RecordLoader(CommandInputRecordSchema.fromDoc, undefined, undefined);
+export const CommandInputEnumSchemaLoader = new _RecordLoader(CommandInputEnumSchema.fromDoc, undefined, undefined);
+export const CommandInputArraySchemaLoader = new _RecordLoader(CommandInputArraySchema.fromDoc, undefined, undefined);
+export const CommandOutputRecordFieldLoader = new _RecordLoader(CommandOutputRecordField.fromDoc, undefined, undefined);
+export const CommandOutputRecordSchemaLoader = new _RecordLoader(CommandOutputRecordSchema.fromDoc, undefined, undefined);
+export const CommandOutputEnumSchemaLoader = new _RecordLoader(CommandOutputEnumSchema.fromDoc, undefined, undefined);
+export const CommandOutputArraySchemaLoader = new _RecordLoader(CommandOutputArraySchema.fromDoc, undefined, undefined);
+export const CommandInputParameterLoader = new _RecordLoader(CommandInputParameter.fromDoc, undefined, undefined);
+export const CommandOutputParameterLoader = new _RecordLoader(CommandOutputParameter.fromDoc, undefined, undefined);
 export const stdinLoader = new _EnumLoader((Object.keys(stdin) as Array<keyof typeof stdin>).map(key => stdin[key]));
 export const stdoutLoader = new _EnumLoader((Object.keys(stdout) as Array<keyof typeof stdout>).map(key => stdout[key]));
 export const stderrLoader = new _EnumLoader((Object.keys(stderr) as Array<keyof typeof stderr>).map(key => stderr[key]));
-export const CommandLineToolLoader = new _RecordLoader(CommandLineTool.fromDoc);
-export const DockerRequirementLoader = new _RecordLoader(DockerRequirement.fromDoc);
-export const SoftwareRequirementLoader = new _RecordLoader(SoftwareRequirement.fromDoc);
-export const SoftwarePackageLoader = new _RecordLoader(SoftwarePackage.fromDoc);
-export const DirentLoader = new _RecordLoader(Dirent.fromDoc);
-export const InitialWorkDirRequirementLoader = new _RecordLoader(InitialWorkDirRequirement.fromDoc);
-export const EnvVarRequirementLoader = new _RecordLoader(EnvVarRequirement.fromDoc);
-export const ShellCommandRequirementLoader = new _RecordLoader(ShellCommandRequirement.fromDoc);
-export const ResourceRequirementLoader = new _RecordLoader(ResourceRequirement.fromDoc);
-export const WorkReuseLoader = new _RecordLoader(WorkReuse.fromDoc);
-export const NetworkAccessLoader = new _RecordLoader(NetworkAccess.fromDoc);
-export const InplaceUpdateRequirementLoader = new _RecordLoader(InplaceUpdateRequirement.fromDoc);
-export const ToolTimeLimitLoader = new _RecordLoader(ToolTimeLimit.fromDoc);
-export const ExpressionToolOutputParameterLoader = new _RecordLoader(ExpressionToolOutputParameter.fromDoc);
-export const WorkflowInputParameterLoader = new _RecordLoader(WorkflowInputParameter.fromDoc);
-export const ExpressionToolLoader = new _RecordLoader(ExpressionTool.fromDoc);
+export const CommandLineToolLoader = new _RecordLoader(CommandLineTool.fromDoc, undefined, undefined);
+export const SoftwarePackageLoader = new _RecordLoader(SoftwarePackage.fromDoc, undefined, undefined);
+export const DirentLoader = new _RecordLoader(Dirent.fromDoc, undefined, undefined);
+export const ExpressionToolOutputParameterLoader = new _RecordLoader(ExpressionToolOutputParameter.fromDoc, undefined, undefined);
+export const WorkflowInputParameterLoader = new _RecordLoader(WorkflowInputParameter.fromDoc, undefined, undefined);
+export const ExpressionToolLoader = new _RecordLoader(ExpressionTool.fromDoc, undefined, undefined);
 export const LinkMergeMethodLoader = new _EnumLoader((Object.keys(LinkMergeMethod) as Array<keyof typeof LinkMergeMethod>).map(key => LinkMergeMethod[key]));
 export const PickValueMethodLoader = new _EnumLoader((Object.keys(PickValueMethod) as Array<keyof typeof PickValueMethod>).map(key => PickValueMethod[key]));
-export const WorkflowOutputParameterLoader = new _RecordLoader(WorkflowOutputParameter.fromDoc);
-export const WorkflowStepInputLoader = new _RecordLoader(WorkflowStepInput.fromDoc);
-export const WorkflowStepOutputLoader = new _RecordLoader(WorkflowStepOutput.fromDoc);
+export const WorkflowOutputParameterLoader = new _RecordLoader(WorkflowOutputParameter.fromDoc, undefined, undefined);
+export const WorkflowStepInputLoader = new _RecordLoader(WorkflowStepInput.fromDoc, undefined, undefined);
+export const WorkflowStepOutputLoader = new _RecordLoader(WorkflowStepOutput.fromDoc, undefined, undefined);
 export const ScatterMethodLoader = new _EnumLoader((Object.keys(ScatterMethod) as Array<keyof typeof ScatterMethod>).map(key => ScatterMethod[key]));
-export const WorkflowStepLoader = new _RecordLoader(WorkflowStep.fromDoc);
-export const WorkflowLoader = new _RecordLoader(Workflow.fromDoc);
-export const SubworkflowFeatureRequirementLoader = new _RecordLoader(SubworkflowFeatureRequirement.fromDoc);
-export const ScatterFeatureRequirementLoader = new _RecordLoader(ScatterFeatureRequirement.fromDoc);
-export const MultipleInputFeatureRequirementLoader = new _RecordLoader(MultipleInputFeatureRequirement.fromDoc);
-export const StepInputExpressionRequirementLoader = new _RecordLoader(StepInputExpressionRequirement.fromDoc);
-export const OperationInputParameterLoader = new _RecordLoader(OperationInputParameter.fromDoc);
-export const OperationOutputParameterLoader = new _RecordLoader(OperationOutputParameter.fromDoc);
-export const OperationLoader = new _RecordLoader(Operation.fromDoc);
+export const WorkflowStepLoader = new _RecordLoader(WorkflowStep.fromDoc, undefined, undefined);
+export const WorkflowLoader = new _RecordLoader(Workflow.fromDoc, undefined, undefined);
+export const OperationInputParameterLoader = new _RecordLoader(OperationInputParameter.fromDoc, undefined, undefined);
+export const OperationOutputParameterLoader = new _RecordLoader(OperationOutputParameter.fromDoc, undefined, undefined);
+export const OperationLoader = new _RecordLoader(Operation.fromDoc, undefined, undefined);
 export const arrayOfstrtype = new _ArrayLoader([strtype]);
 export const unionOfundefinedtypeOrstrtypeOrarrayOfstrtype = new _UnionLoader([undefinedtype, strtype, arrayOfstrtype]);
-export const uristrtypeTrueFalseNone = new _URILoader(strtype, true, false, undefined);
-export const unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype = new _UnionLoader([PrimitiveTypeLoader, RecordSchemaLoader, EnumSchemaLoader, ArraySchemaLoader, strtype]);
-export const arrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype = new _ArrayLoader([unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype]);
-export const unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype = new _UnionLoader([PrimitiveTypeLoader, RecordSchemaLoader, EnumSchemaLoader, ArraySchemaLoader, strtype, arrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype]);
-export const typedslunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype2 = new _TypeDSLLoader(unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrstrtype, 2);
+export const uristrtypeTrueFalseNoneNone = new _URILoader(strtype, true, false, undefined, undefined);
+export const unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype = new _UnionLoader([PrimitiveTypeLoader, RecordSchemaLoader, EnumSchemaLoader, ArraySchemaLoader, MapSchemaLoader, UnionSchemaLoader, strtype]);
+export const arrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype = new _ArrayLoader([unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype]);
+export const unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype = new _UnionLoader([PrimitiveTypeLoader, RecordSchemaLoader, EnumSchemaLoader, ArraySchemaLoader, MapSchemaLoader, UnionSchemaLoader, strtype, arrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype]);
+export const typedslunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype2 = new _TypeDSLLoader(unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype, 2);
 export const arrayOfRecordFieldLoader = new _ArrayLoader([RecordFieldLoader]);
 export const unionOfundefinedtypeOrarrayOfRecordFieldLoader = new _UnionLoader([undefinedtype, arrayOfRecordFieldLoader]);
 export const idmapfieldsunionOfundefinedtypeOrarrayOfRecordFieldLoader = new _IdMapLoader(unionOfundefinedtypeOrarrayOfRecordFieldLoader, 'name', 'type');
-export const enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader = new _EnumLoader((Object.keys(enum_d9cba076fca539106791a4f46d198c7fcfbdb779) as Array<keyof typeof enum_d9cba076fca539106791a4f46d198c7fcfbdb779>).map(key => enum_d9cba076fca539106791a4f46d198c7fcfbdb779[key]));
-export const typedslenum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader2 = new _TypeDSLLoader(enum_d9cba076fca539106791a4f46d198c7fcfbdb779Loader, 2);
-export const uriarrayOfstrtypeTrueFalseNone = new _URILoader(arrayOfstrtype, true, false, undefined);
-export const enum_d961d79c225752b9fadb617367615ab176b47d77Loader = new _EnumLoader((Object.keys(enum_d961d79c225752b9fadb617367615ab176b47d77) as Array<keyof typeof enum_d961d79c225752b9fadb617367615ab176b47d77>).map(key => enum_d961d79c225752b9fadb617367615ab176b47d77[key]));
-export const typedslenum_d961d79c225752b9fadb617367615ab176b47d77Loader2 = new _TypeDSLLoader(enum_d961d79c225752b9fadb617367615ab176b47d77Loader, 2);
-export const enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader = new _EnumLoader((Object.keys(enum_d062602be0b4b8fd33e69e29a841317b6ab665bc) as Array<keyof typeof enum_d062602be0b4b8fd33e69e29a841317b6ab665bc>).map(key => enum_d062602be0b4b8fd33e69e29a841317b6ab665bc[key]));
-export const typedslenum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader2 = new _TypeDSLLoader(enum_d062602be0b4b8fd33e69e29a841317b6ab665bcLoader, 2);
-export const File_classLoader = new _EnumLoader((Object.keys(File_class) as Array<keyof typeof File_class>).map(key => File_class[key]));
-export const uriFile_classLoaderFalseTrueNone = new _URILoader(File_classLoader, false, true, undefined);
+export const Record_nameLoader = new _EnumLoader((Object.keys(Record_name) as Array<keyof typeof Record_name>).map(key => Record_name[key]));
+export const typedslRecord_nameLoader2 = new _TypeDSLLoader(Record_nameLoader, 2);
 export const unionOfundefinedtypeOrstrtype = new _UnionLoader([undefinedtype, strtype]);
-export const uriunionOfundefinedtypeOrstrtypeFalseFalseNone = new _URILoader(unionOfundefinedtypeOrstrtype, false, false, undefined);
+export const uriunionOfundefinedtypeOrstrtypeTrueFalseNoneNone = new _URILoader(unionOfundefinedtypeOrstrtype, true, false, undefined, undefined);
+export const uriarrayOfstrtypeTrueFalseNoneNone = new _URILoader(arrayOfstrtype, true, false, undefined, undefined);
+export const Enum_nameLoader = new _EnumLoader((Object.keys(Enum_name) as Array<keyof typeof Enum_name>).map(key => Enum_name[key]));
+export const typedslEnum_nameLoader2 = new _TypeDSLLoader(Enum_nameLoader, 2);
+export const uriunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeFalseTrue2None = new _URILoader(unionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrRecordSchemaLoaderOrEnumSchemaLoaderOrArraySchemaLoaderOrMapSchemaLoaderOrUnionSchemaLoaderOrstrtype, false, true, 2, undefined);
+export const Array_nameLoader = new _EnumLoader((Object.keys(Array_name) as Array<keyof typeof Array_name>).map(key => Array_name[key]));
+export const typedslArray_nameLoader2 = new _TypeDSLLoader(Array_nameLoader, 2);
+export const Map_nameLoader = new _EnumLoader((Object.keys(Map_name) as Array<keyof typeof Map_name>).map(key => Map_name[key]));
+export const typedslMap_nameLoader2 = new _TypeDSLLoader(Map_nameLoader, 2);
+export const Union_nameLoader = new _EnumLoader((Object.keys(Union_name) as Array<keyof typeof Union_name>).map(key => Union_name[key]));
+export const typedslUnion_nameLoader2 = new _TypeDSLLoader(Union_nameLoader, 2);
+export const unionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype = new _UnionLoader([PrimitiveTypeLoader, CWLRecordSchemaLoader, EnumSchemaLoader, CWLArraySchemaLoader, strtype]);
+export const arrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype = new _ArrayLoader([unionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype]);
+export const unionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype = new _UnionLoader([PrimitiveTypeLoader, CWLRecordSchemaLoader, EnumSchemaLoader, CWLArraySchemaLoader, strtype, arrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype]);
+export const uriunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeFalseTrue2None = new _URILoader(unionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype, false, true, 2, undefined);
+export const typedslunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype2 = new _TypeDSLLoader(unionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtypeOrarrayOfunionOfPrimitiveTypeLoaderOrCWLRecordSchemaLoaderOrEnumSchemaLoaderOrCWLArraySchemaLoaderOrstrtype, 2);
+export const arrayOfCWLRecordFieldLoader = new _ArrayLoader([CWLRecordFieldLoader]);
+export const unionOfundefinedtypeOrarrayOfCWLRecordFieldLoader = new _UnionLoader([undefinedtype, arrayOfCWLRecordFieldLoader]);
+export const idmapfieldsunionOfundefinedtypeOrarrayOfCWLRecordFieldLoader = new _IdMapLoader(unionOfundefinedtypeOrarrayOfCWLRecordFieldLoader, 'name', 'type');
+export const File_classLoader = new _EnumLoader((Object.keys(File_class) as Array<keyof typeof File_class>).map(key => File_class[key]));
+export const uriFile_classLoaderFalseTrueNoneNone = new _URILoader(File_classLoader, false, true, undefined, undefined);
+export const uriunionOfundefinedtypeOrstrtypeFalseFalseNoneNone = new _URILoader(unionOfundefinedtypeOrstrtype, false, false, undefined, undefined);
 export const unionOfundefinedtypeOrinttype = new _UnionLoader([undefinedtype, inttype]);
 export const unionOfFileLoaderOrDirectoryLoader = new _UnionLoader([FileLoader, DirectoryLoader]);
 export const arrayOfunionOfFileLoaderOrDirectoryLoader = new _ArrayLoader([unionOfFileLoaderOrDirectoryLoader]);
 export const unionOfundefinedtypeOrarrayOfunionOfFileLoaderOrDirectoryLoader = new _UnionLoader([undefinedtype, arrayOfunionOfFileLoaderOrDirectoryLoader]);
 export const secondaryfilesdslunionOfundefinedtypeOrarrayOfunionOfFileLoaderOrDirectoryLoader = new _SecondaryDSLLoader(unionOfundefinedtypeOrarrayOfunionOfFileLoaderOrDirectoryLoader);
-export const uriunionOfundefinedtypeOrstrtypeTrueFalseNone = new _URILoader(unionOfundefinedtypeOrstrtype, true, false, undefined);
+export const uriunionOfundefinedtypeOrstrtypeTrueFalseNoneTrue = new _URILoader(unionOfundefinedtypeOrstrtype, true, false, undefined, true);
 export const Directory_classLoader = new _EnumLoader((Object.keys(Directory_class) as Array<keyof typeof Directory_class>).map(key => Directory_class[key]));
-export const uriDirectory_classLoaderFalseTrueNone = new _URILoader(Directory_classLoader, false, true, undefined);
+export const uriDirectory_classLoaderFalseTrueNoneNone = new _URILoader(Directory_classLoader, false, true, undefined, undefined);
 export const unionOfundefinedtypeOrbooltype = new _UnionLoader([undefinedtype, booltype]);
 export const unionOfundefinedtypeOrLoadListingEnumLoader = new _UnionLoader([undefinedtype, LoadListingEnumLoader]);
 export const arrayOfSecondaryFileSchemaLoader = new _ArrayLoader([SecondaryFileSchemaLoader]);
 export const unionOfundefinedtypeOrSecondaryFileSchemaLoaderOrarrayOfSecondaryFileSchemaLoader = new _UnionLoader([undefinedtype, SecondaryFileSchemaLoader, arrayOfSecondaryFileSchemaLoader]);
 export const secondaryfilesdslunionOfundefinedtypeOrSecondaryFileSchemaLoaderOrarrayOfSecondaryFileSchemaLoader = new _SecondaryDSLLoader(unionOfundefinedtypeOrSecondaryFileSchemaLoaderOrarrayOfSecondaryFileSchemaLoader);
 export const unionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoader = new _UnionLoader([undefinedtype, strtype, arrayOfstrtype, ExpressionLoader]);
-export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNone = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoader, true, false, undefined);
+export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoaderTrueFalseNoneTrue = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtypeOrExpressionLoader, true, false, undefined, true);
 export const unionOfundefinedtypeOrstrtypeOrExpressionLoader = new _UnionLoader([undefinedtype, strtype, ExpressionLoader]);
-export const uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNone = new _URILoader(unionOfundefinedtypeOrstrtypeOrExpressionLoader, true, false, undefined);
+export const uriunionOfundefinedtypeOrstrtypeOrExpressionLoaderTrueFalseNoneTrue = new _URILoader(unionOfundefinedtypeOrstrtypeOrExpressionLoader, true, false, undefined, true);
 export const unionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, InputRecordSchemaLoader, InputEnumSchemaLoader, InputArraySchemaLoader, strtype]);
 export const arrayOfunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtype = new _ArrayLoader([unionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtype]);
 export const unionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, InputRecordSchemaLoader, InputEnumSchemaLoader, InputArraySchemaLoader, strtype, arrayOfunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtype]);
@@ -314,6 +354,7 @@ export const typedslunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSche
 export const arrayOfInputRecordFieldLoader = new _ArrayLoader([InputRecordFieldLoader]);
 export const unionOfundefinedtypeOrarrayOfInputRecordFieldLoader = new _UnionLoader([undefinedtype, arrayOfInputRecordFieldLoader]);
 export const idmapfieldsunionOfundefinedtypeOrarrayOfInputRecordFieldLoader = new _IdMapLoader(unionOfundefinedtypeOrarrayOfInputRecordFieldLoader, 'name', 'type');
+export const uriunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtypeFalseTrue2None = new _URILoader(unionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrInputRecordSchemaLoaderOrInputEnumSchemaLoaderOrInputArraySchemaLoaderOrstrtype, false, true, 2, undefined);
 export const unionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, OutputRecordSchemaLoader, OutputEnumSchemaLoader, OutputArraySchemaLoader, strtype]);
 export const arrayOfunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtype = new _ArrayLoader([unionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtype]);
 export const unionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, OutputRecordSchemaLoader, OutputEnumSchemaLoader, OutputArraySchemaLoader, strtype, arrayOfunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtype]);
@@ -321,15 +362,13 @@ export const typedslunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSc
 export const arrayOfOutputRecordFieldLoader = new _ArrayLoader([OutputRecordFieldLoader]);
 export const unionOfundefinedtypeOrarrayOfOutputRecordFieldLoader = new _UnionLoader([undefinedtype, arrayOfOutputRecordFieldLoader]);
 export const idmapfieldsunionOfundefinedtypeOrarrayOfOutputRecordFieldLoader = new _IdMapLoader(unionOfundefinedtypeOrarrayOfOutputRecordFieldLoader, 'name', 'type');
-export const unionOfundefinedtypeOrFileLoaderOrDirectoryLoaderOranyType = new _UnionLoader([undefinedtype, FileLoader, DirectoryLoader, anyType]);
+export const uriunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtypeFalseTrue2None = new _URILoader(unionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrOutputRecordSchemaLoaderOrOutputEnumSchemaLoaderOrOutputArraySchemaLoaderOrstrtype, false, true, 2, undefined);
 export const unionOfCommandInputParameterLoaderOrWorkflowInputParameterLoaderOrOperationInputParameterLoader = new _UnionLoader([CommandInputParameterLoader, WorkflowInputParameterLoader, OperationInputParameterLoader]);
 export const arrayOfunionOfCommandInputParameterLoaderOrWorkflowInputParameterLoaderOrOperationInputParameterLoader = new _ArrayLoader([unionOfCommandInputParameterLoaderOrWorkflowInputParameterLoaderOrOperationInputParameterLoader]);
 export const idmapinputsarrayOfunionOfCommandInputParameterLoaderOrWorkflowInputParameterLoaderOrOperationInputParameterLoader = new _IdMapLoader(arrayOfunionOfCommandInputParameterLoaderOrWorkflowInputParameterLoaderOrOperationInputParameterLoader, 'id', 'type');
 export const unionOfCommandOutputParameterLoaderOrExpressionToolOutputParameterLoaderOrWorkflowOutputParameterLoaderOrOperationOutputParameterLoader = new _UnionLoader([CommandOutputParameterLoader, ExpressionToolOutputParameterLoader, WorkflowOutputParameterLoader, OperationOutputParameterLoader]);
 export const arrayOfunionOfCommandOutputParameterLoaderOrExpressionToolOutputParameterLoaderOrWorkflowOutputParameterLoaderOrOperationOutputParameterLoader = new _ArrayLoader([unionOfCommandOutputParameterLoaderOrExpressionToolOutputParameterLoaderOrWorkflowOutputParameterLoaderOrOperationOutputParameterLoader]);
 export const idmapoutputsarrayOfunionOfCommandOutputParameterLoaderOrExpressionToolOutputParameterLoaderOrWorkflowOutputParameterLoaderOrOperationOutputParameterLoader = new _IdMapLoader(arrayOfunionOfCommandOutputParameterLoaderOrExpressionToolOutputParameterLoaderOrWorkflowOutputParameterLoaderOrOperationOutputParameterLoader, 'id', 'type');
-export const unionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader = new _UnionLoader([InlineJavascriptRequirementLoader, SchemaDefRequirementLoader, LoadListingRequirementLoader, DockerRequirementLoader, SoftwareRequirementLoader, InitialWorkDirRequirementLoader, EnvVarRequirementLoader, ShellCommandRequirementLoader, ResourceRequirementLoader, WorkReuseLoader, NetworkAccessLoader, InplaceUpdateRequirementLoader, ToolTimeLimitLoader, SubworkflowFeatureRequirementLoader, ScatterFeatureRequirementLoader, MultipleInputFeatureRequirementLoader, StepInputExpressionRequirementLoader]);
-export const arrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader = new _ArrayLoader([unionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader]);
 export const unionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader = new _UnionLoader([undefinedtype, arrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader]);
 export const idmaprequirementsunionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader = new _IdMapLoader(unionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoader, 'class', 'None');
 export const unionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOranyType = new _UnionLoader([InlineJavascriptRequirementLoader, SchemaDefRequirementLoader, LoadListingRequirementLoader, DockerRequirementLoader, SoftwareRequirementLoader, InitialWorkDirRequirementLoader, EnvVarRequirementLoader, ShellCommandRequirementLoader, ResourceRequirementLoader, WorkReuseLoader, NetworkAccessLoader, InplaceUpdateRequirementLoader, ToolTimeLimitLoader, SubworkflowFeatureRequirementLoader, ScatterFeatureRequirementLoader, MultipleInputFeatureRequirementLoader, StepInputExpressionRequirementLoader, anyType]);
@@ -337,19 +376,19 @@ export const arrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequireme
 export const unionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOranyType = new _UnionLoader([undefinedtype, arrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOranyType]);
 export const idmaphintsunionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOranyType = new _IdMapLoader(unionOfundefinedtypeOrarrayOfunionOfInlineJavascriptRequirementLoaderOrSchemaDefRequirementLoaderOrLoadListingRequirementLoaderOrDockerRequirementLoaderOrSoftwareRequirementLoaderOrInitialWorkDirRequirementLoaderOrEnvVarRequirementLoaderOrShellCommandRequirementLoaderOrResourceRequirementLoaderOrWorkReuseLoaderOrNetworkAccessLoaderOrInplaceUpdateRequirementLoaderOrToolTimeLimitLoaderOrSubworkflowFeatureRequirementLoaderOrScatterFeatureRequirementLoaderOrMultipleInputFeatureRequirementLoaderOrStepInputExpressionRequirementLoaderOranyType, 'class', 'None');
 export const unionOfundefinedtypeOrCWLVersionLoader = new _UnionLoader([undefinedtype, CWLVersionLoader]);
-export const uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNone = new _URILoader(unionOfundefinedtypeOrCWLVersionLoader, false, true, undefined);
+export const uriunionOfundefinedtypeOrCWLVersionLoaderFalseTrueNoneNone = new _URILoader(unionOfundefinedtypeOrCWLVersionLoader, false, true, undefined, undefined);
 export const unionOfundefinedtypeOrarrayOfstrtype = new _UnionLoader([undefinedtype, arrayOfstrtype]);
-export const uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNone = new _URILoader(unionOfundefinedtypeOrarrayOfstrtype, true, false, undefined);
+export const uriunionOfundefinedtypeOrarrayOfstrtypeTrueFalseNoneNone = new _URILoader(unionOfundefinedtypeOrarrayOfstrtype, true, false, undefined, undefined);
 export const InlineJavascriptRequirement_classLoader = new _EnumLoader((Object.keys(InlineJavascriptRequirement_class) as Array<keyof typeof InlineJavascriptRequirement_class>).map(key => InlineJavascriptRequirement_class[key]));
-export const uriInlineJavascriptRequirement_classLoaderFalseTrueNone = new _URILoader(InlineJavascriptRequirement_classLoader, false, true, undefined);
+export const uriInlineJavascriptRequirement_classLoaderFalseTrueNoneNone = new _URILoader(InlineJavascriptRequirement_classLoader, false, true, undefined, undefined);
 export const SchemaDefRequirement_classLoader = new _EnumLoader((Object.keys(SchemaDefRequirement_class) as Array<keyof typeof SchemaDefRequirement_class>).map(key => SchemaDefRequirement_class[key]));
-export const uriSchemaDefRequirement_classLoaderFalseTrueNone = new _URILoader(SchemaDefRequirement_classLoader, false, true, undefined);
+export const uriSchemaDefRequirement_classLoaderFalseTrueNoneNone = new _URILoader(SchemaDefRequirement_classLoader, false, true, undefined, undefined);
 export const unionOfCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoader = new _UnionLoader([CommandInputRecordSchemaLoader, CommandInputEnumSchemaLoader, CommandInputArraySchemaLoader]);
 export const arrayOfunionOfCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoader = new _ArrayLoader([unionOfCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoader]);
 export const unionOfstrtypeOrExpressionLoader = new _UnionLoader([strtype, ExpressionLoader]);
 export const unionOfundefinedtypeOrbooltypeOrExpressionLoader = new _UnionLoader([undefinedtype, booltype, ExpressionLoader]);
 export const LoadListingRequirement_classLoader = new _EnumLoader((Object.keys(LoadListingRequirement_class) as Array<keyof typeof LoadListingRequirement_class>).map(key => LoadListingRequirement_class[key]));
-export const uriLoadListingRequirement_classLoaderFalseTrueNone = new _URILoader(LoadListingRequirement_classLoader, false, true, undefined);
+export const uriLoadListingRequirement_classLoaderFalseTrueNoneNone = new _URILoader(LoadListingRequirement_classLoader, false, true, undefined, undefined);
 export const unionOfundefinedtypeOrinttypeOrExpressionLoader = new _UnionLoader([undefinedtype, inttype, ExpressionLoader]);
 export const unionOfundefinedtypeOrstrtypeOrExpressionLoaderOrarrayOfstrtype = new _UnionLoader([undefinedtype, strtype, ExpressionLoader, arrayOfstrtype]);
 export const unionOfundefinedtypeOrExpressionLoader = new _UnionLoader([undefinedtype, ExpressionLoader]);
@@ -361,6 +400,7 @@ export const typedslunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrComman
 export const arrayOfCommandInputRecordFieldLoader = new _ArrayLoader([CommandInputRecordFieldLoader]);
 export const unionOfundefinedtypeOrarrayOfCommandInputRecordFieldLoader = new _UnionLoader([undefinedtype, arrayOfCommandInputRecordFieldLoader]);
 export const idmapfieldsunionOfundefinedtypeOrarrayOfCommandInputRecordFieldLoader = new _IdMapLoader(unionOfundefinedtypeOrarrayOfCommandInputRecordFieldLoader, 'name', 'type');
+export const uriunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeFalseTrue2None = new _URILoader(unionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtype, false, true, 2, undefined);
 export const unionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, CommandOutputRecordSchemaLoader, CommandOutputEnumSchemaLoader, CommandOutputArraySchemaLoader, strtype]);
 export const arrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype = new _ArrayLoader([unionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype]);
 export const unionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, CommandOutputRecordSchemaLoader, CommandOutputEnumSchemaLoader, CommandOutputArraySchemaLoader, strtype, arrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype]);
@@ -369,12 +409,13 @@ export const unionOfundefinedtypeOrCommandOutputBindingLoader = new _UnionLoader
 export const arrayOfCommandOutputRecordFieldLoader = new _ArrayLoader([CommandOutputRecordFieldLoader]);
 export const unionOfundefinedtypeOrarrayOfCommandOutputRecordFieldLoader = new _UnionLoader([undefinedtype, arrayOfCommandOutputRecordFieldLoader]);
 export const idmapfieldsunionOfundefinedtypeOrarrayOfCommandOutputRecordFieldLoader = new _IdMapLoader(unionOfundefinedtypeOrarrayOfCommandOutputRecordFieldLoader, 'name', 'type');
+export const uriunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeFalseTrue2None = new _URILoader(unionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype, false, true, 2, undefined);
 export const unionOfCWLTypeLoaderOrstdinLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, stdinLoader, CommandInputRecordSchemaLoader, CommandInputEnumSchemaLoader, CommandInputArraySchemaLoader, strtype, arrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtype]);
 export const typedslunionOfCWLTypeLoaderOrstdinLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtype2 = new _TypeDSLLoader(unionOfCWLTypeLoaderOrstdinLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandInputRecordSchemaLoaderOrCommandInputEnumSchemaLoaderOrCommandInputArraySchemaLoaderOrstrtype, 2);
 export const unionOfCWLTypeLoaderOrstdoutLoaderOrstderrLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype = new _UnionLoader([CWLTypeLoader, stdoutLoader, stderrLoader, CommandOutputRecordSchemaLoader, CommandOutputEnumSchemaLoader, CommandOutputArraySchemaLoader, strtype, arrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype]);
 export const typedslunionOfCWLTypeLoaderOrstdoutLoaderOrstderrLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype2 = new _TypeDSLLoader(unionOfCWLTypeLoaderOrstdoutLoaderOrstderrLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtypeOrarrayOfunionOfCWLTypeLoaderOrCommandOutputRecordSchemaLoaderOrCommandOutputEnumSchemaLoaderOrCommandOutputArraySchemaLoaderOrstrtype, 2);
 export const CommandLineTool_classLoader = new _EnumLoader((Object.keys(CommandLineTool_class) as Array<keyof typeof CommandLineTool_class>).map(key => CommandLineTool_class[key]));
-export const uriCommandLineTool_classLoaderFalseTrueNone = new _URILoader(CommandLineTool_classLoader, false, true, undefined);
+export const uriCommandLineTool_classLoaderFalseTrueNoneNone = new _URILoader(CommandLineTool_classLoader, false, true, undefined, undefined);
 export const arrayOfCommandInputParameterLoader = new _ArrayLoader([CommandInputParameterLoader]);
 export const idmapinputsarrayOfCommandInputParameterLoader = new _IdMapLoader(arrayOfCommandInputParameterLoader, 'id', 'type');
 export const arrayOfCommandOutputParameterLoader = new _ArrayLoader([CommandOutputParameterLoader]);
@@ -385,78 +426,78 @@ export const unionOfundefinedtypeOrarrayOfunionOfstrtypeOrExpressionLoaderOrComm
 export const arrayOfinttype = new _ArrayLoader([inttype]);
 export const unionOfundefinedtypeOrarrayOfinttype = new _UnionLoader([undefinedtype, arrayOfinttype]);
 export const DockerRequirement_classLoader = new _EnumLoader((Object.keys(DockerRequirement_class) as Array<keyof typeof DockerRequirement_class>).map(key => DockerRequirement_class[key]));
-export const uriDockerRequirement_classLoaderFalseTrueNone = new _URILoader(DockerRequirement_classLoader, false, true, undefined);
+export const uriDockerRequirement_classLoaderFalseTrueNoneNone = new _URILoader(DockerRequirement_classLoader, false, true, undefined, undefined);
 export const SoftwareRequirement_classLoader = new _EnumLoader((Object.keys(SoftwareRequirement_class) as Array<keyof typeof SoftwareRequirement_class>).map(key => SoftwareRequirement_class[key]));
-export const uriSoftwareRequirement_classLoaderFalseTrueNone = new _URILoader(SoftwareRequirement_classLoader, false, true, undefined);
+export const uriSoftwareRequirement_classLoaderFalseTrueNoneNone = new _URILoader(SoftwareRequirement_classLoader, false, true, undefined, undefined);
 export const arrayOfSoftwarePackageLoader = new _ArrayLoader([SoftwarePackageLoader]);
 export const idmappackagesarrayOfSoftwarePackageLoader = new _IdMapLoader(arrayOfSoftwarePackageLoader, 'package', 'specs');
-export const uriunionOfundefinedtypeOrarrayOfstrtypeFalseFalseNone = new _URILoader(unionOfundefinedtypeOrarrayOfstrtype, false, false, undefined);
+export const uriunionOfundefinedtypeOrarrayOfstrtypeFalseFalseNoneTrue = new _URILoader(unionOfundefinedtypeOrarrayOfstrtype, false, false, undefined, true);
 export const InitialWorkDirRequirement_classLoader = new _EnumLoader((Object.keys(InitialWorkDirRequirement_class) as Array<keyof typeof InitialWorkDirRequirement_class>).map(key => InitialWorkDirRequirement_class[key]));
-export const uriInitialWorkDirRequirement_classLoaderFalseTrueNone = new _URILoader(InitialWorkDirRequirement_classLoader, false, true, undefined);
+export const uriInitialWorkDirRequirement_classLoaderFalseTrueNoneNone = new _URILoader(InitialWorkDirRequirement_classLoader, false, true, undefined, undefined);
 export const unionOfundefinedtypeOrDirentLoaderOrExpressionLoaderOrFileLoaderOrDirectoryLoaderOrarrayOfunionOfFileLoaderOrDirectoryLoader = new _UnionLoader([undefinedtype, DirentLoader, ExpressionLoader, FileLoader, DirectoryLoader, arrayOfunionOfFileLoaderOrDirectoryLoader]);
 export const arrayOfunionOfundefinedtypeOrDirentLoaderOrExpressionLoaderOrFileLoaderOrDirectoryLoaderOrarrayOfunionOfFileLoaderOrDirectoryLoader = new _ArrayLoader([unionOfundefinedtypeOrDirentLoaderOrExpressionLoaderOrFileLoaderOrDirectoryLoaderOrarrayOfunionOfFileLoaderOrDirectoryLoader]);
 export const unionOfExpressionLoaderOrarrayOfunionOfundefinedtypeOrDirentLoaderOrExpressionLoaderOrFileLoaderOrDirectoryLoaderOrarrayOfunionOfFileLoaderOrDirectoryLoader = new _UnionLoader([ExpressionLoader, arrayOfunionOfundefinedtypeOrDirentLoaderOrExpressionLoaderOrFileLoaderOrDirectoryLoaderOrarrayOfunionOfFileLoaderOrDirectoryLoader]);
 export const EnvVarRequirement_classLoader = new _EnumLoader((Object.keys(EnvVarRequirement_class) as Array<keyof typeof EnvVarRequirement_class>).map(key => EnvVarRequirement_class[key]));
-export const uriEnvVarRequirement_classLoaderFalseTrueNone = new _URILoader(EnvVarRequirement_classLoader, false, true, undefined);
+export const uriEnvVarRequirement_classLoaderFalseTrueNoneNone = new _URILoader(EnvVarRequirement_classLoader, false, true, undefined, undefined);
 export const arrayOfEnvironmentDefLoader = new _ArrayLoader([EnvironmentDefLoader]);
 export const idmapenvDefarrayOfEnvironmentDefLoader = new _IdMapLoader(arrayOfEnvironmentDefLoader, 'envName', 'envValue');
 export const ShellCommandRequirement_classLoader = new _EnumLoader((Object.keys(ShellCommandRequirement_class) as Array<keyof typeof ShellCommandRequirement_class>).map(key => ShellCommandRequirement_class[key]));
-export const uriShellCommandRequirement_classLoaderFalseTrueNone = new _URILoader(ShellCommandRequirement_classLoader, false, true, undefined);
+export const uriShellCommandRequirement_classLoaderFalseTrueNoneNone = new _URILoader(ShellCommandRequirement_classLoader, false, true, undefined, undefined);
 export const ResourceRequirement_classLoader = new _EnumLoader((Object.keys(ResourceRequirement_class) as Array<keyof typeof ResourceRequirement_class>).map(key => ResourceRequirement_class[key]));
-export const uriResourceRequirement_classLoaderFalseTrueNone = new _URILoader(ResourceRequirement_classLoader, false, true, undefined);
+export const uriResourceRequirement_classLoaderFalseTrueNoneNone = new _URILoader(ResourceRequirement_classLoader, false, true, undefined, undefined);
 export const unionOfundefinedtypeOrinttypeOrfloattypeOrExpressionLoader = new _UnionLoader([undefinedtype, inttype, floattype, ExpressionLoader]);
 export const WorkReuse_classLoader = new _EnumLoader((Object.keys(WorkReuse_class) as Array<keyof typeof WorkReuse_class>).map(key => WorkReuse_class[key]));
-export const uriWorkReuse_classLoaderFalseTrueNone = new _URILoader(WorkReuse_classLoader, false, true, undefined);
+export const uriWorkReuse_classLoaderFalseTrueNoneNone = new _URILoader(WorkReuse_classLoader, false, true, undefined, undefined);
 export const unionOfbooltypeOrExpressionLoader = new _UnionLoader([booltype, ExpressionLoader]);
 export const NetworkAccess_classLoader = new _EnumLoader((Object.keys(NetworkAccess_class) as Array<keyof typeof NetworkAccess_class>).map(key => NetworkAccess_class[key]));
-export const uriNetworkAccess_classLoaderFalseTrueNone = new _URILoader(NetworkAccess_classLoader, false, true, undefined);
+export const uriNetworkAccess_classLoaderFalseTrueNoneNone = new _URILoader(NetworkAccess_classLoader, false, true, undefined, undefined);
 export const InplaceUpdateRequirement_classLoader = new _EnumLoader((Object.keys(InplaceUpdateRequirement_class) as Array<keyof typeof InplaceUpdateRequirement_class>).map(key => InplaceUpdateRequirement_class[key]));
-export const uriInplaceUpdateRequirement_classLoaderFalseTrueNone = new _URILoader(InplaceUpdateRequirement_classLoader, false, true, undefined);
+export const uriInplaceUpdateRequirement_classLoaderFalseTrueNoneNone = new _URILoader(InplaceUpdateRequirement_classLoader, false, true, undefined, undefined);
 export const ToolTimeLimit_classLoader = new _EnumLoader((Object.keys(ToolTimeLimit_class) as Array<keyof typeof ToolTimeLimit_class>).map(key => ToolTimeLimit_class[key]));
-export const uriToolTimeLimit_classLoaderFalseTrueNone = new _URILoader(ToolTimeLimit_classLoader, false, true, undefined);
+export const uriToolTimeLimit_classLoaderFalseTrueNoneNone = new _URILoader(ToolTimeLimit_classLoader, false, true, undefined, undefined);
 export const unionOfinttypeOrExpressionLoader = new _UnionLoader([inttype, ExpressionLoader]);
 export const unionOfundefinedtypeOrInputBindingLoader = new _UnionLoader([undefinedtype, InputBindingLoader]);
 export const ExpressionTool_classLoader = new _EnumLoader((Object.keys(ExpressionTool_class) as Array<keyof typeof ExpressionTool_class>).map(key => ExpressionTool_class[key]));
-export const uriExpressionTool_classLoaderFalseTrueNone = new _URILoader(ExpressionTool_classLoader, false, true, undefined);
+export const uriExpressionTool_classLoaderFalseTrueNoneNone = new _URILoader(ExpressionTool_classLoader, false, true, undefined, undefined);
 export const arrayOfWorkflowInputParameterLoader = new _ArrayLoader([WorkflowInputParameterLoader]);
 export const idmapinputsarrayOfWorkflowInputParameterLoader = new _IdMapLoader(arrayOfWorkflowInputParameterLoader, 'id', 'type');
 export const arrayOfExpressionToolOutputParameterLoader = new _ArrayLoader([ExpressionToolOutputParameterLoader]);
 export const idmapoutputsarrayOfExpressionToolOutputParameterLoader = new _IdMapLoader(arrayOfExpressionToolOutputParameterLoader, 'id', 'type');
-export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse1 = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtype, false, false, 1);
+export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse1None = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtype, false, false, 1, undefined);
 export const unionOfundefinedtypeOrLinkMergeMethodLoader = new _UnionLoader([undefinedtype, LinkMergeMethodLoader]);
 export const unionOfundefinedtypeOrPickValueMethodLoader = new _UnionLoader([undefinedtype, PickValueMethodLoader]);
-export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse2 = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtype, false, false, 2);
+export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse2None = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtype, false, false, 2, undefined);
 export const arrayOfWorkflowStepInputLoader = new _ArrayLoader([WorkflowStepInputLoader]);
 export const idmapin_arrayOfWorkflowStepInputLoader = new _IdMapLoader(arrayOfWorkflowStepInputLoader, 'id', 'source');
 export const unionOfstrtypeOrWorkflowStepOutputLoader = new _UnionLoader([strtype, WorkflowStepOutputLoader]);
 export const arrayOfunionOfstrtypeOrWorkflowStepOutputLoader = new _ArrayLoader([unionOfstrtypeOrWorkflowStepOutputLoader]);
 export const unionOfarrayOfunionOfstrtypeOrWorkflowStepOutputLoader = new _UnionLoader([arrayOfunionOfstrtypeOrWorkflowStepOutputLoader]);
-export const uriunionOfarrayOfunionOfstrtypeOrWorkflowStepOutputLoaderTrueFalseNone = new _URILoader(unionOfarrayOfunionOfstrtypeOrWorkflowStepOutputLoader, true, false, undefined);
+export const uriunionOfarrayOfunionOfstrtypeOrWorkflowStepOutputLoaderTrueFalseNoneNone = new _URILoader(unionOfarrayOfunionOfstrtypeOrWorkflowStepOutputLoader, true, false, undefined, undefined);
 export const arrayOfanyType = new _ArrayLoader([anyType]);
 export const unionOfundefinedtypeOrarrayOfanyType = new _UnionLoader([undefinedtype, arrayOfanyType]);
 export const idmaphintsunionOfundefinedtypeOrarrayOfanyType = new _IdMapLoader(unionOfundefinedtypeOrarrayOfanyType, 'class', 'None');
 export const unionOfstrtypeOrCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader = new _UnionLoader([strtype, CommandLineToolLoader, ExpressionToolLoader, WorkflowLoader, OperationLoader]);
-export const uriunionOfstrtypeOrCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoaderFalseFalseNone = new _URILoader(unionOfstrtypeOrCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader, false, false, undefined);
-export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse0 = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtype, false, false, 0);
+export const uriunionOfstrtypeOrCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoaderFalseFalseNoneNone = new _URILoader(unionOfstrtypeOrCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader, false, false, undefined, undefined);
+export const uriunionOfundefinedtypeOrstrtypeOrarrayOfstrtypeFalseFalse0None = new _URILoader(unionOfundefinedtypeOrstrtypeOrarrayOfstrtype, false, false, 0, undefined);
 export const unionOfundefinedtypeOrScatterMethodLoader = new _UnionLoader([undefinedtype, ScatterMethodLoader]);
-export const uriunionOfundefinedtypeOrScatterMethodLoaderFalseTrueNone = new _URILoader(unionOfundefinedtypeOrScatterMethodLoader, false, true, undefined);
+export const uriunionOfundefinedtypeOrScatterMethodLoaderFalseTrueNoneNone = new _URILoader(unionOfundefinedtypeOrScatterMethodLoader, false, true, undefined, undefined);
 export const Workflow_classLoader = new _EnumLoader((Object.keys(Workflow_class) as Array<keyof typeof Workflow_class>).map(key => Workflow_class[key]));
-export const uriWorkflow_classLoaderFalseTrueNone = new _URILoader(Workflow_classLoader, false, true, undefined);
+export const uriWorkflow_classLoaderFalseTrueNoneNone = new _URILoader(Workflow_classLoader, false, true, undefined, undefined);
 export const arrayOfWorkflowOutputParameterLoader = new _ArrayLoader([WorkflowOutputParameterLoader]);
 export const idmapoutputsarrayOfWorkflowOutputParameterLoader = new _IdMapLoader(arrayOfWorkflowOutputParameterLoader, 'id', 'type');
 export const arrayOfWorkflowStepLoader = new _ArrayLoader([WorkflowStepLoader]);
 export const unionOfarrayOfWorkflowStepLoader = new _UnionLoader([arrayOfWorkflowStepLoader]);
 export const idmapstepsunionOfarrayOfWorkflowStepLoader = new _IdMapLoader(unionOfarrayOfWorkflowStepLoader, 'id', 'None');
 export const SubworkflowFeatureRequirement_classLoader = new _EnumLoader((Object.keys(SubworkflowFeatureRequirement_class) as Array<keyof typeof SubworkflowFeatureRequirement_class>).map(key => SubworkflowFeatureRequirement_class[key]));
-export const uriSubworkflowFeatureRequirement_classLoaderFalseTrueNone = new _URILoader(SubworkflowFeatureRequirement_classLoader, false, true, undefined);
+export const uriSubworkflowFeatureRequirement_classLoaderFalseTrueNoneNone = new _URILoader(SubworkflowFeatureRequirement_classLoader, false, true, undefined, undefined);
 export const ScatterFeatureRequirement_classLoader = new _EnumLoader((Object.keys(ScatterFeatureRequirement_class) as Array<keyof typeof ScatterFeatureRequirement_class>).map(key => ScatterFeatureRequirement_class[key]));
-export const uriScatterFeatureRequirement_classLoaderFalseTrueNone = new _URILoader(ScatterFeatureRequirement_classLoader, false, true, undefined);
+export const uriScatterFeatureRequirement_classLoaderFalseTrueNoneNone = new _URILoader(ScatterFeatureRequirement_classLoader, false, true, undefined, undefined);
 export const MultipleInputFeatureRequirement_classLoader = new _EnumLoader((Object.keys(MultipleInputFeatureRequirement_class) as Array<keyof typeof MultipleInputFeatureRequirement_class>).map(key => MultipleInputFeatureRequirement_class[key]));
-export const uriMultipleInputFeatureRequirement_classLoaderFalseTrueNone = new _URILoader(MultipleInputFeatureRequirement_classLoader, false, true, undefined);
+export const uriMultipleInputFeatureRequirement_classLoaderFalseTrueNoneNone = new _URILoader(MultipleInputFeatureRequirement_classLoader, false, true, undefined, undefined);
 export const StepInputExpressionRequirement_classLoader = new _EnumLoader((Object.keys(StepInputExpressionRequirement_class) as Array<keyof typeof StepInputExpressionRequirement_class>).map(key => StepInputExpressionRequirement_class[key]));
-export const uriStepInputExpressionRequirement_classLoaderFalseTrueNone = new _URILoader(StepInputExpressionRequirement_classLoader, false, true, undefined);
+export const uriStepInputExpressionRequirement_classLoaderFalseTrueNoneNone = new _URILoader(StepInputExpressionRequirement_classLoader, false, true, undefined, undefined);
 export const Operation_classLoader = new _EnumLoader((Object.keys(Operation_class) as Array<keyof typeof Operation_class>).map(key => Operation_class[key]));
-export const uriOperation_classLoaderFalseTrueNone = new _URILoader(Operation_classLoader, false, true, undefined);
+export const uriOperation_classLoaderFalseTrueNoneNone = new _URILoader(Operation_classLoader, false, true, undefined, undefined);
 export const arrayOfOperationInputParameterLoader = new _ArrayLoader([OperationInputParameterLoader]);
 export const idmapinputsarrayOfOperationInputParameterLoader = new _IdMapLoader(arrayOfOperationInputParameterLoader, 'id', 'type');
 export const arrayOfOperationOutputParameterLoader = new _ArrayLoader([OperationOutputParameterLoader]);
@@ -464,3 +505,5 @@ export const idmapoutputsarrayOfOperationOutputParameterLoader = new _IdMapLoade
 export const unionOfCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader = new _UnionLoader([CommandLineToolLoader, ExpressionToolLoader, WorkflowLoader, OperationLoader]);
 export const arrayOfunionOfCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader = new _ArrayLoader([unionOfCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader]);
 export const unionOfCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoaderOrarrayOfunionOfCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader = new _UnionLoader([CommandLineToolLoader, ExpressionToolLoader, WorkflowLoader, OperationLoader, arrayOfunionOfCommandLineToolLoaderOrExpressionToolLoaderOrWorkflowLoaderOrOperationLoader]);
+
+CWLObjectTypeLoader.addLoaders([booltype, inttype, inttype, floattype, floattype, strtype, FileLoader, DirectoryLoader, arrayOfunionOfundefinedtypeOrCWLObjectTypeLoader, mapOfunionOfundefinedtypeOrCWLObjectTypeLoader]);
diff --git a/src/util/LoadingOptions.ts b/src/util/LoadingOptions.ts
index ac484bc..ae1a5d9 100644
--- a/src/util/LoadingOptions.ts
+++ b/src/util/LoadingOptions.ts
@@ -5,23 +5,27 @@ export class LoadingOptions {
   idx: Dictionary<any>
   fileUri?: string
   namespaces?: Dictionary<string>
+  noLinkCheck?: boolean
+  container?: string
   schemas?: Dictionary<string>
   copyFrom?: LoadingOptions
   originalDoc: any
   vocab: Dictionary<string>
   rvocab: Dictionary<string>
 
-  constructor ({ fileUri, namespaces, schemas, originalDoc, copyFrom, fetcher }: {fileUri?: string, namespaces?: Dictionary<string>, schemas?: Dictionary<string>, originalDoc?: any, copyFrom?: LoadingOptions, fetcher?: Fetcher}) {
+  constructor ({ fileUri, namespaces, noLinkCheck, container, schemas, originalDoc, copyFrom, fetcher}: {fileUri?: string, namespaces?: Dictionary<string>, noLinkCheck?: boolean, container?: string, schemas?: Dictionary<string>, originalDoc?: any, copyFrom?: LoadingOptions, fetcher?: Fetcher}) {
     this.idx = {}
     this.fileUri = fileUri
     this.namespaces = namespaces
+    this.noLinkCheck = noLinkCheck
+    this.container = container
     this.schemas = schemas
     this.originalDoc = originalDoc
 
     if (copyFrom != null) {
       this.idx = copyFrom.idx
       if (fetcher === undefined) {
-        this.fetcher = copyFrom.fetcher
+        fetcher = copyFrom.fetcher
       }
       if (fileUri === undefined) {
         this.fileUri = copyFrom.fileUri
@@ -29,6 +33,12 @@ export class LoadingOptions {
       if (namespaces === undefined) {
         this.namespaces = copyFrom.namespaces
       }
+      if (noLinkCheck === undefined) {
+        this.noLinkCheck = copyFrom.noLinkCheck
+      }
+      if (container === undefined) {
+        this.container = copyFrom.container
+      }
       if (schemas === undefined) {
         this.schemas = copyFrom.schemas
       }
diff --git a/src/util/Vocabs.ts b/src/util/Vocabs.ts
index ea4244d..b8fd025 100644
--- a/src/util/Vocabs.ts
+++ b/src/util/Vocabs.ts
@@ -1,6 +1,11 @@
 export const VOCAB = {
   'Any': 'https://w3id.org/cwl/salad#Any',
   'ArraySchema': 'https://w3id.org/cwl/salad#ArraySchema',
+  'CWLArraySchema': 'https://w3id.org/cwl/cwl#CWLArraySchema',
+  'CWLInputFile': 'https://w3id.org/cwl/cwl#CWLInputFile',
+  'CWLObjectType': 'https://w3id.org/cwl/cwl#CWLObjectType',
+  'CWLRecordField': 'https://w3id.org/cwl/cwl#CWLRecordField',
+  'CWLRecordSchema': 'https://w3id.org/cwl/cwl#CWLRecordSchema',
   'CWLType': 'https://w3id.org/cwl/cwl#CWLType',
   'CWLVersion': 'https://w3id.org/cwl/cwl#CWLVersion',
   'CommandInputArraySchema': 'https://w3id.org/cwl/cwl#CommandInputArraySchema',
@@ -49,6 +54,7 @@ export const VOCAB = {
   'LoadContents': 'https://w3id.org/cwl/cwl#LoadContents',
   'LoadListingEnum': 'https://w3id.org/cwl/cwl#LoadListingEnum',
   'LoadListingRequirement': 'https://w3id.org/cwl/cwl#LoadListingRequirement',
+  'MapSchema': 'https://w3id.org/cwl/salad#MapSchema',
   'MultipleInputFeatureRequirement': 'https://w3id.org/cwl/cwl#MultipleInputFeatureRequirement',
   'NetworkAccess': 'https://w3id.org/cwl/cwl#NetworkAccess',
   'Operation': 'https://w3id.org/cwl/cwl#Operation',
@@ -80,6 +86,7 @@ export const VOCAB = {
   'StepInputExpressionRequirement': 'https://w3id.org/cwl/cwl#StepInputExpressionRequirement',
   'SubworkflowFeatureRequirement': 'https://w3id.org/cwl/cwl#SubworkflowFeatureRequirement',
   'ToolTimeLimit': 'https://w3id.org/cwl/cwl#ToolTimeLimit',
+  'UnionSchema': 'https://w3id.org/cwl/salad#UnionSchema',
   'WorkReuse': 'https://w3id.org/cwl/cwl#WorkReuse',
   'Workflow': 'https://w3id.org/cwl/cwl#Workflow',
   'WorkflowInputParameter': 'https://w3id.org/cwl/cwl#WorkflowInputParameter',
@@ -109,6 +116,7 @@ export const VOCAB = {
   'float': 'http://www.w3.org/2001/XMLSchema#float',
   'int': 'http://www.w3.org/2001/XMLSchema#int',
   'long': 'http://www.w3.org/2001/XMLSchema#long',
+  'map': 'https://w3id.org/cwl/salad#map',
   'merge_flattened': 'https://w3id.org/cwl/cwl#LinkMergeMethod/merge_flattened',
   'merge_nested': 'https://w3id.org/cwl/cwl#LinkMergeMethod/merge_nested',
   'nested_crossproduct': 'https://w3id.org/cwl/cwl#ScatterMethod/nested_crossproduct',
@@ -121,6 +129,7 @@ export const VOCAB = {
   'stdout': 'https://w3id.org/cwl/cwl#stdout',
   'string': 'http://www.w3.org/2001/XMLSchema#string',
   'the_only_non_null': 'https://w3id.org/cwl/cwl#PickValueMethod/the_only_non_null',
+  'union': 'https://w3id.org/cwl/salad#union',
   'v1.0': 'https://w3id.org/cwl/cwl#v1.0',
   'v1.0.dev4': 'https://w3id.org/cwl/cwl#v1.0.dev4',
   'v1.1': 'https://w3id.org/cwl/cwl#v1.1',
@@ -135,6 +144,11 @@ export const VOCAB = {
 export const RVOCAB = {
   'https://w3id.org/cwl/salad#Any': 'Any',
   'https://w3id.org/cwl/salad#ArraySchema': 'ArraySchema',
+  'https://w3id.org/cwl/cwl#CWLArraySchema': 'CWLArraySchema',
+  'https://w3id.org/cwl/cwl#CWLInputFile': 'CWLInputFile',
+  'https://w3id.org/cwl/cwl#CWLObjectType': 'CWLObjectType',
+  'https://w3id.org/cwl/cwl#CWLRecordField': 'CWLRecordField',
+  'https://w3id.org/cwl/cwl#CWLRecordSchema': 'CWLRecordSchema',
   'https://w3id.org/cwl/cwl#CWLType': 'CWLType',
   'https://w3id.org/cwl/cwl#CWLVersion': 'CWLVersion',
   'https://w3id.org/cwl/cwl#CommandInputArraySchema': 'CommandInputArraySchema',
@@ -183,6 +197,7 @@ export const RVOCAB = {
   'https://w3id.org/cwl/cwl#LoadContents': 'LoadContents',
   'https://w3id.org/cwl/cwl#LoadListingEnum': 'LoadListingEnum',
   'https://w3id.org/cwl/cwl#LoadListingRequirement': 'LoadListingRequirement',
+  'https://w3id.org/cwl/salad#MapSchema': 'MapSchema',
   'https://w3id.org/cwl/cwl#MultipleInputFeatureRequirement': 'MultipleInputFeatureRequirement',
   'https://w3id.org/cwl/cwl#NetworkAccess': 'NetworkAccess',
   'https://w3id.org/cwl/cwl#Operation': 'Operation',
@@ -214,6 +229,7 @@ export const RVOCAB = {
   'https://w3id.org/cwl/cwl#StepInputExpressionRequirement': 'StepInputExpressionRequirement',
   'https://w3id.org/cwl/cwl#SubworkflowFeatureRequirement': 'SubworkflowFeatureRequirement',
   'https://w3id.org/cwl/cwl#ToolTimeLimit': 'ToolTimeLimit',
+  'https://w3id.org/cwl/salad#UnionSchema': 'UnionSchema',
   'https://w3id.org/cwl/cwl#WorkReuse': 'WorkReuse',
   'https://w3id.org/cwl/cwl#Workflow': 'Workflow',
   'https://w3id.org/cwl/cwl#WorkflowInputParameter': 'WorkflowInputParameter',
@@ -243,6 +259,7 @@ export const RVOCAB = {
   'http://www.w3.org/2001/XMLSchema#float': 'float',
   'http://www.w3.org/2001/XMLSchema#int': 'int',
   'http://www.w3.org/2001/XMLSchema#long': 'long',
+  'https://w3id.org/cwl/salad#map': 'map',
   'https://w3id.org/cwl/cwl#LinkMergeMethod/merge_flattened': 'merge_flattened',
   'https://w3id.org/cwl/cwl#LinkMergeMethod/merge_nested': 'merge_nested',
   'https://w3id.org/cwl/cwl#ScatterMethod/nested_crossproduct': 'nested_crossproduct',
@@ -255,6 +272,7 @@ export const RVOCAB = {
   'https://w3id.org/cwl/cwl#stdout': 'stdout',
   'http://www.w3.org/2001/XMLSchema#string': 'string',
   'https://w3id.org/cwl/cwl#PickValueMethod/the_only_non_null': 'the_only_non_null',
+  'https://w3id.org/cwl/salad#union': 'union',
   'https://w3id.org/cwl/cwl#v1.0': 'v1.0',
   'https://w3id.org/cwl/cwl#v1.0.dev4': 'v1.0.dev4',
   'https://w3id.org/cwl/cwl#v1.1': 'v1.1',
diff --git a/src/util/loaders/ArrayLoader.ts b/src/util/loaders/ArrayLoader.ts
index eea30c5..50b34a8 100644
--- a/src/util/loaders/ArrayLoader.ts
+++ b/src/util/loaders/ArrayLoader.ts
@@ -16,7 +16,8 @@ export class _ArrayLoader implements Loader {
     for (var val of doc) {
       try {
         const lf = await loadField(val, new _UnionLoader([this, ...this.items]), baseuri, loadingOptions)
-        if (Array.isArray(lf)) {
+        const flatten: boolean = loadingOptions.container != "@list"
+        if (flatten && Array.isArray(lf)) {
           r = r.concat(lf)
         } else {
           r.push(lf)
diff --git a/src/util/loaders/MapLoader.ts b/src/util/loaders/MapLoader.ts
new file mode 100644
index 0000000..454f9e9
--- /dev/null
+++ b/src/util/loaders/MapLoader.ts
@@ -0,0 +1,40 @@
+import {Loader, loadField, LoadingOptions, _UnionLoader, ValidationException, TypeGuards, Dictionary} from '../Internal'
+
+export class _MapLoader implements Loader {
+  values: Loader[]
+  container?: string
+  noLinkCheck?: boolean
+
+  constructor (values: Loader[], container?: string, noLinkCheck?: boolean) {
+    this.values = values
+    this.container = container
+    this.noLinkCheck = noLinkCheck
+  }
+
+  async load (doc: any, baseuri: string, loadingOptions: LoadingOptions, docRoot?: string): Promise<any> {
+    if (!TypeGuards.isDictionary(doc)) {
+      throw new ValidationException('Expected a dict')
+    }
+    if (this.container !== undefined || this.noLinkCheck !== undefined) {
+      loadingOptions = new LoadingOptions({ copyFrom: loadingOptions, container: this.container, noLinkCheck: this.noLinkCheck })
+    }
+    let r : Dictionary = {}
+    const errors: ValidationException[] = []
+    for (const key in doc) {
+      try {
+        r[key] = await loadField(doc[key], new _UnionLoader([this, ...this.values]), baseuri, loadingOptions)
+      } catch (e) {
+        if (e instanceof ValidationException) {
+          errors.push(e)
+        } else {
+          throw e
+        }
+      }
+    }
+    
+    if (errors.length > 0) {
+      throw new ValidationException('', errors)
+    }
+    return r
+  }
+}
diff --git a/src/util/loaders/RecordLoader.ts b/src/util/loaders/RecordLoader.ts
index a9920f0..ecedba6 100644
--- a/src/util/loaders/RecordLoader.ts
+++ b/src/util/loaders/RecordLoader.ts
@@ -2,14 +2,22 @@ import { Saveable, Loader, LoadingOptions, TypeGuards, ValidationException } fro
 
 export class _RecordLoader implements Loader {
   creatorFunc: (doc: any, baseuri: string, loadingOptions: LoadingOptions, docRoot?: string) => Promise<Saveable>
-  constructor (createrFunc: (doc: any, baseuri: string, loadingOptions: LoadingOptions, docRoot?: string) => Promise<Saveable>) {
+  container?: string
+  noLinkCheck?: boolean
+
+  constructor (createrFunc: (doc: any, baseuri: string, loadingOptions: LoadingOptions, docRoot?: string) => Promise<Saveable>, container?: string, noLinkCheck?: boolean) {
     this.creatorFunc = createrFunc
+    this.container = container
+    this.noLinkCheck = noLinkCheck
   }
 
   async load (doc: any, baseuri: string, loadingOptions: LoadingOptions, docRoot?: string): Promise<Saveable> {
     if (!TypeGuards.isDictionary(doc)) {
       throw new ValidationException('Expected a dict')
     }
+    if (this.container !== undefined || this.noLinkCheck !== undefined) {
+      loadingOptions = new LoadingOptions({ copyFrom: loadingOptions, container: this.container, noLinkCheck: this.noLinkCheck })
+    }
     return await this.creatorFunc(doc, baseuri, loadingOptions, docRoot)
   }
 }
diff --git a/src/util/loaders/UnionLoader.ts b/src/util/loaders/UnionLoader.ts
index 1a1fb4c..76f26c2 100644
--- a/src/util/loaders/UnionLoader.ts
+++ b/src/util/loaders/UnionLoader.ts
@@ -7,6 +7,10 @@ export class _UnionLoader implements Loader {
     this.alternates = alternates
   }
 
+  addLoaders(loaders: Loader[]) {
+    this.alternates = this.alternates.concat(loaders);
+  }
+
   async load (doc: any, baseuri: string, loadingOptions: LoadingOptions, docRoot?: string): Promise<Saveable> {
     const errors: ValidationException[] = []
     for (const t of this.alternates) {
diff --git a/src/util/loaders/UriLoader.ts b/src/util/loaders/UriLoader.ts
index 3330874..6cc8302 100644
--- a/src/util/loaders/UriLoader.ts
+++ b/src/util/loaders/UriLoader.ts
@@ -5,15 +5,20 @@ export class _URILoader implements Loader {
   scopedID: boolean
   vocabTerm: boolean
   scopedRef?: number
+  noLinkCheck?: boolean
 
-  constructor (inner: Loader, scopedID: boolean, vocabTerm: boolean, scopedRef?: number) {
+  constructor (inner: Loader, scopedID: boolean, vocabTerm: boolean, scopedRef?: number, noLinkCheck?: boolean) {
     this.inner = inner
     this.scopedID = scopedID
     this.vocabTerm = vocabTerm
     this.scopedRef = scopedRef
+    this.noLinkCheck = noLinkCheck
   }
 
   async load (doc: any, baseuri: string, loadingOptions: LoadingOptions, docRoot?: string): Promise<any> {
+    if (this.noLinkCheck !== undefined) {
+      loadingOptions = new LoadingOptions({ copyFrom: loadingOptions, noLinkCheck: this.noLinkCheck })
+    }
     if (Array.isArray(doc)) {
       const newDoc: any[] = []
       for (const val of doc) {