Hi,

I should have said, this is the input for the workflow: 9787464168243972

cheers,
Paul.

Paul Fisher wrote:
Hi,

I have constructed an Ondex workflow in Taverna 1.7.1, and ported it to Taverna 2.1. I have now resolved the mis-match port depths that was most annoying. I started to run it this morning, but it took 'ages' to complete the iterations over a nested workflow compared to that of Taverna 1.7.1. So, I turned off the provenance and closed the workbench. I then restarted the workflow, using on-disk storage and caching (faster - apparently) and re-ran it.

At 3:30pm I stopped it as it still hadn't finished the 1st set of nested workflow iterations and had resulted in a Out of Memory error. In Taverna 1.7.1 this same process takes 20 minutes and the whole workflow completes. I can only assume that something is 'leaking memory' at some point. Or something else is going wrong.

I've also tried to run it in the nightly snapshot build but all I get is an error being passed through.

Any thoughts?

regards,
Paul.

------------------------------------------------------------------------

------------------------------------------------------------------------------
------------------------------------------------------------------------

_______________________________________________
taverna-users mailing list
[email protected]
[email protected]
Web site: http://www.taverna.org.uk
Mailing lists: http://www.taverna.org.uk/taverna-mailing-lists/

<?xml version="1.0" encoding="UTF-8"?>
<s:scufl xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha"; version="0.2" log="0">
  <s:workflowdescription lsid="urn:lsid:www.mygrid.org.uk:operation:P81DV9PQW02" author="Paul Fisher" title="Enzyme to Pubmed">This workflow takes in a list of KEGG enzyme descriptions and searches the PubMed database for corresponding articles. Any matches to the enzymes are then retrieved (abstracts only). These abstracts are then returned to the user.</s:workflowdescription>
  <s:processor name="extract_enzyme_terms">
    <s:beanshell>
      <s:scriptvalue>// InChI=1/C6H13O9P/c7-3-2(1-14-16(11,12)13)15-6(10)5(9)4(3)8/h2-10H,1H2,(H2,11,12,13)/t2-,3-,4+,5-,6+/m1/s1 

//ec:2.4.1.15 alpha,alpha-trehalose-phosphate synthase (UDP-forming); UDP-glucose---glucose-phosphate glucosyltransferase; trehalosephosphate-UDP glucosyltransferase; UDP-glucose-glucose-phosphate glucosyltransferase; alpha,alpha-trehalose phosphate synthase (UDP-forming); phosphotrehalose-uridine diphosphate transglucosylase; trehalose 6-phosphate synthase; trehalose 6-phosphate synthetase; trehalose phosphate synthase; trehalose phosphate synthetase; trehalose phosphate-uridine diphosphate glucosyltransferase; trehalose-P synthetase; transglucosylase; uridine diphosphoglucose phosphate glucosyltransferase
//ec:2.7.1.1 hexokinase; hexokinase type IV glucokinase; hexokinase D; hexokinase type IV; hexokinase (phosphorylating); ATP-dependent hexokinase; glucose ATP phosphotransferase
//ec:2.7.1.2 glucokinase; glucokinase (phosphorylating)
//ec:2.7.1.63 polyphosphate---glucose phosphotransferase; polyphosphate glucokinase; polyphosphate-D-(+)-glucose-6-phosphotransferase; polyphosphate-glucose 6-phosphotransferase
//ec:2.7.1.69 protein-Npi-phosphohistidine---sugar phosphotransferase; glucose permease; PTS permease; phosphotransferase, phosphohistidinoprotein-hexose; enzyme IIl4ac; gene glC proteins; gene bglC RNA formation factors; PEP-dependent phosphotransferase enzyme II; PEP-sugar phosphotransferase enzyme II; phosphoenolpyruvate-sugar phosphotransferase enzyme II; phosphohistidinoprotein-hexose phosphotransferase; phosphohistidinoprotein-hexose phosphoribosyltransferase; phosphoprotein factor-hexose phosophotransferase; protein, specific or class, gene bglC; ribonucleic acid formation factor, gene glC; sucrose phosphotransferase system II; protein-Npi-phosphohistidine:sugar N-pros-phosphotransferase; protein-Npi-phosphohistidine:sugar Npi-phosphotransferase
//ec:3.1.3.9 glucose-6-phosphatase; glucose 6-phosphate phosphatase

String output = "";

if(input.equals(""))
{
	output = "";
}
else
{
	input = input.trim();
	String[] split = input.split("\n");
	Vector nonEmpty = new Vector();
//	System.out.println("----------------------------------------\n");
//22
	for (int i = 0; i &lt; split.length; i++) 
	{
		if(!(split[i].equals("")))
		{
//			System.out.println(split[i] + "\n");

			try
			{			
				String enzymes = split[i].substring(split[i].indexOf(" "));
//				System.out.println("Enzyme is: " + enzymes + "\n");

				if(enzymes.contains(";"))
				{
					String[] enzyme_array = enzymes.split(";");
					for (int j = 0; j &lt; enzyme_array.length; j++) 
					{
						mytext = enzyme_array[j];
						nonEmpty.add("(" + mytext + ")");
					}	
				}
				else
				{
					String mytext = enzymes;
					nonEmpty.add("(" + mytext + ")");	
				}	
			}
			catch(Exception e)
			{
				System.out.println(e + " was the error\n");
			}
		}
//41
		for (int k = 0; k &lt; nonEmpty.size(); k++)
		{
			if(k == 0)
			{
				output = (String) nonEmpty.elementAt(k);
			}
			else
			{
				output = output + " OR " + (String) nonEmpty.elementAt(k);
			}		
		}
		
		output = output + " AND Saccharomyces";
	}
}
output = output + "\n";

//output = "daxx AND trypanosomiasis\n";</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">input</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="remove_enzyme_abstracts_nulls">
    <s:beanshell>
      <s:scriptvalue>String[] split = input.split("\n");
