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 ## pretpostavke o indikatorima
207 ## 1. Ako postoji polje 300 i ono sadrzi /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
208 ## (Da li je napomena uvijek pisana?)
209 ## 2. Podatak o prevodiocu u 200g. Problem: razliciti oblici rijeci, razliciti jezici.
210 ## 3. Ako u UDK oznaci postoji "=", bez zagrada, onda je to prijevod
211 ## (ako postoje zagrade pr. 94(=411.16) onda su to pomocne oznake)
212 ## pr. 821.111-2=163.42 je prijevod engleske drame na HR.
213 ## to ima samo za knjizevna djela, eseje....
214 ## ovo treba kasnije ispravljati
216 #if ( rec('675') =~ m/\d=\d/ ) ?
219 ## ponovljivo polje (101) konvertira se u ponovljivo potpolje (041a)
220 ## koristi se kad ima vise od jednog jezika, ili kad se radi o prijevodu
224 if ( ( count( rec('101','a') ) > 1 ) || ( rec('101','b') ) || ( rec('101','h') ) ) {
225 marc_original_order('041','101');
226 if ( ( grep( m/prijevod/i, rec('300') ) ) || ( rec('101','h') ) ) {
227 marc_indicators('041', 1, ' ');
229 marc_indicators('041', ' ', ' ');
235 ## koristi se kad ima vise zemalja izdavanja
244 ## I1 = 0 ako je pseudonim (ima 700a, nema 700b)
246 if ( rec('700','a') && ! rec('700','b') ) {
247 marc_indicators('100', 0, ' ');
249 marc_indicators('100', 1, ' ');
259 ### formalna odrednica - iz 503 u 110, i1=0, i2=1
261 # nadopuniti nakon konverzije
265 ## konverzija u 110 ili 111 ovisno o postojanju/nepostojanju nekih polja
267 if ( ! rec('700') ) {
269 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
271 marc_indicators('111', 2, ' ');
273 if ( rec('710','d') ) {
276 ( rec('710','d') || rec('710','f') || rec('710','e') ) ? '' :
280 'n', surround( '(', ' :',
284 ( ! rec('710','d') ) ? ')' :
285 ( ! rec('710','e') ) ? ')' :
296 ( rec('710','d') || rec('710','f') || rec('710','e') ) ? '' :
300 'd', surround('(',' :',
309 marc_indicators('110', 2, ' ');
316 if ( rec('710','c') ) {
318 surround('(', ')', rec('710','c'))
326 ## i1 = 0 za anonimne publikacije, i1 = 1 ako postoji 700 ili 710
327 ## i2 = pretpostavlja se na temelju clana na pocetku naslova i jezika
331 if ( rec('700') || rec('710') ) {
337 marc_indicators('245', $titleind1, 0);
339 if ( rec('200','a') =~ m/^Einen / ) {
340 marc_indicators('245', $titleind1, 6);
342 if ( rec('200','a') =~ m/^Eine / ) {
343 marc_indicators('245', $titleind1, 5);
345 if ( rec('200','a') =~ m/^(Die|Das|Der|Ein|Les|Los|The) / ) {
346 marc_indicators('245', $titleind1, 4);
348 if ( rec('200','a') =~ m/^(Um|Un|An|La|Le|Lo|Il) / ) {
349 marc_indicators('245', $titleind1, 3);
351 if ( ( rec('101') =~ m/eng/ ) && ( rec('200','a') =~ m/^A / ) ) {
352 marc_indicators('245', $titleind1, 2);
354 if ( rec('200','a') =~ m/^L / ) {
355 marc_indicators('245', $titleind1, 2);
357 if ( rec('200','a') =~ m/^L'/ ) {
358 marc_indicators('245', $titleind1, 2);
364 ## da li treba makivati razmake u inicijalima?
370 ( ! ( rec('200','d') || rec('200','e') || rec('200','k') ) ) && ( rec('200','f') ) ? ' /' :
371 ( rec('200','d') ) ? ' =' :
372 ( rec('200','e') ) ? ' :' :
373 ( rec('200','k') ) ? ' ;' :
378 ( rec('200','d') && rec('200','f') ) ? ' /' :
379 ( rec('200','d') && rec('200','c') ) ? '.' :
384 ( rec('200','e') && rec('200','f') ) ? ' /' :
385 ( rec('200','e') && rec('200','c') ) ? '.' :
390 ( rec('200','k') && rec('200','f') ) ? ' /' :
391 ( rec('200','k') && rec('200','c') ) ? '.' :
396 ( rec('200','f') && rec('200','c') ) ? '. ' :
399 regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
402 regex('s/(\S\.)\s(\S\.\s)/$1$2/g',
407 ## append to last subfield
419 ## zapisima koji nemaju potpolje, dodaje se ^a u modify - provjeriti za svaku bazu
422 rec('205','f') ? ' / ' :
430 ## ponovljiva potpolja u originalnom redosljedu - priprema u modify
431 marc_original_order('260', '210');
435 ## urediti interpunkcije za sve kombinacije
438 rec('215','c') ? ' :' :
439 rec('215','d') ? ' ;' :
440 rec('215','e') ? ' +' :
447 ( rec('215','c') && rec('215','d') ) ? ' ;' :
448 ( rec('215','c') && rec('215','e') ) ? ' +' :
455 rec('215','e') ? ' +' :
466 marc_indicators('490', 0, ' ');
475 # marc_indicators('830',' ','0');
476 # i2 ovisi clanu - popraviti
479 # regex('s/(^.*)\s\/\s(.*)/$1 ($2)/g',
486 ## 2.ind. prema jeziku i clanu, uskladiti s 245
488 #marc_indicators('440', ' ', '0');
490 #if ( rec('225','a') =~ m/^Einen / ) {
491 # marc_indicators('440', ' ', 6);
494 #if ( rec('225','a') =~ m/^Eine / ) {
495 # marc_indicators('440', ' ', 5);
498 #if ( rec('225','a') =~ m/^(Die|Das|Der|Ein|Les|The) / ) {
499 # marc_indicators('440', ' ', 4);
502 #if ( rec('225','a') =~ m/^(Um|Un|An|La|Le|Il) / ) {
503 # marc_indicators('440', ' ', 3);
506 #if ( rec('225','a') =~ m/^(A|L') / ) {
507 # marc_indicators('440', ' ', 2);
514 # sub { rec('225','a') }
528 ### 502 - biljeska o disertacijama
529 ## odgovarajuceg polja nema u originalnim podacima. mozda se moze pretpostaviti?
537 ### 653 - Index Term-Uncontrolled
538 ## da li ponovljivo polje ili potpolje, pogledati u Koha tags
539 marc_indicators('653', ' ', ' ');
547 ## ako je u originalu ponovljivo polje treba bioti i konvertirano u ponovljivo !!
548 ## ako ima samo podpolje a onda je pseudonim - nakon konverzije treba provjeriti
550 if ( rec('701','a') ) {
552 marc_indicators('701', 1, ' '); # override original indicators
553 marc_original_order('700','701');
557 my $relcode = rec('702','4');
560 'autor dodatka' => 'wam',
561 'autor fotografija' => 'pht',
563 'autorica i urednica' => 'aut edt',
564 'autorica teksta' => 'aut',
565 'autorica uvodnog teksta' => 'aui',
566 'autor izložbe' => 'cur',
567 'autor izložbe i fotografije' => 'cur pht',
568 'autor kataloških jedinica' => 'aqt',
569 'autorov suradnik' => 'oth',
570 'autor popratnih tekstova i kataloga' => 'aqt',
571 'autor predgovora' => 'aui',
572 'autor projekta' => 'pdr',
573 'autor projekta i urednik, izrada kazala' => 'pdr edt aqt',
574 'autor teksta' => 'aut',
575 'autor teksta i urednik' => 'aut edt',
576 'autor tekstova u jednom poglavlju i autor fotografija' => 'aut pht',
577 'autor uvoda' => 'aui',
578 'bibliografski urednik' => 'pbd',
579 'crtač geografskih karata' => 'ill',
581 'crteži karata' => 'ill',
585 'fotografija' => 'pht',
586 'fotografije' => 'pht',
587 'fotografije, engleski prijevod' => 'pht trl',
588 'fotografije i crteži' => 'pht ill',
589 'general editor' => 'edt',
590 'GIS i izrada karata' => 'ctg',
591 'glavna urednica' => 'edt',
592 'glavni i odgovorni urednik' => 'edt',
593 'glavni urednik' => 'edt',
594 'ilustracije' => 'ill',
595 'ilustracije i izrada karata' => 'ill ctg',
596 'ilustrator' => 'ill',
597 'ilustratorica' => 'ill',
598 'izrada crteža' => 'ill',
599 'izrada karata' => 'ill',
600 'izrada karata antičkih prometnica' => 'ctg',
601 'izrada kazala' => 'ant',
602 'izvedba CD-ROMa' => 'oth',
603 'kartograf' => 'ctg',
604 'kolorirani bakropisi' => 'ill',
605 'koncepcija' => 'ccp',
606 'likovno-grafička oprema' => 'ill',
607 'likovno oblikovanje' => 'ill',
608 'obrada izvornih karata i izrada kartografskih originala' => 'ctg',
609 'pisac predgovora' => 'aui',
610 'pisac uvoda' => 'aui',
611 'pomoćnica urednika' => 'edt',
612 'pomoćnik glavnog urednika' => 'edt',
613 'pomoćnik urednika' => 'edt',
614 'pomoćni urednik' => 'edt',
615 'predgovor' => 'aui',
616 'predsjednik redakcijskog kolegija' => 'pbd',
617 'prevoditelj' => 'trl',
618 'prevoditeljica' => 'trl',
619 ' prevoditeljica' => 'trl',
620 'prevoditeljica i redaktorica' => 'trl',
621 'priprema fotografija' => 'oth',
622 'priređivač' => 'edt',
623 'priređivač izdanja' => 'pbd',
625 'savjetnik' => 'oth',
626 'series editor' => 'pbd',
627 'stručna suradnica' => 'ctb',
628 'stručna suradnica i autorica teksta' => 'aut',
629 'stručni koordinator' => 'oth',
630 'stručni suradnik' => 'oth',
631 'stručni suradnik i autor teksta' => 'aut',
632 'stručni urednik' => 'edt',
633 'suradnica' => 'oth',
635 'tehnička realizacija CD-ROM-a' => 'oth',
636 'tekstovi o muzejima' => 'aut',
637 'tekstovi o zbirkama vjerskih zajednica' => 'aut',
640 'urednik i autor' => 'edt aut',
641 'urednik i urednik nakladničke cjeline' => 'edt pbd',
642 'urednik izdanja' => 'edt',
643 'urednik knjige i nakladničke cjeline' => 'edt',
644 'urednik nakladničke cjeline' => 'pbd',
645 'urednik pretiska' => 'edt',
646 'urednik serije' => 'edt',
648 'zemljopisne karte' => 'ill',
649 'zemljovidi' => 'ill',
650 'zvučni snimci' => 'rce'
654 if ( rec('702','a') ) {
655 marc_indicators('700', 1, ' ');
657 foreach my $repeat ( rec_array('702') ) {
658 my $sf_a = $repeat->{a} || die "702 doesn't have a ", dump( $repeat );
659 if ( my $sf_4 = $repeat->{4} ) {
660 my $relcode = $relcode_konv->{ $sf_4 } || die "no relcode_konv for ",dump( $sf_4 );
666 marc('700', 'a', $sf_a );
673 ## eventualno nadopuniti 710 i 711 - provjetiti da li u podacima postoji u ISIS-u
677 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
679 marc_indicators('711', 2, ' ');
683 rec('710','b') ? '.' :
689 rec('710','d') ? '(' :
694 ( ! rec('710','d') ) ? '(' :
695 ( ! rec('710','e') ) ? '(' :
700 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
701 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
708 marc_indicators('710', 2, ' ');
715 if ( rec('710','c') ) {
717 surround('(', ')', rec('710','c'))
725 ### 740 - Added Entry - Uncontrolled Related/Analytical Title
727 ## nadopuniti prvi indikator prema clanovima
728 marc_indicators('740', '0', ' ');
730 # if ( ! rec('464') ) {
747 ### 760 w ---------------------------------------------
748 ## generiranje zapisa o nakladnickoj cjelini i povezivanje podredenog zapisa s nadredenim
751 # rec('225','a') # da li je nakladnicka cjelina?
761 #my $series = get( $series_key );
767 #$series = join_with('',
773 #set( $series_key => $series );
776 #} # nakladnicka cjelina
778 #my $series_key = join_with('',
786 # marc_indicators('760', 0, ' ');
798 # my $dup_key = join_with('',
809 # marc_indicators('776', 0, ' ');
815 # -------------------------------------------------------------------
817 ### 774 - Constituent Item Entry - to bi trebali koristiti ali ne koristimo jer NSK to koristi za nesto drugo
818 ### 787 - Nonspecific Relationship Entry
820 #marc_indicators('787','0',' ');
823 # 'g', rec('230','v'),
824 # 't', rec('230','a'),
825 # 'b', rec('240','a'),
826 # 'd', rec('250','a'),
827 # 'd', rec('250','d'),
828 # 'h', rec('260','a'),
829 # 'k', rec('270','a'),
830 # 'n', join_with('. - ',
833 # 'x', join_with(', ',
838 # 'g', rec('231','v'),
839 # 't', rec('231','a'),
840 # 'b', rec('241','a'),
841 # 'd', rec('251','a'),
842 # 'd', rec('251','d'),
843 # 'h', rec('261','a'),
844 # 'k', rec('271','a'),
845 # 'n', join_with('. - ',
848 # 'x', join_with(', ',
853 # 'g', rec('232','v'),
854 # 't', rec('232','a'),
855 # 'b', rec('242','a'),
856 # 'd', rec('252','a'),
857 # 'd', rec('252','d'),
858 # 'h', rec('262','a'),
859 # 'k', rec('272','a'),
860 # 'n', join_with('. - ',
863 # 'x', join_with(', ',
868 # 'g', rec('233','v'),
869 # 't', rec('233','a'),
870 # 'b', rec('243','a'),
871 # 'd', rec('253','a'),
872 # 'h', rec('263','a'),
873 # 'k', rec('273','a'),
874 # 'n', join_with('. - ',
877 # 'x', join_with(', ',
883 ### 852 - ne koristimo, koristimo 942 i 952
885 ### 876 - item information - basic bibliographic unit (R)
886 ## da li ovdje zapisati stare inventarne brojeve?
891 ### 886 - former marc
892 # inicijale treba prebaciti u neko lokalno polje, a ovo polje nam ne treba
894 # marc_indicators('886', 2, ' ');