/[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 802 - (show annotations)
Thu Feb 15 22:43:03 2007 UTC (17 years, 2 months ago) by dpavlin
File MIME type: text/plain
File size: 9298 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 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 marc_indicators('100', 1, ' ');
134 marc('100','a',
135 join_with(', ',
136 rec('700', 'a'),
137 rec('700', 'b')
138 )
139 );
140
141
142 ### 111 i 110
143 # provjeriti ispise naslova iz svake baze - moguæe su gre¹ke.
144 # ovo vrijedi za FFSFB
145
146 if ( rec('710','f') ) {
147
148 marc_indicators('111', 2, ' ');
149
150 marc_compose('111',
151 'a', rec('710','a'),
152 'e', rec('710','b'),
153 'n', rec('710','d'),
154 'd', rec('710','f'),
155 'c', rec('710','e'),
156 );
157
158
159 } else {
160
161 marc_indicators('110', 2, ' ');
162 marc('110','a',
163 rec('710','a')
164 );
165
166 marc('110','c',
167 rec('710','c')
168 );
169
170 }
171
172
173 ### 245 indikatori
174 # i1 = 1 za sve zapise
175 # i2 = pretpostavlja se na temelju èlana na poèetku naslova i jezika
176 # treba nadopuniti i dati podatke na verifikaciju knji¾nièarima
177
178 marc_indicators('245', 1, 0);
179
180 if ( ( rec('200','a') =~ m/^Die /) ||
181 ( rec('200','a') =~ m/^Das /) ||
182 ( rec('200','a') =~ m/^The /) ) {
183 marc_indicators('245', 1, 4);
184 }
185
186 if ( ( rec('200','a') =~ m/^A /) && ( rec(101) =~ m/ENG/ ) )
187 {
188 marc_indicators('245', 1, 2);
189 }
190
191 ### 245
192 # redoslijed polja
193
194 #_debug(3);
195 marc_compose('245',
196 'a', suffix(
197 rec('200','b') ? '. ' :
198 rec('200','k') ? ' ; ' :
199 rec('200','d') ? ' = ' :
200 rec('200','e') ? ' : ' :
201 rec('200','f') ? ' / ' :
202 '.',
203 rec('200','a')
204 ),
205 # 'h', rec('200','b'),
206 'b', suffix(
207 ( rec('200','k') && rec('200','f') ) ? ' / ' :
208 ' ',
209 join_with(' ; ',
210 rec('200','k'),
211 ),
212 ),
213 'b', suffix(
214 ( rec('200','d') && rec('200','f') ) ? ' / ' :
215 ' ',
216 rec('200','d'),
217 ),
218 'b', suffix(
219 ( rec('200','e') && rec('200','f') ) ? ' / ' :
220 ' ',
221 join_with(' : ',
222 rec('200','e'),
223 ),
224 ),
225
226 'c', rec('200','f'),
227
228 # append to last subfield
229 '+', prefix('. ',
230 rec('200','c')
231 ),
232 );
233
234
235
236 #_debug(0);
237
238
239 ### 250
240
241 marc('250','a',
242 suffix(
243 rec('205','f') ? ' / ' :
244 ' '.
245 rec('205','a')
246 )
247 );
248
249 marc('250','b',
250 rec('205','f')
251 );
252
253
254 ### 260
255 # ponovljiva potpolja u originalnom redosljedu
256
257 marc_original_order('260', '210');
258
259
260 ### 300
261 # provjeriti interpunkcije !!
262
263 marc('300','a',
264 suffix(
265 rec('215','c') ? ' : ' :
266 rec('215','d') ? ' ; ' :
267 rec('215','e') ? ' + ' :
268 ' ',
269 rec('215','a')
270 )
271 );
272
273 marc('300','b',
274 suffix(
275 ( rec('215','c') && rec('215','d') ) ? ' ; ' :
276 ( rec('215','c') && rec('215','e') ) ? ' + ' :
277 ' ',
278 rec('215','c')
279 )
280 );
281
282 marc('300','c',
283 suffix(
284 rec('215','e') ? ' + ' :
285 ' ',
286 rec('215','d')
287 )
288 );
289
290 marc('300','e',
291 rec('215','e')
292 );
293
294
295 ### 440
296 # 2.ind. prema jeziku i èlanu
297
298 marc_indicators('440', ' ', '0');
299
300 marc('440','a',
301 join_with(' : ',
302 rec('225','a'),
303 join_with(' / ',
304 rec('225','e'),
305 rec('225','f')
306 )
307 )
308 ) ;
309
310 marc('440','n',
311 rec('225','h')
312 );
313
314 marc('440','p',
315 rec('225','i')
316 );
317
318 marc('440','v',
319 join_with(', ',
320 rec('225','v'),
321 rec('225','w')
322 ),
323 );
324
325 marc('440','x',
326 rec('225','x')
327 );
328
329 marc('440','a',
330 rec('225','b'),
331 );
332
333
334 ### 490
335 #
336 #marc('490','a',
337 # rec('225','a')
338 #);
339
340
341 ### 500
342
343 marc('500','a',
344 rec('300')
345 );
346
347 marc('500','a',
348 rec('305')
349 );
350
351 marc('500','a',
352 rec('307')
353 );
354
355 marc('500','a',
356 rec('314')
357 );
358
359 ### 502 - bilje¹ka o disertacijama
360 # odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e pretpostaviti?
361
362 ### 504
363
364 marc('504','a',
365 rec('320')
366 );
367
368 ## napomene uz konverziju polja 327 (sadrzaj):
369 # NSK konvertira 327 (NP) u 501 (R)
370 # u LOC konv. tablici stoji 327 (NP) u 505 (NR)
371 # standard i validacije dopu¹taju 501 (R) i 505 (R)
372
373 ## 505
374 ## FFPS 327 - sadrzaj
375
376 if ( config() =~ m/ffps/ || config() =~ m/fftu/ ) {
377 marc_indicators('505', '0', ' ');
378 marc('505','a',
379 regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g',
380 rec('327')
381 )
382 );
383 }
384
385
386
387 ## napomene uz konverziju polja 330:
388 # NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica
389
390
391 ### 520
392 # mo¾da i polje 520y - jezik napomene ako je uvijek isti jezik
393
394 # FFPS 330 (NP) - sa¾etak
395 if ( config() =~ m/ffps/ ) {
396 marc('520','a',
397 regex('s/[\\r\\n]+/. /g',
398 rec('330')
399 )
400 );
401 }
402
403 # FFTU 330 - ???
404 if ( config() =~ m/fftu/ ) {
405 marc('520','a',
406 rec('330')
407 );
408 }
409
410
411 ### 538
412
413 marc('538','a',
414 rec('337','a')
415 );
416
417
418 ### 246
419
420 marc_indicators('246', 1, 3);
421 marc('246','a',
422 rec('532')
423 );
424
425 ### 655
426
427 marc_indicators('655', ' ', 4);
428 marc('655','a',
429 rec('608')
430 );
431
432 ### 653
433
434 marc_indicators('653', 0, ' ');
435 marc('653','a',
436 rec('610')
437 );
438
439 #_debug(2);
440
441
442 ### 700
443
444 marc_indicators('700', 1, ' ');
445
446 if ( rec('701') ) {
447 marc('700','4',
448 'aut'
449 );
450 }
451
452 marc('700','a',
453 join_with(', ',
454 rec('701', 'a'),
455 rec('701', 'b')
456 )
457 );
458
459 marc('700','a',
460 join_with(', ',
461 rec('701', 'c'),
462 rec('701', 'd')
463 )
464 );
465
466 marc('700','a',
467 join_with(', ',
468 rec('701', 'e'),
469 rec('701', 'f')
470 )
471 );
472
473 marc('700','a',
474 join_with(', ',
475 rec('701', 'g'),
476 rec('701', 'h')
477 )
478 );
479
480
481 marc('700','a',
482 rec('702','a'),
483 );
484
485
486 # ako je u originalu ponovljivo polje treba biti i konvertirano u ponovljivo !!
487
488
489 marc('700','a',
490 join_with(', ',
491 rec('702','c'),
492 rec('702','d')
493 )
494 );
495
496 marc('700','a',
497 join_with(', ',
498 rec('702','e'),
499 rec('702','f')
500 )
501 );
502
503 marc('700','a',
504 join_with(', ',
505 rec('702','g'),
506 rec('702','h')
507 )
508 );
509
510 ## 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?
511 #
512 # marc('700','a',
513 # rec('330','a')
514 # );
515 #
516 #
517 # marc('700','a',
518 # rec('330','b')
519 # );
520 #
521 # marc('700','a',
522 # rec('330','c')
523 # );
524 #
525 #
526 # marc('700','a',
527 # rec('330','d')
528 # );
529 #
530 # marc('700','a',
531 # rec('330','e')
532 # );
533 #
534 # marc('700','a',
535 # rec('330','f')
536 # );
537
538 #_debug(0);
539
540
541
542
543 ### 740
544
545 marc_indicators('740', 0, ' ');
546
547 # if ( ! rec('464') ) {
548 # marc('740','a',
549 # rec('200','c')
550 # );
551
552 marc('740','a',
553 rec('200','k')
554 );
555
556 # } else {
557
558 #marc('740','a',
559 # rec('464','a')
560 #);
561
562 # };
563
564 ### generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
565
566
567 my $series_key = join_with('',
568 rec('225','a'),
569 rec('210','a'),
570 rec('210','b'),
571 );
572
573 if ($series_key) {
574
575 marc_indicators('760', 0, ' ');
576
577 marc('760','w',
578 get( $series_key )
579 );
580
581 }
582
583 ### testing
584 #
585 # my $dup_key = join_with('',
586 # rec('200','a'),
587 #);
588 #
589 #if ($dup_key) {
590 # marc('995','a',
591 # get( $dup_key )
592 # );
593 #}
594 #
595 #
596 # marc_indicators('776', 0, ' ');
597 #
598 # marc('776','a',
599 # rec('452','1')
600 # );
601 #
602
603
604
605 ##################################
606 ## ##
607 ## pomoæni ispisi - privremeno! ##
608 ## ##
609 ##################################
610
611 if ( ! rec('464') && rec('200','c') ) {
612 marc('002',
613 'ima-200c-nema-464'
614 );
615 }
616
617 if ( ! rec('464') && rec('200','k') ) {
618 marc('003',
619 'ima-200k-nema-464'
620 );
621 }
622
623 if ( ! ( rec('200','c') || rec('200','k') ) && rec('464') ) {
624 marc('004',
625 'ima-464-nema-200c-ili-200k'
626 );
627 }
628
629
630
631 #_debug(2);
632
633 if ( rec('200') =~ m/prev/ ) {
634 marc('005',
635 'prijevod'
636 );
637 }
638
639 #_debug(0);
640
641
642
643 } # polje 200a

  ViewVC Help
Powered by ViewVC 1.1.26