Vector nonEmpty = new Vector();

for (int i = 0; i &lt; split.length; i++){
   if (!(split[i].equals("")))
   {
       nonEmpty.add(split[i].trim());
   }
}

String[] non_empty = new String[nonEmpty.size()];

for (int i = 0; i &lt; non_empty.length; i ++)
{
   non_empty[i] = nonEmpty.elementAt(i);
}

String output = "";

for (int i = 0; i &lt; non_empty.length; i++)
{
	output = output + (String) (non_empty[i] + "\n");
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">input</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="remove_Null_concept_values">
    <s:beanshell>
      <s:scriptvalue>String[] split = input.split("\n");
Vector nonEmpty = new Vector();

for (int i = 0; i &lt; split.length; i++){
   if (!(split[i].equals("")))
   {
       nonEmpty.add(split[i].trim());
   }
}

String[] non_empty = new String[nonEmpty.size()];

for (int i = 0; i &lt; non_empty.length; i ++)
{
   non_empty[i] = nonEmpty.elementAt(i);
}

String output = "";

for (int i = 0; i &lt; 3; i++)
{
	output = output + (String) (non_empty[i] + "\n");
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">input</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="merge_concept_values">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="merge_compound_list">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="merge_inchi_abstracts">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="local_file_URL" boring="true">
    <s:stringconstant>C:\Users\Paul Fisher\Documents\Ondex Stuff\data\compound.inchi</s:stringconstant>
  </s:processor>
  <s:processor name="Read_KEGG_InChIs">
    <s:local>net.sourceforge.taverna.scuflworkers.io.TextFileReader</s:local>
  </s:processor>
  <s:processor name="compound_and_abstract">
    <s:beanshell>
      <s:scriptvalue>String output = "";

if(!(abstracts.equals("")))
{
	String compound_name = compound;
	String[] split = abstracts.split("\n");

	Vector nonEmpty = new Vector();

	for (int i = 0; i &lt; split.length; i++) 
	{		
		String trimmed = split[i].trim();
		nonEmpty.add(trimmed);
	}



	for (int i = 0; i &lt; nonEmpty.size(); i++)
	{
		output = output + compound_name + "\t" + (String) (nonEmpty.elementAt(i)) + "\n";
	}
}
else
{
	output = output + compound_name + "\t" + "No Abstracts" + "\n";
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">abstracts</s:beanshellinput>
        <s:beanshellinput s:syntactictype="'text/plain'">compound</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
    <s:iterationstrategy>
      <i:dot xmlns:i="http://org.embl.ebi.escience/xscufliteration/0.1beta10";>
        <i:iterator name="compound" />
        <i:iterator name="abstracts" />
      </i:dot>
    </s:iterationstrategy>
  </s:processor>
  <s:processor name="concepts_output_xml">
    <s:local>
      org.embl.ebi.escience.scuflworkers.java.XMLOutputSplitter
      <s:extensions>
        <s:complextype optional="false" unbounded="false" typename="getConceptsResponse" name="parameters" qname="{http://webservice.ondex.sourceforge.net/}getConceptsResponse";>
          <s:elements>
            <s:arraytype optional="true" unbounded="true" wrapped="false" typename="wsConcept" name="concepts" qname="getConceptsResponse&gt;concepts">
              <s:elementtype>
                <s:complextype optional="false" unbounded="false" typename="wsConcept" name="" qname="{http://webservice.ondex.sourceforge.net/}wsConcept";>
                  <s:elements>
                    <s:basetype optional="true" unbounded="false" typename="string" name="annotation" qname="wsConcept&gt;annotation" />
                    <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsConcept&gt;description" />
                    <s:complextype optional="true" unbounded="false" typename="wscv" name="elementOf" qname="wsConcept&gt;elementOf">
                      <s:elements>
                        <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wscv&gt;description" />
                        <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wscv&gt;fullname" />
                        <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wscv&gt;id" />
                      </s:elements>
                    </s:complextype>
                    <s:basetype optional="true" unbounded="false" typename="int" name="id" qname="wsConcept&gt;id" />
                    <s:complextype optional="true" unbounded="false" typename="wsConceptClass" name="ofType" qname="wsConcept&gt;ofType">
                      <s:elements>
                        <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsConceptClass&gt;description" />
                        <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsConceptClass&gt;fullname" />
                        <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsConceptClass&gt;id" />
                        <s:complextype optional="true" unbounded="false" typename="wsConceptClass" name="specialisationOf" qname="wsConceptClass&gt;specialisationOf">
                          <s:elements>
                            <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsConceptClass&gt;description" />
                            <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsConceptClass&gt;fullname" />
                            <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsConceptClass&gt;id" />
                            <s:complextype id="wsConceptClass&gt;specialisationOf" optional="true" unbounded="false" typename="wsConceptClass" name="specialisationOf" />
                          </s:elements>
                        </s:complextype>
                      </s:elements>
                    </s:complextype>
                  </s:elements>
                </s:complextype>
              </s:elementtype>
            </s:arraytype>
          </s:elements>
        </s:complextype>
      </s:extensions>
    </s:local>
  </s:processor>
  <s:processor name="get_concept_gds">
    <s:description>This workflow takes in an Ondex graph id, a concept id within the graph, and the id of the attribute that is to be returned from the general data store.</s:description>
    <s:workflow>
      <s:scufl version="0.2" log="0">
        <s:workflowdescription lsid="urn:lsid:net.sf.taverna:wfDefinition:3c0d822f-6006-40f3-ac21-7eb4e2389ff2" author="Paul Fisher" title="Get Concept GDS">This workflow takes in an Ondex graph id, a concept id within the graph, and the id of the attribute that is to be returned from the general data store.</s:workflowdescription>
        <s:processor name="merge_id_value">
          <s:beanshell>
            <s:scriptvalue>String output = "";

if((!(id.equals(""))) &amp;&amp; (!(value.equals(""))))
{

	String id_input = id.trim();
	String value_input = value.trim();

	String[] id_s = id_input.split("\n");
	String[] values = value_input.split("\n");

	String single_id = id_s[0];
	Vector nonEmpty = new Vector();

	for(int i = 0; i &lt; values.length; i++)
	{
		if(values[i].contains("InChI"))
		{
			String inchi = values[i];
		//	System.out.println("Found inchi\n");
			if(values[0].equals("0.0"))
			{
				nonEmpty.add(single_id + "\t" + inchi);
		//		System.out.println("Number is 0.0\n");
			}
		}
	}

	String[] non_empty = new String[nonEmpty.size()];

	if(nonEmpty.size().equals("0"))
	{
		output = "";
	}
	else
	{
		for(int j = 0; j &lt; nonEmpty.size(); j++)
		{
			non_empty[j] = nonEmpty.elementAt(j);
		}

		for (int k = 0; k &lt; non_empty.length; k++)
		{
			output = output + non_empty[k];
		}
	}
}
else
{
	output = "";
}</s:scriptvalue>
            <s:beanshellinputlist>
              <s:beanshellinput s:syntactictype="'text/plain'">id</s:beanshellinput>
              <s:beanshellinput s:syntactictype="'text/plain'">value</s:beanshellinput>
            </s:beanshellinputlist>
            <s:beanshelloutputlist>
              <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
            </s:beanshelloutputlist>
            <s:dependencies s:classloader="iteration" />
          </s:beanshell>
        </s:processor>
        <s:processor name="merge_values">
          <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
        </s:processor>
        <s:processor name="conceptGDS_s_xml">
          <s:local>
            org.embl.ebi.escience.scuflworkers.java.XMLInputSplitter
            <s:extensions>
              <s:complextype optional="false" unbounded="false" typename="getConceptGDSs" name="parameters" qname="{http://webservice.ondex.sourceforge.net/}getConceptGDSs";>
                <s:elements>
                  <s:basetype optional="true" unbounded="false" typename="long" name="graphId" qname="getConceptGDSs&gt;graphId" />
                  <s:basetype optional="true" unbounded="false" typename="int" name="conceptId" qname="getConceptGDSs&gt;conceptId" />
                </s:elements>
              </s:complextype>
            </s:extensions>
          </s:local>
        </s:processor>
        <s:processor name="parametersXML">
          <s:local>
            org.embl.ebi.escience.scuflworkers.java.XMLOutputSplitter
            <s:extensions>
              <s:complextype optional="false" unbounded="false" typename="getConceptGDSsResponse" name="parameters" qname="{http://webservice.ondex.sourceforge.net/}getConceptGDSsResponse";>
                <s:elements>
                  <s:arraytype optional="true" unbounded="true" wrapped="false" typename="wsConceptGDS" name="conceptGDSs" qname="getConceptGDSsResponse&gt;conceptGDSs">
                    <s:elementtype>
                      <s:complextype optional="false" unbounded="false" typename="wsConceptGDS" name="" qname="{http://webservice.ondex.sourceforge.net/}wsConceptGDS";>
                        <s:elements>
                          <s:complextype optional="true" unbounded="false" typename="wsAttributeName" name="attributeName" qname="wsConceptGDS&gt;attributeName">
                            <s:elements>
                              <s:basetype optional="true" unbounded="false" typename="string" name="datatype" qname="wsAttributeName&gt;datatype" />
                              <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsAttributeName&gt;description" />
                              <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsAttributeName&gt;fullname" />
                              <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsAttributeName&gt;id" />
                              <s:complextype optional="true" unbounded="false" typename="wsAttributeName" name="specialisationOf" qname="wsAttributeName&gt;specialisationOf">
                                <s:elements>
                                  <s:basetype optional="true" unbounded="false" typename="string" name="datatype" qname="wsAttributeName&gt;datatype" />
                                  <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsAttributeName&gt;description" />
                                  <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsAttributeName&gt;fullname" />
                                  <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsAttributeName&gt;id" />
                                  <s:complextype id="wsAttributeName&gt;specialisationOf" optional="true" unbounded="false" typename="wsAttributeName" name="specialisationOf" />
                                  <s:complextype optional="true" unbounded="false" typename="wsUnit" name="unit" qname="wsAttributeName&gt;unit">
                                    <s:elements>
                                      <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsUnit&gt;description" />
                                      <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsUnit&gt;fullname" />
                                      <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsUnit&gt;id" />
                                    </s:elements>
                                  </s:complextype>
                                </s:elements>
                              </s:complextype>
                              <s:complextype id="wsAttributeName&gt;unit" optional="true" unbounded="false" typename="wsUnit" name="unit" />
                            </s:elements>
                          </s:complextype>
                          <s:basetype optional="true" unbounded="false" typename="int" name="owningConceptId" qname="wsConceptGDS&gt;owningConceptId" />
                          <s:basetype optional="true" unbounded="false" typename="anyType" name="value" qname="wsConceptGDS&gt;value" />
                        </s:elements>
                      </s:complextype>
                    </s:elementtype>
                  </s:arraytype>
                </s:elements>
              </s:complextype>
            </s:extensions>
          </s:local>
        </s:processor>
        <s:processor name="conceptGDSsXML">
          <s:local>
            org.embl.ebi.escience.scuflworkers.java.XMLOutputSplitter
            <s:extensions>
              <s:complextype optional="false" unbounded="false" typename="wsConceptGDS" name="" qname="{http://webservice.ondex.sourceforge.net/}wsConceptGDS";>
                <s:elements>
                  <s:complextype optional="true" unbounded="false" typename="wsAttributeName" name="attributeName" qname="wsConceptGDS&gt;attributeName">
                    <s:elements>
                      <s:basetype optional="true" unbounded="false" typename="string" name="datatype" qname="wsAttributeName&gt;datatype" />
                      <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsAttributeName&gt;description" />
                      <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsAttributeName&gt;fullname" />
                      <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsAttributeName&gt;id" />
                      <s:complextype optional="true" unbounded="false" typename="wsAttributeName" name="specialisationOf" qname="wsAttributeName&gt;specialisationOf">
                        <s:elements>
                          <s:basetype optional="true" unbounded="false" typename="string" name="datatype" qname="wsAttributeName&gt;datatype" />
                          <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsAttributeName&gt;description" />
                          <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsAttributeName&gt;fullname" />
                          <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsAttributeName&gt;id" />
                          <s:complextype id="wsAttributeName&gt;specialisationOf" optional="true" unbounded="false" typename="wsAttributeName" name="specialisationOf" />
                          <s:complextype optional="true" unbounded="false" typename="wsUnit" name="unit" qname="wsAttributeName&gt;unit">
                            <s:elements>
                              <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsUnit&gt;description" />
                              <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsUnit&gt;fullname" />
                              <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsUnit&gt;id" />
                            </s:elements>
                          </s:complextype>
                        </s:elements>
                      </s:complextype>
                      <s:complextype id="wsAttributeName&gt;unit" optional="true" unbounded="false" typename="wsUnit" name="unit" />
                    </s:elements>
                  </s:complextype>
                  <s:basetype optional="true" unbounded="false" typename="int" name="owningConceptId" qname="wsConceptGDS&gt;owningConceptId" />
                  <s:basetype optional="true" unbounded="false" typename="anyType" name="value" qname="wsConceptGDS&gt;value" />
                </s:elements>
              </s:complextype>
            </s:extensions>
          </s:local>
        </s:processor>
        <s:processor name="merge_ids">
          <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
        </s:processor>
        <s:processor name="getConceptGDSs">
          <s:arbitrarywsdl>
            <s:wsdl>http://rpc274.cs.man.ac.uk:8080/ondex/services/ondex-graph?wsdl</s:wsdl>
            <s:operation>getConceptGDSs</s:operation>
          </s:arbitrarywsdl>
        </s:processor>
        <s:link source="conceptId" sink="conceptGDS_s_xml:conceptId" />
        <s:link source="graphId" sink="conceptGDS_s_xml:graphId" />
        <s:link source="conceptGDS_s_xml:output" sink="getConceptGDSs:parameters" />
        <s:link source="conceptGDSsXML:owningConceptId" sink="merge_ids:stringlist" />
        <s:link source="conceptGDSsXML:value" sink="merge_values:stringlist" />
        <s:link source="getConceptGDSs:parameters" sink="parametersXML:input" />
        <s:link source="merge_ids:concatenated" sink="merge_id_value:id" />
        <s:link source="merge_values:concatenated" sink="merge_id_value:value" />
        <s:link source="parametersXML:conceptGDSs" sink="conceptGDSsXML:input" />
        <s:link source="merge_id_value:output" sink="concept_id_value" />
        <s:source name="graphId" />
        <s:source name="conceptId" />
        <s:sink name="concept_id_value" />
      </s:scufl>
    </s:workflow>
    <s:iterationstrategy>
      <i:cross xmlns:i="http://org.embl.ebi.escience/xscufliteration/0.1beta10";>
        <i:iterator name="graphId" />
        <i:iterator name="conceptId" />
      </i:cross>
    </s:iterationstrategy>
  </s:processor>
  <s:processor name="collapse_inchi_abstracts">
    <s:beanshell>
      <s:scriptvalue>//compound	pmid	date	abstract
//compound	inchi
String collapsed_abstracts = "";

if(!(inchi_compound.equals("")))
{
	Vector nonEmpty = new Vector();
	String[] inchi_compound_input = inchi_compound.split("\t");
	String[] compound_abstract_input = compound_abstract.split("\n");

	String kegg_code = inchi_compound_input[2].trim();
//	String inchi_code =  inchi_compound_input[1].trim();
	String concept_id = inchi_compound_input[0].trim();

	for(k = 0; k &lt; compound_abstract_input.length; k++)
	{
		if(compound_abstract_input[k].contains(kegg_code))
		{
			String new_text = compound_abstract_input[k].replaceAll(kegg_code , concept_id);
			new_text = new_text + "\n";
			nonEmpty.add(new_text);
		}
	}

	String[] non_empty = new String[nonEmpty.size()];

	for(int m = 0; m &lt; nonEmpty.size(); m++)
	{
   		non_empty[m] = nonEmpty.elementAt(m);
	}

	for (int b = 0; b &lt; non_empty.length; b++)
	{
		collapsed_abstracts = collapsed_abstracts + non_empty[b];
	}

}
else
{
	collapsed_abstracts = "";
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">inchi_compound</s:beanshellinput>
        <s:beanshellinput s:syntactictype="'text/plain'">compound_abstract</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">collapsed_abstracts</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
    <s:iterationstrategy>
      <i:dot xmlns:i="http://org.embl.ebi.escience/xscufliteration/0.1beta10";>
        <i:iterator name="inchi_compound" />
        <i:iterator name="compound_abstract" />
      </i:dot>
    </s:iterationstrategy>
  </s:processor>
  <s:processor name="conceptsXML">
    <s:local>
      org.embl.ebi.escience.scuflworkers.java.XMLOutputSplitter
      <s:extensions>
        <s:complextype optional="false" unbounded="false" typename="wsConcept" name="" qname="{http://webservice.ondex.sourceforge.net/}wsConcept";>
          <s:elements>
            <s:basetype optional="true" unbounded="false" typename="string" name="annotation" qname="wsConcept&gt;annotation" />
            <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsConcept&gt;description" />
            <s:complextype optional="true" unbounded="false" typename="wscv" name="elementOf" qname="wsConcept&gt;elementOf">
              <s:elements>
                <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wscv&gt;description" />
                <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wscv&gt;fullname" />
                <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wscv&gt;id" />
              </s:elements>
            </s:complextype>
            <s:basetype optional="true" unbounded="false" typename="int" name="id" qname="wsConcept&gt;id" />
            <s:complextype optional="true" unbounded="false" typename="wsConceptClass" name="ofType" qname="wsConcept&gt;ofType">
              <s:elements>
                <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsConceptClass&gt;description" />
                <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsConceptClass&gt;fullname" />
                <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsConceptClass&gt;id" />
                <s:complextype optional="true" unbounded="false" typename="wsConceptClass" name="specialisationOf" qname="wsConceptClass&gt;specialisationOf">
                  <s:elements>
                    <s:basetype optional="true" unbounded="false" typename="string" name="description" qname="wsConceptClass&gt;description" />
                    <s:basetype optional="true" unbounded="false" typename="string" name="fullname" qname="wsConceptClass&gt;fullname" />
                    <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="wsConceptClass&gt;id" />
                    <s:complextype id="wsConceptClass&gt;specialisationOf" optional="true" unbounded="false" typename="wsConceptClass" name="specialisationOf" />
                  </s:elements>
                </s:complextype>
              </s:elements>
            </s:complextype>
          </s:elements>
        </s:complextype>
      </s:extensions>
    </s:local>
  </s:processor>
  <s:processor name="remove_compound_nulls">
    <s:beanshell>
      <s:scriptvalue>String[] split = input.split("\n");
Vector nonEmpty = new Vector();

for (int i = 0; i &lt; split.length; i++){
   if (!(split[i].equals("")))
   {
       nonEmpty.add(split[i].trim());
   }
}

String[] non_empty = new String[nonEmpty.size()];

for (int i = 0; i &lt; non_empty.length; i ++)
{
   non_empty[i] = nonEmpty.elementAt(i);
}

String output = "";

for (int i = 0; i &lt; non_empty.length; i++)
{
	output = output + (String) (non_empty[i] + "\n");
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">input</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="Create_Concepts_and_Relations">
    <s:workflow>
      <s:xscufllocation>file:/C:/Users/Paul%20Fisher/Documents/Ondex%20Stuff/OndexWorkflows/New%20Folder/addPaper_linktoCompound.xml</s:xscufllocation>
    </s:workflow>
    <s:iterationstrategy>
      <i:cross xmlns:i="http://org.embl.ebi.escience/xscufliteration/0.1beta10";>
        <i:dot>
          <i:iterator name="compoundConceptId" />
          <i:iterator name="annotation" />
          <i:iterator name="description" />
        </i:dot>
        <i:iterator name="graph_id" />
      </i:cross>
    </s:iterationstrategy>
  </s:processor>
  <s:processor name="enzyme_description">
    <s:arbitrarywsdl>
      <s:wsdl>http://soap.genome.jp/KEGG.wsdl</s:wsdl>
      <s:operation>btit</s:operation>
    </s:arbitrarywsdl>
  </s:processor>
  <s:processor name="remove_inchi_abstract_nulls">
    <s:beanshell>
      <s:scriptvalue>String[] split = input.split("\n");
Vector nonEmpty = new Vector();

for (int i = 0; i &lt; split.length; i++){
   if (!(split[i].equals("")))
   {
       nonEmpty.add(split[i].trim());
   }
}

String[] non_empty = new String[nonEmpty.size()];

for (int i = 0; i &lt; non_empty.length; i ++)
{
   non_empty[i] = nonEmpty.elementAt(i);
}

String output = "";

for (int i = 0; i &lt; non_empty.length; i++)
{
	output = output + (String) (non_empty[i] + "\n");
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">input</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="concepts_XML">
    <s:local>
      org.embl.ebi.escience.scuflworkers.java.XMLInputSplitter
      <s:extensions>
        <s:complextype optional="false" unbounded="false" typename="getConcepts" name="parameters" qname="{http://webservice.ondex.sourceforge.net/}getConcepts";>
          <s:elements>
            <s:basetype optional="true" unbounded="false" typename="long" name="graphId" qname="getConcepts&gt;graphId" />
          </s:elements>
        </s:complextype>
      </s:extensions>
    </s:local>
  </s:processor>
  <s:processor name="Match">
    <s:beanshell>
      <s:scriptvalue>String kegg_inchi = kegg_inchi_file;
String kegg_inchi_map = "";

String[] lines = kegg_inchi.split("\n");
String[] queries = queryIn.split("\n");
String match = "";

for(int a = 0; a &lt; lines.length; a++)
{
	String[] separate = lines[a].split("\t");
	String kegg = separate[0].trim();
	String inchi = separate[1].trim();

	for(int i = 0; i &lt; queries.length; i++)
	{
		String[] tabbed_queries = queries[i].split("\t");
		String concept_inchi = tabbed_queries[1];

		concept_inchi = concept_inchi.trim();
		if(inchi.equals(concept_inchi))
		{
			match = "cpd:" + kegg;
			kegg_inchi_map = kegg_inchi_map + tabbed_queries[0] + "\t" + inchi + "\t" + match + "\n";
//			System.out.println("Match for " + inchi + " vs " + queries[i] + "\n");
		}
	}
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">queryIn</s:beanshellinput>
        <s:beanshellinput s:syntactictype="'text/plain'">kegg_inchi_file</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">match</s:beanshelloutput>
        <s:beanshelloutput s:syntactictype="'text/plain'">kegg_inchi_map</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="merge_inchi_abstracts_2">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="merge_enzyme_outputs_2">
    <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
  </s:processor>
  <s:processor name="extract_concept_pmid_abstract">
    <s:beanshell>
      <s:scriptvalue>String[] tabbed = concept_abstracts.split("\t");
String pmid = "";
String abstract_data = "";
String concept = "";

for(int i = 0; i &lt; tabbed.length; i++)
{
	if(tabbed.length &gt; 3)
	{
		pmid = tabbed[1];
		abstract_data = tabbed[2] + "\t" + tabbed[3];
		concept = tabbed[0];
	}
	else
	{
		pmid = tabbed[1];
		abstract_data = tabbed[2];
		concept = tabbed[0];		
	}		
}</s:scriptvalue>
      <s:beanshellinputlist>
        <s:beanshellinput s:syntactictype="'text/plain'">concept_abstracts</s:beanshellinput>
      </s:beanshellinputlist>
      <s:beanshelloutputlist>
        <s:beanshelloutput s:syntactictype="'text/plain'">pmid</s:beanshelloutput>
        <s:beanshelloutput s:syntactictype="'text/plain'">concept</s:beanshelloutput>
        <s:beanshelloutput s:syntactictype="'text/plain'">abstract_data</s:beanshelloutput>
      </s:beanshelloutputlist>
      <s:dependencies s:classloader="iteration" />
    </s:beanshell>
  </s:processor>
  <s:processor name="getConcepts">
    <s:arbitrarywsdl>
      <s:wsdl>http://rpc274.cs.man.ac.uk:8080/ondex/services/ondex-graph?wsdl</s:wsdl>
      <s:operation>getConcepts</s:operation>
    </s:arbitrarywsdl>
  </s:processor>
  <s:processor name="split_by_newline">
    <s:local>org.embl.ebi.escience.scuflworkers.java.SplitByRegex</s:local>
  </s:processor>
  <s:processor name="line_breaker_2">
    <s:local>org.embl.ebi.escience.scuflworkers.java.SplitByRegex</s:local>
  </s:processor>
  <s:processor name="split_graph_id">
    <s:local>org.embl.ebi.escience.scuflworkers.java.SplitByRegex</s:local>
  </s:processor>
  <s:processor name="split_compounds">
    <s:local>org.embl.ebi.escience.scuflworkers.java.SplitByRegex</s:local>
  </s:processor>
  <s:processor name="split_compound_ids">
    <s:local>org.embl.ebi.escience.scuflworkers.java.SplitByRegex</s:local>
  </s:processor>
  <s:processor name="line_break" boring="true">
    <s:stringconstant>\n</s:stringconstant>
  </s:processor>
  <s:processor name="get_enzymes_by_compound">
    <s:arbitrarywsdl>
      <s:wsdl>http://soap.genome.jp/KEGG.wsdl</s:wsdl>
      <s:operation>get_enzymes_by_compound</s:operation>
    </s:arbitrarywsdl>
  </s:processor>
  <s:processor name="get_enzyme_pmid">
    <s:description>This workflow takes in a list of KEGG pathway descriptions and a stop_list of KEGG pathway descriptions. These patwhays are then compared, and those in the stop list are removed. The workflow then extracts the pathway process from the KEGG formatted pathway descriptions output. It takes in a list of KEGG pathway descriptions and returns a list of pathways, without the KEGG pathway identifier or the species from which it came (e.g. - mus musculus (mouse) ). These are passed to the eSearch function and searched for in PubMed. Those abstracts found are returned to the user</s:description>
    <s:workflow>
      <s:scufl version="0.2" log="0">
        <s:workflowdescription lsid="urn:lsid:net.sf.taverna:wfDefinition:cb167580-7e96-4651-afef-a0a16d1d2f97" author="Paul Fisher" title="Pathway to PubMed">This workflow takes in a list of KEGG pathway descriptions and a stop_list of KEGG pathway descriptions. These patwhays are then compared, and those in the stop list are removed. The workflow then extracts the pathway process from the KEGG formatted pathway descriptions output. It takes in a list of KEGG pathway descriptions and returns a list of pathways, without the KEGG pathway identifier or the species from which it came (e.g. - mus musculus (mouse) ). These are passed to the eSearch function and searched for in PubMed. Those abstracts found are returned to the user</s:workflowdescription>
        <s:processor name="max_return" boring="true">
          <s:stringconstant>2000</s:stringconstant>
        </s:processor>
        <s:processor name="merge_abstracts">
          <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
        </s:processor>
        <s:processor name="merge_dates">
          <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
        </s:processor>
        <s:processor name="merge_abstract_ids">
          <s:local>org.embl.ebi.escience.scuflworkers.java.StringListMerge</s:local>
        </s:processor>
        <s:processor name="extractPMID">
          <s:local>net.sourceforge.taverna.scuflworkers.xml.XPathTextWorker</s:local>
        </s:processor>
        <s:processor name="parametersXML_eFecth">
          <s:local>
            org.embl.ebi.escience.scuflworkers.java.XMLInputSplitter
            <s:extensions>
              <s:complextype optional="false" unbounded="false" typename="eSearchRequest" name="parameters" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/esearch}eSearchRequest";>
                <s:elements>
                  <s:basetype optional="true" unbounded="false" typename="string" name="db" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="term" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="WebEnv" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="QueryKey" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="usehistory" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="tool" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="email" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="field" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="reldate" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="mindate" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="maxdate" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="datetype" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="RetStart" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="RetMax" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="rettype" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                  <s:basetype optional="true" unbounded="false" typename="string" name="sort" qname="{http://www.w3.org/2001/XMLSchema}string"; />
                </s:elements>
              </s:complextype>
            </s:extensions>
          </s:local>
        </s:processor>
        <s:processor name="xpath" boring="true">
          <s:stringconstant>/*[local-name(.)='eSearchResult']/*[local-name(.)='IdList']/*[local-name(.)='Id']</s:stringconstant>
        </s:processor>
        <s:processor name="pubmed_database" boring="true">
          <s:stringconstant>pubmed</s:stringconstant>
        </s:processor>
        <s:processor name="concat_abstract_ids">
          <s:beanshell>
            <s:scriptvalue>String id = id.trim();
String abstract_text = abstract_text.trim();
String date_text = date_text.trim();

String output = "";

output = id + "\t" + date_text + "\t" + abstract_text;</s:scriptvalue>
            <s:beanshellinputlist>
              <s:beanshellinput s:syntactictype="'text/plain'">id</s:beanshellinput>
              <s:beanshellinput s:syntactictype="'text/plain'">abstract_text</s:beanshellinput>
              <s:beanshellinput s:syntactictype="'text/plain'">date_text</s:beanshellinput>
            </s:beanshellinputlist>
            <s:beanshelloutputlist>
              <s:beanshelloutput s:syntactictype="'text/plain'">output</s:beanshelloutput>
            </s:beanshelloutputlist>
            <s:dependencies s:classloader="iteration" />
          </s:beanshell>
          <s:iterationstrategy>
            <i:dot xmlns:i="http://org.embl.ebi.escience/xscufliteration/0.1beta10";>
              <i:iterator name="id" />
              <i:iterator name="abstract_text" />
              <i:iterator name="date_text" />
            </i:dot>
          </s:iterationstrategy>
        </s:processor>
        <s:processor name="run_eSearch">
          <s:arbitrarywsdl>
            <s:wsdl>http://eutils.ncbi.nlm.nih.gov/entrez/eutils/soap/eutils.wsdl</s:wsdl>
            <s:operation>run_eSearch</s:operation>
          </s:arbitrarywsdl>
        </s:processor>
        <s:processor name="Retrive_abstracts">
          <s:description>This workflow takes in a number of search terms (as used in the normal PubMed interface) and retrieves a list of PubMed ids in a list format.</s:description>
          <s:workflow>
            <s:scufl version="0.2" log="0">
              <s:workflowdescription lsid="urn:lsid:www.mygrid.org.uk:operation:SOWUXPE5TJ0" author="Paul Fisher" title="XPath Pubmed Ids">This workflow takes in a number of search terms (as used in the normal PubMed interface) and retrieves a list of PubMed ids in a list format.</s:workflowdescription>
              <s:processor name="xpath_2" boring="true">
                <s:stringconstant>/*[local-name(.)='eFetchResult']/*[local-name(.)='PubmedArticleSet']/*[local-name(.)='PubmedArticle']/*[local-name(.)='MedlineCitation']/*[local-name(.)='DateCreated']/*[local-name(.)='Year']</s:stringconstant>
              </s:processor>
              <s:processor name="extractDates">
                <s:local>net.sourceforge.taverna.scuflworkers.xml.XPathTextWorker</s:local>
              </s:processor>
              <s:processor name="xpath" boring="true">
                <s:stringconstant>/*[local-name(.)='eFetchResult']/*[local-name(.)='PubmedArticleSet']/*[local-name(.)='PubmedArticle']/*[local-name(.)='MedlineCitation']/*[local-name(.)='Article']/*[local-name(.)='Abstract']/*[local-name(.)='AbstractText']</s:stringconstant>
              </s:processor>
              <s:processor name="database" boring="true">
                <s:stringconstant>pubmed</s:stringconstant>
              </s:processor>
              <s:processor name="extractAbstract">
                <s:local>net.sourceforge.taverna.scuflworkers.xml.XPathTextWorker</s:local>
              </s:processor>
              <s:processor name="parametersXML">
                <s:local>
                  org.embl.ebi.escience.scuflworkers.java.XMLInputSplitter
                  <s:extensions>
                    <s:complextype optional="false" unbounded="false" typename="eFetchRequest" name="parameters" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}eFetchRequest";>
                      <s:elements>
                        <s:basetype optional="true" unbounded="false" typename="string" name="db" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;db"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="id" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;id"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="WebEnv" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;WebEnv"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="query_key" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;query_key"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="tool" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;tool"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="email" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;email"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="retstart" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;retstart"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="retmax" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;retmax"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="rettype" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;rettype"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="strand" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;strand"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="seq_start" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;seq_start"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="seq_stop" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;seq_stop"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="complexity" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;complexity"; />
                        <s:basetype optional="true" unbounded="false" typename="string" name="report" qname="{http://www.ncbi.nlm.nih.gov/soap/eutils/efetch}&gt;eFetchRequest&gt;report"; />
                      </s:elements>
                    </s:complextype>
                  </s:extensions>
                </s:local>
              </s:processor>
              <s:processor name="run_eFetch">
                <s:arbitrarywsdl>
                  <s:wsdl>http://eutils.ncbi.nlm.nih.gov/entrez/eutils/soap/eutils.wsdl</s:wsdl>
                  <s:operation>run_eFetch</s:operation>
                </s:arbitrarywsdl>
              </s:processor>
              <s:link source="database:value" sink="parametersXML:db" />
              <s:link source="parametersXML:output" sink="run_eFetch:parameters" />
              <s:link source="pubmed_ids" sink="parametersXML:id" />
              <s:link source="run_eFetch:parameters" sink="extractAbstract:xml-text" />
              <s:link source="run_eFetch:parameters" sink="extractDates:xml-text" />
              <s:link source="xpath:value" sink="extractAbstract:xpath" />
              <s:link source="xpath_2:value" sink="extractDates:xpath" />
              <s:link source="extractAbstract:nodelist" sink="abstract" />
              <s:link source="extractDates:nodelist" sink="date" />
              <s:source name="pubmed_ids" />
              <s:sink name="abstract" />
              <s:sink name="date" />
            </s:scufl>
          </s:workflow>
        </s:processor>
        <s:link source="Pathway_search_term" sink="parametersXML_eFecth:term" />
        <s:link source="Retrive_abstracts:abstract" sink="merge_abstracts:stringlist" />
        <s:link source="Retrive_abstracts:date" sink="merge_dates:stringlist" />
        <s:link source="concat_abstract_ids:output" sink="merge_abstract_ids:stringlist" />
        <s:link source="extractPMID:nodelist" sink="Retrive_abstracts:pubmed_ids" />
        <s:link source="extractPMID:nodelist" sink="concat_abstract_ids:id" />
        <s:link source="max_return:value" sink="parametersXML_eFecth:RetMax" />
        <s:link source="merge_abstracts:concatenated" sink="concat_abstract_ids:abstract_text" />
        <s:link source="merge_dates:concatenated" sink="concat_abstract_ids:date_text" />
        <s:link source="parametersXML_eFecth:output" sink="run_eSearch:parameters" />
        <s:link source="pubmed_database:value" sink="parametersXML_eFecth:db" />
        <s:link source="run_eSearch:parameters" sink="extractPMID:xml-text" />
        <s:link source="xpath:value" sink="extractPMID:xpath" />
        <s:link source="merge_abstract_ids:concatenated" sink="concat_data" />
        <s:source name="Pathway_search_term" />
        <s:sink name="concat_data" />
      </s:scufl>
    </s:workflow>
  </s:processor>
  <s:link source="Match:kegg_inchi_map" sink="collapse_inchi_abstracts:inchi_compound" />
  <s:link source="Match:match" sink="merge_compound_list:stringlist" />
  <s:link source="Read_KEGG_InChIs:filecontents" sink="Match:kegg_inchi_file" />
  <s:link source="collapse_inchi_abstracts:collapsed_abstracts" sink="merge_inchi_abstracts:stringlist" />
  <s:link source="compound_and_abstract:output" sink="collapse_inchi_abstracts:compound_abstract" />
  <s:link source="compound_and_abstract:output" sink="remove_enzyme_abstracts_nulls:input" />
  <s:link source="conceptsXML:id" sink="get_concept_gds:conceptId" />
  <s:link source="concepts_XML:output" sink="getConcepts:parameters" />
  <s:link source="concepts_output_xml:concepts" sink="conceptsXML:input" />
  <s:link source="enzyme_description:return" sink="extract_enzyme_terms:input" />
  <s:link source="extract_enzyme_terms:output" sink="get_enzyme_pmid:Pathway_search_term" />
  <s:link source="getConcepts:parameters" sink="concepts_output_xml:input" />
  <s:link source="get_concept_gds:concept_id_value" sink="merge_concept_values:stringlist" />
  <s:link source="get_enzyme_pmid:concat_data" sink="compound_and_abstract:abstracts" />
  <s:link source="get_enzymes_by_compound:return" sink="enzyme_description:string" />
  <s:link source="graphId" sink="concepts_XML:graphId" />
  <s:link source="graphId" sink="get_concept_gds:graphId" />
  <s:link source="graphId" sink="split_graph_id:string" />
  <s:link source="extract_concept_pmid_abstract:abstract_data" sink="Create_Concepts_and_Relations:description" />
  <s:link source="extract_concept_pmid_abstract:concept" sink="Create_Concepts_and_Relations:compoundConceptId" />
  <s:link source="extract_concept_pmid_abstract:pmid" sink="Create_Concepts_and_Relations:annotation" />
  <s:link source="line_break:value" sink="line_breaker_2:regex" />
  <s:link source="line_break:value" sink="split_by_newline:regex" />
  <s:link source="merge_inchi_abstracts:concatenated" sink="merge_inchi_abstracts_2:stringlist" />
  <s:link source="merge_inchi_abstracts_2:concatenated" sink="remove_inchi_abstract_nulls:input" />
  <s:link source="remove_Null_concept_values:output" sink="line_breaker_2:string" />
  <s:link source="remove_compound_nulls:output" sink="split_compounds:string" />
  <s:link source="remove_enzyme_abstracts_nulls:output" sink="merge_enzyme_outputs_2:stringlist" />
  <s:link source="remove_inchi_abstract_nulls:output" sink="split_by_newline:string" />
  <s:link source="split_by_newline:split" sink="extract_concept_pmid_abstract:concept_abstracts" />
  <s:link source="split_compounds:split" sink="get_enzymes_by_compound:compound_id" />
  <s:link source="Create_Concepts_and_Relations:relation" sink="relation" />
  <s:link source="Match:kegg_inchi_map" sink="concept_inchi" />
  <s:link source="enzyme_description:return" sink="enzyme_desc" />
  <s:link source="extract_enzyme_terms:output" sink="extracted_enzyme_terms" />
  <s:link source="line_break:value" sink="split_compound_ids:regex" />
  <s:link source="line_break:value" sink="split_compounds:regex" />
  <s:link source="line_break:value" sink="split_graph_id:regex" />
  <s:link source="line_breaker_2:split" sink="Match:queryIn" />
  <s:link source="local_file_URL:value" sink="Read_KEGG_InChIs:fileurl" />
  <s:link source="merge_compound_list:concatenated" sink="remove_compound_nulls:input" />
  <s:link source="merge_concept_values:concatenated" sink="remove_Null_concept_values:input" />
  <s:link source="merge_enzyme_outputs_2:concatenated" sink="enzyme_abstracts" />
  <s:link source="merge_inchi_abstracts:concatenated" sink="collapsed_inchi_abstracts" />
  <s:link source="remove_Null_concept_values:output" sink="concept_values" />
  <s:link source="split_compound_ids:split" sink="compound_and_abstract:compound" />
  <s:link source="split_compounds:split" sink="split_compound_ids:string" />
  <s:link source="split_graph_id:split" sink="Create_Concepts_and_Relations:graph_id" />
  <s:source name="graphId" />
  <s:sink name="concept_values" />
  <s:sink name="relation" />
  <s:sink name="enzyme_abstracts" />
  <s:sink name="enzyme_desc" />
  <s:sink name="extracted_enzyme_terms" />
  <s:sink name="concept_inchi" />
  <s:sink name="collapsed_inchi_abstracts" />
</s:scufl>

------------------------------------------------------------------------------
_______________________________________________
taverna-users mailing list
[email protected]
[email protected]
Web site: http://www.taverna.org.uk
Mailing lists: http://www.taverna.org.uk/taverna-mailing-lists/

Reply via email to