Hi again, In the new BioMart 0.8 will the SOAP and REST APIs have: - an option to return results in JSON or other serialized data structure form? - an option to return results sorted by some attribute(s)? - an option to return results with LIMITs in full form i.e. start_row, end_row (for paging)?
best, Leandro On Wed, Jul 14, 2010 at 4:32 PM, Leandro Hermida <[email protected]> wrote: > Hi Syed, > > Since none of the BioMart APIs actually return results in a data > structure (it only returns formatted files like TSV, etc) I was trying > to be helpful and show other developers on this forum how they can go > about populating a Perl data structure from the results returned by > BioMart. > > It's not obvious after reading the docs and when you get started how > you need to do this, one initially expects in the APIs that there > would be for e.g. in the Perl API some method call ->getResults() > which returns an @array of arrayrefs structure or in the REST API that > there would be an option to return for e.g. a JSON serialized data > structure that can be unserialized into a native data structure for > the language you are using. > > best, > Leandro > > On Wed, Jul 14, 2010 at 3:21 PM, Syed Haider <[email protected]> wrote: >> Hi Leandro, >> >> this is the only method that returns the results. What exactly are you after >> ? >> >> Best >> Syed >> >> On 14/07/2010 13:14, Leandro Hermida wrote: >>> >>> Sorry forgot to post what I did before! For those of your who use the >>> Biomart APIs and want to get results back into a Perl data structures, >>> here is the approach I use: >>> >>> If using the Perl API: >>> >>> use BioMart::Initializer; >>> use BioMart::Query; >>> use BioMart::QueryRunner; >>> >>> my $bm_initializer = BioMart::Initializer->new( >>> registryFile => "/path/to/myRegistry.xml", >>> action => 'update', >>> ); >>> my $bm_query = BioMart::Query->new( >>> registry => $bm_initializer->getRegistry(), >>> virtualSchemaName => 'default' >>> ); >>> $bm_query->setDataset('my_dataset'); >>> $bm_query->addFilter('attr1', ['Q6LTE1']); >>> $bm_query->addAttribute('attr2'); >>> $bm_query->addAttribute('attr3'); >>> $bm_query->formatter('TSV'); >>> my $bm_query_runner=BioMart::QueryRunner->new(); >>> $bm_query_runner->uniqueRowsOnly(1); >>> $bm_query_runner->execute($bm_query); >>> open(RESULTS, '+>', \my $results) or die "$!\n"; >>> $bm_query_runner->printResults(\*RESULTS); >>> seek(RESULTS, 0, 0); >>> while (<RESULTS>) { >>> chomp; >>> my @row_fields = split /\t/; >>> # build up a data structure or processed your fields here... >>> } >>> close(RESULTS); >>> >>> >>> Using the REST API: >>> >>> use LWP::UserAgent (); >>> >>> my $query_xml =<<XML; >>> <?xml version="1.0" encoding="UTF-8"?> >>> <!DOCTYPE Query> >>> <Query virtualSchemaName="default" formatter="TSV" header="0" >>> uniqueRows="1" count="" datasetConfigVersion="0.7"> >>> <Dataset name="my_dataset" interface="default"> >>> <Filter name="attr1" value="Q6LTE1"/> >>> <Attribute name="attr2" /> >>> <Attribute name="attr3" /> >>> </Dataset> >>> </Query> >>> XML >>> >>> my $ua = LWP::UserAgent->new(); >>> my $response = >>> $ua->post('http://myserver.mydomain:9002/biomart/martservice', >>> [ query => $query_xml ]); >>> if ($response->is_success and $response->decoded_content !~ >>> /BioMart::Exception/i) { >>> open(RESULTS, '<', \$response->decoded_content) or die "$!\n"; >>> while (<RESULTS>) { >>> chomp; >>> my @row_fields = split /\t/; >>> # build up a data structure or processed your fields here... >>> } >>> close(RESULTS); >>> } >>> else { >>> die $response->decoded_content, "\n"; >>> } >>> >>> >>> On Thu, Jun 10, 2010 at 12:03 AM, Syed Haider<[email protected]> >>> wrote: >>>> >>>> Hi Leandro, >>>> >>>> The datastructures representation of results is not returned by the API. >>>> If >>>> you are feeling adventurous please feel free to look into the >>>> lib/BioMart/Formatter/ directory for the appropriate formatter that you >>>> are >>>> interested in. >>>> >>>> >>>> Best >>>> Syed >>>> >>>> >>>> >>>> On 09/06/2010 17:51, Leandro Hermida wrote: >>>>> >>>>> Hi, >>>>> >>>>> I was wondering if there is a way using the Perl API to get results in a >>>>> Perl data structure and, if possible, row by row. For example each row >>>>> returned as an array or arrayref. It seems inefficient to take >>>>> printResults() and have to break everything up again when I know >>>>> somewhere >>>>> in the Perl API it was doing the reverse... >>>>> >>>>> thanks, >>>>> Leandro >>>>> >>>>> >>>> >> >
