999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

自由選擇字段的MARC數據提取工具開發實踐

2021-05-15 06:48:40劉娉婷
圖書館學刊 2021年4期

劉娉婷

(國家圖書館,北京10081)

MARC(Machine-Readable Cataloging)是機器可讀目錄的簡稱,指利用計算機識讀和處理的目錄。它是文獻編目內容經過計算機處理,以代碼形式記載在一定載體上而形成的一種目錄。MARC數據是描述文獻著錄項目的國際標準格式,是實現計算機處理書目信息及資源共享的基礎[1]。MARC數據最早產生于美國,作為一種計算機技術發展早期形成的數據格式,這一格式在定義時比較充分地照顧到圖書館書目數據在文獻形式描述、內容描述、檢索等方面的需要,具有字段數量多、著錄詳盡、可檢索字段多、定長與不定長字段結合、保留主要款目及傳統編目的特點、擴充修改功能強等特點[2]。在文獻數字化建設的過程中,MARC數據是數字化項目中的一項重要元數據,但MARC數據中的字段信息無法被直接使用,需要提取字段以及子字段信息,保存在可讀取的數據庫中。在對MARC數據的數據格式進行深入分析后,筆者開發出可以自由選擇字段的MARC數據提取工具,該工具對MARC數據提取的字段信息沒有限制,可以進行批量提取,筆者詳細介紹了該工具的實現原理和開發實踐,希望能為大家提供一定的借鑒。

1 MARC數據格式[3]

提取MARC數據的前提是理解MARC數據的格式結構,下面詳細地說明一下MARC數據的格式。

1.1 總體結構

MARC數據格式是GB/T 2901(ISO 2709)的一個特定形式,規定了每一個用于交換的書目記錄必須遵循的標準記錄結構。MARC數據由4部分組成:記錄頭標、地址目次區、數據字段區和記錄結束符。MARC數據的記錄結構如下圖1所示:

圖1 MARC數據的記錄結構

1.2 記錄頭標

根據GB/T 2901(ISO 2709)規定,記錄頭標位于MARC數據的開頭,由24位字符組成,包含了處理MARC數據所需的數據元素,是必備的并且不能重復。記錄頭標中的數據元素是由字符位置標識的,字符位置起始于0,記錄頭標的字符位置為0到23,數據元素具體如表1所示。

表1 記錄頭標數據元素

1.3 地址目次區

地址目次區位于記錄頭標之后,含有一個或多個目次項,每個目次項描述一個字段,一個目次項包含3部分:字段標識符、字段長度和字段起始字符位置,其中字段標識符由3位數字表示,字段長度由4位數字表示,字段起始字符位置由5位數字表示,即一個目次項有12位,不允許出現其他字符。在地址目次區之后有一個字段分隔符。地址目次區的結構如圖2所示。

圖2 地址目次區的結構

每個目次項中的字段長度是該字段全部字符數的總和,包括指示符、子字段標識符、行文或代碼數據以及字段分隔符;字段起始字符位置是該字段第一個字符在數據字段區中的位置,第一個數據字段的第一個字符的位置為0。MARC數據中的數據字段的位置完全由地址目次區決定,每個數據字段都對應地址目次區中的一個目次項。

1.4 數據字段區

數據字段區位于地址目次區之后,由若干定長和變長字段組成,每個字段之間用字段分隔符隔開。定長字段的結構圖3所示。

圖3 定長字段結構

變長字段的結構如圖4所示:

圖4 變長字段結構

001和005字段僅由數據和字段分隔符組成,其他字段由兩個字段指示符、一個或多個子字段以及字段分隔符組成,每個子字段的開頭是子字段標識符,由1位子字段分隔符和1位子字段代碼組成,子字段代碼一般為英文字母或數字,子字段標識符之后是代碼數據或正文數據。MARC數據中的字段和子字段原則上是可以重復的。這里要注意的是,字段標識符保存在地址目次區,在數據字段區是不存在的。

1.5 記錄分隔符

MARC數據中存在著一些特殊字符,用于分隔和控制MARC數據的格式,以便機器正確的識讀和處理MARC數據,MARC數據中的特殊字符主要有下面幾種:

(1)字符集中的IS1,即子字段分隔符,用作子字段標識符的第一位字符,標志著子字段的開始,在雙八位編碼表中用001F表示,在格式文本中用$表示。

(2)字符集中的IS2,用作地址目次區的結尾和數據字段的分隔符,以隔開相鄰的數據字段,在雙八位編碼表中用001E表示,在格式文本中用*表示。

