/[webpac2]/trunk/conf/normalize/ff-libri.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/conf/normalize/ff-libri.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 807 - (show annotations)
Sun Apr 1 12:26:25 2007 UTC (17 years, 1 month ago) by dpavlin
File MIME type: text/plain
File size: 9487 byte(s)
local

1 #########################################################################
2 ## ##
3 ## Ova datoteka sadr¾i pravila za generiranje MARC21 ISO 2709 izlazne ##
4 ## datoteke. Ulazni format je CDS/ISIS sa zapisima u UNIMARC-u. ##
5 ## ##
6 ##########################################################################
7
8 # konvertira se ako postoji polje 200^a
9
10 if ( rec('200','a') ) {
11
12 ### LEADER
13 # raspraviti 17,18
14 # u nekim knji¾nicama koristi se 999a i 999b, a u nekima samo 999
15
16 if ( rec('999') && first(rec('999')) =~ m/(pregledan|P)/i) {
17 marc_leader('05','c');
18 } else {
19 marc_leader('05','n');
20 }
21
22 marc_leader('06','a');
23 marc_leader('07','m');
24 marc_leader('18','i');
25
26 if ( rec('230') ) {
27 marc_leader('19','r');
28 }
29
30 ### 001 - Voyager
31
32 ### 008
33
34 ### 035$6
35 # Privemeno koristimo 035$6 umjesto 035$9, zato ¹to marclint prijavljuje 9 kao gre¹ku.
36 # marc 035a - System Number - NSK zapisuje Voyagerov ID (001) - kako?
37 # kako mora izgledati polje 035$9? mo¾e li sadr¾avati slova i razmake?
38
39
40 marc('035','6',
41 join_with(' ',
42 # config('input normalize path'),
43 # config('name'),
44 config(),
45 'L',
46 # config('input name'),
47 # id(),
48 # rec('994','a'),
49 rec('000')
50 )
51 );
52
53
54 ### 020
55 # postoji modify -> drugi ISBN poèinje prefixom "ISBN" koji se mièe (sfb)
56
57 marc('020','a',
58 regex('s/ ISBN //g',
59 rec('10')
60 )
61 );
62
63
64 ### 040
65 # za sve je isti
66
67 marc('040','a',
68 'HR FFZG'
69 );
70
71 marc('040','b',
72 'hrv'
73 );
74
75 marc('040','e',
76 'HR PPIAK'
77 );
78
79
80 ### 041 indikatori
81 # pretpostavke o indikatorima:
82 #
83 # 1. Ako postoji polje 300 i prvo pojavljivanje tog polja sadr¾i /Prijevod/ , i1 = 1
84 # (Da li je napomena uvijek pisana?)
85 #
86 # 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti jezici.
87 #
88 # 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
89 # (ako postoje zagrade pr. 94(=411.16) onda su to pomoæne oznake)
90 # pr. 821.111-2=163.42 je prijevod engleske drame na HR.
91 # to ima samo za knji¾evna djela, eseje....
92
93
94 #if ( rec('675') =~ m/\d=\d/ ) {
95 if ( first(rec('300')) =~ m/Prijevod/ || first(rec('300')) =~ m/Izv. stv. nasl./ ) {
96 marc_indicators('041', 1, ' ');
97 } else {
98 marc_indicators('041', 0, ' ');
99 }
100
101
102 ### 041
103 # ponovljivo polje konvertira se u ponovljivo potpolje
104
105 #_debug(2);
106 marc_repeatable_subfield('041','a',
107 rec('101')
108 );
109 #_debug(0);
110
111
112 ### 080
113 # 675 podpolja b, c, d ... - ¹to s njima ???
114
115 marc('080','a',
116 rec('675','a')
117 );
118
119
120 ### 084 - other classification (R)
121 # NSK ga koristi za struènu oznaku NSK iz polja 681
122 # NSK definira i prelazak polja 686 u 084, u skladu s LOC konv. tablicom
123 # polje 686 koristi FFPS
124
125
126 marc('084','a',
127 rec('686')
128 );
129
130 ### 100
131 # I1 = 0 ako je pseudonim (ima 700a, nema 700b)
132
133 if ( rec('700','a') && ! rec('700','b') ) {
134 marc_indicators('100', 0, ' ');
135 } else {
136 marc_indicators('100', 1, ' ');
137 }
138
139 marc('100','a',
140 join_with(', ',
141 rec('700', 'a'),
142 rec('700', 'b')
143 )
144 );
145
146
147 ### 111 i 110
148 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
149 # ovo vrijedi za FFSFB
150
151 if ( rec('710','f') ) {
152
153 marc_indicators('111', 2, ' ');
154
155 marc_compose('111',
156 'a', rec('710','a'),
157 'e', rec('710','b'),
158 'n', rec('710','d'),
159 'd', rec('710','f'),
160 'c', rec('710','e'),
161 );
162
163
164 } else {
165
166 marc_indicators('110', 2, ' ');
167 marc('110','a',
168 rec('710','a')
169 );
170
171 marc('110','c',
172 rec('710','c')
173 );
174
175 }
176
177
178 ### 245 indikatori
179 # i1 = 1 za sve zapise
180 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
181 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
182
183 marc_indicators('245', 1, 0);
184
185 if ( ( rec('200','a') =~ m/^Die /) ||
186 ( rec('200','a') =~ m/^Das /) ||
187 ( rec('200','a') =~ m/^The /) ) {
188 marc_indicators('245', 1, 4);
189 }
190
191 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) ) {
192 marc_indicators('245', 1, 2);
193 }
194
195 if ( ( rec('200','a') =~ m/^An /) && ( rec(101) =~ m/ENG/ ) ) {
196 marc_indicators('245', 1, 2);
197 }
198
199 ### 245
200 # redoslijed polja
201
202 #_debug(3);
203 marc_compose('245',
204 'a', suffix(
205 rec('200','b') ? '. ' :
206 rec('200','k') ? ' ; ' :
207 rec('200','d') ? ' = ' :
208 rec('200','e') ? ' : ' :
209 rec('200','f') ? ' / ' :
210 '.',
211 rec('200','a')
212 ),
213 # 'h', rec('200','b'),
214 'b', suffix(
215 ( rec('200','k') && rec('200','f') ) ? ' / ' :
216 ' ',
217 join_with(' ; ',
218 rec('200','k'),
219 ),
220 ),
221 'b', suffix(
222 ( rec('200','d') && rec('200','f') ) ? ' / ' :
223 ' ',
224 rec('200','d'),
225 ),
226 'b', suffix(
227 ( rec('200','e') && rec('200','f') ) ? ' / ' :
228 ' ',
229 join_with(' : ',
230 rec('200','e'),
231 ),
232 ),
233
234 'c', rec('200','f'),
235
236 # append to last subfield
237 '+', prefix('. ',
238 rec('200','c')
239 ),
240 );
241
242
243
244 #_debug(0);
245
246
247 ### 250
248
249 marc('250','a',
250 suffix(
251 rec('205','f') ? ' / ' :
252 ' '.
253 rec('205','a')
254 )
255 );
256
257 marc('250','b',
258 rec('205','f')
259 );
260
261
262 ### 260
263 # ponovljiva potpolja u originalnom redosljedu
264
265 marc_original_order('260', '210');
266
267
268 ### 300
269 # provjeriti interpunkcije !!
270
271 marc('300','a',
272 suffix(
273 rec('215','c') ? ' : ' :
274 rec('215','d') ? ' ; ' :
275 rec('215','e') ? ' + ' :
276 ' ',
277 rec('215','a')
278 )
279 );
280
281 marc('300','b',
282 suffix(
283 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
284 ( rec('215','c') && rec('215','e') ) ? ' + ' :
285 ' ',
286 rec('215','c')
287 )
288 );
289
290 marc('300','c',
291 suffix(
292 rec('215','e') ? ' + ' :
293 ' ',
294 rec('215','d')
295 )
296 );
297
298 marc('300','e',
299 rec('215','e')
300 );
301
302
303 ### 440
304 # 2.ind. prema jeziku i èlanu
305
306 marc_indicators('440', ' ', '0');
307
308 marc('440','a',
309 join_with(' : ',
310 rec('225','a'),
311 join_with(' / ',
312 rec('225','e'),
313 rec('225','f')
314 )
315 )
316 ) ;
317
318 marc('440','n',
319 rec('225','h')
320 );
321
322 marc('440','p',
323 rec('225','i')
324 );
325
326 marc('440','v',
327 join_with(', ',
328 rec('225','v'),
329 rec('225','w')
330 ),
331 );
332
333 marc('440','x',
334 rec('225','x')
335 );
336
337 marc('440','a',
338 rec('225','b'),
339 );
340
341
342 ### 490
343 #
344 #marc('490','a',
345 # rec('225','a')
346 #);
347
348
349 ### 500
350
351 marc('500','a',
352 rec('300')
353 );
354
355 marc('500','a',
356 rec('305')
357 );
358
359 marc('500','a',
360 rec('307')
361 );
362
363 marc('500','a',
364 rec('314')
365 );
366
367 ### 502 - bilje¹ka o disertacijama
368 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
369
370 ### 504
371
372 marc('504','a',
373 rec('320')
374 );
375
376 ## napomene uz konverziju polja 327 (sadrzaj):
377 # NSK konvertira 327 (NP) u 501 (R)
378 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
379 # standard i validacije dopu¹taju 501 (R) i 505 (R)
380
381 ## 505
382 ## FFPS 327 - sadrzaj
383
384 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
385 marc_indicators('505', '0', ' ');
386 marc('505','a',
387 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
388 rec('327')
389 )
390 );
391 }
392
393
394
395 ## napomene uz konverziju polja 330:
396 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
397
398
399 ### 520
400 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
401
402 # FFPS 330 (NP) - sa¾etak
403 if ( config() =~ m/ffps/ ) {
404 marc('520','a',
405 regex('s/[\\r\\n]+/. /g',
406 rec('330')
407 )
408 );
409 }
410
411 # FFTU 330 - ???
412 if ( config() =~ m/fftu/ ) {
413 marc('520','a',
414 rec('330')
415 );
416 }
417
418
419 ### 538
420
421 marc('538','a',
422 rec('337','a')
423 );
424
425
426 ### 246
427
428 marc_indicators('246', 1, 3);
429 marc('246','a',
430 rec('532')
431 );
432
433 ### 655
434
435 marc_indicators('655', ' ', 4);
436 marc('655','a',
437 rec('608')
438 );
439
440 ### 653
441
442 marc_indicators('653', 0, ' ');
443 marc('653','a',
444 rec('610')
445 );
446
447 #_debug(2);
448
449
450 ### 700
451
452 marc_indicators('700', 1, ' ');
453
454 if ( rec('701') ) {
455 marc('700','4',
456 'aut'
457 );
458 }
459
460 marc('700','a',
461 join_with(', ',
462 rec('701', 'a'),
463 rec('701', 'b')
464 )
465 );
466
467 marc('700','a',
468 join_with(', ',
469 rec('701', 'c'),
470 rec('701', 'd')
471 )
472 );
473
474 marc('700','a',
475 join_with(', ',
476 rec('701', 'e'),
477 rec('701', 'f')
478 )
479 );
480
481 marc('700','a',
482 join_with(', ',
483 rec('701', 'g'),
484 rec('701', 'h')
485 )
486 );
487
488
489 marc('700','a',
490 rec('702','a'),
491 );
492
493
494 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
495
496
497 marc('700','a',
498 join_with(', ',
499 rec('702','c'),
500 rec('702','d')
501 )
502 );
503
504 marc('700','a',
505 join_with(', ',
506 rec('702','e'),
507 rec('702','f')
508 )
509 );
510
511 marc('700','a',
512 join_with(', ',
513 rec('702','g'),
514 rec('702','h')
515 )
516 );
517
518 ## treba provjeriti da li polje 330 sadrzi jos neke podatke koji mogu biti u <> ili su tu iskljucivo autori? da li samo autori ili neke druge osobe?
519 #
520 # marc('700','a',
521 # rec('330','a')
522 # );
523 #
524 #
525 # marc('700','a',
526 # rec('330','b')
527 # );
528 #
529 # marc('700','a',
530 # rec('330','c')
531 # );
532 #
533 #
534 # marc('700','a',
535 # rec('330','d')
536 # );
537 #
538 # marc('700','a',
539 # rec('330','e')
540 # );
541 #
542 # marc('700','a',
543 # rec('330','f')
544 # );
545
546 #_debug(0);
547
548
549
550
551 ### 740
552
553 marc_indicators('740', 0, ' ');
554
555 # if ( ! rec('464') ) {
556 # marc('740','a',
557 # rec('200','c')
558 # );
559
560 marc('740','a',
561 rec('200','k')
562 );
563
564 # } else {
565
566 #marc('740','a',
567 # rec('464','a')
568 #);
569
570 # };
571
572 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
573
574
575 my $series_key = join_with('',
576 rec('225','a'),
577 rec('210','a'),
578 rec('210','b'),
579 );
580
581 if ($series_key) {
582
583 marc_indicators('760', 0, ' ');
584
585 marc('760','w',
586 get( $series_key )
587 );
588 }
589
590 ### testing
591 #
592 # my $dup_key = join_with('',
593 # rec('200','a'),
594 #);
595 #
596 #if ($dup_key) {
597 # marc('995','a',
598 # get( $dup_key )
599 # );
600 #}
601 #
602 #
603 # marc_indicators('776', 0, ' ');
604 #
605 # marc('776','a',
606 # rec('452','1')
607 # );
608 #
609
610
611
612 ##################################
613 ## ##
614 ## pomoæni ispisi - privremeno! ##
615 ## ##
616 ##################################
617
618 if ( ! rec('464') && rec('200','c') ) {
619 marc('002',
620 'ima-200c-nema-464'
621 );
622 }
623
624 if ( ! rec('464') && rec('200','k') ) {
625 marc('003',
626 'ima-200k-nema-464'
627 );
628 }
629
630 if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) {
631 marc('004',
632 'ima-464-nema-200c-ili-200k'
633 );
634 }
635
636
637
638 #_debug(2);
639
640 if ( rec('200') =~ m/prev/ ) {
641 marc('005',
642 'prijevod'
643 );
644 }
645
646 #_debug(0);
647
648
649
650 } # polje 200a

  ViewVC Help
Powered by ViewVC 1.1.26