將機讀格式與館藏資料匯入 KOHA

將目前系統中的書目資料匯入 Koha 不是一件容易的事情。主要是因為系統不一樣,對 MARC 的處理也不一樣!這篇文章是自己轉換的過程也希望幫助大家將資料轉到 Koha 上去的。

Koha 大致做法是:

先新增書目資料,用 addbiblio.pl 將 MARC 資料寫正確,輸入到資料庫。再輸入館藏資料,利用 additem.pl 將 995 段補齊,995 段是用來記錄館藏資料的。在將館藏資料輸入資料庫庫相關欄位。 執行完 addbiblio.pl 之後,會將 MARC 資料寫入到 biblio, biblioitems, marc_biblio, marc_subfield_table, marc_word 等表格。 執行完 additem.pl 之後,會輸入 MARC 995 段的資料到 marc_subfield_table, marc_word,再把部份館藏相關的資料輸入到 items 這個表格。

執行順序是:
1. 先檢查 marc_breeding 是否有資料

marc_breeding 的資料通常來自 Z3950 或是 使用者自行上傳的資料

  1. 如果有就會取出書目資料,匯入到編目的介面,供館員修改。
  2. 沒有的話可以從 Z3950 搜尋 或是 原編
    1. 如果從 Z3950 找到資料,會匯入到 marc_breeding,同時將資料自動輸入到編目介面,讓館員編目。
    2. 如果找不到就要進入原編,自行編目

以上動作大多是 addbiblio.pl 在處理的,包括欄位的增加、刪除、重複書目的判斷、新增書目、修改書目、刪除書目等。 z3950 的動作是在 z3950/search.pl 完成,這邊中文社群有很大的貢獻,包括 CCCII, BIG5 轉 UTF8 等,許多程式都是 Long_sam, Alex, Mao 等完成的。

2. 新增館藏

書目資料新增完成之後,會自動帶到新增館藏的介面,讓館員輸入 995 段的館藏資料。 這邊的動作都是在程式 additem.pl 完成,包括複本的增加、館藏的增加、修改、刪除等。

模擬 Koha 作法自動匯入所有資料

  • 先將資料從 big5 轉到 utf8
    不能只轉字碼,MARC 中定義到的 Leader 與 各欄位長度都要修改。
  • 轉換欄位
    KOHA 以 995 段來記錄館藏資料。所以我需要將原先的欄位調整一下將許多 805 段轉到 995 段。如果不想以 995 來記錄,需要調整資料庫甚至要修改部份程式碼。
  • 匯入 MARC 到 Koha 的資源庫(marc_breeding)
    儲存 MARC 資料,有暫存的意味,還沒有真正將 MARC 與館藏匯入。
  • 從 Koha 資源庫將所有 MARC 與館藏匯入 Koha

實作範例

Step 0. 準備工作

主要有三點:1. 匯出 MARC、2. 轉換欄位、3. 調整 Koha 與 Marc 連結

  • 先從原本系統匯出機讀格式,請確認自己系統的:
    • MARC 格式是否符合標準 ISO2709 格式
    • 字元編碼,以中文來說常見的有 CCCII, BIG5, UTF8
    • 確認 MARC 資料與館藏資料正確性
    • 確認 MARC 格式,CMARC or UNIMARC or MARC21 等,版本大致為何


完成以上工作之後,原則上就會有一個檔案我這邊舉例檔名為 Orig_Bib.mrc,就是我的館藏的資料。這個檔案是ISO2709格式、BIG5 字元編碼、資料正確共有 500 筆 CMARC。

  • 了解自己 MARC 格式中到底記錄了哪些欄位。這是為了將既有的格式轉換為 Koha 內的 MARC 格式,讓他們欄位相通。可以用 marc_get_tag.pl 來取得欄位、分欄使用的情形。例如我的 Orig.mrc 節錄部份容為
    805a = 585
    805d = 585
    805n = 5
    805p = 585
    805z = 585
    805f = 585
    805c = 585
    805m = 585
    805t = 585
    
    得知 805 段的部份資料,其中有使用到 分欄a 的次數為 585 次,在總共 500 筆資料卻有 585 個,表示有一些是複本。
    但是這邊使用的 805 整個大段在 Koha 中是用 995 來記錄的,所以我們需要轉換欄位。先準備一個純文字檔 tag_convert.txt 內容如下
    805a,995a
    805b,995b
    805c,995d
    805f,995f
    805t,995t
    805z,995z
    805m,995m
    805l,995v
    809d,681a
    809e,681b
    809p,990a
    805d+805e,995e
    
    以","區分為需要轉換的欄位分欄,如第一筆為 "805a,905a" ,表示我要將資料中的 805a 轉換成 905a。最後一筆 "805d+805e,995e" 表示將805 與 805e 合併到 995e。儲存 tag_convert.txt,後續程式將根據此檔幫你轉換MARC資料。
  • 最後就是到 Koha 的系統管理,確認 Koha 與 Marc 之間的連結

Step 1. 先將資料從 big5 轉到 utf8

這邊的 Orig.mrc 是 big5 的編碼,但是 Koha 卻是 UTF8 的編碼,兩者並不相容。我寫了一個小程式 marc_big5toutf8.pl 來轉換編碼與Leader。

執行:marc_big5toutf8.pl Orig.mrc > Orig_UTF8.mrc
結果:Orig_UTF8.mrc 就是以 UTF8編碼正確的 ISO2709 檔案

Step 2. 轉換欄位

將 Orig_UTF8.mrc 中的欄位轉換成與 Koha 一樣的欄位。一樣寫了一隻程式來操作 marc_tag_convert.pl

執行:marc_tag_convert.pl Orig_UTF8.mrc tar_convert.txt > Koha.mrc
結果:koha.mrc 裡面的資料舊式用來準備匯入 KOHA 的原始資料了。

Step 3. 匯入 MARC 到 Koha 的資源庫(marc_breeding)

將 koha.mrc 上傳到 Koha 的資源庫。
使用瀏覽器開啟網頁,進入 Koha 的館員介面,點選KOHA 管理,點選匯入。
選擇檔案:選取剛剛的 Koha.mrc
匯入名稱:輸入 Koha_mrc,記得要輸入這個名稱,後面用到。
字元編碼:這邊是翻譯錯誤,因為應該選擇的是 MARC 格式,CMARC 與 UNIMARC 都選 UNIMARC,USMARC 與 MARC21 都選 MARC21
最後看情況決定是否覆蓋重覆資料。

Step 4. (Koha2 only) 從 Koha 資源庫將所有 MARC 與館藏匯入 Koha

先登入 Koha 的主機,取得 root 權限。
先備份 KOHA 資料庫,避免造成錯誤無法回復資料。

執行 mysqldump -u xxx -p Koha > Koha.sql

因為這邊要使用到 koha 寫好的 modules,搭配自己開發的 import_biblio_items.pl 來進行最後的匯入步驟。

執行 export PERL5LIB = /usr/local/koha/intranet/modules

利用寫好的 import_biblio_items.pl 來將剛剛上傳的 koha_mrc 的資料,匯入到 Koha 書目資料表與館藏記錄。如果沒有錯誤就完成了!

執行 import_biblio_items.pl koha_mrc