(3)字符集中的IS3,即記錄結束符,置于每條記錄的結尾以表示該記錄結束,在雙八位編碼表中用001D表示,在格式文本中用%表示。

圖5是一條MARC數據,這里將不能顯示的特殊字符用可顯示的字符替代,其中IS1用$表示,IS2用*表示,IS3用%表示。

2 MARC數據提取

2.1 MARC數據提取工具開發意義

MARC數據作為一項重要的元數據,在文獻數字化建設的過程中是必不可少的。從MARC數據的格式來看,字段和子字段的信息并不能夠直接使用,當數據量比較大時,手工錄入并不現實,需要進行提取保存到可讀取的數據庫中。不同載體類型的數字化項目需要提取的MARC數據的字段信息是有差異的,同時要考慮到字段或子字段重復的情況,筆者沒有發現合適的工具來滿足MARC數據的提取需求,一般是自己開發提取工具,筆者針對中文圖書、民國報紙、民國期刊、音視頻等不同的載體類型開發了多個工具。這些工具只能提取固定字段的信息,靈活性差,當提取字段有變更時需要更新工具,不具備通用性,于是筆者萌生了開發一款可以自由選擇字段的MARC數據提取工具的想法,并最終完成了該工具的程序實現。

2.2 MARC數據提取原理

以圖5中的MARC數據為例,詳細地介紹MARC數據提取原理,具體提取流程如下:

(1)讀取MARC數據,每次讀取一行,假設現在讀取到的是圖5中的MARC數據。

圖5 MARC數據

(2)計算地址目次區中目次項的數量。該MARC數據的起始24個字符為記錄頭標,即“00911nam0 2200265 450”,記錄頭標的第12-16位為數據基地址,也就是數據字段區的起始位置,這里是“00265”,即在該條MARC數據中數據字段區起始于第265個字符。數據基地址減去記錄頭標的24個字符和地址目次區結尾的1個字段分隔符,就得到了地址目次區的總長度,這里是240。每個目次項的長度為12,用地址目次區的總長度除以12就得到了地址目次區中目次項的數量,這里是20。

(3)獲取地址目次區中所有目次項的字段標識符,按照順序存儲在數組中。每個目次項的前三位數字為字段標識符。圖1中的MARC數據的地址目次區如圖6所示,每一行是一個目次項,有標記的前三位數字為字段標識符。

圖6 地址目次區

(4)獲取數據字段區的每一個數據字段,按照順序存儲在數組中。這里要用到字段分隔符IS2,使用字段分隔符IS2將MARC數據進行分割,去掉記錄開頭的記錄頭標加地址目次區和記錄最后的記錄結束符,將得到全部的數據字段內容。圖5中的MARC數據的數據字段區如圖7所示,每一行是一個數據字段。目次區中目次項的順序和數據字段區中字段內容的順序是一致的,所以字段標識符數組和數據字段數組中的內容是一一對應的,至此就獲得了MARC數據中全部的字段信息。

圖7 數據字段區

(5)按照需求提取字段內容。將需要提取的字段標識符和子字段標識符存儲在一個數組中,依次在第(3)、(4)兩步獲取的數組中進行查找,即可得到對應的字段內容。提取字段內容時需要用到子字段分隔符IS1,利用IS1將數據字段進行分解,通過子字段標識符定位到對應的子字段內容。這里要注意001和005字段是沒有子字段分隔符的。在圖6中,第一行是001字段,第二行是005字段,第三行是010字段,取001和005字段的內容,直接讀取圖3中的第一行和第二行的內容,取010$a字段,需要將圖7中第三行的內容進行分解,以獲取到“978-7-5013-5978-3”。

(6)將字段內容存儲在Microsoft Office Excel文件中,每一個子字段的內容存儲為一列。選擇Microsoft Office Excel進行存儲是因為其具有靈活性,列數可以動態調整,符合自由選擇字段的需求,也可以方便的轉換為Microsoft Office Access等其他數據格式。

3 MARC數據提取開發實踐

3.1 開發環境

程序開發的硬件環境為普通PC機,操作系統是Windows 7,開發平臺是Microsoft Visual Studio 2010,目標框架使用的是.NET Framework 2.0,使用的編程語言是C#,PC機上必須安裝Microsoft Office Excel 2007和Microsoft Office Word 2007或更高版本。

3.2 程序功能

