The current profiles are available on [github|https://github.com/openplanets/scape-component-profiles/tree/master/profiles].
First draft of a component profile specification for the [Migration Action Component|SP:Preservation Component Profiles#Migration action component] example
{code:xml}
<?xml version="1.0"?>
<profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://ns.taverna.org.uk/2012/component/profile"
xsi:schemaLocation="http://ns.taverna.org.uk/2012/component/profile ComponentProfile.xsd">
<name>Migration Action Component</name>
<description>A SCAPE component for migration actions</description>
<ontology id="scape">http://www.myexperiment.org/files/864/versions/1/download/SCAPEcomponents.owl</ontology>
<component>
<inputPort maxDepth='1'>
<annotation>Example</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasPortType"
class="http://scape-project.eu/pc/vocab/profiles#PortType">
http://scape-project.eu/pc/vocab/profiles#FromURIPort
</semanticAnnotation>
</inputPort>
<inputPort maxDepth='1'>
<annotation>Example</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasPortType"
class="http://scape-project.eu/pc/vocab/profiles#PortType">
http://scape-project.eu/pc/vocab/profiles#ToURIPort
</semanticAnnotation>
</inputPort>
<inputPort maxDepth='1' minOccurs="0" maxOccurs="unbounded">
<annotation>Example</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasPortType"
class="http://scape-project.eu/pc/vocab/profiles#PortType">
http://scape-project.eu/pc/vocab/profiles#ParameterPort
</semanticAnnotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasParameter"
class="http://scape-project.eu/pc/vocab/profiles#DefaultParameter"
maxOccurs="unbounded" />
</inputPort>
<activity type="Tool" minOccurs="0" maxOccurs="unbounded">
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasDependency"
class="http://scape-project.eu/pc/vocab/profiles#Dependency"
maxOccurs="unbounded" />
</activity>
<activity minOccurs="0" maxOccurs="unbounded" />
<annotation>Title</annotation>
<annotation minOccurs="0">Description</annotation>
<annotation minOccurs="0">Author</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasMigrationPath"
class="http://scape-project.eu/pc/vocab/profiles#MigrationPath"
maxOccurs="unbounded" />
</component>
</profile>
{code}
XML Schema for Component Profiles
{code:xml}
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ns.taverna.org.uk/2012/component/profile"
xmlns="http://ns.taverna.org.uk/2012/component/profile" xmlns:cp="http://ns.taverna.org.uk/2012/component/profile"
elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/2001/XMLSchema"
schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />
<xs:simpleType name="name">
<xs:annotation>
<xs:documentation>A valid name for a port or activity in a Taverna
workflow.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="([a-zA_Z0-9_])+" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="componentElements">
<xs:annotation>
<xs:documentation>
The component elements that can be annotated.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="InputPort"></xs:enumeration>
<xs:enumeration value="OutputPort"></xs:enumeration>
<xs:enumeration value="Activity"></xs:enumeration>
<xs:enumeration value="Component"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="basicAnnotations">
<xs:annotation>
<xs:documentation>
The basic annotations available in a Taverna
workflow.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="Description"></xs:enumeration>
<xs:enumeration value="Author"></xs:enumeration>
<xs:enumeration value="Example"></xs:enumeration>
<xs:enumeration value="Title"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="componentAnnotations">
<xs:annotation>
<xs:documentation>
Annotations applicable to components.
</xs:documentation>
</xs:annotation>
<xs:restriction base="basicAnnotations">
<xs:enumeration value="Description"></xs:enumeration>
<xs:enumeration value="Author"></xs:enumeration>
<xs:enumeration value="Title"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="portAnnotations">
<xs:annotation>
<xs:documentation>
Annotations applicable to ports.
</xs:documentation>
</xs:annotation>
<xs:restriction base="basicAnnotations">
<xs:enumeration value="Description"></xs:enumeration>
<xs:enumeration value="Example"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="activityAnnotations">
<xs:annotation>
<xs:documentation>
Annotations applicable to activities.
</xs:documentation>
</xs:annotation>
<xs:restriction base="basicAnnotations">
<xs:enumeration value="Description"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="componentAnnotation">
<xs:simpleContent>
<xs:extension base="componentAnnotations">
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="portAnnotation">
<xs:simpleContent>
<xs:extension base="portAnnotations">
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="activityAnnotation">
<xs:simpleContent>
<xs:extension base="activityAnnotations">
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="semanticAnnotation">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="ontology" type="xs:string" use="required" />
<xs:attribute name="predicate" type="xs:string" use="required" />
<xs:attribute name="class" type="xs:string" use="required" />
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ontology">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="id" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="port">
<xs:sequence>
<xs:element name="annotation" type="portAnnotation"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="semanticAnnotation" type="semanticAnnotation"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="name" />
<xs:attribute name="minDepth" type="xs:nonNegativeInteger"
default="0" />
<xs:attribute name="maxDepth" type="xs:allNNI" default="unbounded" />
<xs:attributeGroup ref="xs:occurs" />
</xs:complexType>
<xs:complexType name="activity">
<xs:sequence>
<xs:element name="annotation" type="activityAnnotation"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="semanticAnnotation" type="semanticAnnotation"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="type" type="xs:string" />
<xs:attributeGroup ref="xs:occurs" />
</xs:complexType>
<xs:complexType name="component">
<xs:sequence>
<xs:element name="inputPort" type="port" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="outputPort" type="port" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="activity" type="activity" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="annotation" type="componentAnnotation" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="semanticAnnotation" type="semanticAnnotation" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="profile">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:element name="ontology" type="ontology" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="component" type="component" >
<xs:unique name="inputPortUnique">
<xs:selector xpath="cp:inputPort"></xs:selector>
<xs:field xpath="@name"></xs:field>
</xs:unique>
<xs:unique name="outputPortUnique">
<xs:selector xpath="cp:outputPort" />
<xs:field xpath="@name" />
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="ontologyKey">
<xs:selector xpath="cp:ontology" />
<xs:field xpath="@id" />
</xs:key>
<xs:keyref name="componentKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
<xs:keyref name="inputKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:inputPorts/cp:inputPort/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
<xs:keyref name="outputKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:outputPorts/cp:outputPort/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
<xs:keyref name="activityKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:activities/cp:activity/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
</xs:element>
</xs:schema>
{code}
First draft of a component profile specification for the [Migration Action Component|SP:Preservation Component Profiles#Migration action component] example
{code:xml}
<?xml version="1.0"?>
<profile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://ns.taverna.org.uk/2012/component/profile"
xsi:schemaLocation="http://ns.taverna.org.uk/2012/component/profile ComponentProfile.xsd">
<name>Migration Action Component</name>
<description>A SCAPE component for migration actions</description>
<ontology id="scape">http://www.myexperiment.org/files/864/versions/1/download/SCAPEcomponents.owl</ontology>
<component>
<inputPort maxDepth='1'>
<annotation>Example</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasPortType"
class="http://scape-project.eu/pc/vocab/profiles#PortType">
http://scape-project.eu/pc/vocab/profiles#FromURIPort
</semanticAnnotation>
</inputPort>
<inputPort maxDepth='1'>
<annotation>Example</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasPortType"
class="http://scape-project.eu/pc/vocab/profiles#PortType">
http://scape-project.eu/pc/vocab/profiles#ToURIPort
</semanticAnnotation>
</inputPort>
<inputPort maxDepth='1' minOccurs="0" maxOccurs="unbounded">
<annotation>Example</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasPortType"
class="http://scape-project.eu/pc/vocab/profiles#PortType">
http://scape-project.eu/pc/vocab/profiles#ParameterPort
</semanticAnnotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasParameter"
class="http://scape-project.eu/pc/vocab/profiles#DefaultParameter"
maxOccurs="unbounded" />
</inputPort>
<activity type="Tool" minOccurs="0" maxOccurs="unbounded">
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasDependency"
class="http://scape-project.eu/pc/vocab/profiles#Dependency"
maxOccurs="unbounded" />
</activity>
<activity minOccurs="0" maxOccurs="unbounded" />
<annotation>Title</annotation>
<annotation minOccurs="0">Description</annotation>
<annotation minOccurs="0">Author</annotation>
<semanticAnnotation ontology="scape"
predicate="http://scape-project.eu/pc/vocab/profiles#hasMigrationPath"
class="http://scape-project.eu/pc/vocab/profiles#MigrationPath"
maxOccurs="unbounded" />
</component>
</profile>
{code}
XML Schema for Component Profiles
{code:xml}
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://ns.taverna.org.uk/2012/component/profile"
xmlns="http://ns.taverna.org.uk/2012/component/profile" xmlns:cp="http://ns.taverna.org.uk/2012/component/profile"
elementFormDefault="qualified">
<xs:import namespace="http://www.w3.org/2001/XMLSchema"
schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />
<xs:simpleType name="name">
<xs:annotation>
<xs:documentation>A valid name for a port or activity in a Taverna
workflow.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="([a-zA_Z0-9_])+" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="componentElements">
<xs:annotation>
<xs:documentation>
The component elements that can be annotated.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="InputPort"></xs:enumeration>
<xs:enumeration value="OutputPort"></xs:enumeration>
<xs:enumeration value="Activity"></xs:enumeration>
<xs:enumeration value="Component"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="basicAnnotations">
<xs:annotation>
<xs:documentation>
The basic annotations available in a Taverna
workflow.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="Description"></xs:enumeration>
<xs:enumeration value="Author"></xs:enumeration>
<xs:enumeration value="Example"></xs:enumeration>
<xs:enumeration value="Title"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="componentAnnotations">
<xs:annotation>
<xs:documentation>
Annotations applicable to components.
</xs:documentation>
</xs:annotation>
<xs:restriction base="basicAnnotations">
<xs:enumeration value="Description"></xs:enumeration>
<xs:enumeration value="Author"></xs:enumeration>
<xs:enumeration value="Title"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="portAnnotations">
<xs:annotation>
<xs:documentation>
Annotations applicable to ports.
</xs:documentation>
</xs:annotation>
<xs:restriction base="basicAnnotations">
<xs:enumeration value="Description"></xs:enumeration>
<xs:enumeration value="Example"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="activityAnnotations">
<xs:annotation>
<xs:documentation>
Annotations applicable to activities.
</xs:documentation>
</xs:annotation>
<xs:restriction base="basicAnnotations">
<xs:enumeration value="Description"></xs:enumeration>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="componentAnnotation">
<xs:simpleContent>
<xs:extension base="componentAnnotations">
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="portAnnotation">
<xs:simpleContent>
<xs:extension base="portAnnotations">
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="activityAnnotation">
<xs:simpleContent>
<xs:extension base="activityAnnotations">
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="semanticAnnotation">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="ontology" type="xs:string" use="required" />
<xs:attribute name="predicate" type="xs:string" use="required" />
<xs:attribute name="class" type="xs:string" use="required" />
<xs:attributeGroup ref="xs:occurs" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="ontology">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="id" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="port">
<xs:sequence>
<xs:element name="annotation" type="portAnnotation"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="semanticAnnotation" type="semanticAnnotation"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="name" />
<xs:attribute name="minDepth" type="xs:nonNegativeInteger"
default="0" />
<xs:attribute name="maxDepth" type="xs:allNNI" default="unbounded" />
<xs:attributeGroup ref="xs:occurs" />
</xs:complexType>
<xs:complexType name="activity">
<xs:sequence>
<xs:element name="annotation" type="activityAnnotation"
minOccurs="0" maxOccurs="unbounded" />
<xs:element name="semanticAnnotation" type="semanticAnnotation"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="type" type="xs:string" />
<xs:attributeGroup ref="xs:occurs" />
</xs:complexType>
<xs:complexType name="component">
<xs:sequence>
<xs:element name="inputPort" type="port" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="outputPort" type="port" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="activity" type="activity" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="annotation" type="componentAnnotation" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="semanticAnnotation" type="semanticAnnotation" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="profile">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="description" type="xs:string" />
<xs:element name="ontology" type="ontology" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="component" type="component" >
<xs:unique name="inputPortUnique">
<xs:selector xpath="cp:inputPort"></xs:selector>
<xs:field xpath="@name"></xs:field>
</xs:unique>
<xs:unique name="outputPortUnique">
<xs:selector xpath="cp:outputPort" />
<xs:field xpath="@name" />
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="ontologyKey">
<xs:selector xpath="cp:ontology" />
<xs:field xpath="@id" />
</xs:key>
<xs:keyref name="componentKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
<xs:keyref name="inputKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:inputPorts/cp:inputPort/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
<xs:keyref name="outputKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:outputPorts/cp:outputPort/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
<xs:keyref name="activityKeyRef" refer="ontologyKey">
<xs:selector xpath="cp:component/cp:activities/cp:activity/cp:semanticAnnotation" />
<xs:field xpath="@ontology" />
</xs:keyref>
</xs:element>
</xs:schema>
{code}