comparison variant_effect_predictor/Bio/Ontology/Relationship.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1f6dce3d34e0
1 # $Id: Relationship.pm,v 1.4.2.3 2003/03/27 10:07:56 lapp Exp $
2 #
3 # BioPerl module for Relationship
4 #
5 # Cared for by Christian M. Zmasek <czmasek@gnf.org> or <cmzmasek@yahoo.com>
6 #
7 # (c) Christian M. Zmasek, czmasek@gnf.org, 2002.
8 # (c) GNF, Genomics Institute of the Novartis Research Foundation, 2002.
9 #
10 # You may distribute this module under the same terms as perl itself.
11 # Refer to the Perl Artistic License (see the license accompanying this
12 # software package, or see http://www.perl.com/language/misc/Artistic.html)
13 # for the terms under which you may use, modify, and redistribute this module.
14 #
15 # THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
16 # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
17 # MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18 #
19 # You may distribute this module under the same terms as perl itself
20
21 # POD documentation - main docs before the code
22
23 =head1 NAME
24
25 Relationship - a relationship for an ontology
26
27 =head1 SYNOPSIS
28
29 $rel = Bio::Ontology::Relationship->new( -identifier => "16847",
30 -subject_term => $subj,
31 -object_term => $obj,
32 -predicate_term => $pred );
33
34 =head1 DESCRIPTION
35
36 This is a basic implementation of Bio::Ontology::RelationshipI.
37
38 The terminology we use here is the one commonly used for ontologies,
39 namely the triple of (subject, predicate, object), which in addition
40 is scoped in a namespace (ontology). It is called triple because it is
41 a tuple of three ontology terms.
42
43 There are other terminologies in use for expressing relationships. For
44 those who it helps to better understand the concept, the triple of
45 (child, relationship type, parent) would be equivalent to the
46 terminology chosen here, disregarding the question whether the notion
47 of parent and child is sensible in the context of the relationship
48 type or not. Especially in the case of ontologies with a wide variety
49 of predicates the parent/child terminology and similar ones can
50 quickly become ambiguous (e.g., A synthesises B), meaningless (e.g., A
51 binds B), or even conflicting (e.g., A is-parent-of B), and are
52 therefore strongly discouraged.
53
54 =head1 FEEDBACK
55
56 =head2 Mailing Lists
57
58 User feedback is an integral part of the evolution of this and other
59 Bioperl modules. Send your comments and suggestions preferably to the
60 Bioperl mailing lists Your participation is much appreciated.
61
62 bioperl-l@bioperl.org - General discussion
63 http://bio.perl.org/MailList.html - About the mailing lists
64
65 =head2 Reporting Bugs
66
67 report bugs to the Bioperl bug tracking system to help us keep track
68 the bugs and their resolution. Bug reports can be submitted via
69 email or the web:
70
71 bioperl-bugs@bio.perl.org
72 http://bugzilla.bioperl.org/
73
74 =head1 AUTHOR
75
76 Christian M. Zmasek
77
78 Email: czmasek@gnf.org or cmzmasek@yahoo.com
79
80 WWW: http://www.genetics.wustl.edu/eddy/people/zmasek/
81
82 Address:
83
84 Genomics Institute of the Novartis Research Foundation
85 10675 John Jay Hopkins Drive
86 San Diego, CA 92121
87
88 =head1 CONTRIBUTORS
89
90 Hilmar Lapp, email: hlapp at gmx.net
91
92 =head1 APPENDIX
93
94 The rest of the documentation details each of the object
95 methods. Internal methods are usually preceded with a _
96
97 =cut
98
99
100 # Let the code begin...
101
102
103 package Bio::Ontology::Relationship;
104 use vars qw( @ISA );
105 use strict;
106 use Bio::Root::Root;
107 use Bio::Ontology::TermI;
108 use Bio::Ontology::RelationshipI;
109
110 @ISA = qw( Bio::Root::Root
111 Bio::Ontology::RelationshipI );
112
113
114
115
116 =head2 new
117
118 Title : new
119 Usage : $rel = Bio::Ontology::Relationship->new(-identifier => "16847",
120 -subject_term => $subject,
121 -object_term => $object,
122 -predicate_term => $type );
123 Function: Creates a new Bio::Ontology::Relationship.
124 Returns : A new Bio::Ontology::Relationship object.
125 Args : -identifier => the identifier of this relationship [scalar]
126 -subject_term => the subject term [Bio::Ontology::TermI]
127 -object_term => the object term [Bio::Ontology::TermI]
128 -predicate_term => the predicate term [Bio::Ontology::TermI]
129
130 =cut
131
132 sub new {
133
134 my( $class, @args ) = @_;
135
136 my $self = $class->SUPER::new( @args );
137
138 my ( $identifier,
139 $subject_term,
140 $child, # for backwards compatibility
141 $object_term,
142 $parent, # for backwards compatibility
143 $predicate_term,
144 $reltype, # for backwards compatibility
145 $ont)
146 = $self->_rearrange( [qw( IDENTIFIER
147 SUBJECT_TERM
148 CHILD_TERM
149 OBJECT_TERM
150 PARENT_TERM
151 PREDICATE_TERM
152 RELATIONSHIP_TYPE
153 ONTOLOGY)
154 ], @args );
155
156 $self->init();
157
158 $self->identifier( $identifier );
159 $subject_term = $child unless $subject_term;
160 $object_term = $parent unless $object_term;
161 $predicate_term = $reltype unless $predicate_term;
162 $self->subject_term( $subject_term) if $subject_term;
163 $self->object_term( $object_term) if $object_term;
164 $self->predicate_term( $predicate_term ) if $predicate_term;
165 $self->ontology($ont) if $ont;
166
167 return $self;
168
169 } # new
170
171
172
173 =head2 init
174
175 Title : init()
176 Usage : $rel->init();
177 Function: Initializes this Relationship to all undef.
178 Returns :
179 Args :
180
181 =cut
182
183 sub init {
184 my( $self ) = @_;
185
186 $self->{ "_identifier" } = undef;
187 $self->{ "_subject_term" } = undef;
188 $self->{ "_object_term" } = undef;
189 $self->{ "_predicate_term" } = undef;
190 $self->ontology(undef);
191
192 } # init
193
194
195
196 =head2 identifier
197
198 Title : identifier
199 Usage : $rel->identifier( "100050" );
200 or
201 print $rel->identifier();
202 Function: Set/get for the identifier of this Relationship.
203 Returns : The identifier [scalar].
204 Args : The identifier [scalar] (optional).
205
206 =cut
207
208 sub identifier {
209 my ( $self, $value ) = @_;
210
211 if ( defined $value ) {
212 $self->{ "_identifier" } = $value;
213 }
214
215 return $self->{ "_identifier" };
216 } # identifier
217
218
219
220
221 =head2 subject_term
222
223 Title : subject_term
224 Usage : $rel->subject_term( $subject );
225 or
226 $subject = $rel->subject_term();
227 Function: Set/get for the subject term of this Relationship.
228
229 The common convention for ontologies is to express
230 relationships between terms as triples (subject, predicate,
231 object).
232
233 Returns : The subject term [Bio::Ontology::TermI].
234 Args : The subject term [Bio::Ontology::TermI] (optional).
235
236 =cut
237
238 sub subject_term {
239 my ( $self, $term ) = @_;
240
241 if ( defined $term ) {
242 $self->_check_class( $term, "Bio::Ontology::TermI" );
243 $self->{ "_subject_term" } = $term;
244 }
245
246 return $self->{ "_subject_term" };
247
248 } # subject_term
249
250
251
252 =head2 object_term
253
254 Title : object_term
255 Usage : $rel->object_term( $object );
256 or
257 $object = $rel->object_term();
258 Function: Set/get for the object term of this Relationship.
259
260 The common convention for ontologies is to express
261 relationships between terms as triples (subject, predicate,
262 object).
263
264 Returns : The object term [Bio::Ontology::TermI].
265 Args : The object term [Bio::Ontology::TermI] (optional).
266
267 =cut
268
269 sub object_term {
270 my ( $self, $term ) = @_;
271
272 if ( defined $term ) {
273 $self->_check_class( $term, "Bio::Ontology::TermI" );
274 $self->{ "_object_term" } = $term;
275 }
276
277 return $self->{ "_object_term" };
278 }
279
280
281
282 =head2 predicate_term
283
284 Title : predicate_term
285 Usage : $rel->predicate_term( $type );
286 or
287 $type = $rel->predicate_term();
288 Function: Set/get for the predicate (relationship type) of this
289 relationship.
290
291 The common convention for ontologies is to express
292 relationships between terms as triples (subject, predicate,
293 object).
294
295 Returns : The predicate term [Bio::Ontology::TermI].
296 Args : The predicate term [Bio::Ontology::TermI] (optional).
297
298 =cut
299
300 sub predicate_term {
301 my ( $self, $term ) = @_;
302
303 if ( defined $term ) {
304 $self->_check_class( $term, "Bio::Ontology::TermI" );
305 $self->{ "_predicate_term" } = $term;
306 }
307
308 return $self->{ "_predicate_term" };
309 }
310
311
312 =head2 ontology
313
314 Title : ontology
315 Usage : $ont = $obj->ontology()
316 Function: Get/set the ontology that defined this relationship.
317 Example :
318 Returns : an object implementing L<Bio::Ontology::OntologyI>
319 Args : on set, undef or an object implementing
320 L<Bio::Ontology::OntologyI> (optional)
321
322
323 =cut
324
325 sub ontology{
326 my $self = shift;
327 my $ont;
328
329 if(@_) {
330 $ont = shift;
331 if($ont) {
332 $ont = Bio::Ontology::Ontology->new(-name => $ont) if ! ref($ont);
333 if(! $ont->isa("Bio::Ontology::OntologyI")) {
334 $self->throw(ref($ont)." does not implement ".
335 "Bio::Ontology::OntologyI. Bummer.");
336 }
337 }
338 return $self->{"_ontology"} = $ont;
339 }
340 return $self->{"_ontology"};
341 }
342
343 =head2 to_string
344
345 Title : to_string()
346 Usage : print $rel->to_string();
347 Function: to_string method for Relationship.
348 Returns : A string representation of this Relationship.
349 Args :
350
351 =cut
352
353 sub to_string {
354 my( $self ) = @_;
355
356 local $^W = 0;
357
358 my $s = "";
359
360 $s .= "-- Identifier:\n";
361 $s .= $self->identifier()."\n";
362 $s .= "-- Subject Term Identifier:\n";
363 $s .= $self->subject_term()->identifier()."\n";
364 $s .= "-- Object Term Identifier:\n";
365 $s .= $self->object_term()->identifier()."\n";
366 $s .= "-- Relationship Type Identifier:\n";
367 $s .= $self->predicate_term()->identifier();
368
369 return $s;
370
371 } # to_string
372
373
374
375 sub _check_class {
376 my ( $self, $value, $expected_class ) = @_;
377
378 if ( ! defined( $value ) ) {
379 $self->throw( "Found [undef] where [$expected_class] expected" );
380 }
381 elsif ( ! ref( $value ) ) {
382 $self->throw( "Found [scalar] where [$expected_class] expected" );
383 }
384 elsif ( ! $value->isa( $expected_class ) ) {
385 $self->throw( "Found [" . ref( $value ) . "] where [$expected_class] expected" );
386 }
387
388 } # _check_type
389
390 #################################################################
391 # aliases for backwards compatibility
392 #################################################################
393
394 =head1 Deprecated Methods
395
396 These methods are deprecated and defined here solely to preserve
397 backwards compatibility.
398
399 =cut
400
401 *child_term = \&subject_term;
402 *parent_term = \&object_term;
403 *relationship_type = \&predicate_term;
404
405 1;