hebis / picarecord

Pica+记录、字段和子字段的面向对象接口

v1.1.1 2017-01-02 10:15 UTC

This package is auto-updated.

Last update: 2024-09-15 18:20:36 UTC


README

[![构建状态](https://travis-ci.org/dmj/PicaRecord.svg?branch=master)](https://travis-ci.org/dmj/PicaRecord)

关于

PicaRecord提供了Pica+记录、字段和子字段的面向对象接口。它不提供读取或写入Pica+记录的手段。为了做到这一点,您需要安装PicaReader和PicaWriter这两个作为专用Composer包提供的包。

PicaRecord版权(c)2012-2019归Herzog August Bibliothek Wolfenbüttel所有,并按照GNU通用公共许可证v3条款发布。

安装

您可以通过Composer安装PicaRecord。

composer require hab/picarecord

用法

记录、字段和子字段

子字段

子字段由Subfield类表示。Pica+子字段是一个由字母数字字符和字符串值组成的对(配对),该字符区分大小写且为ASCII字符。子字段的代码被视为不可变的,且值不能为空字符串。

字段

字段由Field类表示。Pica+字段是子字段的有序列表,部分由两个字段属性标识,即字段标签和字段出现次数。这两个属性在实例化时设置,被认为是不可变的。

在下文文本中,字段缩写指由字段标签组成的字符串,后跟一个正斜杠(ASCII 47),然后是表示字段出现次数的两个数字。例如,字段021A的出现次数为0的字段缩写为021A/00

检索子字段

Field::getSubfields()在没有任何参数调用时返回一个字段的全部子字段。要检索特定子字段,您可以传递任意数量的参数,每个参数代表一个子字段代码。如果这样做,返回的数组将按以下方式构建:

返回数组的每个元素对应于参数列表中的子字段代码。如果字段具有具有指定代码的子字段,则返回数组中的元素包含该子字段。如果字段没有具有指定代码的子字段,则返回数组中的元素包含NULL。为了检索具有相同子字段代码的多个子字段,您需要在参数列表中重复子字段代码。参数列表中代码的第一个出现对应于具有指定代码的第一个子字段,第二个出现对应于第二个子字段,依此类推。

因为Field::getSubfields()在以子字段代码作为参数调用时返回一个已知大小的数组(与传递给函数的参数一样多的元素),您可以方便地使用PHP的list()操作。

示例:要检索Pica+字段028A/00中编码的作者姓名和姓氏,可以按如下方式调用Field::getSubfields()

list($firstName, $lastName, $personalName) = $field->getSubfields('d', 'a', '5');

操纵子字段列表

您可以使用Field::addSubfield()将字段添加到子字段列表的末尾。如果子字段已包含在子字段列表中,则抛出InvalidArgumentException。对于更复杂的字段子字段列表操作,您可以使用Field::setSubfields()替换字段的子字段列表。

可以使用Field::removeSubfield()来删除子字段,它接受要删除的子字段作为唯一参数,如果字段不包含子字段,则会抛出InvalidArgumentException

记录

记录类

PicaRecord提供了标题记录权威记录本地记录副本记录四种记录类型的类。标题、本地和副本记录之间的关系如下:标题记录可以包含零个或多个本地记录。每个本地记录可以包含最多99个副本记录。

本地记录可以通过所属图书馆的内部图书馆编号(ILN)来识别,可以通过TitleRecord::getLocalRecord()检索,它返回所有本地记录的数组,或者通过TitleRecord::getLocalRecordByILN()检索,它通过其第一个参数检索一个单独的本地记录。

副本记录包含特定项目(样本)的信息,并通过本地记录中的项目编号来识别。您可以使用LocalRecord::getCopyRecords()LocalRecord::getLocalRecordByItemNumber()检索所有副本记录的数组或具有指定项目编号的单个副本记录。

所有记录类都实现了两个方法Record::isEmpty(),如果记录为空(不包含任何字段)则返回TRUE,以及Record::isValid(),它执行记录的初步验证。

选择和删除字段

Record::getFields()在无参数调用时返回记录的所有字段。如果使用正则表达式的主体作为参数调用它,则它仅返回其简写与正则表达式匹配的字段。

Record::select()提供了对记录字段更通用的访问。它接受一个谓词函数作为参数,并返回满足谓词的所有字段。谓词函数可以是任何有效的PHP回调,它接受一个字段作为参数,如果字段满足谓词则返回TRUE,否则返回FALSE。

Record::delete()删除所有匹配谓词函数的字段(见上文)。

如果记录包含其他记录,即如果记录是标题或本地记录,则Record::delete()Record::select()Record::getFields()将作用于记录的所有字段,包括包含记录的字段。

将字段追加到记录中

将字段追加到现有记录不如选择或删除字段那么直接。每个记录类在通过Record::append()函数将其字段追加到其上时都有自己的限制。

  • 您只能将级别为0的字段追加到标题和权威记录
  • 您可以将级别为1的字段追加到本地记录
  • 您只能将级别为2的字段追加到副本记录;作为附加限制,字段的出现值必须等于副本记录的项目编号

尝试添加具有不允许级别的字段会导致抛出InvalidArgumentException

致谢

本包的大部分内容没有通过研究Jakob Voß编写的开源Perl库Pica::Record的源代码,以及我们图书馆编目员的实践经验是难以实现的。

脚注

[1] 例如,标题记录可以包含零个或多个带有标签101@和出现00的字段;具有此简写的字段表示本地记录的开始。