##
##  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.

@base <http://ns.taverna.org.uk/2010/workflowBundle/01348671-5aaa-4cc2-84cc-477329b70b0d/workflow/Hello_Anyone/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix wfdesc: <http://purl.org/wf4ever/wfdesc#> .
@prefix wf4ever: <http://purl.org/wf4ever/wf4ever#> .
@prefix roterms: <http://purl.org/wf4ever/roterms#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix comp: <http://purl.org/DP/components#> .
@prefix dep: <http://scape.keep.pt/vocab/dependencies#> .
@prefix biocat: <http://biocatalogue.org/attribute/> .
@prefix : <#> .

<processor/Concatenate_two_strings/> a wfdesc:Process , wfdesc:Description , owl:Thing , wf4ever:BeanshellScript ;
	rdfs:label "Concatenate_two_strings" ;
	wfdesc:hasInput <processor/Concatenate_two_strings/in/string1> , <processor/Concatenate_two_strings/in/string2> ;
	wfdesc:hasOutput <processor/Concatenate_two_strings/out/output> ;
	wf4ever:script "output = string1 + string2;" .

<datalink?from=in/name&to=processor/Concatenate_two_strings/in/string2> a wfdesc:DataLink ;
	wfdesc:hasSource <in/name> ;
	wfdesc:hasSink <processor/Concatenate_two_strings/in/string2> .

<datalink?from=processor/Concatenate_two_strings/out/output&to=out/greeting> a wfdesc:DataLink ;
	wfdesc:hasSource <processor/Concatenate_two_strings/out/output> ;
	wfdesc:hasSink <out/greeting> .

<datalink?from=processor/hello/out/value&to=processor/Concatenate_two_strings/in/string1> a wfdesc:DataLink ;
	wfdesc:hasSource <processor/hello/out/value> ;
	wfdesc:hasSink <processor/Concatenate_two_strings/in/string1> .

<> a wfdesc:Workflow , wfdesc:Description , wfdesc:Process ;
	dcterms:description "An extension to helloworld.t2flow - this workflow takes a workflow input \"name\" which is combined with the string constant \"Hello, \" using the local worker \"Concatenate two strings\", and outputs the produced string to the workflow output \"greeting\"." ;
	dc:creator "Stian Soiland-Reyes" ;
	dcterms:title "Hello Anyone" ;
	rdfs:label "Hello_Anyone" ;
	wfdesc:hasInput <in/name> ;
	wfdesc:hasOutput <out/greeting> ;
	wfdesc:hasSubProcess <processor/Concatenate_two_strings/> , <processor/hello/> ;
	wfdesc:hasDataLink <datalink?from=processor/Concatenate_two_strings/out/output&to=out/greeting> , <datalink?from=processor/hello/out/value&to=processor/Concatenate_two_strings/in/string1> , <datalink?from=in/name&to=processor/Concatenate_two_strings/in/string2> .

<in/name> a wfdesc:Input , wfdesc:Description , wfdesc:Output ;
	dcterms:description "Your name for the greeting" ;
	biocat:exampleData "World!" ;
	rdfs:label "name" .

<out/greeting> a wfdesc:Output , wfdesc:Description , wfdesc:Input ;
	rdfs:label "greeting" .

<processor/Concatenate_two_strings/in/string1> a wfdesc:Input , wfdesc:Description ;
	rdfs:label "string1" .

<processor/Concatenate_two_strings/in/string2> a wfdesc:Input , wfdesc:Description ;
	rdfs:label "string2" .

<processor/Concatenate_two_strings/out/output> a wfdesc:Output , wfdesc:Description ;
	rdfs:label "output" .

<processor/hello/> a wfdesc:Process , wfdesc:Description ;
	rdfs:label "hello" ;
	wfdesc:hasOutput <processor/hello/out/value> .

<processor/hello/out/value> a wfdesc:Output , wfdesc:Description ;
	rdfs:label "value" .
