hebis/picareader

用于读取编码为 Pica, PicaXML 和 PicaPlain 的 Pica+ 记录的类

v1.1.0 2016-07-23 10:38 UTC

This package is auto-updated.

Last update: 2024-09-20 19:09:55 UTC


README

关于

PicaReader 提供了用于读取编码为 PicaXML 和 PicaPlain 的 Pica+ 记录的类。

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

安装

您可以通过 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)

其中 TAGOCCURRENCECODEVALUE 分别是 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 的源代码以及我们图书馆编目员的专业知识是不可能的。

脚注