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', ' ', ' ');
549 ## ako je u originalu ponovljivo polje treba bioti i konvertirano u ponovljivo !!
550 ## ako ima samo podpolje a onda je pseudonim - nakon konverzije treba provjeriti
552 if ( rec('701','a') ) {
553 marc_indicators('700', 1, ' ');
554 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 i redaktorica' => 'trl',
620 'priprema fotografija' => 'oth',
621 'priređivač' => 'edt',
622 'priređivač izdanja' => 'pbd',
624 'savjetnik' => 'oth',
625 'series editor' => 'pbd',
626 'stručna suradnica' => 'ctb',
627 'stručna suradnica i autorica teksta' => 'aut',
628 'stručni koordinator' => 'oth',
629 'stručni suradnik' => 'oth',
630 'stručni suradnik i autor teksta' => 'aut',
631 'stručni urednik' => 'edt',
632 'suradnica' => 'oth',
634 'tehnička realizacija CD-ROM-a' => 'oth',
635 'tekstovi o muzejima' => 'aut',
636 'tekstovi o zbirkama vjerskih zajednica' => 'aut',
639 'urednik i autor' => 'edt aut',
640 'urednik i urednik nakladničke cjeline' => 'edt pbd',
641 'urednik izdanja' => 'edt',
642 'urednik knjige i nakladničke cjeline' => 'edt',
643 'urednik nakladničke cjeline' => 'pbd',
644 'urednik pretiska' => 'edt',
645 'urednik serije' => 'edt',
647 'zemljopisne karte' => 'ill',
648 'zemljovidi' => 'ill',
649 'zvučni snimci' => 'rce'
653 if ( rec('702','a') ) {
654 marc_indicators('700', 1, ' ');
656 $relcode_konv->{$relcode}
666 ## eventualno nadopuniti 710 i 711 - provjetiti da li u podacima postoji u ISIS-u
670 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
672 marc_indicators('711', 2, ' ');
676 rec('710','b') ? '.' :
682 rec('710','d') ? '(' :
687 ( ! rec('710','d') ) ? '(' :
688 ( ! rec('710','e') ) ? '(' :
693 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
694 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
701 marc_indicators('710', 2, ' ');
708 if ( rec('710','c') ) {
710 surround('(', ')', rec('710','c'))
718 ### 740 - Added Entry - Uncontrolled Related/Analytical Title
720 ## nadopuniti prvi indikator prema clanovima
721 marc_indicators('740', '0', ' ');
723 # if ( ! rec('464') ) {
740 ### 760 w ---------------------------------------------
741 ## generiranje zapisa o nakladnickoj cjelini i povezivanje podredenog zapisa s nadredenim
744 # rec('225','a') # da li je nakladnicka cjelina?
754 #my $series = get( $series_key );
760 #$series = join_with('',
766 #set( $series_key => $series );
769 #} # nakladnicka cjelina
771 #my $series_key = join_with('',
779 # marc_indicators('760', 0, ' ');
791 # my $dup_key = join_with('',
802 # marc_indicators('776', 0, ' ');
808 # -------------------------------------------------------------------
810 ### 774 - Constituent Item Entry - to bi trebali koristiti ali ne koristimo jer NSK to koristi za nesto drugo
811 ### 787 - Nonspecific Relationship Entry
813 #marc_indicators('787','0',' ');
816 # 'g', rec('230','v'),
817 # 't', rec('230','a'),
818 # 'b', rec('240','a'),
819 # 'd', rec('250','a'),
820 # 'd', rec('250','d'),
821 # 'h', rec('260','a'),
822 # 'k', rec('270','a'),
823 # 'n', join_with('. - ',
826 # 'x', join_with(', ',
831 # 'g', rec('231','v'),
832 # 't', rec('231','a'),
833 # 'b', rec('241','a'),
834 # 'd', rec('251','a'),
835 # 'd', rec('251','d'),
836 # 'h', rec('261','a'),
837 # 'k', rec('271','a'),
838 # 'n', join_with('. - ',
841 # 'x', join_with(', ',
846 # 'g', rec('232','v'),
847 # 't', rec('232','a'),
848 # 'b', rec('242','a'),
849 # 'd', rec('252','a'),
850 # 'd', rec('252','d'),
851 # 'h', rec('262','a'),
852 # 'k', rec('272','a'),
853 # 'n', join_with('. - ',
856 # 'x', join_with(', ',
861 # 'g', rec('233','v'),
862 # 't', rec('233','a'),
863 # 'b', rec('243','a'),
864 # 'd', rec('253','a'),
865 # 'h', rec('263','a'),
866 # 'k', rec('273','a'),
867 # 'n', join_with('. - ',
870 # 'x', join_with(', ',
876 ### 852 - ne koristimo, koristimo 942 i 952
878 ### 876 - item information - basic bibliographic unit (R)
879 ## da li ovdje zapisati stare inventarne brojeve?
884 ### 886 - former marc
885 # inicijale treba prebaciti u neko lokalno polje, a ovo polje nam ne treba
887 # marc_indicators('886', 2, ' ');