书目转储文件格式 - DigitalPlatform/dp2 GitHub Wiki
书目转储文件,是一种用于存储和交换书目信息、册信息、订购信息、期信息、评注信息、数字对象文件的综合数据格式。
文件名的扩展名部分一般为 .bdf。
书目转储文件格式最初是为 dp2 系统开发的,但因为它具有很强的通用性,所以我们也推荐给图书馆行业其它软件使用。dp2 系统的数据库记录可以导出为这个格式;第三方软件也可以提供导出到这个格式的功能,这样数据就可以在不同的软件系统之间迁移。数据备份也可以用这个格式。
下面是书目转储文件的基本结构(省略号表示略去的部分):
<?xml version="1.0" encoding="utf-8"?>
<dprms:collection xmlns:dprms="http://dp2003.com/dprms">
<dprms:record>
...
</dprms:record>
<dprms:record>
...
</dprms:record>
<dprms:record>
...
</dprms:record>
...
</dprms:collection>
可以看出,XML 结构的根元素是一个 dprms:collection 元素,其下有若干个 dprms:record 元素。每个 dprms:record 元素代表一个书目记录和下属功能记录的集合。可以理解为,册记录,订购记录,评注记录等,是书目记录的子记录。后面会一一介绍这些细部结构。
dprms:record 的结构如下:
<dprms:record>
<dprms:biblio path="net.pipe://localhost/dp2library/XE?中文图书/626" timestamp="1f5834e33cf8d4080000000000000314">
<unimarc:record xmlns:dprms="http://dp2003.com/dprms" xmlns:unimarc="http://dp2003.com/UNIMARC">
...
</unimarc:record>
</dprms:biblio>
<dprms:itemCollection>
...
</dprms:itemCollection>
</dprms:record>
可以看出,它的下级有一个 dprms:biblio 元素,负责存储一条书目记录内容。biblio 元素具有 path timestamp 属性,分别存储书目记录在数据库中的路径,和时间戳。
dprms:record 的下级通常还有一个 dprms:itemCollection 元素,这是若干册信息的一个容器。
record 元素的下级还可能有 dprms:orderCollection、dprms:issueCollection 和 dprms:commentCollection 元素。分别表示订购记录、期记录、评注记录的容器。如果不存在这些记录,可以省略这些容器元素。
下面是一个书目部分的片段例子:
<dprms:biblio path="net.pipe://localhost/dp2library/XE?中文图书/619" timestamp="1f5834e33cf8d4080000000000000314">
<unimarc:record xmlns:dprms="http://dp2003.com/dprms" xmlns:unimarc="http://dp2003.com/UNIMARC">
<unimarc:leader>01009nam0 2200265 45 </unimarc:leader>
<unimarc:controlfield tag="001">0192000622</unimarc:controlfield>
<unimarc:datafield tag="010" ind1=" " ind2=" ">
<unimarc:subfield code="a">7-301-00967-4</unimarc:subfield>
<unimarc:subfield code="d">$7.60</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="100" ind1=" " ind2=" ">
<unimarc:subfield code="a">19920115d1990 em y0chiy0121 ea</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="101" ind1="0" ind2=" ">
<unimarc:subfield code="a">chi</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="102" ind1=" " ind2=" ">
<unimarc:subfield code="a">CN</unimarc:subfield>
<unimarc:subfield code="b">110000</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="105" ind1=" " ind2=" ">
<unimarc:subfield code="a">y z 000zy</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="106" ind1=" " ind2=" ">
<unimarc:subfield code="a">r</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="200" ind1="1" ind2="0">
<unimarc:subfield code="a">缀玉集</unimarc:subfield>
<unimarc:subfield code="A">ZHUI YU JI</unimarc:subfield>
<unimarc:subfield code="e">北京大学中文系研究生论文选编</unimarc:subfield>
<unimarc:subfield code="E">BEI JING DA XUE ZHONG WEN XI YAN JIU SHENG LUN WEN XUAN BIAN</unimarc:subfield>
<unimarc:subfield code="f">严家炎,袁行霈主编</unimarc:subfield>
<unimarc:subfield code="F">YAN JIA YAN , YUAN XING PEI ZHU BIAN</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="210" ind1=" " ind2=" ">
<unimarc:subfield code="a">北京</unimarc:subfield>
<unimarc:subfield code="c">北京大学出版社</unimarc:subfield>
<unimarc:subfield code="d">1990.2</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="215" ind1=" " ind2=" ">
<unimarc:subfield code="a">596页</unimarc:subfield>
<unimarc:subfield code="d">20cm</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="330" ind1=" " ind2=" ">
<unimarc:subfield code="a">本书是北京大学中文系一九八八届博士、硕士优秀学位论文的选集,是这届毕业生在古代文学、现当代文学、文艺理论、语言学等诸领域所取得的最新研究成果。</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="540" ind1="1" ind2=" ">
<unimarc:subfield code="a">缀玉集 北京大学 研究生</unimarc:subfield>
<unimarc:subfield code="A">ZHUI YU JI BEI JING DA XUE YAN JIU SHENG</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="606" ind1=" " ind2=" ">
<unimarc:subfield code="a">文学研究</unimarc:subfield>
<unimarc:subfield code="y">中国</unimarc:subfield>
<unimarc:subfield code="x">文集</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="606" ind1=" " ind2=" ">
<unimarc:subfield code="a">汉语-语言学</unimarc:subfield>
<unimarc:subfield code="x">文集</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="606" ind1=" " ind2=" ">
<unimarc:subfield code="a">语言学-汉语</unimarc:subfield>
<unimarc:subfield code="x">文集</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="690" ind1=" " ind2=" ">
<unimarc:subfield code="a">I-53</unimarc:subfield>
<unimarc:subfield code="v">三版</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="692" ind1=" " ind2=" ">
<unimarc:subfield code="a">42.083</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="701" ind1=" " ind2="0">
<unimarc:subfield code="a">严家炎</unimarc:subfield>
<unimarc:subfield code="A">YAN JIA YAN</unimarc:subfield>
<unimarc:subfield code="4">主编</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="701" ind1=" " ind2="0">
<unimarc:subfield code="a">袁行霈</unimarc:subfield>
<unimarc:subfield code="A">YUAN XING PEI</unimarc:subfield>
<unimarc:subfield code="4">主编</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="801" ind1=" " ind2="0">
<unimarc:subfield code="a">CN</unimarc:subfield>
<unimarc:subfield code="b">NLC</unimarc:subfield>
<unimarc:subfield code="c">19920115</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="997" ind1=" " ind2=" ">
<unimarc:subfield code="a">9787301009673|北京大学中文系研究生论文选编,缀玉集|严家炎,袁行霈|北京大学出版社,1990</unimarc:subfield>
<unimarc:subfield code="h">d1bf70213fe3cf99d32600b1e371bd21</unimarc:subfield>
<unimarc:subfield code="v">0.03</unimarc:subfield>
</unimarc:datafield>
<unimarc:datafield tag="998" ind1=" " ind2=" ">
<unimarc:subfield code="a">2222</unimarc:subfield>
<unimarc:subfield code="u">2015-10-19 00:21:22Z</unimarc:subfield>
<unimarc:subfield code="z">supervisor</unimarc:subfield>
</unimarc:datafield>
<dprms:file id="0" usage="test" xmlns:dprms="http://dp2003.com/dprms" _timestamp="03e1d794b7dbd2080000000000000a4b" _metadataFile="中文图书_619_object_0.met" _objectFile="中文图书_619_object_0.bin" />
<operations>
<operation name="create" time="Mon, 19 Oct 2015 00:21:22 +0800" operator="supervisor" />
<operation name="change" time="Thu, 22 Oct 2015 21:54:14 +0800" operator="supervisor" />
<operation name="change" time="Sun, 10 Sep 2017 19:12:35 +0800" operator="supervisor" />
<operation name="change" time="Sun, 10 Sep 2017 19:12:55 +0800" operator="supervisor" />
</operations>
</unimarc:record>
</dprms:biblio>
可以看出,里面用 unimarc:record 元素,承载了一条 UNIMARC 格式的 MARC 记录。所采用的格式是 MARCXML 格式。
但 unimarc:record 元素下,并不是全部元素都是和 MARC 字段、子字段相关。
其中,dprms:file 元素,表示一个数字对象文件。id 属性是对象 ID;usage 属性是这个对象的用途。_timestamp 属性存储了对象文件在数据库中的时间戳;_metadataFile 属性表示对象的元数据文件的文件名;_objectFile 表示对象文件的文件名。这两个文件会以某种方式伴随书目转储文件,比如,都存放在同一个磁盘目录。
其中,中文图书_619_object_0.met
这个文件是个文本文件,内容如下:
<file mimetype="image/pjpeg" localpath="c:\temp\8353.jpg" size="20121" lastmodified="2018/11/6 10:15:06" id="0" path="net.pipe://localhost/dp2kernel/xe?中文图书/619/object/0" timestamp="6cd02c3ee8dad20800000000000004d5" readCount="1" />
这个文件描述了对象的 MIME 类型,上载前的本地路径,尺寸,最后修改时间等。这是对象的元数据文件。
unimarc:record 元素下,还有 operations 元素和 operation 元素,是 dp2 系统为了管理记录记载的创建和修改信息,虽然这些信息不是 MARC 信息,但在 MARCXML 框架下,和其他 MARC 信息元素是和谐相融的。
以下是册记录容器元素 dprms:itemCollection 的下级元素大致结构:
<dprms:itemCollection>
<dprms:item path="中文图书实体/1379" timestamp="a11ec44ea217d40800000000000011f6">
...
</dprms:item>
<dprms:item path="中文图书实体/1380" timestamp="0971e04fa217d40800000000000011f7">
...
</dprms:item>
<dprms:item path="中文图书实体/1381" timestamp="28135151a217d40800000000000011f8">
...
</dprms:item>
...
</dprms:itemCollection>
可以看出,itemCollection 元素下,有一个或者多个 dprms:item 元素,每个 item 元素描述了一册图书的信息。
下面节选一个 item 元素的样例:
<dprms:item path="中文图书实体/1379" timestamp="a11ec44ea217d40800000000000011f6">
<barcode>T0000161</barcode>
<location>流通库</location>
<bookType>普通</bookType>
<refID>b28102ae-2911-4a1c-9873-10e26ec9cd58</refID>
<borrowHistory count="1">
<borrower returnDate="Mon, 28 Nov 2016 23:22:03 +0800" barcode="R0000001" borrowDate="Mon, 28 Nov 2016 21:24:35 +0800" borrowPeriod="31day" denyPeriod="" returningDate="Thu, 29 Dec 2016 12:00:00 +0800" borrowOperator="supervisor" operator="supervisor" />
</borrowHistory>
<operations>
<operation name="create" time="Mon, 28 Nov 2016 20:40:43 +0800" operator="supervisor" />
<operation name="lastModified" time="Mon, 28 Nov 2016 21:05:38 +0800" operator="supervisor" />
</operations>
</dprms:item>
其中,barcode 元素是册条码号,location 元素表示馆藏地,bookType 元素表示图书类型,refID 元素表示册记录的唯一 ID,borrowHistory 是个容器元素,下级是表示借阅历史的 borrower 元素。operations 元素是个容器元素,下级是表示每一次创建和修改操作的 operation 元素。
上面在介绍书目部分的时候,已经介绍了,在 dprms:biblio 元素之下,unimarc:record 元素之下,可以通过 dprms:file 元素来描述书目记录所携带的数字对象。file 元素里面主要是描述了这个对象的 ID,而对象信息本身,并不会存储在 file 元素里。因为 XML 结构本身存储大量信息效率不高,还会导致 XML 结构本身难以被利用和处理。
file 元素的 _objectFile 属性,记载了一个对象文件名。这是一个伴随书目转储文件的物理文件,存储对象信息。这个文件可能会很大。只要文件系统允许,是不限制这个文件的最大尺寸的。_objectFile 属性里面一般只记载一个纯文件名,至于这个文件是如何伴随书目转储文件的,比如放在哪个具体的子目录,可以由使用书目转储文件的个人或者机构自行决定,这个格式本身不做强制要求。