国家图书馆OPAC检索结果的CNMARC数据的重新组装_黄晓辉

更新时间:2023-05-11 17:18:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

国家图书馆OPAC检索结果的CNMARC数据的重新组装

黄晓辉

(广东建设职业技术学院图书馆,广东广州510450)

摘要:详细讨论了对国图OPAC的页面MARC数据的重新组装的程序思路,文中的代码使用C#语言,基于.net框架实现。

关键词:国图;CNMARC;C#

笔者在日常编目工作中经常会用到国家图书馆OPAC的检索服务,因为国图收藏的图书品种很齐全,它的CNMARC数据权威,而更重要的是任何人都可以通过免费使用它提供的检对于经费不足而没有索服务获取完整的CNMARC数据。因此,

充分利用国图OPAC购买收费CNMARC数据源的图书馆来说,

的检索服务也许是最佳的数据准备途径,而技术上,这里面要解决的是两个方面,即收集和重新组装。笔者在《国图OPAC的一文中详细讨论了前者的实MARC页面数据下载的编程思路》

现思路,本文将主要讨论后者。

国图检索结果的MARC格式是以如下形式存在的:<tr>

<tdclass=td1id=boldwidth="5%"nowrap>字段名和指示符</td>

<tdclass=td1>字段内容</td>

</tr>

通过利用正则表达式等技术,我们可以将实际内容提取出来用以下结构保存:

publicstructNameContent{

publicreadonlystringNCKey;//存储字段名和指示符

publicreadonlystringNCValue;//存储字段内容)publicNameContent(stringncKey,stringncValue{

NCKey=ncKey;

NCValue=ncValue;}

}

但是在提取之前,还要将存在的HTML特殊字符转换成相应的字符。之后所有字段数据可以保存到一个List<Name

(allNameContents)里,对allNameContentsContent>类型的对象

进行处理以生成标准CNMARC逻辑上包括以下环节。

}

