hebis / picarecord
Pica+记录、字段和子字段的面向对象接口
This package is auto-updated.
Last update: 2024-09-15 18:20:36 UTC
README
[](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
的字段;具有此简写的字段表示本地记录的开始。