<html>
<head>
<title>Taxonomic Search Engine</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="portal.css" type="text/css" media="screen" />
</head>
<body>
<h1>Taxonomic Search Engine - Web service</h1>
<h2>Federating taxonomic databases using web services</h2>
<?php include("top.inc.php"); ?>
<h2>Webservice interface</h2>
<p>An experimental web service interface is being added to the Taxonomic Search Engine. You can view the
<a href="http://darwin.zoology.gla.ac.uk/~rpage/portal/TSE.php" target= "_blank">service description</a>, or get a copy of the <a href="http://darwin.zoology.gla.ac.uk/~rpage/portal/TSE.php?wsdl" target=_blank">
WSDL file</a>.</p>
<h2>Clients</h2>
<h3>Look up a name</h3>
<p> Here is a very simple perl client that uses the SOAP::Lite toolkit to search on a single name ("Aerodramus"). The
return is an XML document.</p>
<pre class="sourcecodebox">
#!/usr/bin/perl -w
#
#
use SOAP::Lite;
use XML::XPath;
# Add a HTP proxy if your connection to the Internet is through a proxy server
#$ENV{HTTP_proxy} = "http://wwwcache.gla.ac.uk:8080/";
my $TSE_WSDL = 'http://darwin.zoology.gla.ac.uk/~rpage/portal/TSE.php?wsdl';
# Create SOAP client
my $s = SOAP::Lite
->service ($TSE_WSDL);
my $result = $s->NameSearch('Aerodramus');
print $result;
</pre>
<h3>Find near matches</h3>
<p>The following client calls the web service to find approximate matches to a name. This
service uses agrep to find approximate matches in a flat file list of names, and also uses
the <a href="http://www.google.com/apis/" target="_blank">Google API</a>.
</p>
<p>In this example, the client searches on the name "Cephalorhynchus commersoni", and
the service returns "Cephalorhynchus commersoni<b>i</b>" (note the extra "i"
at the end of the name).</p>
<pre class="sourcecodebox">
#!/usr/bin/perl -w
#
#
# Search for names in TSE
#
use strict;
use warnings;
use SOAP::Lite; # SOAP API
# Add a HTP proxy if your connection to the Internet is through a proxy server
#$ENV{HTTP_proxy} = "http://wwwcache.gla.ac.uk:8080/";
# Initialise the web service
my $s = SOAP::Lite
-> proxy('http://darwin.zoology.gla.ac.uk/~rpage/portal/TSE.php');
# Name to search for
my $name = "Cephalorhynchus commersoni";
my $result = $s->SpellingSuggestion($name);
if ($result->match('//SpellingSuggestionResponse/return/item'))
{
print "Suggestions for \"$name\":\n";
my @suggestions = $result->valueof('//SpellingSuggestionResponse/return/item');
# A simple foreach read the array
foreach my $suggestion (@suggestions) {
print " $suggestion\n";
}
}
</pre>
<h2>Credits</h2>
<p>The service uses <a href="http://dietrich.ganx4.com/nusoap/index.php" target="_blank">NuSOAP</a> to generate a
WSDL file on the fly (see <a href="http://www.scottnichol.com/soap.htm" target="_blank">Scott Nichol's pages</a>
on how to do this). Mindreef <a href="http://www.mindreef.com/" target= "_blank">SOAPscope</a> was used to test the service. The
<a href="http://chart.stsci.edu/twiki/bin/view/Main/Software" target="_blank">hide@address.com</a> package of AXIS, ANT, and other tools
was used to provide a simple way to get these tools installed so I could use <b>wsdl2java</b> to test the WSDL file (note
that this is no guarantee that the generated Java code actually works). Thanks to <a href="http://www.cs.umb.edu/~ram/" target="_blank">Bob Morris</a>
for pointing out problems with the original WSDL file.
</p>
<p> </p>
<p> </p>
</body>
</html>