开源代码库
欢迎回到Nooks&Crannies! 在为我的婚礼休假一个月之后,我一直在为即将到来的专栏挖掘一些有趣的地方。 这个月,我将看一些开放源代码库,开发人员可以使用它们来处理MARC格式的记录。
MARC新手的一些背景知识
MARC代表机读目录记录。 这种格式最早是在1960年代为美国国会图书馆开发的,目的是促进图书馆之间书目记录的交换。 到1970年代中期,它已成为一种国际标准,已在世界范围内使用。
MARC格式有多种变体。 MARC21是1990年代USMARC和CANMARC的合并,当时使用的是美国和加拿大的变体,其他国家也有自己的格式。 在欧洲大部分地区,UNIMARC是最常见的变体。 所有的这些记录都格式化一样,用的是用来包含的信息标签的结构, 目录 ,告诉哪些变量是在记录,它们位于何处。
每个标签在每种格式下都表示特定的含义。 例如,在MARC21书目格式中,245标签保存有关作品标题的信息。 其他标签中还包含其他信息,包括出版商,作者,实体书的大小,出版日期和主题。
如果仅将记录打印出来,记录的格式将很难阅读。 它最初是为通过9磁道磁带进行串行交换而设计的,并且在我的职业生涯的早期,即1990年代,这种介质仍在使用。 记录的前五个字节是数字,并告诉您记录的长度(以字节为单位),包括这五个字节。 聪明的现代书呆子会立即意识到这种结构的局限性:记录的长度不能为100,000个字节。 接下来是标签目录,告诉要查找的标签以及每个标签从哪个字节开始。 之后是标签数据,其后的下一个字节是下一条记录的第一个字节。 领导者/目录/标签结构通常在ISO-2709中定义; MARC21或UNIMARC是定义标签含义的格式。
是的,按照现代标准,这是一种设计不良的格式。 是的,它需要以最坏的方式进行更新,但这是另一篇文章的主题。 在本文中,我将向您展示三个代码库,您可以使用它们来操纵MARC记录,而不必了解奥术标签目录的所有细节。
的Java:MARC4J
MARC4J允许创建迭代器来读取输入流(例如文件),并使用它在流中找到的MARC21或UNIMARC记录进行操作。 当然,也有记录写入工具,以及用于详细检查记录的迭代器。 这是一个快速的示例,它将读取记录文件,并且如果字段245中子标题a的标题以字母J开头,则将其写入另一个文件:
import
org.marc4j.MarcReader
;
import
org.marc4j.MarcStreamReader
;
import
org.marc4j.MarcStreamWriter
;
import
org.marc4j.marc.Record
;
import
org.marc4j.marc.DataField
;
import
org.marc4j.marc.Subfield
;
import
java.io.InputStream
;
import
java.io.OutputStream
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
public
class JMarcExample
{
public
static
void main
(
String args
[
]
)
throws
Exception
{
InputStream in
=
new
FileInputStream
(
"inputfile.mrc"
)
;
O