annotate variant_effect_predictor/Bio/Biblio/IO/medlinexml.pm @ 3:d30fa12e4cc5 default tip

Merge heads 2:a5976b2dce6f and 1:09613ce8151e which were created as a result of a recently fixed bug.
author devteam <devteam@galaxyproject.org>
date Mon, 13 Jan 2014 10:38:30 -0500
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 # $Id: medlinexml.pm,v 1.5 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::medlinexml.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::medlinexml - A converter of XML files with MEDLINE 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 => 'medlinexml');
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::medlinexml;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 use vars qw(@ISA $VERSION $Revision);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 use vars qw(@Citations $Callback $Convert @ObjectStack @PCDataStack);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 use vars qw(%PCDATA_NAMES %SIMPLE_TREATMENT %POP_DATA_AND_PEEK_OBJ %POP_OBJ_AND_PEEK_OBJ);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 use vars qw(%POP_AND_ADD_ELEMENT %POP_AND_ADD_DATA_ELEMENT);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 use Bio::Biblio::IO;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 use XML::Parser;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 @ISA = qw(Bio::Biblio::IO);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 BEGIN {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 # set the version for version checking
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 $VERSION = do { my @r = (q$Revision: 1.5 $ =~ /\d+/g); sprintf "%d.%-02d", @r };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 $Revision = q$Id: medlinexml.pm,v 1.5 2002/10/22 07:45:13 lapp Exp $;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 # -----------------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 sub _initialize {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 # make a hashtable from @args
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 my %param = @args;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 @param { map { lc $_ } keys %param } = values %param; # lowercase keys
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 # copy all @args into this object (overwriting what may already be
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 # there) - changing '-key' into '_key', and making keys lowercase
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 my $new_key;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 foreach my $key (keys %param) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109 ($new_key = $key) =~ s/^-/_/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 $self->{ lc $new_key } = $param { $key };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113 # find the format for output - and put it into a global $Convert
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 # because it will be used by the event handler who knows nothing
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 # about this object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 my $result = $self->{'_result'} || 'medline2ref';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 $result = "\L$result"; # normalize capitalization to lower case
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 # a special case is 'raw' when no converting module is loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 # and citations will be returned as a hashtable (the one which
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 # is created during parsing XML file/stream)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 unless ($result eq 'raw') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 # load module with output converter - as defined in $result
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 if (defined &Bio::Biblio::IO::_load_format_module ($result)) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $Convert = "Bio::Biblio::IO::$result"->new (@args);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 # create an instance of the XML parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 # (unless it is already there...)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 $self->{'_xml_parser'} = new XML::Parser (Handlers => {Init => \&handle_doc_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 Start => \&handle_start,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 End => \&handle_end,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 Char => \&handle_char,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 Final => \&handle_doc_end})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 unless $self->{'_xml_parser'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 # if there is an argument '-callback' then start parsing at once -
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 # the registered event handlers will use 'callback' to report
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 # back after each citation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 # we need to remember this situation also in a global variable
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 # because the event handler subroutines know nothing about this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 # object (unfortunately)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 if ($Callback = $self->{'_callback'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147 $self->_parse;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 # -----------------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 sub _parse {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 my ($self) = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 if (defined $self->{'_file'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 $self->{'_xml_parser'}->parsefile ($self->{'_file'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 } elsif (defined $self->{'_fh'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 my $fh = $self->{'_fh'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 if (ref ($fh) and UNIVERSAL::isa ($fh, 'IO::Handler')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 $self->{'_xml_parser'}->parse ($fh);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 my $data;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 $data .= $_ while <$fh>;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 $self->{'_xml_parser'}->parse ($data);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 } elsif ($self->{'_data'}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 $self->{'_xml_parser'}->parse ($self->{'_data'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171 $self->throw ("XML source to be parsed is unknown. Should be given in the new().");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 # when parsing is done all citations have already been delivered
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175 # to the caller using her callbacks - and nothing to be stored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 # here, or parser put all citations into global @Cittaions where
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 # we want to copy there into this instance - so any caller can
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 # start parsing other XML input without overwriting already read
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179 # citations from the first parser
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 if (@Citations) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $self->{'_citations'} = [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 foreach my $cit (@Citations) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 push (@{ $self->{'_citations'} }, $cit);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 undef $cit;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186 undef @Citations;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190 # ---------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192 # Here is an implementation of Bio::Biblio::IO methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 # ---------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196 # global variables used by the XML event handlers
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 # TBD: make them accessible at least ONLY from this module...
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 @Citations = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 $Callback = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200 $Convert = undef;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 @ObjectStack = (); # it has Hash-Ref elements
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 @PCDataStack = (); # it has String elements
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 sub next_bibref {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 $self->throw ("Method 'next_bibref' should not be called when a '-callback' argument given.")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 if $self->{'_callback'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 # parse the whole input into memory (global @Citations)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 # and then copy it into this object
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $self->_parse unless $self->{'_citations'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 # return the next citation (and forget it here)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 shift (@{ $self->{'_citations'} });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 # ---------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219 # Here are the event handlers (they do the real job!)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 # Note that these methods do not know anything about the object they
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 # are part of - they are called as subroutines. not as methods.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 # It also means that they need to use global variables to store and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 # exchnage intermediate results.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 # ---------------------------------------------------------------------
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229 # This is a list of #PCDATA elements.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 %PCDATA_NAMES = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232 'AbstractText' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 'AccessionNumber' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 'Acronym' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 'Affiliation' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236 'Agency' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 'ArticleTitle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 'CASRegistryNumber' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 'CitationSubset' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 'Coden' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 'CollectionTitle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242 'CollectiveName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 'CopyrightInformation' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244 'Country' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 'DataBankName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246 'DateOfElectronicPublication' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 'Day' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 'Descriptor' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 'DescriptorName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 'EndPage' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 'FirstName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252 'ForeName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253 'GeneralNote' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 'GeneSymbol' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 'GrantID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 'Hour' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257 'ISOAbbreviation' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 'ISSN' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259 'Initials' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 'Issue' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 'Keyword' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 'Language' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 'LastName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 'MedlineCode' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 'MedlineDate' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 'MedlineID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267 'MedlinePgn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 'MedlineTA' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 'MiddleName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270 'Minute' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 'Month' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272 'NameOfSubstance' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273 'NlmUniqueID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 'Note' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275 'NumberOfReferences' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 'OtherID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 'PMID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278 'PublicationType' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279 'Publisher' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280 'QualifierName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281 'RefSource' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 'RegistryNumber' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 'Season' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284 'Second' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 'SpaceFlightMission' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286 'StartPage' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 'SubHeading' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 'Suffix' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 'Title' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 'VernacularTitle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291 'Volume' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292 'Year' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295 %SIMPLE_TREATMENT = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 'MeshHeading' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 'Author' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298 'Article' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 'Book' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300 'Investigator' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 'Chemical' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 'Pagination' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 'MedlineJournalInfo' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 'JournalIssue' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305 'Journal' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 'DateCreated' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 'DateCompleted' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 'DateRevised' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 'PubDate' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 'Abstract' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 'Grant' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 'CommentsCorrections' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 'CommentOn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 'CommentIn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 'ErratumFor' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316 'ErratumIn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 'OriginalReportIn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 'RepublishedFrom' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 'RepublishedIn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 'RetractionOf' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321 'RetractionIn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 'SummaryForPatientsIn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 'UpdateIn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 'UpdateOf' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 'DataBank' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 'KeywordList' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327 'DeleteCitation' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330 %POP_DATA_AND_PEEK_OBJ = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 'Descriptor' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332 'DescriptorName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 'Year' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334 'Month' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 'Day' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336 'LastName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 'Initials' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 'FirstName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 'ForeName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340 'NameOfSubstance' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 'RegistryNumber' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342 'CASRegistryNumber' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 'MiddleName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344 'NlmUniqueID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 'MedlineTA' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 'MedlinePgn' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347 'MedlineCode' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 'Country' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 'ISSN' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 'ArticleTitle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 'Issue' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352 'AbstractText' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 'VernacularTitle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 'GrantID' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355 'Agency' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 'Acronym' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 'MedlineDate' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358 'NumberOfReferences' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 'RefSource' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 'DataBankName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 'CopyrightInformation' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 'Suffix' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363 'Note' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 'CollectiveName' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 'Hour' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 'Minute' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 'Second' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368 'Season' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 'Coden' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370 'ISOAbbreviation' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 'Publisher' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372 'CollectionTitle' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 'DateOfElectronicPublication' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 'StartPage' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375 'EndPage' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 'Volume' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377 'Title' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380 %POP_OBJ_AND_PEEK_OBJ = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 'Pagination' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382 'JournalIssue' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 'Journal' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384 'DateCreated' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385 'Article' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 'DateCompleted' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 'DateRevised' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 'CommentsCorrections' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 'Book' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 'PubDate' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 'Abstract' => 1,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394 %POP_AND_ADD_DATA_ELEMENT = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 'Keyword' => 'keywords',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 'PublicationType' => 'publicationTypes',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397 'CitationSubset' => 'citationSubsets',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398 'Language' => 'languages',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 'AccessionNumber' => 'accessionNumbers',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 'GeneSymbol' => 'geneSymbols',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 'SpaceFlightMission' => 'spaceFlightMissions',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 %POP_AND_ADD_ELEMENT = (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 'OtherAbstract' => 'otherAbstracts',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 'Chemical' => 'chemicals',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 'KeywordList' => 'keywordLists',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 'Grant' => 'grants',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 'UpdateIn' => 'updateIns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 'CommentOn' => 'commentOns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 'CommentIn' => 'commentIns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 'DataBank' => 'dataBanks',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 'PersonalNameSubject' => 'personalNameSubjects',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 'ErratumFor' => 'erratumFors',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 'ErratumIn' => 'erratumIns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 'RepublishedFrom' => 'republishedFroms',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418 'RepublishedIn' => 'republishedIns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 'RetractionOf' => 'retractionOfs',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420 'RetractionIn' => 'retractionIns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 'UpdateOf' => 'updateOfs',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 'OriginalReportIn' => 'originalReportIns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423 'SummaryForPatientsIn' => 'summaryForPatientsIns',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424 'MeshHeading' => 'meshHeadings',
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 sub handle_doc_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 @Citations = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429 @ObjectStack = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 @PCDataStack = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 sub handle_doc_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 undef @ObjectStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 undef @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 sub handle_char {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 my ($expat, $str) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 # this may happen with whitespaces between tags;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 # but because I have not created an entry for data on the stack
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443 # I can also ignore such data, can't I
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444 return if $#PCDataStack < 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446 $PCDataStack [$#PCDataStack] .= $str;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 =head2 VERSION and Revision
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 Usage : print $Bio::Biblio::IO::medlinexml::VERSION;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 print $Bio::Biblio::IO::medlinexml::Revision;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 sub handle_start {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461 my ($expat, $e, %attrs) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462 # &_debug_object_stack ("START", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 # The #PCDATA elements which have an attribute list must
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466 # be first here - because for them I create entries both on
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 # the @PCDataStack _and_ on @ObjectStack.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469 if ($e eq 'QualifierName' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 $e eq 'SubHeading') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471 my %p = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $p{'majorTopic'} = "Y" if $attrs{'MajorTopicYN'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 push (@ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 if ($e eq 'GeneralNote') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 my %p = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 $p{'owner'} = $attrs{'Owner'} if $attrs{'Owner'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 push (@ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 if ($e eq 'OtherID') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483 my %p = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484 $p{'source'} = $attrs{'Source'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 push (@ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489 # A special treatment is for attributes for personal name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 # Because there is no XML element 'PersonalName' I need to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491 # to put yet another object on @ObjectStack unless there is
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492 # already one.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 if ($e eq 'LastName' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 $e eq 'FirstName' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 $e eq 'MidleName' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497 $e eq 'Initials' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498 $e eq 'ForeName' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 $e eq 'Suffix') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501 push (@ObjectStack, {'type' => 'PersonalName'})
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 unless (ref $peek and &_eq_hash_elem ($peek, 'type', 'PersonalName'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 # Then we have #PCDATA elements without an attribute list.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507 # For them I create an entry on @PCDataStack.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509 if (exists $PCDATA_NAMES{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 push (@PCDataStack, '');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513 # And finally, all non-PCDATA elements go to the objectStack
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515 } elsif (exists $SIMPLE_TREATMENT{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 push (@ObjectStack, {});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 } elsif ($e eq 'PersonalNameSubject') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519 push (@ObjectStack, {'type' => 'PersonalName'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521 } elsif ($e eq 'DescriptorName' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 $e eq 'Descriptor') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 if (&_eq_hash_elem (\%attrs, 'MajorTopicYN', "Y")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 $$peek{'descriptorMajorTopic'} = "Y";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 } elsif ($e eq 'MedlineCitation' ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 $e eq 'NCBIArticle') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 my %p = ( 'type' => 'MedlineCitation' );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 $p{'owner'} = $attrs{'Owner'} if $attrs{'Owner'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532 $p{'status'} = $attrs{'Status'} if $attrs{'Status'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 push (@ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 } elsif ($e eq 'GrantList') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 if (&_eq_hash_elem (\%attrs, 'CompleteYN', "N")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538 $$peek{'grantListComplete'} = "N";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 } elsif ($e eq 'DataBankList') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 if (&_eq_hash_elem (\%attrs, 'CompleteYN', "N")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 $$peek{'dataBankListComplete'} = "N";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547 } elsif ($e eq 'AuthorList') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548 if (&_eq_hash_elem (\%attrs, 'CompleteYN', "N")) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550 $$peek{'authorListComplete'} = "N";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553 } elsif ($e eq 'OtherAbstract') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 my %p = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 $p{'type'} = $attrs{'Type'} if $attrs{'Type'};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556 push (@ObjectStack, \%p);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 # push (@ObjectStack, { 'type' => 'Abstract' });
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 sub handle_end {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563 my ($expat, $e) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 # First I have to deal with those elements which are both PCDATA
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 # (and therefore they are on the pcdataStack) and which have an
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 # attribute list (therefore they are also known as a separate
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568 # p-object on the objectStack.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 if ($e eq 'QualifierName' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 $e eq 'SubHeading') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 my $p = pop @ObjectStack; # pSubHeading
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 $$p{'subHeading'} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574 &_add_element ('subHeadings', $p); # adding to pMeshHeadings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 # &_debug_object_stack ("END", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578 } elsif ($e eq 'GeneralNote') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 my $p = pop @ObjectStack; # pGeneralNote
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 $$p{'generalNote'} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 &_add_element ('generalNotes', $p); # adding to pMedlineCitation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 # &_debug_object_stack ("END", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 } elsif ($e eq 'OtherID') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 my $p = pop @ObjectStack; # pOtherID
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 $$p{'otherID'} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 &_add_element ('otherIDs', $p); # adding to pMedlineCitation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589 # &_debug_object_stack ("END", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 # both object and pcdata stacks elements mixed here together
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 # (the element names appear in the order of frequency in the
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 # medline data set)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 if (exists $POP_DATA_AND_PEEK_OBJ{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 &_data2obj ("\l$e");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 } elsif (exists $POP_OBJ_AND_PEEK_OBJ{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 &_obj2obj ("\l$e");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605 } elsif (exists $POP_AND_ADD_ELEMENT{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 &_add_element ($POP_AND_ADD_ELEMENT{$e}, pop @ObjectStack);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 } elsif (exists $POP_AND_ADD_DATA_ELEMENT{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609 &_add_element ($POP_AND_ADD_DATA_ELEMENT{$e});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 } elsif ($e eq 'Author' or
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 $e eq 'Investigator') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613 my $pAuthor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 my $p = pop @ObjectStack; # pPersonalName or pAuthor
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 if (&_eq_hash_elem ($p, 'type', 'PersonalName')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 $pAuthor = pop @ObjectStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 $$pAuthor{'personalName'} = $p;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619 $pAuthor = $p;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621 my $peek = $ObjectStack[$#ObjectStack]; # pMedlineCitation, pArticle or pBook
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 if (&_eq_hash_elem ($peek, 'type', 'MedlineCitation')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 &_add_element ('investigators', $pAuthor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 &_add_element ('authors', $pAuthor);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 } elsif ($e eq 'MedlineJournalInfo') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629 &_obj2obj ('journalInfo');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 } elsif ($e eq 'PMID') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632 my $peek = $ObjectStack[$#ObjectStack]; # pMedlineCitation, pReference or pDeleteCitation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633 if (&_eq_hash_elem ($peek, 'type', 'DeleteCitation')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 &_add_element ('PMIDs');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 $$peek{'PMID'} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 } elsif ($e eq 'MedlineID') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 my $peek = $ObjectStack[$#ObjectStack]; # pMedlineCitation, pReference or pDeleteCitation
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 if (&_eq_hash_elem ($peek, 'type', 'DeleteCitation')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 &_add_element ('MedlineIDs');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 $$peek{'medlineID'} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 # } elsif ($e eq 'OtherAbstract') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 # my $pAbstract = pop @ObjectStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 # my $pOtherAbstract = pop @ObjectStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650 # $$pOtherAbstract{'abstract'} = $pAbstract
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 # &_add_element ('otherAbstracts', $pOtherAbstract);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 } elsif ($e eq 'Affiliation') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 if (&_eq_hash_elem ($peek, 'type', 'PersonalName')) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 my $peek2 = $ObjectStack[$#ObjectStack - 1];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657 $$peek2{'affiliation'} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 $$peek{'affiliation'} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 } elsif ($e eq 'DeleteCitation') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 pop @ObjectStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 ### warn ("'DeleteCitation' tag found. Not known what to do with it."); # silently ignored
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 } elsif ($e eq 'MedlineCitation') {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669 # Here we finally have the whole citation ready.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 &_process_citation (pop @ObjectStack);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 # ERROR: if we are here, there was an unexpected element
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676 } elsif (exists $PCDATA_NAMES{$e}) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 warn ("An unexpected element found: $e");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 # &_debug_object_stack ("END", $e);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684 # what to do when we have the whole $citation ready
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 sub _process_citation {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 my ($citation) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687 $citation = $Convert->convert ($citation) if defined $Convert;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 if ($Callback) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 &$Callback ($citation);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692 push (@Citations, $citation);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 # add $element into an array named $key to the top object at @ObjectStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697 # if $element is empty, take it from @PCDataStack
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698 sub _add_element {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 my ($key, $element) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701 $$peek{$key} = [] unless $$peek{$key};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 push (@{ $$peek{$key} }, (defined $element ? $element : pop @PCDataStack));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 # remove top of @PCDataStack and put it into top object at @ObjectStack under name $key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 sub _data2obj {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707 my ($key) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709 $$peek{$key} = pop @PCDataStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 # remove top of @ObjectStack and put it into now-top at @ObjectStack under name $key
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 sub _obj2obj {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 my ($key) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 my $p = pop @ObjectStack;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716 my $peek = $ObjectStack[$#ObjectStack];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 $$peek{$key} = $p;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 # check if a $key exists in a ref-hash $rh and if it is equal to $value
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 sub _eq_hash_elem {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 my ($rh, $key, $value) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 return (defined $$rh{$key} and $$rh{$key} eq $value);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 # --- only for debugging
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728 #
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 use vars qw(%DEBUGSTACK);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 %DEBUGSTACK = ();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731 sub _debug_object_stack {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 my ($action, $element) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 if ($action =~ /^START/o) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 $DEBUGSTACK{$element} = (@ObjectStack+0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735 } else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 return if $element eq 'LastName';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 print "Element $element starts on " .
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738 $DEBUGSTACK{$element} . 'and ends on ' . (@ObjectStack+0) . "\n"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739 if $DEBUGSTACK{$element} != (@ObjectStack+0);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744 __END__