/[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 795 - (show annotations)
Sun Feb 4 12:37:42 2007 UTC (17 years, 2 months ago) by dpavlin
File MIME type: text/plain
File size: 9333 byte(s)
local

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

  ViewVC Help
Powered by ViewVC 1.1.26