hab/picareader

用于读取以 Pica、PicaXML 和 PicaPlain 编码的 Pica+ 记录的类

维护者

详细信息

git.sr.ht/~dmaus/pica-reader

安装: 87

依赖: 0

建议: 0

安全: 0

v1.2.0 2017-10-27 06:40 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:37:21 UTC


README

[![构建状态](https://travis-ci.org/dmj/PicaReader.svg?branch=master)](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)

其中 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 的源代码以及我们图书馆编目员的实际知识,本包的大部分内容将无法实现。

脚注