--- trunk/conf/normalize/mapping.pl 2006/06/29 21:53:00 545 +++ trunk/conf/normalize/mapping.pl 2006/07/30 14:19:54 604 @@ -1,69 +1,168 @@ -marc21('001', - rec('000') +if ( rec('200','a') ) { + +# Leader +# +# raspraviti 17,18 + +# u nekim knjižnicama koristi se 999a i 999b + +if ( rec('999') && first(rec('999')) =~ m/pregledan/i) { + marc_leader('05','c'); +} else { + marc_leader('05','n'); +} + + marc_leader('06','a'); + marc_leader('07','m'); + marc_leader('18','i'); + +if ( rec('230') ) { + marc_leader('19','r'); +} + + +# 001 polje dodaje Voyager + +# polje 035 je u NSK ponovljivo. zašto ??? + +# privemeno koristimo 0356 umjesto 0359 + +marc('035','6', +join_with('', +# config('input normalize path'), +# config('name'), +# config('input name'), + config(), +# id(), +# rec('994','a'), + rec('000') + ) ); -marc21('020','a', +# u marc 035a treba dodati System Number - +# NSK zapisuje Voyagerov ID (001) - kako ??? + +# u FFSF bazama postoji nekoliko zaredanih ISBN, odvojenih s '. - ' + +marc('020','a', rec('010') ); -marc21('101','a', - rec('101') +# u polje 040a možda još dodati prefiks HR +# NSK ima HR NSB (možda u novijim zapisima ima NSK?) + +marc('040','a', + 'FFZG' ); -marc21('245','a', - rec('200','a') +marc('040','b', + 'hrv' ); -marc21('245','b', - join_with(' : ', - rec('200','d'), - rec('200','e') - ) +if (rec('300') && first(rec('300')) =~ m/prijevod/i) { + marc_indicators('041', 1, ' '); +} else { + marc_indicators('041', 0, ' '); +} + +marc_repeatable_subfield('041','a', + rec('101') ); -marc21('245','c', - join_with(' ; ', - rec('200','f'), - rec('200','g') - ) +marc_indicators('245', 0, 0); + +#_debug(3); + +marc_compose('245', + 'a', suffix( + rec('200','b') ? '. ' : + rec('200','k') ? ' ; ' : + rec('200','d') ? ' = ' : + rec('200','e') ? ' : ' : + rec('200','f') ? ' / ' : + '.', + rec('200','a') + ), + 'h', rec('200','b'), + 'b', rec('200','k'), + 'b', rec('200','d'), + 'b', rec('200','e'), + 'c', rec('200','f'), +# FIXME append to last subfield + '+', prefix('. ', rec('200','c') ), ); -marc21('250','a', + +#_debug(0); + + +# marc('245','a', +# rec('200','a') +# ); +# +# marc('245','b', +# join_with(' : ', +# rec('200','d'), +# rec('200','e') +# ) +# ); +# +# marc('245','c', +# join_with(' ; ', +# rec('200','f'), +# rec('200','g') +# ) +# ); + +marc('250','a', rec('205','a') ); -marc21('260','a', - rec('210','a') +# FIXME ponovljiva potpolja u originalnom redosljedu +# +marc_original_order('260', '210'); + +marc('260','a', + rec('210','a'), ); -marc21('260','b', - rec('210','c') +marc('260','b', + rec('210','c'), ); -marc21('260','c', - rec('210','d') +marc('260','c', + rec('210','d'), ); -marc21('300','a', +# marc_compose('260', +# 'a', split_rec_on('210','a', qr/\s*;\s*/, 1), +# 'b', first(rec('210','c')), +# 'a', split_rec_on('210','a', qr/\s*;\s*/, 2), +# 'c', first(rec('210','d')), +# ); + +marc('300','a', rec('215','a') ); -marc21('300','b', +marc('300','b', rec('215','c') ); -marc21('300','c', +marc('300','c', rec('215','d') ); -marc21('300','e', +marc('300','e', rec('215','e') ); -marc21('490','a', - join_with(' = ', + +marc_indicators('490', 1, ' '); +marc('490','a', + join_with(' : ', rec('225','a'), - join_with(" : ", + join_with(" = ", rec('225','d'), join_with(" / ", rec('225','e'), @@ -73,54 +172,260 @@ ) ); -marc21('490','v', - rec('225','v') +marc('490','v', +# join2_with(225, 'v', ' , ', 225,'w'); + join_with(', ', + rec('225','v'), + rec('225','w') + ) ); -marc21('500','a', +marc('500','a', rec('300') ); -marc21('504','a', +marc('500','a', + rec('314') +); + +marc('504','a', rec('320') ); -marc21('655','a', +# napomene uz konverziju polja sa sadržajem: +# NSK konvertira 327 (NP) u 501 (R) +# u LOC konv. tablici stoji 327 (NP) u 505 (NR) +# standard i validacije dopuštaju 501 (R) i 505 (R) +# FFPS koristi 327 (P) +# FFIZ koristi 327 + + +marc_indicators('505', '0', ' '); +marc('505','a', + regex('s/\s*[\\r\\n]+\s*\**\s*/ ; /g', + rec('327') + ) +); + +# napomene uz konverziju polja 330: +# NSK konvertira 330 (P) u 520 (P) = LOC konv. tablica +# FFIZ koristi 330 (P) - ključne riječi, dijelovi sadržaja, sažeci +# FFFO koristi 330 (P) - ključne riječi, dijelovi sadržaja +# FFPS koristi 330 (NP) - sažetak + +marc('520','a', + regex('s/[\\r\\n]+/. /g', + rec('330') + ) +); + +# možda i polje 520y - jezik napomene ako je uvijek isti jezik + +marc_indicators('655', ' ', 4); +marc('655','a', + rec('608') +); + +marc_indicators('653', ' ', ' '); +marc('653','a', rec('610') ); -marc21('100','a', +# 675 podpolja c, d ... - što s njima ??? + +marc('080','a', + rec('675','a') +); + +# 084 je other classification (R) +# NSK ga koristi za stručnu oznaku NSK iz polja 681 +# NSK definira i prelazak polja 686 u 084, u skladu s LOC konv. tablicom +# +# polje 686 koristi FFPS + +marc('084','a', + rec('686') +); + +marc_indicators('100', 1, ' '); +marc('100','a', join_with(', ', rec('700', 'a'), rec('700', 'b') ) ); -marc21('700','a', +#_debug(2); + +marc_indicators('700', 1, ' '); + +if ( rec('701') ) { +marc('700','4', + 'aut' +); +} + +marc('700','a', + rec('701', 'a'), +); + +marc('700','a', join_with(', ', - rec('701', 'a'), - rec('701', 'b') + rec('701', 'c'), + rec('701', 'd') ) ); -if ( rec('701') ) { - marc21('700','4', - '070' - ); -} +marc('700','a', + join_with(', ', + rec('701', 'e'), + rec('701', 'f') + ) +); -marc21('700','a', +marc('700','a', join_with(', ', - rec('702','a'), - rec('702','b') + rec('701', 'g'), + rec('701', 'h') ) ); -if ( rec('702') ) { - marc21('700','4', - '340' + +marc('700','a', + rec('702','a'), +); + + +# ako je u originalu ponovljivo polje treba biti i konvertirano!! + + +marc('700','a', + join_with(', ', + rec('702','c'), + rec('702','d') + ) +); + +marc('700','a', + join_with(', ', + rec('702','e'), + rec('702','f') + ) +); + +marc('700','a', + join_with(', ', + rec('702','g'), + rec('702','h') + ) +); + +#_debug(0); + + +if ( rec('710','f') ) { + +marc_indicators('111', 2, ' '); +marc('111','a', + rec('710','a') +); + +marc('111','c', + rec('710','e') +); + +marc('111','d', + rec('710','f') +); + +marc('111','e', + rec('710','b') +); + +marc('111','n', + rec('710','d') +); + + +} else { + +marc_indicators('110', 2, ' '); +marc('110','a', + rec('710','a') +); + +marc('110','c', + rec('710','c') +); + +}; + + +marc_indicators('740', 0, ' '); +marc('740','a', + rec('200','c') +); + + +# višerazinci + +if ( rec('230') ) { + + marc_duplicate(); + marc_remove('245'); + + marc('245','a', + rec('230','a') + ); + + if ( ! rec('230','a') ) { + + marc('245','a', + rec('200','a') + ); + } + + marc('245','b', + rec('230','e') + ); + + marc('245','c', + rec('230','f') ); + + marc('245','n', + rec('230','v') + ); + } +if ( rec('231') ) { + + marc_duplicate(); + marc_remove('245'); + marc('245','a', + rec('231','a') + ); + + if ( ! rec('231','a') ) { + marc('245','a', + rec('200','a') + ); + } + + marc('245','b', + rec('231','e') + ); + + marc('245','c', + rec('231','f') + ); + + marc('245','n', + rec('231','v') + ); + +} +}