| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Bio::Phylo::NeXML::Meta; |
|
2
|
10
|
|
|
10
|
|
63
|
use strict; |
|
|
10
|
|
|
|
|
19
|
|
|
|
10
|
|
|
|
|
311
|
|
|
3
|
10
|
|
|
10
|
|
46
|
use base 'Bio::Phylo::Listable'; |
|
|
10
|
|
|
|
|
18
|
|
|
|
10
|
|
|
|
|
1116
|
|
|
4
|
10
|
|
|
10
|
|
60
|
use Bio::Phylo::Util::CONSTANT qw'_DOMCREATOR_ _META_ /looks_like/'; |
|
|
10
|
|
|
|
|
18
|
|
|
|
10
|
|
|
|
|
1693
|
|
|
5
|
10
|
|
|
10
|
|
66
|
use Bio::Phylo::Util::Exceptions 'throw'; |
|
|
10
|
|
|
|
|
26
|
|
|
|
10
|
|
|
|
|
438
|
|
|
6
|
10
|
|
|
10
|
|
79
|
use Bio::Phylo::Factory; |
|
|
10
|
|
|
|
|
18
|
|
|
|
10
|
|
|
|
|
59
|
|
|
7
|
|
|
|
|
|
|
{ |
|
8
|
|
|
|
|
|
|
my $fac = Bio::Phylo::Factory->new; |
|
9
|
|
|
|
|
|
|
my @fields = \( my ( %property, %content ) ); |
|
10
|
|
|
|
|
|
|
my $TYPE_CONSTANT = _META_; |
|
11
|
|
|
|
|
|
|
my $CONTAINER_CONSTANT = $TYPE_CONSTANT; |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
=head1 NAME |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
Bio::Phylo::NeXML::Meta - Single predicate/object annotation, attached to an |
|
16
|
|
|
|
|
|
|
xml-writable subject |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
use Bio::Phylo::Factory; |
|
21
|
|
|
|
|
|
|
use Bio::Phylo::Util::CONSTANT ':namespaces'; |
|
22
|
|
|
|
|
|
|
my $fac = Bio::Phylo::Factory->new; |
|
23
|
|
|
|
|
|
|
my $url = 'http://purl.org/phylo/treebase/phylows/study/TB2:S1787'; |
|
24
|
|
|
|
|
|
|
my $proj = $fac->create_project->add_meta( |
|
25
|
|
|
|
|
|
|
$fac->create_meta( |
|
26
|
|
|
|
|
|
|
'-namespaces' => { 'cdao' => _NS_CDAO_ }, |
|
27
|
|
|
|
|
|
|
'-triple' => { |
|
28
|
|
|
|
|
|
|
'cdao:hasMeta' => $fac->create_meta( |
|
29
|
|
|
|
|
|
|
'-namespaces' => { 'cdao' => _NS_CDAO_ }, |
|
30
|
|
|
|
|
|
|
'-triple' => { 'cdao:has_External_Reference' => $url } |
|
31
|
|
|
|
|
|
|
) |
|
32
|
|
|
|
|
|
|
} |
|
33
|
|
|
|
|
|
|
) |
|
34
|
|
|
|
|
|
|
); |
|
35
|
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
To comply with the NeXML standard (L), Bio::Phylo |
|
39
|
|
|
|
|
|
|
implements metadata annotations which consist conceptually of RDF triples where |
|
40
|
|
|
|
|
|
|
the subject is a container object that subclasses |
|
41
|
|
|
|
|
|
|
L, and the predicate and object are defined in |
|
42
|
|
|
|
|
|
|
this class. |
|
43
|
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
The objects of the triples provided by this class can be of any simple type |
|
45
|
|
|
|
|
|
|
(string, number) or one of L, L, L, |
|
46
|
|
|
|
|
|
|
L, L, L, L, L, |
|
47
|
|
|
|
|
|
|
L, L or L or L. |
|
48
|
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
When serialized, the Bio::Phylo::NeXML::Meta object in NeXML is typically written out |
|
50
|
|
|
|
|
|
|
as an element called 'meta', with RDFa compliant attributes. |
|
51
|
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
=head1 METHODS |
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
=head2 CONSTRUCTOR |
|
55
|
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
=over |
|
57
|
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
=item new() |
|
59
|
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
Type : Constructor |
|
61
|
|
|
|
|
|
|
Title : new |
|
62
|
|
|
|
|
|
|
Usage : my $anno = Bio::Phylo::NeXML::Meta->new; |
|
63
|
|
|
|
|
|
|
Function: Initializes a Bio::Phylo::NeXML::Meta object. |
|
64
|
|
|
|
|
|
|
Returns : A Bio::Phylo::NeXML::Meta object. |
|
65
|
|
|
|
|
|
|
Args : optional constructor arguments are key/value |
|
66
|
|
|
|
|
|
|
pairs where the key corresponds with any of |
|
67
|
|
|
|
|
|
|
the methods that starts with set_ (i.e. mutators) |
|
68
|
|
|
|
|
|
|
and the value is the permitted argument for such |
|
69
|
|
|
|
|
|
|
a method. The method name is changed such that, |
|
70
|
|
|
|
|
|
|
in order to access the set_value($val) method |
|
71
|
|
|
|
|
|
|
in the constructor, you would pass -value => $val |
|
72
|
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
=cut |
|
74
|
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
# sub new { return shift->SUPER::new( '-tag' => 'meta', @_ ) } |
|
76
|
|
|
|
|
|
|
my $set_content = sub { |
|
77
|
|
|
|
|
|
|
my ( $self, $content ) = @_; |
|
78
|
|
|
|
|
|
|
my $predicateName = 'property'; |
|
79
|
|
|
|
|
|
|
$content{ $self->get_id } = $content; |
|
80
|
|
|
|
|
|
|
my %resource = ( 'xsi:type' => 'nex:ResourceMeta' ); |
|
81
|
|
|
|
|
|
|
my %literal = ( 'xsi:type' => 'nex:LiteralMeta' ); |
|
82
|
|
|
|
|
|
|
if ( not ref $content ) { |
|
83
|
|
|
|
|
|
|
if ( $content && ( $content =~ m|^http://| or $content =~ m|^urn:| ) ) { |
|
84
|
|
|
|
|
|
|
$content =~ s/&([^a])/&$1/g; |
|
85
|
|
|
|
|
|
|
$self->set_attributes( 'href' => $content, %resource ); |
|
86
|
|
|
|
|
|
|
if ( my $prop = $self->get_attributes('property') ) { |
|
87
|
|
|
|
|
|
|
$self->set_attributes( 'rel' => $prop ); |
|
88
|
|
|
|
|
|
|
$self->unset_attribute('property'); |
|
89
|
|
|
|
|
|
|
$predicateName = 'rel'; |
|
90
|
|
|
|
|
|
|
} |
|
91
|
|
|
|
|
|
|
} |
|
92
|
|
|
|
|
|
|
else { |
|
93
|
|
|
|
|
|
|
$self->set_attributes( 'content' => $content, %literal ); |
|
94
|
|
|
|
|
|
|
if ( looks_like_number $content ) { |
|
95
|
|
|
|
|
|
|
my $dt = $content == int($content) |
|
96
|
|
|
|
|
|
|
&& $content !~ /\./ ? 'integer' : 'float'; |
|
97
|
|
|
|
|
|
|
$self->set_attributes( 'datatype' => 'xsd:' . $dt ); |
|
98
|
|
|
|
|
|
|
} |
|
99
|
|
|
|
|
|
|
elsif ( $content && ( $content eq 'true' or $content eq 'false' ) ) { |
|
100
|
|
|
|
|
|
|
$self->set_attributes( 'datatype' => 'xsd:boolean' ); |
|
101
|
|
|
|
|
|
|
} |
|
102
|
|
|
|
|
|
|
else { |
|
103
|
|
|
|
|
|
|
$self->set_attributes( 'datatype' => 'xsd:string' ); |
|
104
|
|
|
|
|
|
|
} |
|
105
|
|
|
|
|
|
|
} |
|
106
|
|
|
|
|
|
|
} |
|
107
|
|
|
|
|
|
|
else { |
|
108
|
|
|
|
|
|
|
if ( looks_like_instance $content, |
|
109
|
|
|
|
|
|
|
'Bio::Phylo' and $content->_type == $TYPE_CONSTANT ) |
|
110
|
|
|
|
|
|
|
{ |
|
111
|
|
|
|
|
|
|
$self->insert($content)->set_attributes(%resource); |
|
112
|
|
|
|
|
|
|
if ( my $prop = $self->get_attributes('property') ) { |
|
113
|
|
|
|
|
|
|
$self->set_attributes( 'rel' => $prop ); |
|
114
|
|
|
|
|
|
|
$self->unset_attribute('property'); |
|
115
|
|
|
|
|
|
|
$predicateName = 'rel'; |
|
116
|
|
|
|
|
|
|
} |
|
117
|
|
|
|
|
|
|
} |
|
118
|
|
|
|
|
|
|
elsif ( looks_like_instance $content, 'DateTime' ) { |
|
119
|
|
|
|
|
|
|
$self->set_attributes( |
|
120
|
|
|
|
|
|
|
'content' => $content->iso8601(), |
|
121
|
|
|
|
|
|
|
'datatype' => 'xsd:date', |
|
122
|
|
|
|
|
|
|
%literal |
|
123
|
|
|
|
|
|
|
); |
|
124
|
|
|
|
|
|
|
} |
|
125
|
|
|
|
|
|
|
else { |
|
126
|
|
|
|
|
|
|
$self->set_attributes( 'datatype' => 'rdf:XMLLiteral', %resource ); |
|
127
|
|
|
|
|
|
|
$self->insert( $fac->create_xmlliteral($content) ); |
|
128
|
|
|
|
|
|
|
$self->unset_attribute('content'); |
|
129
|
|
|
|
|
|
|
} |
|
130
|
|
|
|
|
|
|
} |
|
131
|
|
|
|
|
|
|
$property{ shift->get_id } = $predicateName; |
|
132
|
|
|
|
|
|
|
return $self; |
|
133
|
|
|
|
|
|
|
}; |
|
134
|
|
|
|
|
|
|
my $set_property = sub { |
|
135
|
|
|
|
|
|
|
my ( $self, $property ) = @_; |
|
136
|
|
|
|
|
|
|
if ( $property =~ m/^([a-zA-Z_]+):([a-zA-Z0-9_\-\.]+)$/ ) { |
|
137
|
|
|
|
|
|
|
my ( $prefix, $prop ) = ( $1, $2 ); |
|
138
|
|
|
|
|
|
|
if ( $self->get_namespaces($prefix) ) { |
|
139
|
|
|
|
|
|
|
$self->set_attributes( 'property' => $property ); |
|
140
|
|
|
|
|
|
|
} |
|
141
|
|
|
|
|
|
|
else { |
|
142
|
|
|
|
|
|
|
throw 'BadArgs' => "Prefix $prefix not bound to a namespace"; |
|
143
|
|
|
|
|
|
|
} |
|
144
|
|
|
|
|
|
|
} |
|
145
|
|
|
|
|
|
|
else { |
|
146
|
|
|
|
|
|
|
throw 'BadString' => "$property is not a valid CURIE"; |
|
147
|
|
|
|
|
|
|
} |
|
148
|
|
|
|
|
|
|
}; |
|
149
|
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
=back |
|
151
|
|
|
|
|
|
|
|
|
152
|
|
|
|
|
|
|
=head2 MUTATORS |
|
153
|
|
|
|
|
|
|
|
|
154
|
|
|
|
|
|
|
=over |
|
155
|
|
|
|
|
|
|
|
|
156
|
|
|
|
|
|
|
=item set_triple() |
|
157
|
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
Populates the triple, assuming that the invocant is attached to a subject. |
|
159
|
|
|
|
|
|
|
|
|
160
|
|
|
|
|
|
|
Type : Mutator |
|
161
|
|
|
|
|
|
|
Title : set_triple |
|
162
|
|
|
|
|
|
|
Usage : $meta->set_triple( $predicate, $object ); |
|
163
|
|
|
|
|
|
|
Function: Populates the triple. |
|
164
|
|
|
|
|
|
|
Returns : Modified object. |
|
165
|
|
|
|
|
|
|
Args : $predicate - a CURIE whose namespace prefix must |
|
166
|
|
|
|
|
|
|
have been bound previously using |
|
167
|
|
|
|
|
|
|
$meta->set_namespaces( $prefix, $uri ); |
|
168
|
|
|
|
|
|
|
$object - any of the valid object types: a number, |
|
169
|
|
|
|
|
|
|
a string, a url, a nested annotation |
|
170
|
|
|
|
|
|
|
or anything that can be adapted by |
|
171
|
|
|
|
|
|
|
Bio::Phylo::NeXML::Meta::XMLLiteral |
|
172
|
|
|
|
|
|
|
|
|
173
|
|
|
|
|
|
|
=cut |
|
174
|
|
|
|
|
|
|
|
|
175
|
|
|
|
|
|
|
sub set_triple : Clonable { |
|
176
|
1494
|
|
|
1494
|
1
|
2850
|
my ( $self, $property, $content ) = @_; |
|
177
|
1494
|
100
|
66
|
|
|
5284
|
if ( ref($property) && ref($property) eq 'HASH' ) { |
|
178
|
1423
|
|
|
|
|
1884
|
( $property, $content ) = each %{$property}; |
|
|
1423
|
|
|
|
|
4705
|
|
|
179
|
|
|
|
|
|
|
} |
|
180
|
1494
|
|
|
|
|
3877
|
$set_property->( $self, $property ); |
|
181
|
1494
|
|
|
|
|
3517
|
$set_content->( $self, $content ); |
|
182
|
1494
|
|
|
|
|
3207
|
return $self; |
|
183
|
10
|
|
|
10
|
|
75
|
} |
|
|
10
|
|
|
|
|
23
|
|
|
|
10
|
|
|
|
|
70
|
|
|
184
|
|
|
|
|
|
|
|
|
185
|
|
|
|
|
|
|
=back |
|
186
|
|
|
|
|
|
|
|
|
187
|
|
|
|
|
|
|
=head2 ACCESSORS |
|
188
|
|
|
|
|
|
|
|
|
189
|
|
|
|
|
|
|
=over |
|
190
|
|
|
|
|
|
|
|
|
191
|
|
|
|
|
|
|
=item get_triple () |
|
192
|
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
Returns predicate and object for the triple |
|
194
|
|
|
|
|
|
|
|
|
195
|
|
|
|
|
|
|
Type : Accessor |
|
196
|
|
|
|
|
|
|
Title : get_triple |
|
197
|
|
|
|
|
|
|
Usage : my ( $predicate, $object ) = $anno->get_triple; |
|
198
|
|
|
|
|
|
|
Function: Returns triple |
|
199
|
|
|
|
|
|
|
Returns : Predicate and object of a triple |
|
200
|
|
|
|
|
|
|
Args : NONE |
|
201
|
|
|
|
|
|
|
|
|
202
|
|
|
|
|
|
|
=cut |
|
203
|
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
sub get_triple { |
|
205
|
0
|
|
|
0
|
1
|
0
|
my $self = shift; |
|
206
|
0
|
|
|
|
|
0
|
return $self->get_predicate, $self->get_object; |
|
207
|
|
|
|
|
|
|
} |
|
208
|
|
|
|
|
|
|
|
|
209
|
|
|
|
|
|
|
=item get_object() |
|
210
|
|
|
|
|
|
|
|
|
211
|
|
|
|
|
|
|
Returns triple object |
|
212
|
|
|
|
|
|
|
|
|
213
|
|
|
|
|
|
|
Type : Accessor |
|
214
|
|
|
|
|
|
|
Title : get_object |
|
215
|
|
|
|
|
|
|
Usage : my $val = $anno->get_object; |
|
216
|
|
|
|
|
|
|
Function: Returns triple object |
|
217
|
|
|
|
|
|
|
Returns : A triple object |
|
218
|
|
|
|
|
|
|
Args : NONE |
|
219
|
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
=cut |
|
221
|
|
|
|
|
|
|
|
|
222
|
1714
|
|
|
1714
|
1
|
3644
|
sub get_object { $content{ shift->get_id } } |
|
223
|
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
=item get_predicate() |
|
225
|
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
Returns triple predicate |
|
227
|
|
|
|
|
|
|
|
|
228
|
|
|
|
|
|
|
Type : Accessor |
|
229
|
|
|
|
|
|
|
Title : get_predicate |
|
230
|
|
|
|
|
|
|
Usage : my $val = $anno->get_predicate; |
|
231
|
|
|
|
|
|
|
Function: Returns triple predicate |
|
232
|
|
|
|
|
|
|
Returns : A triple predicate |
|
233
|
|
|
|
|
|
|
Args : NONE |
|
234
|
|
|
|
|
|
|
|
|
235
|
|
|
|
|
|
|
=cut |
|
236
|
|
|
|
|
|
|
|
|
237
|
|
|
|
|
|
|
sub get_predicate { |
|
238
|
15098
|
|
|
15098
|
1
|
19803
|
my $self = shift; |
|
239
|
15098
|
|
|
|
|
28043
|
my $predicateName = $property{ $self->get_id }; |
|
240
|
15098
|
|
|
|
|
32529
|
return $self->get_attributes->{$predicateName}; |
|
241
|
|
|
|
|
|
|
} |
|
242
|
|
|
|
|
|
|
|
|
243
|
|
|
|
|
|
|
=item get_predicate_namespace() |
|
244
|
|
|
|
|
|
|
|
|
245
|
|
|
|
|
|
|
Returns predicate namespace |
|
246
|
|
|
|
|
|
|
|
|
247
|
|
|
|
|
|
|
Type : Accessor |
|
248
|
|
|
|
|
|
|
Title : get_predicate_namespace |
|
249
|
|
|
|
|
|
|
Usage : my $val = $anno->get_predicate_namespace; |
|
250
|
|
|
|
|
|
|
Function: Returns predicate namespace |
|
251
|
|
|
|
|
|
|
Returns : A namespace |
|
252
|
|
|
|
|
|
|
Args : NONE |
|
253
|
|
|
|
|
|
|
|
|
254
|
|
|
|
|
|
|
=cut |
|
255
|
|
|
|
|
|
|
|
|
256
|
|
|
|
|
|
|
sub get_predicate_namespace { |
|
257
|
1282
|
|
|
1282
|
1
|
1718
|
my $self = shift; |
|
258
|
1282
|
|
|
|
|
2020
|
my $predicate = $self->get_predicate; |
|
259
|
1282
|
|
|
|
|
3884
|
my ( $pre, $pred ) = split /:/, $predicate; |
|
260
|
1282
|
|
|
|
|
3188
|
return $self->get_namespaces($pre); |
|
261
|
|
|
|
|
|
|
} |
|
262
|
|
|
|
|
|
|
|
|
263
|
|
|
|
|
|
|
=item get_predicate_local() |
|
264
|
|
|
|
|
|
|
|
|
265
|
|
|
|
|
|
|
Returns predicate without prefix |
|
266
|
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
Type : Accessor |
|
268
|
|
|
|
|
|
|
Title : get_predicate_local |
|
269
|
|
|
|
|
|
|
Usage : my $val = $anno->get_predicate_local; |
|
270
|
|
|
|
|
|
|
Function: Returns predicate without prefix |
|
271
|
|
|
|
|
|
|
Returns : A predicate |
|
272
|
|
|
|
|
|
|
Args : NONE |
|
273
|
|
|
|
|
|
|
|
|
274
|
|
|
|
|
|
|
=cut |
|
275
|
|
|
|
|
|
|
|
|
276
|
|
|
|
|
|
|
sub get_predicate_local { |
|
277
|
637
|
|
|
637
|
1
|
814
|
my $self = shift; |
|
278
|
637
|
|
|
|
|
921
|
my $predicate = $self->get_predicate; |
|
279
|
637
|
|
|
|
|
1764
|
my ( $pre, $pred ) = split /:/, $predicate; |
|
280
|
637
|
|
|
|
|
1586
|
return $pred; |
|
281
|
|
|
|
|
|
|
} |
|
282
|
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
=item get_object_type() |
|
284
|
|
|
|
|
|
|
|
|
285
|
|
|
|
|
|
|
Returns data type of object |
|
286
|
|
|
|
|
|
|
|
|
287
|
|
|
|
|
|
|
Type : Accessor |
|
288
|
|
|
|
|
|
|
Title : get_object_type |
|
289
|
|
|
|
|
|
|
Usage : my $val = $anno->get_object_type; |
|
290
|
|
|
|
|
|
|
Function: Returns data type of object |
|
291
|
|
|
|
|
|
|
Returns : A local predicate, e.g. 'boolean' |
|
292
|
|
|
|
|
|
|
Args : NONE |
|
293
|
|
|
|
|
|
|
|
|
294
|
|
|
|
|
|
|
=cut |
|
295
|
|
|
|
|
|
|
|
|
296
|
|
|
|
|
|
|
sub get_object_type { |
|
297
|
0
|
|
|
0
|
1
|
0
|
my $self = shift; |
|
298
|
0
|
0
|
|
|
|
0
|
if ( my $type = $self->get_attributes('datatype') ) { |
|
299
|
0
|
|
|
|
|
0
|
my ( $pre, $datatype ) = split /:/, $type; |
|
300
|
0
|
|
|
|
|
0
|
return $datatype; |
|
301
|
|
|
|
|
|
|
} |
|
302
|
|
|
|
|
|
|
} |
|
303
|
|
|
|
|
|
|
|
|
304
|
|
|
|
|
|
|
=back |
|
305
|
|
|
|
|
|
|
|
|
306
|
|
|
|
|
|
|
=head2 TESTS |
|
307
|
|
|
|
|
|
|
|
|
308
|
|
|
|
|
|
|
=over |
|
309
|
|
|
|
|
|
|
|
|
310
|
|
|
|
|
|
|
=item is_resource() |
|
311
|
|
|
|
|
|
|
|
|
312
|
|
|
|
|
|
|
Returns whether the object is a resource (e.g. an href or a nested XMLLiteral) |
|
313
|
|
|
|
|
|
|
|
|
314
|
|
|
|
|
|
|
Type : Accessor |
|
315
|
|
|
|
|
|
|
Title : is_resource |
|
316
|
|
|
|
|
|
|
Usage : my $val = $anno->is_resource; |
|
317
|
|
|
|
|
|
|
Function: Returns whether object is a resource |
|
318
|
|
|
|
|
|
|
Returns : Boolean |
|
319
|
|
|
|
|
|
|
Args : NONE |
|
320
|
|
|
|
|
|
|
|
|
321
|
|
|
|
|
|
|
=cut |
|
322
|
|
|
|
|
|
|
|
|
323
|
|
|
|
|
|
|
sub is_resource { |
|
324
|
0
|
|
|
0
|
1
|
0
|
my $self = shift; |
|
325
|
0
|
|
|
|
|
0
|
return $self->get_attributes('xsi:type') =~ /ResourceMeta/; |
|
326
|
|
|
|
|
|
|
} |
|
327
|
|
|
|
|
|
|
|
|
328
|
|
|
|
|
|
|
=item is_xml_literal() |
|
329
|
|
|
|
|
|
|
|
|
330
|
|
|
|
|
|
|
Returns whether the object is a nested XMLLiteral |
|
331
|
|
|
|
|
|
|
|
|
332
|
|
|
|
|
|
|
Type : Accessor |
|
333
|
|
|
|
|
|
|
Title : is_xml_literal |
|
334
|
|
|
|
|
|
|
Usage : my $val = $anno->is_xml_literal; |
|
335
|
|
|
|
|
|
|
Function: Returns whether object is a nested XMLLiteral |
|
336
|
|
|
|
|
|
|
Returns : Boolean |
|
337
|
|
|
|
|
|
|
Args : NONE |
|
338
|
|
|
|
|
|
|
|
|
339
|
|
|
|
|
|
|
=cut |
|
340
|
|
|
|
|
|
|
|
|
341
|
|
|
|
|
|
|
sub is_xml_literal { |
|
342
|
0
|
|
|
0
|
1
|
0
|
my $self = shift; |
|
343
|
0
|
|
|
|
|
0
|
return $self->get_object_type eq 'XMLLiteral'; |
|
344
|
|
|
|
|
|
|
} |
|
345
|
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
=back |
|
347
|
|
|
|
|
|
|
|
|
348
|
|
|
|
|
|
|
=head2 SERIALIZERS |
|
349
|
|
|
|
|
|
|
|
|
350
|
|
|
|
|
|
|
=over |
|
351
|
|
|
|
|
|
|
|
|
352
|
|
|
|
|
|
|
=item to_dom() |
|
353
|
|
|
|
|
|
|
|
|
354
|
|
|
|
|
|
|
Type : Serializer |
|
355
|
|
|
|
|
|
|
Title : to_dom |
|
356
|
|
|
|
|
|
|
Usage : $obj->to_dom |
|
357
|
|
|
|
|
|
|
Function: Generates a DOM subtree from the invocant and |
|
358
|
|
|
|
|
|
|
its contained objects |
|
359
|
|
|
|
|
|
|
Returns : a DOM element object (default: XML::Twig flavor) |
|
360
|
|
|
|
|
|
|
Args : DOM factory object |
|
361
|
|
|
|
|
|
|
Note : This is the generic function. It is redefined in the |
|
362
|
|
|
|
|
|
|
classes below. |
|
363
|
|
|
|
|
|
|
=cut |
|
364
|
|
|
|
|
|
|
|
|
365
|
|
|
|
|
|
|
sub to_dom { |
|
366
|
0
|
|
|
0
|
1
|
0
|
my ( $self, $dom ) = @_; |
|
367
|
0
|
|
0
|
|
|
0
|
$dom ||= Bio::Phylo::NeXML::DOM->get_dom; |
|
368
|
0
|
0
|
|
|
|
0
|
if ( looks_like_object $dom, _DOMCREATOR_ ) { |
|
369
|
0
|
|
|
|
|
0
|
my $elt = $self->get_dom_elt($dom); |
|
370
|
0
|
0
|
|
|
|
0
|
if ( $self->can('get_entities') ) { |
|
371
|
0
|
|
|
|
|
0
|
for my $ent ( @{ $self->get_entities } ) { |
|
|
0
|
|
|
|
|
0
|
|
|
372
|
0
|
0
|
|
|
|
0
|
if ( looks_like_implementor $ent, 'to_dom' ) { |
|
373
|
0
|
|
|
|
|
0
|
$elt->set_child( $ent->to_dom($dom) ); |
|
374
|
|
|
|
|
|
|
} |
|
375
|
|
|
|
|
|
|
} |
|
376
|
|
|
|
|
|
|
} |
|
377
|
0
|
|
|
|
|
0
|
return $elt; |
|
378
|
|
|
|
|
|
|
} |
|
379
|
|
|
|
|
|
|
else { |
|
380
|
0
|
|
|
|
|
0
|
throw 'BadArgs' => 'DOM factory object not provided'; |
|
381
|
|
|
|
|
|
|
} |
|
382
|
|
|
|
|
|
|
} |
|
383
|
|
|
|
|
|
|
|
|
384
|
|
|
|
|
|
|
=back |
|
385
|
|
|
|
|
|
|
|
|
386
|
|
|
|
|
|
|
=cut |
|
387
|
|
|
|
|
|
|
|
|
388
|
|
|
|
|
|
|
# podinherit_insert_token |
|
389
|
|
|
|
|
|
|
|
|
390
|
|
|
|
|
|
|
=head1 SEE ALSO |
|
391
|
|
|
|
|
|
|
|
|
392
|
|
|
|
|
|
|
There is a mailing list at L |
|
393
|
|
|
|
|
|
|
for any user or developer questions and discussions. |
|
394
|
|
|
|
|
|
|
|
|
395
|
|
|
|
|
|
|
=over |
|
396
|
|
|
|
|
|
|
|
|
397
|
|
|
|
|
|
|
=item L |
|
398
|
|
|
|
|
|
|
|
|
399
|
|
|
|
|
|
|
Annotation objects are combined into a dictionary. |
|
400
|
|
|
|
|
|
|
|
|
401
|
|
|
|
|
|
|
=item L |
|
402
|
|
|
|
|
|
|
|
|
403
|
|
|
|
|
|
|
This object inherits from L, so methods |
|
404
|
|
|
|
|
|
|
defined there are also applicable here. |
|
405
|
|
|
|
|
|
|
|
|
406
|
|
|
|
|
|
|
=item L |
|
407
|
|
|
|
|
|
|
|
|
408
|
|
|
|
|
|
|
Also see the manual: L and L. |
|
409
|
|
|
|
|
|
|
|
|
410
|
|
|
|
|
|
|
=back |
|
411
|
|
|
|
|
|
|
|
|
412
|
|
|
|
|
|
|
=head1 CITATION |
|
413
|
|
|
|
|
|
|
|
|
414
|
|
|
|
|
|
|
If you use Bio::Phylo in published research, please cite it: |
|
415
|
|
|
|
|
|
|
|
|
416
|
|
|
|
|
|
|
B, B, B, B |
|
417
|
|
|
|
|
|
|
and B, 2011. Bio::Phylo - phyloinformatic analysis using Perl. |
|
418
|
|
|
|
|
|
|
I B<12>:63. |
|
419
|
|
|
|
|
|
|
L |
|
420
|
|
|
|
|
|
|
|
|
421
|
|
|
|
|
|
|
=cut |
|
422
|
|
|
|
|
|
|
|
|
423
|
1423
|
|
|
1423
|
|
3400
|
sub _tag { 'meta' } |
|
424
|
2866
|
|
|
2866
|
|
5359
|
sub _type { $TYPE_CONSTANT } |
|
425
|
0
|
|
|
0
|
|
|
sub _container { $CONTAINER_CONSTANT } |
|
426
|
|
|
|
|
|
|
|
|
427
|
|
|
|
|
|
|
sub _cleanup : Destructor { |
|
428
|
1423
|
|
|
1423
|
|
2839
|
my $id = shift->get_id; |
|
429
|
1423
|
|
|
|
|
6116
|
delete $_->{$id} for @fields; |
|
430
|
10
|
|
|
10
|
|
6592
|
} |
|
|
10
|
|
|
|
|
20
|
|
|
|
10
|
|
|
|
|
63
|
|
|
431
|
|
|
|
|
|
|
} |
|
432
|
|
|
|
|
|
|
1; |