Marc数据格式和数据库格式的转化体会

首先感谢 CSDN 上的 djkhym(hym) ,给我的巨大的帮助,借鉴了他的程序的思路。

Marc ( machine readable catalogue )数据,机读目录数据。 Marc 格式和数据库的转化,是图书系统里的重要部分,也是核心技术。现在网上 mar 数据的资料很少,和数据库的转换的资料就更少了。。。。。我主要参考了《中国机读目录格式使用手册》和 hym 的程序,为了以后大家少走弯路,所以我写了这个体会。(呵呵,现在网上转一条 marc 数据要 2 毛钱呢)

marc 数据的基本格式,大家都可以在《中国机读目录格式使用手册》中详细的查询。这里我简单的说说。本 Marc 数据格式遵循 GB/T 2901(ISO 2709) 的标准,扩展名是 .iso 。如下是记录 marc 的 iso 文件中的一行,也就是一条 marc 数据。

00806nam0 2200229 450 001000900000010003500009092002000044100004100064101000800105102001500113105001800128106000600146200003100152210003300183215001500216330020500231333008500436606000500521690000800526701001500534801002700549?S7240011? ­a7-5034-1525-8­b 精装 ­dCNY130.00? ­aCN­b01-724-0011? ­a20021211d2002 ekmy0chiy0121 ea? ­achi? ­aCN­b110000? ­ay z 000yy? ­ar?1 ­a 邓小平理论辞典 ­f 李长福主编 ? ­a 北京 ­c 中国文史出版社 ­d2004.7? ­a0720­d16 开 ? ­a 本书是一部力求全面、系统、准确反映邓小平理论科学体系和检索邓小平理论重要观点,供广大党员、干部及群众学习、研究、宣传邓小平理论的工具书。全书在反映、阐述邓小平理论的同时,还涵盖了马克思列宁主义、毛泽东 ? ­a 思想和“三个代表”重要思想的核心内容,体现了科学社会主义理论一脉相承的发展脉络。 ? ­a? ­a­v4? 0­a 李长福主编 ? ­aCN­bS7240011­c20040709?

记录结构:记录头标 、地址目次区 、数据字段区、记录结束符

00806nam0 到 450# 是记录头标 (# 代表空格 )

001000900000 到 801002700549@ 是地址目次区 (@ 代表字段分隔符 IS2)

S7240011 到 20040709@ 是数据字段区

% 是记录结束符 (% 代表记录结束符 IS3)

具体的每一个字节都有特殊的含义,大家可以看书,我这里讲讲自己转换的体会。

1. 字段长度的计算: 0-4 位是代表记录的总长度,注意包含了空格和分隔标志符。英文字符 1 位,中文字符 2 位。注意 asp 中 len(“ 我 ”) 结果是一位,故 vb 中这样写长度计算: LenB(StrConv(st1, vbFromUnicode)) ,再用 format(str1,00000) 来格式化输出。

2. 几个符号:

$: 字字段标识符 IS1

@ 代表字段分隔符 IS2

% 代表记录结束符 IS3

这是人为的标记,便于学习和观看。在实际系统里一般用这几个字符代替 :

$--------chr(31)

@--------chr(30)

%--------chr(29)

还有个空格很重要,每个字段间的空格都是严格规定的,所以学习的时候用 # 来代表空格。如头标: 01071nam0#2200277###450#

3. 地址目次区的理解:人为添加,和;的分隔,就很明显了。

001,0013,00000;005,0017,00013; ………………………… 801,0022,00771@

这里 001 , 0013 , 00000; 是表示数据字段区的第一个字段,字段号: 001 ,长度: 0013 ,开始的位置: 00000 。后边的类推,就是位置在加。

Dbtomarc 的计算方法,先写数据字段区,再一个字段一个字段的算,可以开一个数组: Block(i, 3) , Block(i, 0) 为标识, Block(i,1) 列为宽度, Block(i, 3) 列位置 ,I 是指字段的个数。

Marctodb 就是反过来了。。先读,在去截数据字段区。

地址目次区一定要算对,否则电脑可不认识,后边的数据就错位了。

4. 数据字段区:

按字段一个个的写入(读出)就可以了。注意一点:

[email protected]@##$a7-80142-191-4$dCNY46.00@ ………………………………………… @%

就是空格个数和分隔符号的使用,一定要注意,否则格式就错了,不能机读,这可是我的教训啊。。。。

5 ,将转换的数据库字段作成配置文件,可以选择的转换,便于程序的通用。

和编辑约定规则,如数据库记录中:书名 [ 版次 ] 、书名 < 丛书 > 这样获取版次,判断是否是丛书。还有是就编著者不超过 3 个……看你程序设计的通用性了。

6 .拼音的实现,我是查的数组实现的,不知道有没其他的好办法。。。

7. 再说一点就是,这种数据转化重要的是吃透格式的要求,其他的算法就是查询写入,看你的功底了。我喜欢利用数组,呵呵。。。

先写这点吧。。。。。。。。。。。。:)

一风一云( http://blog.csdn.net/wzgme

2004.08.22

----------------今天是七夕吧,情人节快乐!!!!^_^

Published At
Categories with Web编程
Tagged with
comments powered by Disqus