1 # Ova datoteka sadrzi pravila za generiranje MARC21 ISO 2709 izlazne
2 # datoteke. Ulazni format je CDS/ISIS izvorni format, sa zapisima u
3 # UNIMARC formatu, koji sadrzi visestruka odstupanja od standarda.
5 ## konvertira se ako postoji polje 200^a
6 if ( rec('200','a') ) {
11 marc_leader('05','n');
13 ## LDR 06 - a - language material
14 marc_leader('06','a');
16 ## LDR 07 - m - Monograph/item
17 marc_leader('07','m');
19 ## LDR 17 - Encoding level ; 7 - minimal level, u - unknown
20 marc_leader('17','u');
23 marc_leader('18','i');
25 ## LDR 19 - Multipart resource record level ; # - Not specified or not applicable, a - Set, b - Part with independent title, c - Part with dependent title
28 marc_fixed('003','00','HR-ZaHPM');
30 ### 008 - All materials
31 ## dodati sve moguce slucajeve za datum, popuniti ono sto nedostaje
34 marc_fixed('008','00',
39 marc_fixed('008','02',
40 regex('s/^\d\d\d\d//',
45 marc_fixed('008','00',
51 ## 008 06 - Type of date/Publication status
53 marc_fixed('008','06',
59 ## 210d kroz modify postaje 210c
61 if ( rec('210','c') ) {
64 if ( rec('210','c') =~ m/(\d{4})-/ ) {
65 marc_fixed('008','06','m');
66 if ( rec('210','c') =~ m/(\d{4})-/ ) {
70 if ( rec('210','c') =~ m/-(\d{4})/ ) {
74 marc_fixed('008','06','s');
75 if ( rec('210','c') =~ m/(\d{4})/ ) {
78 if ( rec('210','c') =~ m/(\d{2})(--|__)/ ) {
81 if ( rec('210','c') =~ m/(\d{3})(-|_)/ ) {
86 marc_fixed('008','07',$d1); # 07-10 - Date 1
87 marc_fixed('008','11',$d2); # 07-10 - Date 1
90 marc_fixed('008','06','n'); # 06 - n = unknown date
91 marc_fixed('008','07','uuuu');
92 marc_fixed('008','11',' '); # 07-10 - Date 1
96 ## 008 15-17 - Place of publication, production, or execution - ako nema 102, popunjava se s |
97 marc_fixed('008','15',
101 ## 008 35-37 - Language
102 if ( frec('101','a') =~ m/(\w\w\w)/ ) {
103 marc_fixed('008','35', $1 );
106 ## 008 38 - Modified record
107 marc_fixed('008','38','|');
109 ## 008 39 - Cataloging source - d (other)
110 marc_fixed('008','39','d');
113 ## 008 18-21 - Illustrations
114 if ( rec('215','c') && rec('215','c') =~ m/ilustr/ ) {
115 marc_fixed('008','18','a')
118 ## 008 22 - Target audience
119 marc_fixed('008','22','|');
121 ## 008 23 - Form of item
122 marc_fixed('008','23','|');
124 ## 008 24-27 - Nature of contents
125 marc_fixed('008','24','||||');
127 ## 008 28 - Government publication
128 marc_fixed('008','28','|');
130 ## 008 29 - Conference publication
131 marc_fixed('008','29','|');
133 ## 008 30 - Festschrift
134 marc_fixed('008','30','|');
137 marc_fixed('008','31','|');
139 ## 008 32 - Undefined
140 ## 008 33 - Literary form
141 marc_fixed('008','33','|');
143 ## 008 34 - Biography
144 marc_fixed('008','34','|');
147 ## postoji modify za polje 10 -> drugi ISBN pocinje prefixom "ISBN" koji se mice (pr. u sfb)
148 #if ( frec('10') ne ( frec('290') ) ) {
149 if ( rec('10','a') !~ /pogre/ ) {
153 # regex('s/\(\d\)\(/$1 \(//g',
159 if ( rec('10','a') =~ /pogre/ ) {
172 ## marc 035a - System Number
173 ## polje moze sadrzavati slova i razmake
174 ## moguc problem u pretrazivanju ako ima zagrade, kako bi trebalo po standardu
178 # config('input normalize path'),
182 # config('input name'),
206 ## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a)
207 ## koristi se kad ima vise od jednog jezika, ili kad se radi o prijevodu
211 if ( ( count( rec('101','a') ) > 1 ) || ( rec('101','b') ) || ( rec('101','h') ) ) {
212 if ( ( grep( m/prijevod/i, rec('300') ) ) || ( rec('101','h') ) ) {
213 marc_indicators('101', 1, ' ');
215 marc_indicators('101', ' ', ' ');
217 marc_original_order('041','101');
222 ## koristi se kad ima vise zemalja izdavanja
231 ## I1 = 0 ako je pseudonim (ima 700a, nema 700b)
233 if ( rec('700','a') && ! rec('700','b') ) {
234 marc_indicators('100', 0, ' ');
236 marc_indicators('100', 1, ' ');
246 ### formalna odrednica - iz 503 u 110, i1=0, i2=1
248 # nadopuniti nakon konverzije
252 ## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja
254 if ( ! rec('700') ) {
256 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
258 marc_indicators('111', 2, ' ');
260 if ( rec('710','d') ) {
263 ( rec('710','d') || rec('710','f') || rec('710','e') ) ? '' :
267 'n', surround( '(', ' :',
271 ( ! rec('710','d') ) ? ')' :
272 ( ! rec('710','e') ) ? ')' :
283 ( rec('710','d') || rec('710','f') || rec('710','e') ) ? '' :
287 'd', surround('(',' :',
296 marc_indicators('110', 2, ' ');
303 if ( rec('710','c') ) {
305 surround('(', ')', rec('710','c'))
313 ## i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
314 ## i2 = pretpostavlja se na temelju clana na pocetku naslova i jezika
318 if ( rec('700') || rec('710') || rec('711') ) {
324 marc_indicators('245', $titleind1, 0);
326 if ( rec('200','a') =~ m/^Einen / ) {
327 marc_indicators('245', $titleind1, 6);
329 if ( rec('200','a') =~ m/^Eine / ) {
330 marc_indicators('245', $titleind1, 5);
332 if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|Los|The) / ) {
333 marc_indicators('245', $titleind1, 4);
335 if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Lo|Il) / ) {
336 marc_indicators('245', $titleind1, 3);
338 if ( ( rec('101') =~ m/eng/ ) && ( rec('200','a') =~ m/^A / ) ) {
339 marc_indicators('245', $titleind1, 2);
341 if ( rec('200','a') =~ m/^L / ) {
342 marc_indicators('245', $titleind1, 2);
344 if ( rec('200','a') =~ m/^L'/ ) {
345 marc_indicators('245', $titleind1, 2);
351 ## da li treba makivati razmake u inicijalima?
357 ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' /' :
358 ( rec('200','d') ) ? ' =' :
359 ( rec('200','e') ) ? ' :' :
360 ( rec('200','k') ) ? ' ;' :
361 ( rec('200','h') ) ? '.' :
366 ( rec('200','d') && ! rec('200','f') ) ? '.' :
367 ( rec('200','d') && ! rec('200','f') ) ? '.' :
372 ( rec('200','e') && rec('200','f') ) ? ' /' :
373 ( rec('200','e') && rec('200','h') && ! rec('200','f') ) ? '.' :
378 ( rec('200','k') && rec('200','f') ) ? ' /' :
379 ( rec('200','k') && rec('200','c') ) ? '.' :
384 ( rec('200','h') && rec('200','f') ) ? ' /' :
385 ( rec('200','h') && rec('200','i') ) ? '.' :
386 ( rec('200','h') && ! ( rec('200','i') || rec('200','f') ) ) ? '.' :
391 ( rec('200','i') && rec('200','f') ) ? ' /' :
392 ( rec('200','i') && ! rec('200','f') ) ? '.' :
397 ( rec('200','f') && rec('200','c') ) ? '. ' :
400 regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
403 regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
408 ## append to last subfield
420 ## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti za svaku bazu
423 rec('205','f') ? ' / ' :
431 ## ponovljiva potpolja u originalnom redosljedu - priprema u modify
432 marc_original_order('260', '210');
436 ## urediti interpunkcije za sve kombinacije
439 rec('215','c') ? ' :' :
440 rec('215','d') ? ' ;' :
441 rec('215','e') ? ' +' :
448 ( rec('215','c') && rec('215','d') ) ? ' ;' :
449 ( rec('215','c') && rec('215','e') ) ? ' +' :
456 rec('215','e') ? ' +' :
467 marc_indicators('490', 0, ' ');
476 # marc_indicators('830',' ','0');
477 # i2 ovisi clanu - popraviti
480 # regex('s/(^.*)\s\/\s(.*)/$1 ($2)/g',
487 ## 2.ind. prema jeziku i clanu, uskladiti s 245
489 #marc_indicators('440', ' ', '0');
491 #if ( rec('225','a') =~ m/^Einen / ) {
492 # marc_indicators('440', ' ', 6);
495 #if ( rec('225','a') =~ m/^Eine / ) {
496 # marc_indicators('440', ' ', 5);
499 #if ( rec('225','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
500 # marc_indicators('440', ' ', 4);
503 #if ( rec('225','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
504 # marc_indicators('440', ' ', 3);
507 #if ( rec('225','a') =~ m/^(A|L') / ) {
508 # marc_indicators('440', ' ', 2);
515 # sub { rec('225','a') }
529 ### 502 - biljeska o disertacijama
530 ## odgovarajuceg polja nema u originalnim podacima. mozda se moze pretpostaviti?
538 ### 653 - Index Term-Uncontrolled
539 ## da li ponovljivo polje ili potpolje, pogledati u Koha tags
540 marc_indicators('653', ' ', ' ');
548 ## ako je u originalu ponovljivo polje treba bioti i konvertirano u ponovljivo !!
549 ## ako ima samo podpolje a onda je pseudonim - nakon konverzije treba provjeriti
551 if ( rec('701','a') ) {
553 marc_indicators('701', 1, ' '); # override original indicators
554 marc_original_order('700','701');
558 my $relcode = rec('702','4');
561 'autor dodatka' => 'wam',
562 'autor fotografija' => 'pht',
564 'autorica i urednica' => 'aut edt',
565 'autorica teksta' => 'aut',
566 'autorica uvodnog teksta' => 'aui',
567 'autor izložbe' => 'cur',
568 'autor izložbe i fotografije' => 'cur pht',
569 'autor kataloških jedinica' => 'aqt',
570 'autorov suradnik' => 'oth',
571 'autor popratnih tekstova i kataloga' => 'aqt',
572 'autor predgovora' => 'aui',
573 'autor projekta' => 'pdr',
574 'autor projekta i urednik, izrada kazala' => 'pdr edt aqt',
575 'autor teksta' => 'aut',
576 'autor teksta i urednik' => 'aut edt',
577 'autor tekstova u jednom poglavlju i autor fotografija' => 'aut pht',
578 'autor uvoda' => 'aui',
579 'bibliografski urednik' => 'pbd',
580 'crtač geografskih karata' => 'ill',
582 'crteži karata' => 'ill',
586 'fotografija' => 'pht',
587 'fotografije' => 'pht',
588 'fotografije, engleski prijevod' => 'pht trl',
589 'fotografije i crteži' => 'pht ill',
590 'general editor' => 'edt',
591 'GIS i izrada karata' => 'ctg',
592 'glavna urednica' => 'edt',
593 'glavni i odgovorni urednik' => 'edt',
594 'glavni urednik' => 'edt',
595 'ilustracije' => 'ill',
596 'ilustracije i izrada karata' => 'ill ctg',
597 'ilustrator' => 'ill',
598 'ilustratorica' => 'ill',
599 'izrada crteža' => 'ill',
600 'izrada karata' => 'ill',
601 'izrada karata antičkih prometnica' => 'ctg',
602 'izrada kazala' => 'ant',
603 'izvedba CD-ROMa' => 'oth',
604 'kartograf' => 'ctg',
605 'kolorirani bakropisi' => 'ill',
606 'koncepcija' => 'ccp',
607 'likovno-grafička oprema' => 'ill',
608 'likovno oblikovanje' => 'ill',
609 'obrada izvornih karata i izrada kartografskih originala' => 'ctg',
610 'pisac predgovora' => 'aui',
611 'pisac uvoda' => 'aui',
612 'pomoćnica urednika' => 'edt',
613 'pomoćnik glavnog urednika' => 'edt',
614 'pomoćnik urednika' => 'edt',
615 'pomoćni urednik' => 'edt',
616 'predgovor' => 'aui',
617 'predsjednik redakcijskog kolegija' => 'pbd',
618 'prevoditelj' => 'trl',
619 'prevoditeljica' => 'trl',
620 ' prevoditeljica' => 'trl',
621 'prevoditeljica i redaktorica' => 'trl',
622 'priprema fotografija' => 'oth',
623 'priređivač' => 'edt',
624 'priređivač izdanja' => 'pbd',
626 'savjetnik' => 'oth',
627 'series editor' => 'pbd',
628 'stručna suradnica' => 'ctb',
629 'stručna suradnica i autorica teksta' => 'aut',
630 'stručni koordinator' => 'oth',
631 'stručni suradnik' => 'oth',
632 'stručni suradnik i autor teksta' => 'aut',
633 'stručni urednik' => 'edt',
634 'suradnica' => 'oth',
636 'tehnička realizacija CD-ROM-a' => 'oth',
637 'tekstovi o muzejima' => 'aut',
638 'tekstovi o zbirkama vjerskih zajednica' => 'aut',
641 'urednik i autor' => 'edt aut',
642 'urednik i urednik nakladničke cjeline' => 'edt pbd',
643 'urednik izdanja' => 'edt',
644 'urednik knjige i nakladničke cjeline' => 'edt',
645 'urednik nakladničke cjeline' => 'pbd',
646 'urednik pretiska' => 'edt',
647 'urednik serije' => 'edt',
649 'zemljopisne karte' => 'ill',
650 'zemljovidi' => 'ill',
651 'zvučni snimci' => 'rce'
655 if ( rec('702','a') ) {
656 marc_indicators('700', 1, ' ');
658 foreach my $repeat ( rec_array('702') ) {
659 my $sf_a = $repeat->{a} || die "702 doesn't have a ", dump( $repeat );
660 if ( my $sf_4 = $repeat->{4} ) {
661 my $relcode = $relcode_konv->{ $sf_4 } || die "no relcode_konv for ",dump( $sf_4 );
667 marc('700', 'a', $sf_a );
674 ## eventualno nadopuniti 710 i 711 - provjetiti da li u podacima postoji u ISIS-u
678 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
680 marc_indicators('711', 2, ' ');
684 rec('710','b') ? '.' :
690 rec('710','d') ? '(' :
695 ( ! rec('710','d') ) ? '(' :
696 ( ! rec('710','e') ) ? '(' :
701 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
702 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
709 marc_indicators('710', 2, ' ');
716 if ( rec('710','c') ) {
718 surround('(', ')', rec('710','c'))
725 ### 852 - ne koristimo, koristimo 942 i 952
727 ### 876 - item information - basic bibliographic unit (R)
728 ## da li ovdje zapisati stare inventarne brojeve?
739 my $keyword = dump( rec('610') );
742 if ( rec('200','a') =~ m/Elektroni/ ) {
747 } elsif ( $keyword =~ m/disertacija/ ) {
752 } elsif ( $keyword =~ m/magistarski/ ) {
757 } elsif ( rec('990') =~ m/(separat|posebni)/ ) {
762 } elsif ( rec('990') =~ m/starih/ ) {
805 my $copynumber = rec('991','b') ;
806 my $callnumber = rec('990') ;
808 my $location = rec('992');
809 my $location_konv = {
810 'ZB, Min. odjel i Geol. odjel, HPrM' => 'ZB',
811 'ZB, Min. odjel i Geol. odjel, HPM' => 'ZB',
812 'ZB i Min. odjel, HPrM' => 'ZB',
813 'ZB i Min. odjel, HPM' => 'ZB',
814 'ZB i Geol. odjel, HPrM' => 'ZB',
815 'ZB i Geol. odjel, HPM' => 'ZB',
820 'ZB, Geol. odjel i Min. odjel, HPM' => 'ZB',
821 'Min. odjel i ZB, HPM' => 'ZB',
822 'Min. odjel i Geol. odjel, HPrM' => 'MP',
823 'Min. odjel i Geol. odjel, HPM' => 'MP',
824 'Min. odjel, HPrM' => 'MP',
825 'Min. odjel, HPM' => 'MP',
826 'Min. odjel' => 'MP',
827 'Institut Makarska' => 'ZB',
828 'Geol. odjel i ZB, HPM' => 'ZB',
829 'Geol. odjel i Min. odjel, HPM' => 'MP',
830 'Geol. odjel, HPrM' => 'GP',
831 'Geol. odjel, HPM' => 'GP'
836 if ( rec('991','a') ) {
837 foreach my $repeat ( rec_array('991') ) {
838 my $sf_a = $repeat->{a} || die "991 doesn't have a ", dump( $repeat );
839 if ( my $sf_b = $repeat->{b} ) {
840 $sf_b || die "no inv";
844 'c' => $location_konv->{$location},