处理标准机读目录数据的灵巧工具-MARCPRO

来源:互联网 发布:screw it 编辑:程序博客网 时间:2024/04/29 20:08
 
一、 前    
     自1991年《中国机读目录通讯格式》正式颁布、北京图书馆正式发行MARC数据以来,各图书馆和文献书目数据中心制作生产了数以百万计的机读目录数据,为图书馆界实现书目资源共享和联机编目奠定了良好的数据基础。
       在各图书馆的自动化管理系统中,数据格式标准化也日益受到重视,在学习掌握MARC格式的过程中,各图书馆也制作了数量众多的MARC数据。
       1995年底经修改的《中国机读目录格式使用手册》正式出版,它标志着我国图书馆书目数据标准化工作又向前迈进一步。新的标准较前具有更大的包容性,不仅适用于普通印刷体图书、连续出版物还可用于音像、地图、拓片、计算机等非印刷型文献。同时也更向国际化靠拢。
       随着图书馆书目数据的积累,对书目数据库的维护工作量也日渐增大。图书馆在制作书目数据过程中,由于对MARC格式的理解、掌握的细小偏差使得书目数据中隐含了一些不甚标准或规范的内容。由于标准的完善和修改,造成先后制作的数据不完全一致。这些问题的存在,需要图书馆对已有数据进行更新和修改。而靠手工逐条修改将耗时巨大,难以实现。为方便图书馆批量处理MARC数据,丹诚制作了专用工具软件MARCPRO。
利用MARCPRO,用户可以对MARC数据文件进行下述批处理操作:
     ※为所有记录增加一个相同的字段或子字段
     ※为一个特定的子字段赋值
     ※将记录中一个字段的内容复制到另一个字段
     ※删除指定字段
     ※在记录中移动字段位置
     ※成批地拆分连续的号码字段
     ※进行字符串的替换
通过批处理方式修改加工MARC数据,可以提高MARC数据维护的效率,也给新旧系统替换过程中对已有数据的处理提供了工具。
二、MARCPRO程序的使用
       MARCPRO由两个文件组成:可执行程序MARCPRO.EXE和配置文件MARCPRO.CFG。使用MARCPRO时,可在DOS环境下输入下述命令:
       MARCPRO [源数据文件名] [目标数据文件名]
       程序处理的源文件应是以ISO2709格式存放的MARC数据,程序执行后产生的目标数据文件也是以ISO2709格式存放的MARC数据。
MARCPRO.EXE文件运行时依据MARCPRO.CFG文件中的定义和描述进行数据转换。用户在在转换数据前应先根据处理要求修改MARCPRO.CFG 文件的内容。
MARCPRO.CFG是纯文本文件,可以在DOS环境下用EDIT或WINDOWS环境下的记事本等多种文本编辑器产生。编辑修改文件时,应注意不要在文件中加入任何排版控制字符和其它特殊字符。
MARCPRO.CFG文件由多个段落组成,每个段落由一个[ ]括起的小节名开始。小节名的内容是MARCPRO所支持的各种命令。小节名独占一行。
小节名下方可以包含一行或多行配置,每行配置描述一个被处理对象,即一个字段或子字段。下面是一个MARCPRO.CFG文件内容的实例:
; GIS DOS版数据转为DT-1000流通书目数据
[Move]
985$s=980$a
[Delete]
980
[Create]
981, 2="0"
[Move]
982$b=984$a
[Delete]
984
[Create]
983, 2="4"
985, 2="6"

MARCPRO.CFG文件的主要命令(小节名)有:
[Create] 产生(或覆盖)字段及其内容
[Delete] 删除字段或子字段
[Move] 替换字段或子字段
[Copy] 拷贝字段或子字段
[StrReplace, field] 字符串替换
[Split] 号码子字段拆分
[CopyGroup, dest, src] 复制重复的子字段组
[Cut] 截断字段或子字段
[AlignRight] 字段或子字段补齐指定位数
小节名及其配置内容都应从行首开始书写,如:
[Create]
905$a="211132"," "
982$d=“20020720”
801$a="NLC","**"," "
三、使用注意事项
1.    各命令小节可以重复,也可以交替出现;它们在MARCPRO.CFG中出现的顺序即是程序对数据的处理顺序。
2.    配置文件使用的保留字有:[Create],[Copy],[Delete],[Move],[Cut],
[StrReplace],[Split],[CopyGroup],[AlignRight]以及‘*’、‘$’、‘"’、‘=’、‘,’。如果需要在配置内容的小节名外、引号内使用保留字,可以在保留字前加反斜线,如“a/"b/,c”,表示配置的有效内容为:a"b,c。个
       3.配置的格式信息应该用半角符号书写(引号中配置的内容除外)。
       4.字段改名既可用[Create],也可以用[Move],但[Create]并不改变该字段在记录中的位置;[Move]不仅改变字段的位置,而且将覆盖新位置上的字段内容。
       5. "000"字段代表头标区。
