annotate variant_effect_predictor/Bio/Biblio/IO/pubmedxml.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: pubmedxml.pm,v 1.4 2002/10/22 07:45:13 lapp Exp $
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 # BioPerl module Bio::Biblio::IO::pubmedxml.pm
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 # Cared for by Martin Senger <senger@ebi.ac.uk>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 # For copyright and disclaimer see below.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 # POD documentation - main docs before the code
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12 Bio::Biblio::IO::pubmedxml - A converter of XML files with PUBMED citations
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Do not use this object directly, it is recommended to access it and use
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 it through the I<Bio::Biblio::IO> module:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 use Bio::Biblio::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20 my $io = new Bio::Biblio::IO (-format => 'pubmedxml');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24 This object reads bibliographic citations in XML/MEDLINE format and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 converts them into I<Bio::Biblio::RefI> objects. It is an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26 implementation of methods defined in I<Bio::Biblio::IO>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 =head1 FEEDBACK
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 =head2 Mailing Lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 User feedback is an integral part of the evolution of this and other
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 Bioperl modules. Send your comments and suggestions preferably to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 the Bioperl mailing list. Your participation is much appreciated.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 bioperl-l@bioperl.org - General discussion
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 http://bioperl.org/MailList.shtml - About the mailing lists
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 =head2 Reporting Bugs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 Report bugs to the Bioperl bug tracking system to help us keep track
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 of the bugs and their resolution. Bug reports can be submitted via
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 email or the web:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 bioperl-bugs@bioperl.org
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 http://bugzilla.bioperl.org/
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 =head1 AUTHOR
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 Martin Senger (senger@ebi.ac.uk)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 =head1 COPYRIGHT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 Copyright (c) 2002 European Bioinformatics Institute. All Rights Reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 This module is free software; you can redistribute it and/or modify
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57 it under the same terms as Perl itself.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 =head1 DISCLAIMER
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 This software is provided "as is" without warranty of any kind.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 =head1 APPENDIX
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 The main documentation details are to be found in
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 L<Bio::Biblio::IO>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 Here is the rest of the object methods. Internal methods are preceded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 with an underscore _.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 # Let the code begin...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 package Bio::Biblio::IO::pubmedxml;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 use vars qw(@ISA $VERSION $Revision);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 use vars qw(%PCDATA_NAMES %SIMPLE_TREATMENT %POP_DATA_AND_PEEK_OBJ %POP_AND_ADD_DATA_ELEMENT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 use Bio::Biblio::IO::medlinexml;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 @ISA = qw(Bio::Biblio::IO::medlinexml);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 # set the version for version checking
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 $VERSION = do { my @r = (q$Revision: 1.4 $ =~ /\d+/g); sprintf "%d.%-02d", @r };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 $Revision = q$Id: pubmedxml.pm,v 1.4 2002/10/22 07:45:13 lapp Exp $;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 sub _initialize {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 # make a hashtable from @args
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97 my %param = @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 @param { map { lc $_ } keys %param } = values %param; # lowercase keys
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 # copy all @args into this object (overwriting what may already be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 # there) - changing '-key' into '_key', and making keys lowercase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 my $new_key;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 foreach my $key (keys %param) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 ($new_key = $key) =~ s/^-/_/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 $self->{ lc $new_key } = $param { $key };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 # find the format for output - and put it into a global $Convert
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 # because it will be used by the event handler who knows nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 # about this object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 my $result = $self->{'_result'} || 'pubmed2ref';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 $result = "\L$result"; # normalize capitalization to lower case
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 # a special case is 'raw' when no converting module is loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 # and citations will be returned as a hashtable (the one which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 # is created during parsing XML file/stream)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 unless ($result eq 'raw') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 # load module with output converter - as defined in $result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 if (defined &Bio::Biblio::IO::_load_format_module ($result)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 $Bio::Biblio::IO::medlinexml::Convert = "Bio::Biblio::IO::$result"->new (@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 # create an instance of the XML parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 # (unless it is already there...)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 $self->{'_xml_parser'} = new XML::Parser (Handlers => {Init => \&Bio::Biblio::IO::medlinexml::handle_doc_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 Start => \&handle_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 End => \&handle_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 Char => \&Bio::Biblio::IO::medlinexml::handle_char,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 Final => \&Bio::Biblio::IO::medlinexml::handle_doc_end})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 unless $self->{'_xml_parser'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 # if there is an argument '-callback' then start parsing at once -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 # the registered event handlers will use 'callback' to report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 # back after each citation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 # we need to remember this situation also in a global variable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 # because the event handler subroutines know nothing about this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 # object (unfortunately)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 if ($SUPER::Callback = $self->{'_callback'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 $self->_parse;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 # ---------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 # Here are the event handlers (they do the real job!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 # Note that these methods do not know anything about the object they
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 # are part of - they are called as subroutines. not as methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 # It also means that they need to use global variables to store and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # exchnage intermediate results.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 # ---------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 # This is a list of #PCDATA elements.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 %PCDATA_NAMES =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 'PublicationStatus' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 'ProviderId' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 'ArticleId' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 'URL' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 %SIMPLE_TREATMENT =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 'History' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 'PubMedArticle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 'PubmedArticle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 'PubmedData' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 %POP_DATA_AND_PEEK_OBJ =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 'Year' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 'Month' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 'Day' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 'Hour' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 'Minute' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 'Second' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 'ProviderId' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 'PublicationStatus' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 %POP_AND_ADD_DATA_ELEMENT =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 'PubMedPubDate' => 'pubDates',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 'History' => 'histories',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 =head2 VERSION and Revision
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 Usage : print $Bio::Biblio::IO::pubmedxml::VERSION;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 print $Bio::Biblio::IO::pubmedxml::Revision;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 sub handle_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 my ($expat, $e, %attrs) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 # &Bio::Biblio::IO::medlinexml::_debug_object_stack ("START", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 # The #PCDATA elements which have an attribute list must
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 # be first here - because for them I create entries both on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 # the @PCDataStack _and_ on @ObjectStack.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 if ($e eq 'ArticleId') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 my %p = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 $p{'idType'} = (defined $attrs{'IdType'} ? $attrs{'IdType'} : 'pubmed');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 push (@Bio::Biblio::IO::medlinexml::ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 if ($e eq 'URL') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 my %p = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 $p{'type'} = $attrs{'type'} if $attrs{'type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $p{'lang'} = $attrs{'lang'} if $attrs{'lang'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 push (@Bio::Biblio::IO::medlinexml::ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 # Then we have #PCDATA elements without an attribute list.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227 # For them I create an entry on @PCDataStack.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 if (exists $PCDATA_NAMES{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 push (@Bio::Biblio::IO::medlinexml::PCDataStack, '');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 # And finally, all non-PCDATA elements go to the objectStack
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 } elsif (exists $SIMPLE_TREATMENT{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 push (@Bio::Biblio::IO::medlinexml::ObjectStack, {});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 } elsif ($e eq 'ArticleIdList') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 } elsif ($e eq 'PubMedPubDate') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 my %p = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 $p{'pubStatus'} = $attrs{'PubStatus'} if $attrs{'PubStatus'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 push (@Bio::Biblio::IO::medlinexml::ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 &Bio::Biblio::IO::medlinexml::handle_start ($expat, $e, %attrs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 sub handle_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 my ($expat, $e) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 # First I have to deal with those elements which are both PCDATA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 # (and therefore they are on the pcdataStack) and which have an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 # attribute list (therefore they are also known as a separate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 # p-object on the objectStack.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 if ($e eq 'ArticleId') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 &Bio::Biblio::IO::medlinexml::_data2obj ('id');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 &Bio::Biblio::IO::medlinexml::_add_element ('pubmedArticleIds', pop @Bio::Biblio::IO::medlinexml::ObjectStack);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 # &Bio::Biblio::IO::medlinexml::_debug_object_stack ("END", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 if ($e eq 'URL') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 &Bio::Biblio::IO::medlinexml::_data2obj ('URL');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 &Bio::Biblio::IO::medlinexml::_add_element ('pubmedURLs', pop @Bio::Biblio::IO::medlinexml::ObjectStack);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 # &Bio::Biblio::IO::medlinexml::_debug_object_stack ("END", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 # both object and pcdata stacks elements mixed here together
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 if (exists $POP_DATA_AND_PEEK_OBJ{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 &Bio::Biblio::IO::medlinexml::_data2obj ("\l$e");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 } elsif (exists $POP_AND_ADD_DATA_ELEMENT{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 &Bio::Biblio::IO::medlinexml::_add_element ($POP_AND_ADD_DATA_ELEMENT{$e}, pop @Bio::Biblio::IO::medlinexml::ObjectStack);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 } elsif ($e eq 'MedlineCitation' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 $e eq 'NCBIArticle') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 &Bio::Biblio::IO::medlinexml::_obj2obj ('Citation');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 } elsif ($e eq 'PubmedData') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 &Bio::Biblio::IO::medlinexml::_obj2obj ('PubmedData');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 } elsif ($e eq 'PubMedArticle' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 $e eq 'PubmedArticle') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 # Here we finally have the whole citation ready.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 &Bio::Biblio::IO::medlinexml::_process_citation (pop @Bio::Biblio::IO::medlinexml::ObjectStack);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 &Bio::Biblio::IO::medlinexml::handle_end ($expat, $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 # &Bio::Biblio::IO::medlinexml::_debug_object_stack ("END", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 __END__