admin 管理员组文章数量: 1184232
2024年3月12日发(作者:php下载网站的模板)
第30卷第5期玉林师范学院学报(自然科学)Vol.30No.5
2009年JOURNALOFYULINNORMALUNIVERSITY(NaturalScience)
基于
Delphi7
和
SQLSERVER2000
的
MARC
转换设计与实现
□桑开勇
1
,苏翠红
2
(1.玉林师范学院图书馆馆员,广西玉林537000)
(2.玉林师范学院教务处工程师,广西玉林537000)
【摘要】
针对广泛使于图书馆系统中的MARC格式的书目数据,分析了MARC的数据结构,
通过Delphi7成功的把MARC数据导入到SQLSEVER2000数据库中,使得缺乏开放性MARC数据转变
成开放的数据库格式,为WEB开发和转化成其他数据格式提供成为可能.
【关键词】
图书馆;MARC;SQLSERVER2000
【中图分类号】TP311.32【文献标识码】A【文章编号】
1004-4671(2009)05-0111-03
TheDesign
Based
and
on
Realization
Delphi7and
ofMARC
SQLServer
Format
2000
Transfer
SANGKai-yong
1
,SUCui-hong
2
(ian,Library,YulinNormalUniversity,Yulin,Guangxi537000)
(er,hingAdministration,YulinNormalUniversity,
Yulin,Guangxi537000)
Abstract:InconsiderationofthebibliographicdatawithMARCformappliedinthe
librarysystemwidely,thisarticleanalyzesthestructureofMARCdata,leadsMARCdata
sMARCdatabecome
anopendatabaseformat,thusmakingitpossibletoexploitWEBandtobetransformed
intootherdataformat.
Keywords:library;MARC;SQLServer2000
M
ARC(MachineReadableCatalog机器可读范围的信息挖掘、转换,也难以与其他领域的数据
目录),它作为目前国际上普遍采用的书格式或数据处理系统互操作.本文仅就如何借助于
目数据格式,在各图书馆管理系统中现已Delphi和SQLSERVER2000系统开发环境,实现对
被普遍采用,促进了图书馆书目数据的规范化、统MARC记录任意字段进行读以及转化成其它数据格
一化.但MARC严重缺乏开放性,各类信息在具体式作一些探讨.
系统条件限制下用专门但由于每条书目的全部信息
都反映在一条MARC记录中,语言定义并组织为内
一、MARC格式分析
部结构和格式,难以有效进行机器支持的检索、处机读MARC格式是GB/T2901(ISO2709)的
理和交换,难以进行跨文献单元、数据类型和系统一个特定形式,它对每个用于交换的书目记录规定
计
算
机
应
用
与
研
究
2009年玉林师范学院学报
第5期
了必须遵循的标准记录结构
[1]
.其标准构成为:
a)记录头标:由24个字符构成.
b)地址目次区:区内含有一个或多个目次
项,每一个目次由三位数字的字段标识符(简称字
段号)以及字段长度和字段起始位置(从第一个数
据字段算起)三部分构成.
c)数据字段区:由若干定长和变长字段构
成,每个字段之间由字段分隔符隔开.
d)记录结束符:用以标识记录结束和与下一
个记录的区分.
记录结构图如表1:
表1MARC数据格式
记录头标地址目次区数据字段区记录结束符
记录头标:位于MARC记录的首部,其长度均
为24个字符.其中,第0-4位字符指示MARC记录的
长度,第12-16位指示MARC记录数据起始地址.
计
地址目次区:紧跟记录头标区之后.由若干目次项
算
组成,每个目次项固定为12个字符长,描述的是一
机
个字段,由三个部分组成:字段标识符(三位数
应
用
字)、字段长度(四位数字)、字段的起始字符位
与
置(五位数字).除此之外,不允许有其他字符.在
研
地址目次区之后用字段分隔符IS2(GB1988(ISO
究
646)的1/14)结束.地址目次区结构如表2
表2地址目次区结构
字段号
字段起始字
(3位)
长度符位置……
字段
(4位)(5位)
分隔符
地址目次区目次项1目次项2其他目次项
数据字段区:除001和005字段由数据和一个
字段分隔符组成外,每个字段(00-字段除外)仅
由两个指示符以及其后的一个或多个子字段组成.
字段中最后一个子字段的结尾为字段分隔符(GB
1988(ISO646)的IS2).每个子字段的开头为子
字段标识符,即一位字段分隔符(GB1988(ISO
646)的IS1)和一位子字段代码(字母或数字构
成).在子字段标识符之后是代码数据或正文数据.
(如表3,表4)
表3数据(控制)字段(00—)结构
数据字段分隔符
表4变长字段(010至999结构)
指示符1指示符2$a数据……字段分隔符
指示符子字段子字段其他子
标识数据字段
二、算法设计与实现
1、数据库的建立.在administrator用户,启动
SQLSERVER2000的企业管理器,创建一数据库,
在新创建数据库再创建sqlmarc的表.为了方便对各
个字段的理解,以及SQL2000表中列的命名规则,
把010b列取名为b010(如图1)
图1sqlmarc表字段图
2、MARC数据导入到SQLSERVER2000数
据库过程,实质上就是解析MARC记录,从中提
取所需的MARC对象,并记录的形式添加到SQL
SERVER2000数据库中,从而生成数据的方框图如
图2
读取Marc文件
分别读取Marc文件的每一行,直至文件结束语
读取记录标
读取地址目次区
判断是何字段
TF
判断是何子字段
TF
读取数据字
段区数据
追加到SQL
2000表中
图2程序方框图
现在以读取010国际标准书号字段中的$a国标
标准书号和$d获得方式和/或价格为例部份核心代码.
ethen
begin
桑开勇,苏翠红基于Delphi7和SQLSERVER2000的MARC转换设计与实现
datapath:=me;//打开
Marc数据文件
Filepath:=ExtractFileName(datapath);
:=filepath;
assignfile(Marc_file,datapath);
reset(Marc_file);
try
whilenotEof(Marc_file)do
begin
readln(Marc_file,Marc_rec);//分别读取
Marc数据文件中每条记录.
val(copy(Marc_rec,1,5),strnum,j);//从记
录头标中读取本记录长度.
str1:=copy(s,1,5);
strnum1:=length(Marc_rec);//计算本
记录的长度.
ifstrnum=strnum1then//判断本记录是否完整.
begin
val(copy(Marc_rec,13,5),strnum,j);//读
取记录头标中的数据基地址
strnum4:=((strnum-24-1)div12);
//计算本记录一共有多少字段.
fori:=1tostrnum4do
begin
val(copy(Marc_rec,24+(i-1)*12+4,4),
strnum2,j);//分别取出每个字段长度.
val(copy(Marc_rec,32+(i-1)*12,5),
strnum3,j);//分别取出每个字段起始字符位置
/*ifcopy(Marc_rec,25+(i-1)*12,3)='010'then
//判断该字段是否是010字段
begin
s1:=copy(Marc_rec,strnum+strnum3,strn
um2);//取010字段;
s2:=copy(s1,4,1);//取子字段起始标识
s3:=s2+'a';//取$a标识符;
num1:=pos(s3,s1);//取010$a的起始位置
field1:=copy(s1,num1+2,length(s1));
num2:=pos(s2,field1);//获是010$a
子字段的长度.
【参考文献】
[1]国家图书馆编.新版中国机读目录格式使用手册[M].北京:
北京图书馆出版社2004年3月第1版.
[2]高峰.MARC数据转换为XML文档的设计与实现[J].现代
图书情报技术:2005.(1):22-25.
[3]陈凤岩,王菁.基于XML的MARC系统转换设计与实现[J.]
ifnum2>0then
field1:=copy(field1,1,num2-1)
//获取010$a子字段内容
else
field1:=copy(field1,1,length(field1));
s3:=s2+'d';//取$d标识符
num1:=pos(s3,s1);//取010$d的起始位置
field6:=copy(s1,num1+2,length(s1));
num2:=pos(s2,field6);
//获是010$d子字段的长度
ifnum2>0then
field6:=copy(field6,1,num2-1)
//取010$d子字段内容
else
field6:=copy(field6,1,length(field6));*/
end;
从以上代码中,如要多选几个字段,只需复制
/*……*/之间的代码放在“*/”的下一行并把黑体
字部分改成相对应的字段和子字段即可.把已获取
的子字段内容存在变量中,用insertinto表名(字
段1,字段2,……,字段n)Values(变量1,变量
2,……,变量n)命令插入SQL2000中的表中.
当Marc数据导入到SQL2000后,可以用2条简
单的命令导出为常用的Excel和DBF格式.
导出Excel格式关键的语句为
tionString:='Provider=Mi
.4.0;DataSource=+’文件名’+';
ExtendedProperties=Excel8.0;PersistSecurity
Info=False';
导出DBF格式关键的语句为
tionString:='Provider=Mi
.4.0;DataSource='+’文件名’
+';ExtendedProperties=dBase5.0;PersistSecurity
Info=False';
三、结语
本文提供的代码在Delphi7和SQLSERVER
2000都能实现,此方法在我馆的原图书荐购系统中
得到应用.■
情报学报:2003.22(6).:671-675.
[4]康祥顺,张小刚等编著.Delphi案例开发集锦[M].北京:电
子工业出版社:2005.8.
【收稿日期2009-04-21】
【责任编辑谢文海】
计
算
机
应
用
与
研
究
版权声明:本文标题:基于Delphi7和SQL SERVER 2000的MARC转换设计与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1710186102a561431.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论