| MOBY documentation | Contained in the MOBY distribution. |
MOBY::RDF::Ontologies::Namespaces - Create RDF/OWL for Moby
use MOBY::RDF::Ontologies::Namespaces;
# iustantiate
my $x = MOBY::RDF::Ontologies::Namespaces->new;
# get all ontology terms in unformatted XML
print $x->createAll({ prettyPrint => 'no' });
# get a specific ontology term in 'pretty print XML'
print $x->createByName({term => 'NCBI_gi' });
This module creates RDF XML for the Namespace ontology
Edward Kawas (edward.kawas [at] gmail [dot] com)
Returns RDF XML for all nodes in the Namespace ontology as a pretty printed String of XML. This routine consumes a hash as input with keys: prettyPrint: whether (yes) or not (no) to output formatted XML. Defaults to 'yes'.
Returns RDF XML for a specific node in the Namespace ontology as a pretty printed String of XML. This routine consumes a hash as input with keys: term: the node to retrieve required prettyPrint: whether (yes) or not (no) to output formatted XML. Defaults to 'yes'.
| MOBY documentation | Contained in the MOBY distribution. |
#----------------------------------------------------------------- # MOBY::RDF::Ontologies::Namespaces # Author: Edward Kawas <edward.kawas@gmail.com>, # For copyright and disclaimer see below. # # $Id: Namespaces.pm,v 1.7 2008/09/02 13:12:46 kawas Exp $ #----------------------------------------------------------------- package MOBY::RDF::Ontologies::Namespaces; use RDF::Core; use RDF::Core::Storage::Memory; use RDF::Core::Model; use RDF::Core::Literal; use RDF::Core::Statement; use RDF::Core::Model::Serializer; use RDF::Core::NodeFactory; use MOBY::Config; use MOBY::RDF::Predicates::DC_PROTEGE; use MOBY::RDF::Predicates::MOBY_PREDICATES; use MOBY::RDF::Predicates::OMG_LSID; use MOBY::RDF::Predicates::RDF; use MOBY::RDF::Predicates::RDFS; use MOBY::RDF::Utils; use strict; use vars qw /$VERSION/; $VERSION = sprintf "%d.%02d", q$Revision: 1.7 $ =~ /: (\d+)\.(\d+)/; #----------------------------------------------------------------- # load all modules needed for my attributes #-----------------------------------------------------------------
#-----------------------------------------------------------------
#----------------------------------------------------------------- # new #----------------------------------------------------------------- sub new { my ($class) = @_; # create an object my $self = bless {}, ref($class) || $class; # save some information retrieved from mobycentral.config my $CONF = MOBY::Config->new; $self->{uri} = $CONF->{mobynamespace}->{resourceURL} || 'http://biomoby.org/RESOURCES/MOBY-S/Namespaces#'; $self->{uri} = $self->{uri} . "#" unless $self->{uri} =~ m/^.*(\#{1})$/; $self->{query_all} = <<END; SELECT namespace_type, description, namespace_lsid, authority, contact_email FROM namespace ORDER BY namespace_type asc END # done $self->{query} = <<END; SELECT namespace_type, description, namespace_lsid, authority, contact_email FROM namespace WHERE namespace_type = ? ORDER BY namespace_type asc END # done return $self; } #----------------------------------------------------------------- # createAll #-----------------------------------------------------------------
sub createAll { my ($self, $hash) = @_; my $prettyPrint = $hash->{prettyPrint} ? $hash->{prettyPrint} : 'yes'; # set up an RDF model my $storage = new RDF::Core::Storage::Memory; my $model = new RDF::Core::Model( Storage => $storage ); # add root of ontology { my $resource = new RDF::Core::Resource( $self->{uri}, "Namespace" ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->label ), new RDF::Core::Literal("Namespace") ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->comment ), new RDF::Core::Literal( "a base namespace identifier, never instantiated" ) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->publisher ), new RDF::Core::Literal("openinformatics.com") ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->identifier ), new RDF::Core::Literal( "urn:lsid:biomoby.org:namespacetype:Namespace" ) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->creator ), new RDF::Core::Literal("markw\@illuminae.com") ) ); } my $db = MOBY::Config->new()-> getDataAdaptor( source => "mobynamespace" )->dbh; my $sth = $db->prepare( $self->{query_all} ); $sth->execute; # returns an array of hash references while ( my $ref = $sth->fetchrow_arrayref ) { my $subject = $$ref[0]; my $description = $$ref[1]; my $lsid = $$ref[2]; my $authority = $$ref[3]; my $email = $$ref[4]; my $resource = new RDF::Core::Resource( $self->{uri}, $subject ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->label ), new RDF::Core::Literal($subject) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->comment ), new RDF::Core::Literal($description) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->publisher ), new RDF::Core::Literal($authority) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->identifier ), new RDF::Core::Literal($lsid) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->creator ), new RDF::Core::Literal($email) ) ); # add subclassof, if applicable my $parent = new RDF::Core::Resource( $self->{uri}, 'Namespace' ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->subClassOf ), $parent ) ); } $sth->finish(); $db->disconnect(); my $xml = ''; my $serializer = new RDF::Core::Model::Serializer( Model => $model, Output => \$xml, BaseURI => 'URI://BASE/', ); $serializer->serialize; return new MOBY::RDF::Utils->prettyPrintXML( { xml => $xml } ) unless $prettyPrint eq 'no'; return $xml; }
sub createByName { my ( $self, $hash ) = @_; die "No term specified!" unless $hash->{term}; # set up the term that we care about my $term = $hash->{term}; my $prettyPrint = $hash->{prettyPrint} ? $hash->{prettyPrint} : 'yes'; my $termExists = 0; #special case where term == Namespace $termExists = $termExists + 1 if $term eq 'Namespace'; # set up an RDF model my $storage = new RDF::Core::Storage::Memory; my $model = new RDF::Core::Model( Storage => $storage ); # add root of ontology { my $resource = new RDF::Core::Resource( $self->{uri}, "Namespace" ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->label ), new RDF::Core::Literal("Namespace") ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->comment ), new RDF::Core::Literal( "a base namespace identifier, never instantiated" ) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->publisher ), new RDF::Core::Literal("openinformatics.com") ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->identifier ), new RDF::Core::Literal( "urn:lsid:biomoby.org:namespacetype:Namespace" ) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->creator ), new RDF::Core::Literal("markw\@illuminae.com") ) ); } my $node_factory = new RDF::Core::NodeFactory(); do { my $db = MOBY::Config->new()-> getDataAdaptor( source => "mobynamespace" )->dbh; my $sth = $db->prepare( $self->{query} ); $sth->execute( ($term) ); $term = ''; #base case $term = '' if $term eq 'Namespace'; # returns an array of hash references while ( my $ref = $sth->fetchrow_arrayref ) { $termExists++; my $subject = $$ref[0]; my $description = $$ref[1]; my $lsid = $$ref[2]; my $authority = $$ref[3]; my $email = $$ref[4]; my $resource = new RDF::Core::Resource( $self->{uri}, $subject ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->label ), new RDF::Core::Literal($subject) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->comment ), new RDF::Core::Literal($description) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->publisher ), new RDF::Core::Literal($authority) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->identifier ), new RDF::Core::Literal($lsid) ) ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::DC_PROTEGE->creator ), new RDF::Core::Literal($email) ) ); # add subclassof, my $parent = new RDF::Core::Resource( $self->{uri}, 'Namespace' ); $model->addStmt( new RDF::Core::Statement( $resource, $resource->new( MOBY::RDF::Predicates::RDFS->subClassOf ), $parent ) ); } $sth->finish(); $db->disconnect(); } while ( $term && $term ne '' ); my $xml = ''; my $serializer = new RDF::Core::Model::Serializer( Model => $model, Output => \$xml, BaseURI => 'URI://BASE/', ); $serializer->serialize; # dont output anything unless term exists! unless ( $termExists > 0 ) { $xml = <<END; <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"></rdf:RDF> END } return new MOBY::RDF::Utils->prettyPrintXML( { xml => $xml } ) unless $prettyPrint eq 'no'; return $xml; } 1; __END__