hab / picareader
用于读取以 Pica、PicaXML 和 PicaPlain 编码的 Pica+ 记录的类
Requires
- hab/picarecord: ~1.0
This package is not auto-updated.
Last update: 2024-09-14 17:37:21 UTC
README
[](https://travis-ci.org/dmj/PicaReader)
关于
PicaReader 提供了用于读取 PicaXML 和 PicaPlain 编码的 Pica+ 记录的类。
PicaReader 版权归 (c) 2012-2017 Herzog August Bibliothek Wolfenbüttel 所有,并按 GNU 通用公共许可证第 3 版发布。
安装
您可以通过 Composer 安装 PicaReader。
composer require hab/picareader
用法
所有读取器都遵循相同的接口。您可以通过调用 Reader::open()
使用输入数据的字符串打开读取器,并通过调用 Reader::read()
读取输入数据中的下一个记录。如果输入不再包含记录,则 Reader::read()
返回 FALSE
。否则,它返回一个由 PicaRecord 的 Record::factory()
函数创建的记录对象。
$reader = new \HAB\Pica\Reader\PicaXmlReader() $reader->open(file_get_contents('http://unapi.gbv.de?id=opac-de-23:ppn:635012286&format=picaxml')); $record = $reader->read(); $reader->close();
要过滤记录或字段,您可以通过 Reader::setFilter()
将过滤器附加到读取器。过滤器是任何有效的 PHP 回调函数,它接受一个表示记录的关联数组作为参数,并返回一个可能已修改的数组,或者如果整个记录应该被跳过,则返回 FALSE
。
记录的数组表示定义为以下内容
RECORD := array('fields' => array(FIELD, …)) FIELD := array('tag' => TAG, 'occurrence' => OCCURRENCE, 'subfields' => array(SUBFIELD, …)) SUBFIELD := array('code' => CODE, 'value' => VALUE)
其中 TAG
、OCCURRENCE
、CODE
和 VALUE
分别是 Pica+ 字段或子字段的相应属性。
例如,如果您的源提供如下格式不正确的 PicaXML 记录
<?xml version="1.0" encoding="UTF-8"?> <record xmlns="info:srw/schema/5/picaXML-v1.0"> <datafield tag=""> </datafield> <datafield tag="001A"> <subfield code="0">0001:14-09-10</subfield> </datafield> … </record>
您可以通过附加一个过滤器函数来删除这些具有无效标签的字段
$reader = new PicaXmlReader(); $reader->setFilter(function (array $r) { return array('fields' => array_filter($r['fields'], function (array $f) { return isset($f['tag']) && \HAB\Pica\Record\Field::isValidFieldTag($f['tag']); })); }); $record = $reader->read(…); $reader->close();
致谢
如果没有研究 Jakob Voß 开发的开源 Perl 库 Pica::Record 的源代码以及我们图书馆编目员的实际知识,本包的大部分内容将无法实现。