#!perl -wWall use strict; use vars qw(@ISA); use XML::LibXML; @ISA = qw{MOBY::Adaptor::moby::DataAdapterI}; # implements the interface use vars qw /$VERSION/; $VERSION = sprintf "%d.%02d", q$Revision: 1.3 $ =~ /: (\d+)\.(\d+)/; =head1 NAME MOBY::Adaptor::moby::impl::FetaQueryAdaptor.pm - FetaQueryAdaptor =head1 DESCRIPTION Todo =head2 _queryServiceInstanceHash Title : _queryServiceInstanceHash Usage : my $un = $API->_queryServiceInstanceHash($xml) Function : Parses the FETA response XML and creates a hashref of a services properties Args : FETA response XML => => String Returns : hashref: {service_instance_id => Integer, category => String, servicename => String, service_type_uri => String, authority.authority_uri => String, url => String, service_instance.contact_email => String, authoritative => Integer, description => String, signatureURL => String, lsid => String} =cut sub queryServiceInstanceHash { my ($inputString) = @_; my %qsiHash; my $parser = XML::LibXML->new(); my $fetaDom = $parser->parse_string($inputString); my ( $value, $key ); # add the key/value pair for service_instance_id $key = 'service_instance_id'; $value = getValueByTagnameNS( $fetaDom, 'serviceName' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for category $key = 'category'; $value = getValueByTagnameNS( $fetaDom, 'Category' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for servicename $key = 'servicename'; $value = getValueByTagnameNS( $fetaDom, 'serviceName' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for service_type_uri $key = 'service_type_uri'; $value = getValueByTagnameNS( $fetaDom, 'operationTask' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for authority.authority_uri $key = 'authority.authority_uri'; $value = getValueByTagnameNS( $fetaDom, 'serviceName' ); my @auth = split( /\,/, $value ); if ( defined $auth[0] ) { $qsiHash{$key} = $auth[0]; } # add the key/value pair for url $key = 'url'; $value = getValueByTagnameNS( $fetaDom, 'locationURL' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for service_instance.contact_email $key = 'service_instance.contact_email'; $value = getValueByTagnameNS( $fetaDom, 'email' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for authoritative $key = 'authoritative'; $value = getValueByTagnameNS( $fetaDom, 'authoritative' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for serviceDescriptionText $key = 'description'; $value = getValueByTagnameNS( $fetaDom, 'serviceDescriptionText' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for signatureURL $key = 'signatureURL'; $value = getValueByTagnameNS( $fetaDom, 'signautureURL' ); if ( defined $value ) { $qsiHash{$key} = $value; } # add the key/value pair for lsid $key = 'lsid'; $value = getValueByTagnameNS( $fetaDom, 'lsid' ); if ( defined $value ) { $qsiHash{$key} = $value; } #done return \%qsiHash; } =head2 _querySimpleInputHash Title : _querySimpleInputHash Usage : my $un = $API->_querySimpleInputHash($xml) Function : Args : FETA response xml => String, Returns : listref of hashrefs: [{object_type_uri => String, namespace_type_uris => String, article_name => String, service_instance_id => Integer}, ...] =cut sub querySimpleInputHash { my ($inputString) = @_; my %qsiHash; my $parser = XML::LibXML->new(); my $fetaDom = $parser->parse_string($inputString); my $nodes = $fetaDom->getElementsByTagName('operationInputs/parameter'); # # articleName1 # false # http://biomoby.org/RESOURCES/MOBY-S/Objects#DNASequence # String # Simple # } =head2 _querySimpleOutputHash Title : _querySimpleOutputHash Usage : my $un = $API->_querySimpleOutputHash($xml) Function : Parses the FETA response xml and creates a hashref describing the output simples Args : FETA response xml => String, Returns : listref of hashrefs: [{object_type_uri => String, namespace_type_uris => String, article_name => String, service_instance_id => Integer}, ...] Notes : Only allows querying by lsid or type term, so service_instance_id is retrieved from lsid or term =cut sub _querySimpleOutputHash { } =head2 _queryCollectionInputHash Title : _queryCollectionInputHash Usage : my $un = $API->_queryCollectionInputHash($xml) Function : get the collection input information for a given service from the FETA response XML Args : FETA response xml => String, Returns : listref of hashrefs: [{collection_input_id => Integer article_name => String}, ...] one hashref for each collection that service consumes =cut sub _queryCollectionInputHash { } =head2 _queryCollectionOutputHash Title : _queryCollectionOutputHash Usage : my $un = $API->_queryCollectionOutputHash($xml) Function : get the collection output information for a given service from the FETA response XML Args : FETA response xml => String, Returns : listref of hashrefs: [{collection_output_id => Integer article_name => String}, ...] one hashref for each collection that service consumes =cut sub _queryCollectionOutputHash { } sub getValueByTagnameNS { my ( $dom, $tagname, $ns ) = @_; unless ($ns) { $ns = ''; } my $node = $dom->getElementsByTagNameNS( $ns, $tagname ); if ( $node->size == 1 ) { my $string = $node->get_node(1)->textContent(); return $string; } return undef; } my $string = < test.suite.com,myfirstservice http://illuminae/cgi-bin/service.pl This service is my first service and does nothing test.suite.com,myfirstservice This service is my first service and does nothing myInputDNASequence false http://biomoby.org/RESOURCES/MOBY-S/Objects#DNASequence String Simple myInputGFF2 false http://biomoby.org/RESOURCES/MOBY-S/Objects#GFF2 String Simple myInputCollection false http://biomoby.org/RESOURCES/MOBY-S/Objects#BasicGFFSequenceFeature String Collection myInputCollection false http://biomoby.org/RESOURCES/MOBY-S/Objects#Integer String Collection myInputCollectionOfObject false http://biomoby.org/RESOURCES/MOBY-S/Objects#Object String Collection myBag false http://biomoby.org/RESOURCES/MOBY-S/Objects#BasicGFFSequenceFeature String Collection myInputCollection false http://biomoby.org/RESOURCES/MOBY-S/Objects#Float String Collection myOutputCollection false http://biomoby.org/RESOURCES/MOBY-S/Objects#GFF String Collection myOutputCollection false http://biomoby.org/RESOURCES/MOBY-S/Objects#GFF2 String Collection myOutputObject false http://biomoby.org/RESOURCES/MOBY-S/Objects#Object String Simple Retrieval BioMOBY service END_QUOTE my $hash_ref = queryServiceInstanceHash($string); while ( my ( $key, $value ) = each(%$hash_ref) ) { print "$key => $value\n"; }