四、应用举例:
1.[Create]       产生新字段(或替换已经存在字段)或子字段
等号左边是产生的字段或子字段名,右边定义其内容。每行定义一个字段或子字段,等号左边是字段或子字段名以及偏移量,等号右边是引号括起来的一项(字段)至三项(子字段)内容。
在定义字段时,需要在内容中包含指示符;定义子字段时,用单独一项内容定义所属字段的指示符。
子字段配置内容的第一项是字段或子字段名,第二项内容就是指示符,与前一内容间用逗号分隔;当指示符为“**”时表示用被替换字段的原指示符;若不存在旧字段,则指示符用配置内容的第三项。
000,22=“00”                            头标区的第22字符位(字符从0位开始计,应是通常所说的第23位,下同)开始两位字符替换为”00”
702,2=“1”                                将702字段的第二字符位替换位”1”,即:把702字段改为701字段
905$a=“211132”," "        将905$a子字段替换为指定的字符串。(本实例的作用是在制作数据时未加入905$a收藏馆代码,完成了一批数据后统一加入。)
982$d=“20020720”                 将读者证有效期定为”2002年07月20日”
801$a=“CN”,”**”,“ ”           将801$a子字段定义为”CN”;如果已经存在801字段则指示符保持不变,若是新产生的801字段则指示符为” “(两个空格)
2.[Delete]                  删除字段或子字段
每行定义一个字段或子字段,可删除重复的字段或子字段;支持通配符“*”。
801                                          删除801字段
-**                                           删除以”-”起头的字段, 如”-01”,”-09”字段等
200$A                                     删除200$A拼音字段
99*                                          删除"99"起头的字段,如"991","992"等
3.[Move]                 移动字段或子字段
将指定字段或子字段的内容(等号右边)拷贝到另一个字段或子字段中(等号左边),并删除源字段或子字段。如果目标已经存在,则将其覆盖。重复出现的字段或子字段,按出现的先后顺序进行操作。
701$a=700$a                          将700$a移到701$a,删除原700$a
986$a=985$a                          将985$a移到986$a,删除原985$a
300$a=304$a                          将304$a移到300$a,删除原304$a
4.[Copy]                    复制字段或子字段
将指定字段或子字段的内容(等号右边)拷贝到另一个字段或子字段中(等号右边),如果目标已经存在,则将其覆盖。重复出现的字段或子字段按出现的先后顺序进行操作。
008,3=100,9,15                       将100字段第9位字符开始的15个字符,拷贝到008字段的第3位字符开始,并覆盖相应位置的15个字符
008,18=102$a,2,2                   将102字段$a第二字符开始的2个字符,拷贝到008字段的第18字符位开始,并覆盖相应的两个字符。
008,31=100,27,1                     将100字段第27位字符开始的1个字符,拷贝到008字段的第31位字符,并覆盖相应位置的1个字符
905$d=690$a                          将690$a子字段的内容,拷贝到905$d子字段
5.[StrReplace, field]          字符串替换
在记录、字段或子字段范围内,把源字符串替换成目标字符串;field内容为空表示在记录范围内替换,非空表示在指定的字段或子字段范围内替换
[StrReplace]
   财经大学=财经学院        将源记录中出现的所有“财经学院”替换为“财经大学”
[StrReplace, 986]
   R=r                                    将986子字段中的所有“r”替换为“R”
[StrReplace, 905$d]
   $e=/                                   将905$d子字段中的“/”替换为“$e”
6.[Split]                 数字子字段拆分
对号码字段进行拆分,产生等号左边的目标字段;
源号码可以是单个号码、逗号分隔的多个号码,也可以是短横线连接的一段连续号码;如下列几种形式均可:
 905 $bB30451$bB30452
 905 $bB30455,B30456
 905 $b304700-8$b304900-2 
源号码的字段和子字段都可以重复;
目标字段的配置可以是一项,也可以是两项。如下所示:
906$h,$a=905$b                     将905$b子字段拆分,拆分结果为906字段 的若干子字段组;拆分后的登录号存放于906$h子字段中,而子字段组以$a为分隔;
986$a=905$b                          将905$b子字段拆分,拆分结果为986字段的若干子字段组,拆分后的登录号存放于906$a子字段中,子字段组以$a为分隔,这种配置也相当于: 906$a,$a=905$b
7.[CopyGroup,dest,src]      复制重复子字段组
将子字段组内容从src复制到dest ,src必须为子字段,作为源子字段组的分隔符;dest可以为字段或子字段。
[CopyGroup,037,906$a]
   $a=$h                                目标为字段,从906字段内以$a作为分割符
   $c=$C                               的子字段组中,拷贝子字段$h到037字段$a,$c拷贝到037$C中;重复的906子字段组产生重复的037字段。
[CopyGroup,906$a,037$a]
   $a=                                    目标为子字段,从037字段内以$a作为分割
   $h=$a                                符的子字段组中,拷贝子字段$a到906字段
   $C=$c                               $h,拷贝$c到906字段的$C;重复的037字段或子字段组转到同一个906字段,产生重复的子字段组,分隔符为$a,第一行定义$a的内容为空。
8.[Cut]                   截断指定的字段或子字段
[Cut]
   986$a=12,10                     将986字段的$a子字段从第12字符开始,截掉10个字符;起始字符从0开始,包含子字段标识符
[Cut]
   001=13,100                       将001字段从第13位开始,截掉100个字符;起始字符从0开始,包含字段名
9.[AlignRight]      将字段或子字段按右对齐方式补齐指定位数
[AlighRight]
   986$a=12,’0’                     将986字段的$a子字段按右对齐方式补齐12位字符,不足12个字符的左边补0;超过12个的字符被截断