自由選擇字段的MARC數據提取工具的界面如圖8所示。該工具有兩個主要功能:MARC數據提取和說明文檔展示,這里主要介紹MARC數據提取的功能。

圖8 程序界面

MARC數據提取中主要包括字段間隔字符選擇、字段選擇、MARC數據查看和MARC數據提取4個功能,下面詳細地介紹一下這些功能:

(1)字段間隔字符選擇,間隔字符分為重復字段間隔字符和重復子字段間隔字符。在MARC數據中存在著字段重復和子字段重復的現象,該工具會將重復的字段和子字段全部提取,存儲在一個Excel單元格中,這就需要設置間隔字符將各個字段和子字段間隔開來,以免造成閱讀困難。筆者將重復字段的間隔字符默認設置為“;”,重復子字段的間隔字符默認設置為“,”,用戶也可以根據需求設置間隔字符,如果沒有設置間隔字符則使用默認的設置。

(2)字段選擇,包括添加字段、刪除字段、清空字段列表、導入字段和導出字段的功能。

點擊“添加”按鈕,彈出添加字段對話框,按提取需求填寫字段名稱和子字段名稱,如圖9所示。這里需要注意三點:①子字段代碼只需要填寫英文字母或數字,不需要填寫子字段分隔符;②子字段代碼的英文字母大小寫需要與MARC數據保持一致;③001和005字段不需要填寫子字段代碼。字段標識符和子字段代碼填寫完成后,點擊“確定”按鈕,字段將顯示在“已選字段”列表中,如圖10所示,用戶需要依次將提取的字段添加。

圖9 添加字段

圖10 已選字段

單擊“已選字段”列表中的某一行,點擊“刪除”按鈕,可以將該字段刪除,也可以雙擊該行進行刪除操作。點擊“清空列表”按鈕,“已選字段”中的內容將全部清除。

用戶添加完提取字段之后,為方便以后使用可以將字段列表導出。點擊“導出”按鈕,可以將“已選字段”列表中的內容導出為后綴為“.list”的文本文件。在下一次使用時,點擊“導入”按鈕,可以將該文本文件導入,不需要再一一添加字段內容。

(3)MARC數據查看。首先選擇MARC數據文件的編碼方式,根據文件的實際編碼方式選擇,否則可能會顯示亂碼;然后選擇要查看的MARC數據文件,點擊“查看”按鈕,顯示結果如圖11所示,這里將子字段分隔符用藍色方框代替,以方便查看。用戶可以點擊“上一條”“下一條”按鈕來查看上一條和下一條MARC數據,也可以輸入指定的數字,點擊“跳轉”按鈕跳轉到指定的MARC數據。

圖11 MARC數據查看

(4)MARC數據提取。在選擇MARC數據文件編碼方式和MARC數據文件之后,選擇要保存的Excel文件,點擊“提取”按鈕,會根據已選字段將MARC數據中的相應字段內容提取到Excel文件中。以提取001、200$a、200$f、210$a、210$c、210$d這5個字段為例,提取結果如圖12所示。該工具界面簡潔、易于操作,能夠滿足工作中對MARC數據提取的各種需求,已經被多人使用了多年,為工作提供了便利。

圖12 MARC數據提取結果

3.3 技術要點與實現

程序開發的關鍵點在于Excel文件的操作和MARC數據字段內容的提取。

(1)Excel文件操作

Excel文件操作包括Excel文件的創建、寫入和保存,筆者使用Office的Excel組件來操作Excel文件,先引入Excel組件,在COM組件庫中找到Microsoft.Office.Interop.Excel,將其添加到引用中。Excel文件操作的關鍵代碼如下所示:

//定義一個COM中空類型的對象

object missing=System.Reflection.Missing.Value;

//創建Excel對象

Microsoft.Office.Interop.Excel.Application app=new Microsoft.Office.Interop.Excel.Application-Class();

app.Application.Workbooks.Add(true);

//添加新工作簿

Microsoft.Office.Interop.Excel.Workbook book=(Microsoft.Office.Interop.Excel.Workbook)app.Active-Workbook;

