| Title: Workflow Components |
| Notice: Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| . |
| http://www.apache.org/licenses/LICENSE-2.0 |
| . |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| [TOC] |
| |
| ## Overview |
| Taverna Workflow Components are a system for creating shareable, reusable, |
| encapsulated sub-workflows that perform clearly defined tasks while abstracting |
| the details of how those tasks are performed. |
| They are an integrated feature of Taverna since Workbench 2.5.0 and Server 2.5.4. |
| |
| Taverna's system of service components was developed as part of the BioVeL and SCAPE projects. They consist of tools for the creation, management and use of workflow components, |
| along with a repository for the storage and sharing of those components. |
| Workflow components within a given component family will work together cleanly, |
| for example, by adhering to a tidy type system and being well described. |
| |
| ## Requirements |
| |
| A set of minimal functional requirements for service component management has been developed. These requirements are |
| based upon previous component-related work carried out as part of the e-Lico project as well as an examination of the needs of BioVeL and SCAPE. |
| |
| The requirements include: |
| |
| - The ability to create components |
| - The specification of the characteristics that are necessary for a set of components to |
| ‘play’ together – called a ‘component profile’ |
| - Creating a component so it complies with a given profile |
| - Checking that a component complies with a given profile |
| - Publishing a component |
| - Discovering a component |
| - Including a component in a workflow |
| - Executing the component within a workflow run |
| |
| <img class="aligncenter" title="The Model of Components" src="/img/registry.png" alt="" |
| width="433" height="251" /> |
| |
| ## Workflows |
| ### Example workflow with components |
| |
| This is an example workflow that includes components, with internal ports hidden for simplicity: |
| |
| <img class="alignnone" title="Componentized Workflow" src="/img/component_b_1.png" alt="" |
| width="679" height="294" /> |
| |
| Without components, using the same view, it would instead look like this: |
| |
| [<img class="aligncenter" title="Un-componentized Workflow" src="/img/component_c.png" alt="" width="245" height="526" />](http://www.taverna.org.uk/pages/wp-content/uploads/2013/05/component_c.png) |
| |
| ### Including a component in a workflow |
| |
| A component can be added into a Taverna workflow in the same way as an ordinary service: |
| by dragging it from the service panel of the workbench into the workflow design view. |
| *Although it may be realized internally as a workflow, |
| a user sees it as a ‘black box’ and cannot (normally) edit the component’s workflow.* |
| |
| <img class="aligncenter" src="/img/arch3.png" alt="" width="500" height="401" /> |
| |
| It is intended that there will be consistency checks to ensure components are only plugged |
| together in a sensible manner, and for the discovery of (and connection to) suitable components |
| based upon existing workflow structure. |
| |
| ### Executing a component in a workflow run |
| |
| When a component is invoked during a workflow run, the underlying workflow is called with the |
| corresponding data. |
| The results of the workflow are used as the output data for the component invocation. |
| *The user sees the component invocation as a ‘black box’ and cannot see details of |
| what happens inside.* |
| |
| >If you publish a workflow containing a component, you *must* make sure the |
| component is publicly readable in a globally-accessible component registry; |
| myExperiment is such a suitable registry. |
| |
| ## Components |
| ### Component creation |
| |
| It was decided that the majority of the information necessary for a component will be specified |
| as a Taverna workflow. |
| This allows complex internal component functionality and removes the need for extensive new |
| software to design components. |
| |
| <img class="aligncenter" src="/img/arch1.png" alt="" width="340" height="433" /> |
| |
| ### Component profile |
| |
| A specification of the format for the component profile has been agreed. |
| The format is in XML and an XML schema (xsd) has been created. |
| An example [component profile](http://www.myexperiment.org/files/905/versions/1/download/Characterisation%20Component.xml) |
| is available. |
| Components that share a profile will be collected together into component families. |
| A [component profile editor](/documentation/components/component-profile-editor) |
| is being developed. |
| |
| <p style="text-align: center;"> |
| <img class="aligncenter" src="/img/arch2.png" alt="" width="359" height="412" /> |
| </p> |
| |
| The SCAPE project has an |
| [extended discussion of component profiles](https://github.com/openpreserve/scape-component-profiles) |
| available. |
| |
| ### Component creation against a profile |
| |
| In order to conform to a component profile, it can be necessary to make semantic annotations |
| parts of the corresponding workflow. |
| For example, the annotation of the type of format in which data is output by a port or |
| a service with the task it performs. |
| |
| The component profile specifies the ontologies that will be used for the components within the |
| family, the correspondence between object classes within a workflow |
| (input port, service etc.) and the concepts within the ontologies. |
| |
| ### Checking a component against a profile |
| |
| Although the components will be modified using a chosen profile, |
| it is unlikely that the components can be assured as being ‘correct by construction’. |
| For this reason, a separate |
| [component validator](/documentation/components/component-validator) |
| is being implemented. |
| The component validator is included within |
| [myExperiment](http://www.myexperiment.org). |
| |
| ### Publishing a component |
| |
| Since components are realized as ‘extensions’ to Taverna workflows, |
| it was decided that rather than using a separate component repository, |
| the extensive capabilities of myExperiment would be used. |
| Thus a component is currently published and shared on myExperiment as (a pack containing) |
| a workflow. |
| The components themselves are items within a pack corresponding to the component family. |
| |
| To facilitate the development of components, a workflow can also be saved to the user’s local |
| machine. |
| |
| When a user publishes a component either to myExperiment or to their local file system, |
| their service panel is updated to reflect the new component. |
| |
| ### Discovering a component |
| |
| Since component families are realized as packs on myExperiment |
| (or by analogous structures in the user’s file system), |
| we use the existing Taverna code to talk to the myExperiment REST interface to give users |
| access to families of components. |
| Users can then see the discovered families of components via the Taverna Workbench service |
| panel, and the components within those families. |
| A component can then be added to a workflow. |