use strict;
use LS::ID;
use LS::Locator;
use RDF::Core::Model::Parser;
use RDF::Core::Storage::Memory;
use RDF::Core::Model;
use RDF::Core::Resource;
use RDF::Core::Literal;
use RDF::Core::Statement;
my $storage = new RDF::Core::Storage::Memory;
my $model = new RDF::Core::Model (Storage => $storage);
my $id = 'urn:lsid:biomoby.org:serviceinstance:bioinfo.icapture.ubc.ca,FASTA2HighestGenericSequenceObject:2006-04-12T18-27-15Z';
# the lines below convert the LSID into a URL since that's what BioMoby
# currently returns in its metadata... sorry!
my $r = 'http://biomoby.org/RESOURCES/MOBY-S/ServiceInstances#';
$id =~ /urn:lsid:biomoby.org:serviceinstance:([^:]+)/;
$r .= $1;
my $lsid = LS::ID->new($id);
my $locator = LS::Locator->new();
my $authority = $locator->resolveAuthority($lsid);
my $resource = $authority->getResource($lsid);
my $locations = $resource->getMetadataLocations;
foreach my $locs(keys %$locations){
foreach my $loc(@{$locations->{$locs}}){
my $data;
eval{$data = $resource->getMetadata(location => $loc);};
next if $@;
my $response_filehandle = $data->response;
my $RDF = join "", <$response_filehandle>;
my %options = (Model => $model,
Source => $RDF,
SourceType => 'string',
BaseURI => "http://www.foo.com/",
BNodePrefix => "genid"
);
my $parser = new RDF::Core::Model::Parser(%options);
$parser->parse;
}
}
print "model contains ", $model->countStmts, " statements\n\n";
my $resource = RDF::Core::Resource->new($r);
my $enumerator = $model->getStmts($resource);
my $statement = $enumerator->getFirst;
while (defined $statement) {
my $s= $statement->getSubject->getLocalValue;
my $o= $statement->getObject;
$o=($o->isLiteral?$o->getValue:$o->getLocalValue);
my $p= $statement->getPredicate->getLocalValue;
print "$s $p $o\n" unless $o =~ /genid/;
$statement = $enumerator->getNext
}
$enumerator->close;
A place where I publicly ponder, explore, and rant (mostly rant :-) ) about issues that come up during the course of my laboratory's research into the Semantic Web in Health Care and Life Sciences. The thoughts here are sometimes very raw (a.k.a. half-baked), but reflect the current state of my thinking. The content of this site may irritate some readers... and sometimes it is meant to!
Thursday, November 22, 2007
A more complex LSID client
This one merges metadata from multiple endpoints, and then parses it using RDF::Core.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment