<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by gradle vo-dml tools 2026-04-21T17:47:37.473933+01:00-->
<tap:tapschemaModel xmlns:tap="http://ivoa.net/dm/tapschema/v1"
                    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <schema>
      <schema_name>execution</schema_name>
      <description>A Data Model for describing the execution of a job on a computational resource</description>
      <tables>
         <table>
            <table_name>execution.PhysicalLocation</table_name>
            <table_type>table</table_type>
            <utype>execution:PhysicalLocation</utype>
            <description>The physical location of a resource</description>
            <columns>
               <column>
                  <column_name>execution.PhysicalLocation.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for PhysicalLocation</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.PhysicalLocation.name</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>A human readable name for the location</description>
                  <utype>execution:PhysicalLocation.name</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.PhysicalLocation.country</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Country name</description>
                  <utype>execution:PhysicalLocation.country</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.PhysicalLocation.longitude</column_name>
                  <!--attribute of primitiveType ivoa:real-->
                  <datatype>DOUBLE</datatype>
                  <description>Longitude in degrees</description>
                  <utype>execution:PhysicalLocation.longitude</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.PhysicalLocation.latitude</column_name>
                  <!--attribute of primitiveType ivoa:real-->
                  <datatype>DOUBLE</datatype>
                  <description>Latitude in degrees</description>
                  <utype>execution:PhysicalLocation.latitude</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>execution.ExecutionNode</table_name>
            <table_type>table</table_type>
            <utype>execution:ExecutionNode</utype>
            <description>A Node where tool execution can take place</description>
            <columns>
               <column>
                  <column_name>execution.ExecutionNode.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ExecutionNode</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ExecutionNode.resourcesServiceUrl</column_name>
                  <!--attribute of primitiveType ivoa:anyURI-->
                  <datatype>VARCHAR</datatype>
                  <description>the </description>
                  <utype>execution:ExecutionNode.resourcesServiceUrl</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ExecutionNode.executionServiceUrl</column_name>
                  <!--attribute of primitiveType ivoa:anyURI-->
                  <datatype>VARCHAR</datatype>
                  <description/>
                  <utype>execution:ExecutionNode.executionServiceUrl</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ExecutionNode.location</column_name>
                  <!--reference to execution:PhysicalLocation-->
                  <datatype>BIGINT</datatype>
                  <description>the location of the node</description>
                  <utype>execution:ExecutionNode.location</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ExecutionNode.location</key_id>
                  <!--reference to execution:PhysicalLocation -->
                  <target_table>execution.PhysicalLocation</target_table>
                  <description>the location of the node</description>
                  <utype>execution:ExecutionNode.location</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.ExecutionNode.location</from_column>
                        <target_column>execution.PhysicalLocation.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>execution.ComputeResource</table_name>
            <table_type>table</table_type>
            <utype>execution:ComputeResource</utype>
            <description>A computational resource that can be used for executing a job</description>
            <columns>
               <column>
                  <column_name>execution.ComputeResource.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ComputeResource</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ComputeResource.EXECUTIONNODE_ID</column_name>
                  <datatype>BIGINT</datatype>
                  <description>foreign key column for execution:ExecutionNode composition of execution:ComputeResource</description>
                  <utype>execution:ExecutionNode</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ComputeResource.name</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>the name of the compute resource</description>
                  <utype>execution:ComputeResource.name</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ComputeResource.numberOfCores</column_name>
                  <!--attribute of primitiveType ivoa:integer-->
                  <datatype>INTEGER</datatype>
                  <description>the number of CPU cores available</description>
                  <utype>execution:ComputeResource.numberOfCores</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ComputeResource.memory</column_name>
                  <!--attribute of primitiveType ivoa:real-->
                  <datatype>DOUBLE</datatype>
                  <description>the amount of RAM available in GB</description>
                  <utype>execution:ComputeResource.memory</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ComputeResource.gpu</column_name>
                  <!--attribute of primitiveType ivoa:boolean-->
                  <datatype>INTEGER</datatype>
                  <description>whether the resource has GPU capabilities</description>
                  <utype>execution:ComputeResource.gpu</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ComputeResource.gpuType</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>the type of GPU available, if any</description>
                  <utype>execution:ComputeResource.gpuType</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ExecutionNode.computeResources</key_id>
                  <!--back reference to execution:ComputeResource composition in execution:ExecutionNode -->
                  <target_table>execution.ExecutionNode</target_table>
                  <description>foreign key for execution:ComputeResource composition in execution:ExecutionNode </description>
                  <utype>execution:ExecutionNode.computeResources</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.ComputeResource.EXECUTIONNODE_ID</from_column>
                        <target_column>execution.ExecutionNode.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>execution.TransferPerformance</table_name>
            <table_type>table</table_type>
            <utype>execution:TransferPerformance</utype>
            <description>Performance of data transfer to/from a node</description>
            <columns>
               <column>
                  <column_name>execution.TransferPerformance.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for TransferPerformance</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.TransferPerformance.fromLocation</column_name>
                  <!--reference to execution:PhysicalLocation-->
                  <datatype>BIGINT</datatype>
                  <description>the source location of the data transfer</description>
                  <utype>execution:TransferPerformance.fromLocation</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.TransferPerformance.throughput</column_name>
                  <!--attribute of primitiveType ivoa:real-->
                  <datatype>DOUBLE</datatype>
                  <description>the throughput of the data transfer in bytes/second</description>
                  <utype>execution:TransferPerformance.throughput</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.TransferPerformance.latency</column_name>
                  <!--attribute of primitiveType ivoa:real-->
                  <datatype>DOUBLE</datatype>
                  <description>the latency of the data transfer in seconds</description>
                  <utype>execution:TransferPerformance.latency</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.TransferPerformance.errorRate</column_name>
                  <!--attribute of primitiveType ivoa:real-->
                  <datatype>DOUBLE</datatype>
                  <description>the error rate of the data transfer as a percentage</description>
                  <utype>execution:TransferPerformance.errorRate</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.TransferPerformance.timestamp</column_name>
                  <!--attribute of primitiveType ivoa:datetime-->
                  <datatype>TIMESTAMP</datatype>
                  <description>the timestamp of the performance measurement</description>
                  <utype>execution:TransferPerformance.timestamp</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_TransferPerformance.fromLocation</key_id>
                  <!--reference to execution:PhysicalLocation -->
                  <target_table>execution.PhysicalLocation</target_table>
                  <description>the source location of the data transfer</description>
                  <utype>execution:TransferPerformance.fromLocation</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.TransferPerformance.fromLocation</from_column>
                        <target_column>execution.PhysicalLocation.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>execution.DataNode</table_name>
            <table_type>table</table_type>
            <utype>execution:DataNode</utype>
            <description>A Node where data can be stored</description>
            <columns>
               <column>
                  <column_name>execution.DataNode.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for DataNode</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.DataNode.storageServiceUrl</column_name>
                  <!--attribute of primitiveType ivoa:anyURI-->
                  <datatype>VARCHAR</datatype>
                  <description>the URL of the storage service</description>
                  <utype>execution:DataNode.storageServiceUrl</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.DataNode.location</column_name>
                  <!--reference to execution:PhysicalLocation-->
                  <datatype>BIGINT</datatype>
                  <description>the location of the node</description>
                  <utype>execution:DataNode.location</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_DataNode.location</key_id>
                  <!--reference to execution:PhysicalLocation -->
                  <target_table>execution.PhysicalLocation</target_table>
                  <description>the location of the node</description>
                  <utype>execution:DataNode.location</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.DataNode.location</from_column>
                        <target_column>execution.PhysicalLocation.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>execution.DataResource</table_name>
            <table_type>table</table_type>
            <utype>execution:DataResource</utype>
            <description>A data resource that can be used as input or output for a job</description>
            <columns>
               <column>
                  <column_name>execution.DataResource.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for DataResource</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.DataResource.location</column_name>
                  <!--reference to execution:PhysicalLocation-->
                  <datatype>BIGINT</datatype>
                  <description>the location of the data</description>
                  <utype>execution:DataResource.location</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.DataResource.size</column_name>
                  <!--attribute of primitiveType ivoa:real-->
                  <datatype>DOUBLE</datatype>
                  <description>the size of the data resource in GB</description>
                  <utype>execution:DataResource.size</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.DataResource.mimeType</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>the mime type of the data resource</description>
                  <utype>execution:DataResource.mimeType</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.DataResource.accessUrl</column_name>
                  <!--attribute of primitiveType ivoa:anyURI-->
                  <datatype>VARCHAR</datatype>
                  <description>the URL that can be used to access the data resource</description>
                  <utype>execution:DataResource.accessUrl</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_DataResource.location</key_id>
                  <!--reference to execution:PhysicalLocation -->
                  <target_table>execution.PhysicalLocation</target_table>
                  <description>the location of the data</description>
                  <utype>execution:DataResource.location</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.DataResource.location</from_column>
                        <target_column>execution.PhysicalLocation.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>execution.WorkLoad</table_name>
            <table_type>table</table_type>
            <utype>execution:WorkLoad</utype>
            <description>the execution workload</description>
            <columns>
               <column>
                  <column_name>execution.WorkLoad.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for WorkLoad</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>execution.ParameterValue</table_name>
            <table_type>table</table_type>
            <utype>execution:ParameterValue</utype>
            <description>the value of a parameter for a job execution</description>
            <columns>
               <column>
                  <column_name>execution.ParameterValue.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ParameterValue</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ParameterValue.id</column_name>
                  <datatype>VARCHAR</datatype>
                  <description>foreign key column for execution:JobExecution composition of execution:ParameterValue</description>
                  <utype>execution:JobExecution</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ParameterValue.id</column_name>
                  <datatype>VARCHAR</datatype>
                  <description>foreign key column for execution:JobExecution composition of execution:ParameterValue</description>
                  <utype>execution:JobExecution</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ParameterValue.definition</column_name>
                  <!--reference to pdl:ParameterDefinition-->
                  <datatype>BIGINT</datatype>
                  <description>the definition of the parameter</description>
                  <utype>execution:ParameterValue.definition</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ParameterValue.value</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>the value of the parameter - this is intentionally very flexible to allow for different types of parameters - e.g. atomic values, files, etc</description>
                  <utype>execution:ParameterValue.value</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.ParameterValue.isIndirect</column_name>
                  <!--attribute of primitiveType ivoa:boolean-->
                  <datatype>INTEGER</datatype>
                  <description>whether the value is an indirect reference to the actual value - e.g. a file path or a URL</description>
                  <utype>execution:ParameterValue.isIndirect</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ParameterValue.definition</key_id>
                  <!--reference to pdl:ParameterDefinition -->
                  <target_table>pdl.ParameterDefinition</target_table>
                  <description>the definition of the parameter</description>
                  <utype>execution:ParameterValue.definition</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.ParameterValue.definition</from_column>
                        <target_column>pdl.ParameterDefinition.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
               <foreignKey>
                  <key_id>FK_JobExecution.inputs</key_id>
                  <!--back reference to execution:ParameterValue composition in execution:JobExecution -->
                  <target_table>execution.JobExecution</target_table>
                  <description>foreign key for execution:ParameterValue composition in execution:JobExecution </description>
                  <utype>execution:JobExecution.inputs</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.ParameterValue.id</from_column>
                        <target_column>execution.JobExecution.id</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
               <foreignKey>
                  <key_id>FK_JobExecution.outputs</key_id>
                  <!--back reference to execution:ParameterValue composition in execution:JobExecution -->
                  <target_table>execution.JobExecution</target_table>
                  <description>foreign key for execution:ParameterValue composition in execution:JobExecution </description>
                  <utype>execution:JobExecution.outputs</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.ParameterValue.id</from_column>
                        <target_column>execution.JobExecution.id</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>execution.JobExecution</table_name>
            <table_type>table</table_type>
            <utype>execution:JobExecution</utype>
            <description>the execution of a job on a computational resource</description>
            <columns>
               <column>
                  <column_name>execution.JobExecution.id</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Unique job execution identifier</description>
                  <utype>execution:JobExecution.id</utype>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.runId</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>this is a client supplied identifier - the system
                                       does nothing other than to return it as part of the
                                       description of the job</description>
                  <utype>execution:JobExecution.runId</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.ownerID</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>the identifier of the user who owns the job execution</description>
                  <utype>execution:JobExecution.ownerID</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.tool</column_name>
                  <!--reference to tool:Tool-->
                  <datatype>VARCHAR</datatype>
                  <description>the tool being executed</description>
                  <utype>execution:JobExecution.tool</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.status</column_name>
                  <!--attribute of enumeration execution:ExecutionPhase-->
                  <datatype>VARCHAR</datatype>
                  <description>the current status of the job execution</description>
                  <utype>execution:JobExecution.status</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.executionNode</column_name>
                  <!--reference to execution:ExecutionNode-->
                  <datatype>BIGINT</datatype>
                  <description>the node where the job is being executed</description>
                  <utype>execution:JobExecution.executionNode</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.creationTime</column_name>
                  <!--attribute of primitiveType ivoa:datetime-->
                  <datatype>TIMESTAMP</datatype>
                  <description>the time when the job execution was created</description>
                  <utype>execution:JobExecution.creationTime</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.startTime</column_name>
                  <!--attribute of primitiveType ivoa:datetime-->
                  <datatype>TIMESTAMP</datatype>
                  <description>the start time of the job execution</description>
                  <utype>execution:JobExecution.startTime</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.endTime</column_name>
                  <!--attribute of primitiveType ivoa:datetime-->
                  <datatype>TIMESTAMP</datatype>
                  <description>the time at which the job execution finished</description>
                  <utype>execution:JobExecution.endTime</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.JobExecution.destructionTime</column_name>
                  <!--attribute of primitiveType ivoa:datetime-->
                  <datatype>TIMESTAMP</datatype>
                  <description>the time at which the job execution will be destroyed</description>
                  <utype>execution:JobExecution.destructionTime</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_JobExecution.tool</key_id>
                  <!--reference to tool:Tool -->
                  <target_table>tool.Tool</target_table>
                  <description>the tool being executed</description>
                  <utype>execution:JobExecution.tool</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.JobExecution.tool</from_column>
                        <target_column>tool.Tool.id</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
               <foreignKey>
                  <key_id>FK_JobExecution.executionNode</key_id>
                  <!--reference to execution:ExecutionNode -->
                  <target_table>execution.ExecutionNode</target_table>
                  <description>the node where the job is being executed</description>
                  <utype>execution:JobExecution.executionNode</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.JobExecution.executionNode</from_column>
                        <target_column>execution.ExecutionNode.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>execution.PerformanceMetric</table_name>
            <table_type>table</table_type>
            <utype>execution:PerformanceMetric</utype>
            <description>A performance metric for a job execution</description>
            <columns>
               <column>
                  <column_name>execution.PerformanceMetric.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for PerformanceMetric</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>execution.PerformanceMetric.id</column_name>
                  <datatype>VARCHAR</datatype>
                  <description>foreign key column for execution:JobExecution composition of execution:PerformanceMetric</description>
                  <utype>execution:JobExecution</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_JobExecution.performanceMetrics</key_id>
                  <!--back reference to execution:PerformanceMetric composition in execution:JobExecution -->
                  <target_table>execution.JobExecution</target_table>
                  <description>foreign key for execution:PerformanceMetric composition in execution:JobExecution </description>
                  <utype>execution:JobExecution.performanceMetrics</utype>
                  <columns>
                     <fKColumn>
                        <from_column>execution.PerformanceMetric.id</from_column>
                        <target_column>execution.JobExecution.id</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
      </tables>
   </schema>
   <schema>
      <schema_name>tool</schema_name>
      <description>Tool Data Model for defining executable tools</description>
      <tables>
         <table>
            <table_name>tool.Author</table_name>
            <table_type>table</table_type>
            <utype>tool:Author</utype>
            <description>Details about an author of the image</description>
            <columns>
               <column>
                  <column_name>tool.Author.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for Author</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Author.name</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Name of the author</description>
                  <utype>tool:Author.name</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Author.email</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Contact email address for the author</description>
                  <utype>tool:Author.email</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Author.role</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Role of the author; default maintainer</description>
                  <utype>tool:Author.role</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Author.github</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>GitHub username </description>
                  <utype>tool:Author.github</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Author.gitlab</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>GitLab username </description>
                  <utype>tool:Author.gitlab</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Author.orcid</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>ORCID identity</description>
                  <utype>tool:Author.orcid</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Author.affiliation</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Affiliation </description>
                  <utype>tool:Author.affiliation</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>tool.OCIRegistry</table_name>
            <table_type>table</table_type>
            <utype>tool:OCIRegistry</utype>
            <description>Details about the OCIcontainer registry</description>
            <columns>
               <column>
                  <column_name>tool.OCIRegistry.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for OCIRegistry</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.OCIRegistry.host</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Container registry hostname</description>
                  <utype>tool:OCIRegistry.host</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.OCIRegistry.project</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Container registry project/namespace</description>
                  <utype>tool:OCIRegistry.project</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>tool.Discovery</table_name>
            <table_type>table</table_type>
            <utype>tool:Discovery</utype>
            <description>Discovery metadata mapped to OCI labels/annotations</description>
            <columns>
               <column>
                  <column_name>tool.Discovery.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for Discovery</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.imageTitle</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Human-readable title (schema field: title)</description>
                  <utype>tool:Discovery.imageTitle</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.description</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Human-readable description (1..255 chars)</description>
                  <utype>tool:Discovery.description</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.source</column_name>
                  <!--attribute of primitiveType ivoa:anyURI-->
                  <datatype>VARCHAR</datatype>
                  <description>Source code URL</description>
                  <utype>tool:Discovery.source</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.url</column_name>
                  <!--attribute of primitiveType ivoa:anyURI-->
                  <datatype>VARCHAR</datatype>
                  <description>Project URL </description>
                  <utype>tool:Discovery.url</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.documentation</column_name>
                  <!--attribute of primitiveType ivoa:anyURI-->
                  <datatype>VARCHAR</datatype>
                  <description>Documentation URL </description>
                  <utype>tool:Discovery.documentation</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.version</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Packaged software version</description>
                  <utype>tool:Discovery.version</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.revision</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Source control revision; default unknown</description>
                  <utype>tool:Discovery.revision</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.created</column_name>
                  <!--attribute of primitiveType ivoa:datetime-->
                  <datatype>TIMESTAMP</datatype>
                  <description>Metadata processing timestamp (UTC)</description>
                  <utype>tool:Discovery.created</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.authors</column_name>
                  <!--reference to tool:Author-->
                  <datatype>BIGINT</datatype>
                  <description>Responsible people/organization</description>
                  <utype>tool:Discovery.authors</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.licenses</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>SPDX license expression</description>
                  <utype>tool:Discovery.licenses</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.keywords</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Discovery/search keywords</description>
                  <utype>tool:Discovery.keywords</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.domain</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Scientific domains; default astronomy; min_length=1</description>
                  <utype>tool:Discovery.domain</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.kind</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description/>
                  <utype>tool:Discovery.kind</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.tools</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Scientific software packages included</description>
                  <utype>tool:Discovery.tools</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.isBase</column_name>
                  <!--attribute of primitiveType ivoa:boolean-->
                  <datatype>INTEGER</datatype>
                  <description>Whether this is a certified base image that should be used as a parent image for derived images</description>
                  <utype>tool:Discovery.isBase</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Discovery.deprecated</column_name>
                  <!--attribute of primitiveType ivoa:boolean-->
                  <datatype>INTEGER</datatype>
                  <description>Deprecation status; default false</description>
                  <utype>tool:Discovery.deprecated</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_Discovery.authors</key_id>
                  <!--reference to tool:Author -->
                  <target_table>tool.Author</target_table>
                  <description>Responsible people/organization</description>
                  <utype>tool:Discovery.authors</utype>
                  <columns>
                     <fKColumn>
                        <from_column>tool.Discovery.authors</from_column>
                        <target_column>tool.Author.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>tool.EnvVar</table_name>
            <table_type>table</table_type>
            <utype>tool:EnvVar</utype>
            <description>Environment variable map entry</description>
            <columns>
               <column>
                  <column_name>tool.EnvVar.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for EnvVar</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.EnvVar.id</column_name>
                  <datatype>VARCHAR</datatype>
                  <description>foreign key column for tool:Tool composition of tool:EnvVar</description>
                  <utype>tool:Tool</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.EnvVar.name</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Environment variable name</description>
                  <utype>tool:EnvVar.name</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.EnvVar.value</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Environment variable value</description>
                  <utype>tool:EnvVar.value</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_Tool.env</key_id>
                  <!--back reference to tool:EnvVar composition in tool:Tool -->
                  <target_table>tool.Tool</target_table>
                  <description>foreign key for tool:EnvVar composition in tool:Tool </description>
                  <utype>tool:Tool.env</utype>
                  <columns>
                     <fKColumn>
                        <from_column>tool.EnvVar.id</from_column>
                        <target_column>tool.Tool.id</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>tool.Vulnerability</table_name>
            <table_type>table</table_type>
            <utype>tool:Vulnerability</utype>
            <description>a known security vulnerability</description>
            <columns>
               <column>
                  <column_name>tool.Vulnerability.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for Vulnerability</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Vulnerability.SECURITYMETADATA_ID</column_name>
                  <datatype>BIGINT</datatype>
                  <description>foreign key column for tool:SecurityMetadata composition of tool:Vulnerability</description>
                  <utype>tool:SecurityMetadata</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Vulnerability.cve</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>the identifier for the vulnerability</description>
                  <utype>tool:Vulnerability.cve</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_SecurityMetadata.vulnerabilities</key_id>
                  <!--back reference to tool:Vulnerability composition in tool:SecurityMetadata -->
                  <target_table>tool.SecurityMetadata</target_table>
                  <description>foreign key for tool:Vulnerability composition in tool:SecurityMetadata </description>
                  <utype>tool:SecurityMetadata.vulnerabilities</utype>
                  <columns>
                     <fKColumn>
                        <from_column>tool.Vulnerability.SECURITYMETADATA_ID</from_column>
                        <target_column>tool.SecurityMetadata.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>tool.Compliance</table_name>
            <table_type>table</table_type>
            <utype>tool:Compliance</utype>
            <description>attestation information</description>
            <columns>
               <column>
                  <column_name>tool.Compliance.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for Compliance</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Compliance.SECURITYMETADATA_ID</column_name>
                  <datatype>BIGINT</datatype>
                  <description>foreign key column for tool:SecurityMetadata composition of tool:Compliance</description>
                  <utype>tool:SecurityMetadata</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_SecurityMetadata.compliance</key_id>
                  <!--back reference to tool:Compliance composition in tool:SecurityMetadata -->
                  <target_table>tool.SecurityMetadata</target_table>
                  <description>foreign key for tool:Compliance composition in tool:SecurityMetadata </description>
                  <utype>tool:SecurityMetadata.compliance</utype>
                  <columns>
                     <fKColumn>
                        <from_column>tool.Compliance.SECURITYMETADATA_ID</from_column>
                        <target_column>tool.SecurityMetadata.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>tool.SecurityMetadata</table_name>
            <table_type>table</table_type>
            <utype>tool:SecurityMetadata</utype>
            <description>Security metadata for a tool image</description>
            <columns>
               <column>
                  <column_name>tool.SecurityMetadata.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for SecurityMetadata</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.SecurityMetadata.signature</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>a digest style signature</description>
                  <utype>tool:SecurityMetadata.signature</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>tool.ToolImage</table_name>
            <table_type>table</table_type>
            <utype>tool:ToolImage</utype>
            <description>Definition of a tool image</description>
            <columns>
               <column>
                  <column_name>tool.ToolImage.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ToolImage</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.ToolImage.registry</column_name>
                  <!--reference to tool:OCIRegistry-->
                  <datatype>BIGINT</datatype>
                  <description>OCI registry details</description>
                  <utype>tool:ToolImage.registry</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.ToolImage.parentImage</column_name>
                  <!--reference to tool:ToolImage-->
                  <datatype>BIGINT</datatype>
                  <description>Parent image reference</description>
                  <utype>tool:ToolImage.parentImage</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ToolImage.registry</key_id>
                  <!--reference to tool:OCIRegistry -->
                  <target_table>tool.OCIRegistry</target_table>
                  <description>OCI registry details</description>
                  <utype>tool:ToolImage.registry</utype>
                  <columns>
                     <fKColumn>
                        <from_column>tool.ToolImage.registry</from_column>
                        <target_column>tool.OCIRegistry.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
               <foreignKey>
                  <key_id>FK_ToolImage.parentImage</key_id>
                  <!--reference to tool:ToolImage -->
                  <target_table>tool.ToolImage</target_table>
                  <description>Parent image reference</description>
                  <utype>tool:ToolImage.parentImage</utype>
                  <columns>
                     <fKColumn>
                        <from_column>tool.ToolImage.parentImage</from_column>
                        <target_column>tool.ToolImage.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>tool.BuildProcess</table_name>
            <table_type>table</table_type>
            <utype>tool:BuildProcess</utype>
            <description>How the tool image is built</description>
            <columns>
               <column>
                  <column_name>tool.BuildProcess.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for BuildProcess</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.BuildProcess.buildCommand</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>The command used to build the image, e.g. 'docker build .'</description>
                  <utype>tool:BuildProcess.buildCommand</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.BuildProcess.buildContext</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>The context directory for the build, e.g. './'</description>
                  <utype>tool:BuildProcess.buildContext</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.BuildProcess.dockerfilePath</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>The path to the Dockerfile, e.g. './Dockerfile'</description>
                  <utype>tool:BuildProcess.dockerfilePath</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>tool.Tool</table_name>
            <table_type>table</table_type>
            <utype>tool:Tool</utype>
            <description>Definition of a Library Tool</description>
            <columns>
               <column>
                  <column_name>tool.Tool.id</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Unique tool identifier</description>
                  <utype>tool:Tool.id</utype>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Tool.image</column_name>
                  <!--reference to tool:ToolImage-->
                  <datatype>BIGINT</datatype>
                  <description>Tool container image reference</description>
                  <utype>tool:Tool.image</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>tool.Tool.command</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Tokenized initial command; supports {{inputs.key}} min_length=1</description>
                  <utype>tool:Tool.command</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_Tool.image</key_id>
                  <!--reference to tool:ToolImage -->
                  <target_table>tool.ToolImage</target_table>
                  <description>Tool container image reference</description>
                  <utype>tool:Tool.image</utype>
                  <columns>
                     <fKColumn>
                        <from_column>tool.Tool.image</from_column>
                        <target_column>tool.ToolImage.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>tool.PerformanceProfile</table_name>
            <table_type>table</table_type>
            <utype>tool:PerformanceProfile</utype>
            <description>A performance profile for Tool execution</description>
            <columns>
               <column>
                  <column_name>tool.PerformanceProfile.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for PerformanceProfile</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>tool.ProcessorScaling</table_name>
            <table_type>table</table_type>
            <utype>tool:ProcessorScaling</utype>
            <description>The scaling behaviour of a tool with respect to the number of processors used</description>
            <columns>
               <column>
                  <column_name>tool.ProcessorScaling.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ProcessorScaling</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
         <table>
            <table_name>tool.DataScaling</table_name>
            <table_type>table</table_type>
            <utype>tool:DataScaling</utype>
            <description>The scaling behaviour of a tool with respect to the size of the input data</description>
            <columns>
               <column>
                  <column_name>tool.DataScaling.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for DataScaling</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys/>
         </table>
      </tables>
   </schema>
   <schema>
      <schema_name>pdl</schema_name>
      <description>Parameter Data Model for tool inputs and outputs</description>
      <tables>
         <table>
            <table_name>pdl.ParameterDefinition</table_name>
            <table_type>table</table_type>
            <utype>pdl:ParameterDefinition</utype>
            <description>the definition of a parameter</description>
            <columns>
               <column>
                  <column_name>pdl.ParameterDefinition.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ParameterDefinition</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterDefinition.TOOLINTERFACE_ID</column_name>
                  <datatype>BIGINT</datatype>
                  <description>foreign key column for pdl:ToolInterface composition of pdl:ParameterDefinition</description>
                  <utype>pdl:ToolInterface</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterDefinition.name</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Parameter name</description>
                  <utype>pdl:ParameterDefinition.name</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterDefinition.description</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Parameter description</description>
                  <utype>pdl:ParameterDefinition.description</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterDefinition.kind</column_name>
                  <!--atomic dtype-->
                  <datatype>UNKNOWN</datatype>
                  <description>The kind of the parameter </description>
                  <utype>pdl:ParameterType</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterDefinition.semantics_ucd</column_name>
                  <!--attribute from dtype-->
                  <datatype>VARCHAR</datatype>
                  <description>a base type for semantics </description>
                  <utype>pdl:ParameterSemantics</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ToolInterface.parameters</key_id>
                  <!--back reference to pdl:ParameterDefinition composition in pdl:ToolInterface -->
                  <target_table>pdl.ToolInterface</target_table>
                  <description>foreign key for pdl:ParameterDefinition composition in pdl:ToolInterface </description>
                  <utype>pdl:ToolInterface.parameters</utype>
                  <columns>
                     <fKColumn>
                        <from_column>pdl.ParameterDefinition.TOOLINTERFACE_ID</from_column>
                        <target_column>pdl.ToolInterface.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>pdl.ParameterGroup</table_name>
            <table_type>table</table_type>
            <utype>pdl:ParameterGroup</utype>
            <description>a group of parameter Definitions</description>
            <columns>
               <column>
                  <column_name>pdl.ParameterGroup.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ParameterGroup</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterGroup.TOOLINTERFACE_ID</column_name>
                  <datatype>BIGINT</datatype>
                  <description>foreign key column for pdl:ToolInterface composition of pdl:ParameterGroup</description>
                  <utype>pdl:ToolInterface</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterGroup.name</column_name>
                  <!--attribute of primitiveType ivoa:string-->
                  <datatype>VARCHAR</datatype>
                  <description>Group name</description>
                  <utype>pdl:ParameterGroup.name</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ToolInterface.groups</key_id>
                  <!--back reference to pdl:ParameterGroup composition in pdl:ToolInterface -->
                  <target_table>pdl.ToolInterface</target_table>
                  <description>foreign key for pdl:ParameterGroup composition in pdl:ToolInterface </description>
                  <utype>pdl:ToolInterface.groups</utype>
                  <columns>
                     <fKColumn>
                        <from_column>pdl.ParameterGroup.TOOLINTERFACE_ID</from_column>
                        <target_column>pdl.ToolInterface.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>pdl.ParameterOrGroup</table_name>
            <table_type>table</table_type>
            <utype>pdl:ParameterOrGroup</utype>
            <description>a 'choice' type </description>
            <columns>
               <column>
                  <column_name>pdl.ParameterOrGroup.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ParameterOrGroup</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterOrGroup.PARAMETERGROUP_ID</column_name>
                  <datatype>BIGINT</datatype>
                  <description>foreign key column for pdl:ParameterGroup composition of pdl:ParameterOrGroup</description>
                  <utype>pdl:ParameterGroup</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterOrGroup.param</column_name>
                  <!--reference to pdl:ParameterDefinition-->
                  <datatype>BIGINT</datatype>
                  <description/>
                  <utype>pdl:ParameterOrGroup.param</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ParameterOrGroup.group</column_name>
                  <!--reference to pdl:ParameterGroup-->
                  <datatype>BIGINT</datatype>
                  <description/>
                  <utype>pdl:ParameterOrGroup.group</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ParameterOrGroup.param</key_id>
                  <!--reference to pdl:ParameterDefinition -->
                  <target_table>pdl.ParameterDefinition</target_table>
                  <description/>
                  <utype>pdl:ParameterOrGroup.param</utype>
                  <columns>
                     <fKColumn>
                        <from_column>pdl.ParameterOrGroup.param</from_column>
                        <target_column>pdl.ParameterDefinition.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
               <foreignKey>
                  <key_id>FK_ParameterOrGroup.group</key_id>
                  <!--reference to pdl:ParameterGroup -->
                  <target_table>pdl.ParameterGroup</target_table>
                  <description/>
                  <utype>pdl:ParameterOrGroup.group</utype>
                  <columns>
                     <fKColumn>
                        <from_column>pdl.ParameterOrGroup.group</from_column>
                        <target_column>pdl.ParameterGroup.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
               <foreignKey>
                  <key_id>FK_ParameterGroup.members</key_id>
                  <!--back reference to pdl:ParameterOrGroup composition in pdl:ParameterGroup -->
                  <target_table>pdl.ParameterGroup</target_table>
                  <description>foreign key for pdl:ParameterOrGroup composition in pdl:ParameterGroup </description>
                  <utype>pdl:ParameterGroup.members</utype>
                  <columns>
                     <fKColumn>
                        <from_column>pdl.ParameterOrGroup.PARAMETERGROUP_ID</from_column>
                        <target_column>pdl.ParameterGroup.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
         <table>
            <table_name>pdl.ToolInterface</table_name>
            <table_type>table</table_type>
            <utype>pdl:ToolInterface</utype>
            <description>The definition of the tool interface</description>
            <columns>
               <column>
                  <column_name>pdl.ToolInterface.ID</column_name>
                  <!--primary key (surrogate)-->
                  <datatype>BIGINT</datatype>
                  <description>primary key for ToolInterface</description>
                  <indexed>true</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ToolInterface.input</column_name>
                  <!--reference to pdl:ParameterGroup-->
                  <datatype>BIGINT</datatype>
                  <description>The group of of parameters that are required for tool execution - i.e. input</description>
                  <utype>pdl:ToolInterface.input</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
               <column>
                  <column_name>pdl.ToolInterface.output</column_name>
                  <!--reference to pdl:ParameterGroup-->
                  <datatype>BIGINT</datatype>
                  <description>The group of parameters that are produced by tool execution - i.e. output</description>
                  <utype>pdl:ToolInterface.output</utype>
                  <indexed>false</indexed>
                  <principal>false</principal>
                  <std>true</std>
               </column>
            </columns>
            <fkeys>
               <foreignKey>
                  <key_id>FK_ToolInterface.input</key_id>
                  <!--reference to pdl:ParameterGroup -->
                  <target_table>pdl.ParameterGroup</target_table>
                  <description>The group of of parameters that are required for tool execution - i.e. input</description>
                  <utype>pdl:ToolInterface.input</utype>
                  <columns>
                     <fKColumn>
                        <from_column>pdl.ToolInterface.input</from_column>
                        <target_column>pdl.ParameterGroup.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
               <foreignKey>
                  <key_id>FK_ToolInterface.output</key_id>
                  <!--reference to pdl:ParameterGroup -->
                  <target_table>pdl.ParameterGroup</target_table>
                  <description>The group of parameters that are produced by tool execution - i.e. output</description>
                  <utype>pdl:ToolInterface.output</utype>
                  <columns>
                     <fKColumn>
                        <from_column>pdl.ToolInterface.output</from_column>
                        <target_column>pdl.ParameterGroup.ID</target_column>
                     </fKColumn>
                  </columns>
               </foreignKey>
            </fkeys>
         </table>
      </tables>
   </schema>
</tap:tapschemaModel>