Microsoft.Office.Interop.Excel.Worksheet sheet=(Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;

//設置單元格格式為文本格式

Microsoft.Office.Interop.Excel.Range myrange=sheet.get_Range(sheet.Cells[1,1],sheet.Cells[cols_line.Count+1,al_field.Count+1]);

myrange.NumberFormatLocal="@";/

/給單元格賦值

sheet.Cells[1,1]="序號";

//保存Excel文件

book.SaveCopyAs(file_xls);

//關閉工作簿

book.Close(false,missing,missing);

//退出Excel

app.Quit();

(2)MARC數據字段內容提取

首先根據記錄頭標計算出MARC數據中字段的個數,然后按照在MARC數據地址目次區中出現的順序,將所有的字段標識符和數據字段內容分別存儲,最后與提取字段進行匹配來提取字段內容。MARC數據字段內容提取的關鍵代碼如下所示:

//根據記錄頭標計算出MARC數據中字段的個數

data_pos=int.Parse(line.Substring(12,5));

address_len=data_pos-24-1;

address_num=address_len/12;

//將字段標識符存儲在al_label中

//使用字段分隔符將MARC數據分隔,數據字段內容存儲在al_content中

//要提取的字段標識符存儲在al_field中

//根據al_field中的字段標識符依次尋找對應的字段內容

//001、005字段和其他字段內容需要分別處理

//如果MARC數據中有相應字段,提取字段內容填入單元格中,如果沒有單元格為空

4 結語

MARC數據在圖書館中應用廣泛,是圖書館描述數據、存儲數據、處理數據的基礎。隨著圖書館事業的不斷發展,MARC數據始終作為元數據的標準之一,具有非常重要的作用。筆者開發的MARC數據提取工具為MARC數據的查看和提取提供了便利,在工作中的多次實踐證明了推廣該工具的可行性。目前該工具的功能還比較簡單,未來筆者將增加字段的修改、增加、刪除功能,將該工具的功能做進一步的完善,以便為工作提供更多的便利。

主站蜘蛛池模板: 天天色天天操综合网| 亚洲天堂在线免费| 99热这里只有免费国产精品 | 久久永久精品免费视频| 国产精品自拍露脸视频 | 91丝袜美腿高跟国产极品老师| 谁有在线观看日韩亚洲最新视频 | 亚洲品质国产精品无码| 狠狠亚洲五月天| 国产成人无码AV在线播放动漫| 少妇露出福利视频| 亚洲精品在线91| 日本尹人综合香蕉在线观看| 手机在线看片不卡中文字幕| 久久精品丝袜| 亚洲国产亚洲综合在线尤物| 亚洲第一成年网| 亚洲男人在线| 天堂岛国av无码免费无禁网站 | 亚洲美女久久| 狠狠亚洲婷婷综合色香| 色吊丝av中文字幕| av天堂最新版在线| 久久精品亚洲中文字幕乱码| 在线免费不卡视频| 亚洲a级在线观看| 制服丝袜一区二区三区在线| 狠狠色丁香婷婷| 久久精品女人天堂aaa| 亚洲一区二区三区在线视频| 在线高清亚洲精品二区| 日韩东京热无码人妻| 日本91在线| 免费无码又爽又黄又刺激网站| 免费欧美一级| 99精品热视频这里只有精品7| 天天摸夜夜操| 成人av专区精品无码国产| A级毛片高清免费视频就| 亚洲区视频在线观看| 国产精品亚洲综合久久小说| 日韩不卡高清视频| 精品自拍视频在线观看| 久久久久88色偷偷| 成人日韩欧美| 国产尤物jk自慰制服喷水| 在线观看免费人成视频色快速| 久久久久人妻精品一区三寸蜜桃| 国产精品自在拍首页视频8| 日本影院一区| 亚洲色欲色欲www在线观看| 亚洲不卡影院| 国产一级毛片yw| 国产丝袜第一页| 日本高清免费一本在线观看| 福利一区三区| 国产丝袜91| 美女裸体18禁网站| 91成人在线观看视频| AV无码一区二区三区四区| 色综合五月婷婷| 国国产a国产片免费麻豆| 亚洲天堂高清| 波多野结衣一区二区三区四区视频 | 免费看美女自慰的网站| 中文字幕人成人乱码亚洲电影| www.精品国产| 欧美国产日韩在线播放| 99福利视频导航| 精品无码一区二区三区电影| 亚洲欧美一区二区三区图片 | www.精品视频| 无码AV高清毛片中国一级毛片| 精品无码人妻一区二区| 精品人妻AV区| 亚洲人免费视频| 亚洲欧美另类中文字幕| 99偷拍视频精品一区二区| 91人人妻人人做人人爽男同| 国产欧美日韩视频一区二区三区| 免费国产黄线在线观看| 一本色道久久88亚洲综合|