ck / file_marc_reference
File_MARC 的 MARCspec 适配器
v1.2.0
2017-12-01 09:16 UTC
Requires
- php: >=5.6
- ck/php-marcspec: ^2.0
- pear/file_marc: @dev
Requires (Dev)
- phpunit/phpunit: ^5.7 | ^6
This package is auto-updated.
Last update: 2024-09-09 13:39:41 UTC
README
File_MARC_Reference 是 PHP 中著名的 MARC 解析器 File_MARC 的扩展。使用 File_MARC_Reference,您可以使用 MARCspec 作为统一的方式访问 MARC 数据。此外,它极大地简化了 File_MARC。
安装
可以使用 Composer 进行安装。只需运行
composer require ck/file_marc_reference
使用方法
首先 require autoload.php
<?php require("vendor/autoload.php");
从文件或字符串中读取 MARC 21 数据保持不变(参见 File_MARC - 读取 MARC 数据)
// Retrieve a set of MARC records from a file $records = new File_MARC('data.mrc'); // Iterate through the retrieved records while ($record = $records->next()) { //... }
现在,如果您想使用 MARCspec 引用数据,您必须初始化一个新的 File_MARC_Reference
// Retrieve a set of MARC records from a file $records = new File_MARC('data.mrc'); // Iterate through the retrieved records while ($record = $records->next()) { $reference = new File_MARC_Reference('245$a',$record); }
数据引用后,有三个公共属性可用
$reference = new File_MARC_Reference('245$a',$record); // attribute data $subfield = $reference->data[0]; print get_class($subfield); // File_MARC_Subfield print $subfield->getCode(); // a // attribute content print $reference->content[0]; // prints content of subfield a of field 245 // attribute cache $field = $reference->cache['245'][0]; print get_class($field); // File_MARC_Data_Field $subfield = $reference->cache['245$a']; print get_class($subfield); // File_MARC_Subfield
让我们看看如何使用 File_MARC 检查依赖关系,如果您有一个像这样的任务:当字段 007 的索引位置 "0" 的字符为 "m"、"s" 或 "v" 时,引用字段 306 的子字段 "a" 的内容。
而不是编写 ...
$fields_007 = $record->getFields('007'); $field_306 = $record->getField('306'); $subfields_a = false; foreach($fields_007 as $field_007) { $firstChar = substr($field_007->getData(),0,1); if(strpbrk($firstChar,"msv")) { $subfields_a = $field_306->getSubfields('a'); break; } } if($subfields_a) { foreach($subfields_a as $subfield_a) { echo $subfield_a->getData()."\n"; } }
... 使用 File_MARC_Reference 完成相同的任务
$reference = new File_MARC_Reference('306$a{007/0=\m|007/0=\s|007/0=\v}',$record); foreach($reference->content as $subfield_a) { echo $subfield_a."\n"; } // interested in field 007? No problem! print get_class($reference->cache['007'][0]); // File_MARC_Control_Field print $reference->cache['007/0'][0]; // prints the first char of first 007 field print $reference->cache['007/0'][1]; // prints the first char of second 007 field