7 use Data::Dump qw/dump/;
12 my $debug = $ENV{DEBUG} || 0;
21 # Bib-1 @and @and @and @and @and @and @and @or
26 # @attr 1=16 dewey (godina)
27 # @attr 1=21 subject-holding
28 # @attr 1=12 control-no
29 # @attr 1=1007 standard-id
48 my $dbname = 'bibliografija';
51 my ( $self, $query ) = @_;
53 die "need query" unless defined $query;
55 my $tsquery = join(' & ', split(/\s+/,$query) );
61 inner join rad_ustanova using (id)
62 left outer join rad_napomena using (id)
63 left outer join rad_projekt using (id)
64 left outer join rad_godina using (id)
65 left outer join rad_podrucje using (id)
66 left outer join url using (id)
67 where rad_ustanova.sifra = ? and (
68 fti_au @@ to_tsquery(?)
69 or fti_pr @@ to_tsquery(?)
74 my $dbh = DBI->connect_cached("dbi:Pg:dbname=$dbname", '', '', {AutoCommit => 0});
76 my $sth = $dbh->prepare( $sql );
78 warn "XXX SQL = ",$sql;
86 # , '%' . $query . '%'
90 my $hits = $sth->rows;
92 warn "# [$tsquery] $hits hits\n";
94 return $self->{hits} = $hits;
102 'Esperanto' => 'epo',
110 'Madžarski' => 'hun',
111 'Makedonski' => 'mac',
112 'nizozemski' => 'dut',
115 'Portugalski' => 'por',
116 'portugalski' => 'por',
118 'Rumunjski' => 'rum',
119 'rumunjski' => 'rum',
122 'slovenski' => 'slv',
129 'ukrajinski' => 'ukr',
132 'hrvatsko-francuski' => 'mul',
136 my ($self,$format) = @_;
140 my $sth = $self->{_sth} || die "no _sth";
142 my $row = $sth->fetchrow_hashref;
144 die "no row" unless $row;
146 my $id = $row->{id} || die "no id";
148 my $marc = MARC::Record->new;
149 $marc->encoding('UTF-8');
151 my $leader = $marc->leader;
153 # /srv/webpac2/conf/crosbi/2016-12-12/casopis-dbi2marc.pl
156 ## LDR 06 - a - language material
157 ## LDR 07 - a - monographic component part
159 $leader =~ s/^(....)...(.+)/$1naa$2/;
161 ## LDR 17 - Encoding level ; 7 - minimal level, u - unknown
162 ## LDR 18 - i = isbd ; u = unknown
164 $leader =~ s/^(.{17})..(.+)/$1uu$2/;
166 $marc->leader( $leader );
167 warn "# leader [$leader]";
170 ### 008 - All materials
172 ## 008 - 00-05 - Date entered on file
174 my $f008 = $1 . $2 . $3 if $row->{time_date} =~ m/\d\d(\d\d)-(\d\d)-(\d\d)/;
176 ## 008 06 - Type of date/Publication status
180 ## 008 07-10 - Date 1
182 $f008 .= substr($row->{datum},0,4);
184 ## 008 11-14 - Date 2
188 $f008 .= ' ' x ( 15 - length($f008) ); # pad to 15 position
189 ## 008 15-17 - Place of publication, production, or execution - ako nema 102, popunjava se s |
192 ## 008 35-37 - Language
193 $f008 .= ' ' x ( 35 - length($f008) ); # pad to 35 position
194 if ( my $lng = $langrecode008->{ $row->{jezik} } ) {
197 warn "INFO unknown jezik [$row->{jezik}] insert into langrecode008!";
200 $f008 .= ' ' x ( 38 - length($f008) );
201 ## 008 38 - Modified record
203 ## 008 39 - Cataloging source - d (other)
206 warn "# 008 ",length($f008);
208 $marc->add_fields('008', $f008); # FIXME - mglavica check
211 if ( my $doi = $row->{doi} ) {
213 $marc->add_fields('024','7',' ',
222 ## marc 035a - System Number
223 ## polje moze sadrzavati slova i razmake
224 ## moguc problem u pretrazivanju ako ima zagrade, kako bi trebalo po standardu
226 $marc->add_fields('035',' ',' ',
227 a => join('', '(CROSBI)', $row->{id})
233 $marc->add_fields('040',' ',' ',
241 # i1=0 - Item not a translation/does not include a translation
242 # i1=1 - Item is or includes a translation
243 # i1=' ' - No information provided
246 # ponovljivo potpolje (041a) - marc_repeatable_subfield
247 # koristi se kad ima vise od jednog jezika, ili kad se radi o prijevodu
249 $marc->add_fields('041',' ',' ', map {
251 } split(/-/, $row->{jezik}));
256 ## i1 = 0 zza anonimne publikacije, i1 = 1 ako postoji 700 ili 710
257 ## i2 = pretpostavlja se na temelju clana na pocetku naslova i jezika
259 my ( $first_author, $authors ) = split(/ ;\s*/,$row->{autori});
261 $marc->add_fields(100,'1',' ','a' => $first_author );
265 my $naslov = $row->{naslov}; # XXX title?
268 $naslov =~ m/^Eine / ? 5 :
269 $naslov =~ m/(Die|Das|Der|Ein|Les|Los|The) / ? 4 :
270 $naslov =~ m/^(Um|Un|An|La|Le|Lo|Il) / ? 3 :
271 $naslov =~ m/^(A|L) / ? 2 :
272 $naslov =~ m/^L'/ ? 2 :
275 $marc->add_fields(245,'1',$i2,
276 'a' => $naslov . ' /',
277 'c' => $row->{autori} . '.',
280 $marc->add_fields(246,'3',' ',
281 'i' => 'Naslov na engleskom:',
285 $marc->add_fields(300,' ',' ',
286 a => join(' ', $row->{stranica_prva}, $row->{stranica_zadnja}),
290 $marc->add_fields(363,' ',' ',
291 a => $row->{volumen},
296 # /data/FF/crosbi/2016-12-12/casopis-rad_napomena.sql
298 $marc->add_fields(500,' ',' ',
299 a => substr($row->{napomena}, 0, 9999), # XXX marc limit for one subfield is 4 digits in dictionary
302 $marc->add_fields(520,' ',' ',
303 a => substr($row->{sazetak}, 0, 9999)
307 if ( $row->{rad_projekt} ) {
308 $marc->add_fields(536,' ',' ',
314 $marc->add_fields(546,' ',' ',
318 $marc->add_fields(690,' ',' ',
323 $marc->add_fields(693,' ',' ',
324 a => $row->{kljucne_rijeci},
328 $marc->add_fields(693,' ',' ',
329 a => $row->{key_words},
334 if ( $row->{autori} =~ m/ ; / ) {
335 my @a = split(/ ; /, $row->{autori});
336 shift @a; # skip first
337 $marc->add_fields(700,'1',' ',
344 $marc->add_fields(773,'0',' ',
345 t => $row->{casopis},
347 g => "$row->{volumen}, ($row->{godina}), str. $row->{stranica_prva}-$row->{stranica_zadnja}",
350 if ( my $file = $row->{datoteka} ) {
351 $marc->add_fields(856,' ',' ',
352 u => "http://bib.irb.hr/datoteka/$file",
356 foreach my $name (qw( openurl url )) {
357 next if ! $row->{$name};
358 $marc->add_fields(856,' ',' ',
366 if ( $row->{status_rada} ) {
369 g => $row->{status_rada}
372 push @f942, t => '1.01' if $row->{kategorija} =~ m/Znanstveni/;
373 push @f942, t => '1.01' if $row->{kategorija} =~ m/Strucni/;
375 $marc->add_fields(942,' ',' ',
378 z => join(' - ', $row->{kategorija}, $row->{vrsta_rada}),
382 $marc->add_fields(999,' ',' ',
388 # diag "# hash ",dump($hash);
389 diag "# marc\n", $marc->as_formatted;
391 $self->save_marc( "$id.marc", $marc->as_usmarc );