()=="LDR")if(fn.ToUpper

此时还不完整,还需处理ldr=fv;//获取记录头标,

(fn[0]>'8')if

continue;//排除没用的字段

))if(!(fn[0]=='0'&&fn[1]=='0'{//只对010之后的

字段处理指示符

)if(fn.Length==4

)+"\x0020"+fv;//对fv=fn.Substring(3,1

未定义的位至空位,下同

)if(fn.Length==5

(3,2)+fv;fv=fn.Substring

)if(fn.Length==3

fv="\x0020"+"\x0020"+fv;

(fv);并//去除所有子字段标识符后面的空格,fv=CorrectFC

将'|'转换为(char)31

fv+="\x001E";//加入字段分隔符

(newNameContent(fn,fv));//填充fnfvfnfv.Add

}

这里要说明一下CorrectFC函数,该函数如下:

(stringfieldContent)publicstaticstringCorrectFC{

(?'sfi'[0-9A-Za-z])stringpat="\\|\\s";\\匹配形如"|a

"的子串

){returnRegex.Replace(sfv,pat,delegate(Matchm();});return"\x001F"+m.Groups["sfi"].ToString

}

2对处理后的目标字段排序

为确保所有字段有序,有必要对fnfv排序。而为了对

NameContent类型排序,有必要定义一个实现IComparer<该类只要提供下面这个方NameContent>接口的类NCComparer,

法就行,(NameContentx,),考虑publicintCompareNameContenty到篇幅,不列出实现代码。那么排序的代码如下:

(newNCComparer());fnfv.Sort

1对字段的处理

首先,提取出来的字段数据中并不是所有字段都有用,里面存在一些如“CAT”“OWN”等的字段,可以限定一个选取范对符合选取范围的,接着是处围,比如只选取801之前的字段,理指示符,只需对不是“00x”形式的字段进行处理,方法是将可以NCKey中的指示符部分提取出来与字段内容串接。因此,

遍历allNameContents执行下面代码:

();List<NameContent>fnfv=newList<NameContent>//存储

目标字段名-字段对

stringldr="";//记录头标

)for(inti=0;i<allNameContents.Count;i++{

stringfn=allNameContents[i].NCKey,fv=allName

Contents[i].NCValue;

组装各个区,并处理记录头标3计算目次区,

这是最后一个环节,首先遍历fnfv,计算各个字段长度、起

始位置,组装地址目次区和数据字段区,然后根据前面的计算值处理记录头标,最后组装整个CNMARC记录:

intcurPos=0;//当前位置

stringfAddrsSection="",fDataSection="";//分别存储地址目次区和数据字段区

)for(inti=0;i<fnfv.Count;i++{

(下转第44页)

该化合物在一定条件下才有导电性,③在溶液中或熔化状态

“或”不用“和”,如:下,二者有一即可,概念中用NaOH晶体虽然

不导电,但满足(1)是化合物(2)NaOH在水溶液中或熔化状态下能导电,所以NaOH是电解质。而NaOH溶液不是电解质,因

因为它是单质。在教学为它是混合物,也不能说Fe是电解质,

中,若将较复杂的难以理解的概念逐字逐句剖析,能及时纠正学生的误解,又能抓住概念的特征,使学生便于理解,又便于掌

都认为只要背出就可以握。很多学生在学习化学基本概念时,

了,其实不然,背过了不会灵活使用,等于没有掌握,其根本原因是在于没有正确理解好概念的内函和外延,因此要解决这一矛盾,教师在课内讲解概念时,应进行认真剖析,着重引导学生去发现概念中的关键字词,去剖析这些关键的字词,从不同的角度去讲解概念,使学生透彻理解所讲的概念,达到应用自如的目的。

用“问题”引导学生学习化学概念,使学生在积极思维的过程中深刻理解概念。教师应该对课堂提问有新的认识和理解,要让学生“敢问”、“会问”、善于“发问”。引导学生积极参与探究活动,使学生真正成为学习的主体。尤其是不要怕学生上课讨论会浪费时间,讨论法可以使学生各抒己见,从讨论中受到启发,这种教学方法,活跃课堂气氛,调动了学生参与教学的积极

教师起着引导、指导、点拨、评价性,效果较好。在探究过程中,

亲自去发现问题,使想象能力得的主导作用。学生通过讨论中,

到了培养;在探究中发表自己的见解,培养了表达能力;归纳总结,促成学生的自学能力,分析综合能力得到锻炼与提高。通过

动口等活动,学生的主体作用得到了发挥。教师可学生的动脑、

以通过学生提到的问题及时地对教学做出调整。在教学过程中,教师应积极引导和鼓励学生自己去发现问题,提出问题。用“问题”引导学生学习化学概念是培养学生问题意识的好方法。学习目的最终在于应用,通过适当的练习,能达到巩固、深化概

解释一些实际问题,是强化对念的目的。应用所学知识来分析、

所学知识的理解和记忆、提高分析与解决问题的能力的重要环节,让学生在习题训练中会应用化学基本概念,从而正确地理掌握化学概念。解、

从上面我们可以看到,化学概念不但要背,而且一定要理吃透。重视每一个概念的前提条件、描述对象、性质特点,应解、

用时准确分析,确保概念解题的正确率。在化学基本概念教学过程中,要依据高中学生认知特点和思维能力,尽可能做到课堂教学深入浅出,通俗易懂,通过对实验和事实进行分析形成概念,并引导学生在学习过程中不断地理解和加强记忆,再把基本概念运用到解题和生活实践中,不断加深对概念的理解,提高学生的学习能力。参考文献:

东北师范大学,[1]王淑华.谈高中化学概念的教学策略[D].长春:2009.

(5)[2]张经童.新课程背景下化学学习策略[J].教学月刊,2008.

2.2.4从学生记忆中巩固化学基本概念

记忆是理解的前提,要准确理解概念,必须强化记忆。为了

取得最佳记忆效果,需要用自己的语言去精炼定义,浓缩要点。提示学生把握关键的字和词。为了深刻领会概念的含义,教师要提醒学生对概念论述时用词的严密性和准确性,通过反复的读,找出概念的关键词或字,这样有利于培养学生严密的逻辑

关于催化剂的概念,思维习惯,有助于把握概念的实质。例如,

“改变”是这个概念的关键,先让学生思考“改变”应该怎样其中

理解?通过学生回答并进一步强调改变包括“加快”和“减慢”两层含义。不然大部分学生会在做题时出现错误。因为这一概念引出是用KClO3制取氧气时加入MnO2后,在较低的温度下迅速放出氧气,这就会使学生产生错觉,催化剂只是加快化学反应速率,导致解题时产生失误。教学中要多把化学概念与生活、生产联系,不仅让学生觉得有趣、有用,而且在记忆中又一次巩

综固了概念,在学生熟记化学基本概念的基础上,再通过分析、

合、概括来巩固化学基本概念的记忆,会更加牢固而且持久。

2.2.5通过问题探究巩固化学基本概念

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

(上接第52页)

记录头标

stringmarcStr=ldr+fAddrsSection+fDataSection+"

\x001D";//组装MARC记录至此,完成了标准CNMARC记录重新组装的整个过程,生成的CNMARC字符串可以追加写入文件。

)intcurFLength=Encoding.GetEncoding(936.GetBytes

(fnfv[i].NCValue).Length;)+fAddrsSection+=fnfv[i].NCKey.Substring(0,3

("D4")+curPos.ToString("D5");curFLength.ToString

fDataSection+=fnfv[i].NCValue;

curPos+=curFLength;}

//加入字段分隔符fAddrsSection+="\x001E";

)intrecordLength=24+Encoding.GetEncoding(936.

(fAddrsSection)GetBytes.Length+))Encoding.GetEncoding(936.GetBytes(fDataSection.

Length+1;//记录总长度

("D5");//前5位,下stringldr_0_4=recordLength.ToString面类似

(5,7);stringldr_5_11=ldr.Substring

)("stringldr_12_16=(24+fAddrsSection.Length.ToString);D5"//计算数据基地址

(17,7);stringldr_17_23=ldr.Substring

ldr=ldr_0_4+ldr_5_11+ldr_12_16+ldr_17_23;//组装

4结语

上文详细讨论了重新组装收集自国图OPAC检索页面的

如CNMARC数据的各个逻辑环节,但某些细节尚未给出代码,这些仍需要在编写代码时完善。NCComparer类的实现等,参考文献:

[1][作者不详]国家图书馆联机公共目录查询系统[OL].http:///F.

[2][作者不详]微软MSDNLibrary[OL].

北京图书馆[3]国家图书馆.新版中国机读目录格式使用手册[M].北京:出版,2004.

作者简介:(1981-),男,黄晓辉2005年毕业于华南师范大学信息管理与信息系统专业,助理馆员,广东建设职业技术学院图书馆。

本文来源:https://www.bwwdw.com/article/psae.html

Top