OntologyMap.pm
package OntologyMap;
# Copyright INRA
# Sebastien.Carrere@toulouse.inra.fr
# Jerome.Gouzy@toulouse.inra.fr
# This software is a computer program whose purpose is to provide
# a code generator framework for BioMoby web-services.
# This software is governed by the CeCILL license under French law and
# abiding by the rules of distribution of free software. You can use,
# modify and/ or redistribute the software under the terms of the CeCILL
# license as circulated by CEA, CNRS and INRIA at the following URL
# "http://www.cecill.info".
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided only
# with a limited warranty and the software's author, the holder of the
# economic rights, and the successive licensors have only limited
# liability.
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards their
# requirements in conditions enabling the security of their systems and/or
# data to be ensured and, more generally, to use and operate it in the
# same conditions as regards security.
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL license and that you accept its terms.
use vars qw(@ISA @EXPORT);
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(
&BiomobyToMobyle
);
use strict;
use Carp;
use BiomobyUtils;
use General qw(:DEFAULT GetDirectoryFile);
use XML::Twig;
sub BiomobyToMobyle
{
my $biomoby_term = shift;
my $dictionnary = GetDirectoryFile('OntologyMap.pm') . '/../data/BioMobyMobyleDictionnary.xml';
Carp::confess("$dictionnary not found") if (!-e $dictionnary);
my $default_biomoby_term = 'text-formatted';
my $o_mobyle_elt;
while ($biomoby_term !~ /object/i)
{
my ($code, $result) = &IsBiomobyTermDefined($biomoby_term, $dictionnary);
if ($code < 0)
{
$biomoby_term = &BiomobyUtils::GetParentObject($biomoby_term);
next;
}
elsif ($code == 0)
{
die("ERROR: $biomoby_term - $result");
}
else
{
$o_mobyle_elt = $result;
last;
}
}
if (!defined $o_mobyle_elt)
{
(my $code, $o_mobyle_elt) = &IsBiomobyTermDefined($default_biomoby_term, $dictionnary);
}
return $o_mobyle_elt;
}
sub GetMobyleTypeXml
{
my $o_mobyle_elt = shift;
my $mobyle_class = $o_mobyle_elt->{att}->{class};
my $mobyle_superclass = $o_mobyle_elt->{att}->{superclass};
my $mobyle_biotype = $o_mobyle_elt->{att}->{biotype};
my $mobyle_dataformat = $o_mobyle_elt->{att}->{dataformat};
my $mobyle_xml = '';
$mobyle_xml .= "<biotype>$mobyle_biotype</biotype>\n" if ($mobyle_biotype ne '');
$mobyle_xml .= "<datatype>\n";
$mobyle_xml .= "\t<class>$mobyle_class</class>\n" if ($mobyle_class ne '');
$mobyle_xml .= "\t<superclass>$mobyle_superclass</superclass>\n" if ($mobyle_superclass ne '');
$mobyle_xml .= "</datatype>\n";
$mobyle_xml .= "<acceptedDataFormats>\n\t<dataFormat>$mobyle_dataformat</dataFormat>\n</acceptedDataFormats>\n"
if ($mobyle_dataformat ne '');
return $mobyle_xml;
}
sub IsBiomobyTermDefined
{
my $biomoby_term = shift;
my $dictionnary = shift;
#xpath: /ontology_mapping/biomoby_term/term[@id="$biomoby"]
my $o_xml = new XML::Twig();
$o_xml->parsefile($dictionnary);
my $o_root_elt = $o_xml->root;
my @a_o_biomoby_terms = $o_root_elt->get_xpath("/ontology_mapping/biomoby_term/term[\@id='$biomoby_term']/mobyle");
if ($#a_o_biomoby_terms < 0)
{
return -1, 'not found';
}
elsif ($#a_o_biomoby_terms > 0)
{
return 0, 'duplicated term';
}
else
{
return 1, $a_o_biomoby_terms[0];
}
return;
}
1;