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 sadr¿i 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 poèinje prefixom "ISBN" koji se mièe (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 mo¾e sadr¾avati slova i razmake
174 ## moguæ problem u pretra¾ivanju 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 sadr¾i /Prijevod/ ili /Izv. stv. nasl./, i1 = 1
208 ## (Da li je napomena uvijek pisana?)
209 ## 2. Podatak o prevodiocu u 200g. Problem: razlièiti oblici rijeèi, razlièiti 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 pomoæne oznake)
212 ## pr. 821.111-2=163.42 je prijevod engleske drame na HR.
213 ## to ima samo za knji¾evna 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 vi¹e 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 èlanu - 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 - bilje¹ka o disertacijama
529 ## odgovarajuæeg polja nema u originalnim podacima. mo¾da se mo¾e 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('700','c') ) {
553 if ( rec('700','c') =~ m/, / ) {
554 marc_indicators('700', 1, ' ');
556 marc_indicators('700', 0, ' ');
564 if ( rec('700','e') ) {
565 if ( rec('700','e') =~ m/, / ) {
566 marc_indicators('700', 1, ' ');
568 marc_indicators('700', 0, ' ');
576 if ( rec('700','g') ) {
577 if ( rec('700','g') =~ m/, / ) {
578 marc_indicators('700', 1, ' ');
580 marc_indicators('700', 0, ' ');
588 if ( rec('700','i') ) {
589 if ( rec('700','i') =~ m/, / ) {
590 marc_indicators('700', 1, ' ');
592 marc_indicators('700', 0, ' ');
600 if ( rec('700','k') ) {
601 if ( rec('700','k') =~ m/, / ) {
602 marc_indicators('700', 1, ' ');
604 marc_indicators('700', 0, ' ');
613 if ( rec('701','a') ) {
614 marc_indicators('700', 1, ' ');
620 if ( rec('701','c') ) {
621 if ( rec('701','c') =~ m/, / ) {
622 marc_indicators('700', 1, ' ');
624 marc_indicators('700', 0, ' ');
632 if ( rec('701','e') ) {
633 if ( rec('701','e') =~ m/, / ) {
634 marc_indicators('700', 1, ' ');
636 marc_indicators('700', 0, ' ');
644 if ( rec('701','g') ) {
645 if ( rec('701','g') =~ m/, / ) {
646 marc_indicators('700', 1, ' ');
648 marc_indicators('700', 0, ' ');
656 if ( rec('702','a') ) {
657 marc_indicators('700', 1, ' ');
663 if ( rec('702','c') ) {
664 marc_indicators('700', 1, ' ');
670 if ( rec('702','e') ) {
671 marc_indicators('700', 1, ' ');
680 ## eventualno nadopuniti 710 i 711 - provjetiti da li u podacima postoji u ISIS-u
684 if ( rec('710','d') || rec('710','e') || rec('710','f') ) {
686 marc_indicators('711', 2, ' ');
690 rec('710','b') ? '.' :
696 rec('710','d') ? '(' :
701 ( ! rec('710','d') ) ? '(' :
702 ( ! rec('710','e') ) ? '(' :
707 ( rec('710','e') && ( rec('710','d') || rec('710','f') ) ) ? '; ' :
708 ( ! rec('710','d') && ! rec('710','f') ) ? '(' :
715 marc_indicators('710', 2, ' ');
722 if ( rec('710','c') ) {
724 surround('(', ')', rec('710','c'))
732 ### 740 - Added Entry - Uncontrolled Related/Analytical Title
734 ## nadopuniti prvi indikator prema èlanovima
735 marc_indicators('740', '0', ' ');
737 # if ( ! rec('464') ) {
754 ### 760 w ---------------------------------------------
755 ## generiranje zapisa o nakladnièkoj cjelini i povezivanje podreðenog zapisa s nadreðenim
758 # rec('225','a') # da li je nakladnièka cjelina?
768 #my $series = get( $series_key );
774 #$series = join_with('',
780 #set( $series_key => $series );
783 #} # nakladnièka cjelina
785 #my $series_key = join_with('',
793 # marc_indicators('760', 0, ' ');
805 # my $dup_key = join_with('',
816 # marc_indicators('776', 0, ' ');
822 # -------------------------------------------------------------------
824 ### 774 - Constituent Item Entry - to bi trebali koristiti ali ne koristimo jer NSK to koristi za ne¹to drugo
825 ### 787 - Nonspecific Relationship Entry
827 #marc_indicators('787','0',' ');
830 # 'g', rec('230','v'),
831 # 't', rec('230','a'),
832 # 'b', rec('240','a'),
833 # 'd', rec('250','a'),
834 # 'd', rec('250','d'),
835 # 'h', rec('260','a'),
836 # 'k', rec('270','a'),
837 # 'n', join_with('. - ',
840 # 'x', join_with(', ',
845 # 'g', rec('231','v'),
846 # 't', rec('231','a'),
847 # 'b', rec('241','a'),
848 # 'd', rec('251','a'),
849 # 'd', rec('251','d'),
850 # 'h', rec('261','a'),
851 # 'k', rec('271','a'),
852 # 'n', join_with('. - ',
855 # 'x', join_with(', ',
860 # 'g', rec('232','v'),
861 # 't', rec('232','a'),
862 # 'b', rec('242','a'),
863 # 'd', rec('252','a'),
864 # 'd', rec('252','d'),
865 # 'h', rec('262','a'),
866 # 'k', rec('272','a'),
867 # 'n', join_with('. - ',
870 # 'x', join_with(', ',
875 # 'g', rec('233','v'),
876 # 't', rec('233','a'),
877 # 'b', rec('243','a'),
878 # 'd', rec('253','a'),
879 # 'h', rec('263','a'),
880 # 'k', rec('273','a'),
881 # 'n', join_with('. - ',
884 # 'x', join_with(', ',
890 ### 852 - ne koristimo, koristimo 942 i 952
892 ### 876 - item information - basic bibliographic unit (R)
893 ## da li ovdje zapisati stare inventarne brojeve?
898 ### 886 - former marc
899 # inicijale treba prebaciti u neko lokalno polje, a ovo polje nam ne treba
901 # marc_indicators('886', 2, ' ');