MARC データの読み込み

MARC データの読み込み – File_MARC による MARC データの読み込み

概要

File_MARC を使用すると、MARC 21 フォーマットの Machine Readable Cataloging (MARC) データを読み込むことができます。 File_MARC に同梱されている File_MARCXML を使用すると、 MARCXML 形式のデータを読み込むことができます。

さまざまなソースからの MARC データの読み込み

入力元は、PHP のストリーム (File_MARC::SOURCE_FILE) あるいは文字列 (File_MARC::SOURCE_STRING) となります。 File_MARC および File_MARCXML のコンストラクタで、最初の引数としてソースの位置を、 二番目の引数としてソースの形式を指定します。

ファイルからの MARC 21 データの読み込み

この例では、MARC21 データが journals.mrc という名前でディスク上に保存されているものとします。 MARCX21 データを読み込むには、File_MARC のコンストラクタをコールします。File_MARC に対して、 journals.mrc がファイル名なのか MARC データストリームを指しているのかを指定する必要はありません。 File_MARC のコンストラクタの第二引数は、 デフォルトで File_MARC::SOURCE_FILE となるからです。

<?php
require 'File/MARC.php';

// MARC レコードをファイルから取得します
$journals = new File_MARC('journals.mrc');

// 取得したレコードを順に処理します
while ($record $journals->next()) {
    
// 各レコードをきれいに表示します
    
print $record;
    print 
"\n";
}
?>

文字列からの MARCXML データの読み込み

この例では、あるウェブサービスから返された MARCXML データが PHP の変数 $xml_data に文字列で格納されているものとします。 MARCXML データを読み込むには、File_MARCXML のコンストラクタをコールします。$xml_data が文字列であることを File_MARCXML に教えるため、 コンストラクタの第二引数で File_MARC::SOURCE_STRING を指定します。

<?php
require 'File/MARCXML.php';

// MARCXML レコードを文字列から取得します
$journals = new File_MARCXML($xml_dataFile_MARC::SOURCE_STRING);

// 取得したレコードを順に処理します
while ($record $journals->next()) {
    
// 各レコードをきれいに表示します
    
print $record;
    print 
"\n";
}
?>

さまざまなソースからの MARC データの読み込み

File_MARC オブジェクトは、先頭部の情報の後に File_MARC_Record オブジェクトが順に並ぶ形式となります。 これが MARC レコードを表します。また、各レコードオブジェクトは、それぞれ File_MARC_Data_Field あるいは File_MARC_Control_Field オブジェクトの繰り返しになります。 これが MARC フィールドを表します。 File_MARC_Data_Field の中身は File_MARC_Subfield オブジェクトの繰り返しとなり、 これが MARC サブフィールドを表します。

レコードの要素の表示

<?php
require 'File/MARC.php';

// MARC レコード群を取得します
$bibrecords = new File_MARC('catdump.mrc'File_MARC::SOURCE_FILE);

// 取得したレコードを順に処理します
while ($record $bibrecords->next()) {
    
// 先頭部を表示します
    
print $record->getLeader();
    
$subjects $record->getFields('650');
    if (
$subjects) {
        
// 最初の 24_ フィールドを取得します
        
print $record->getField('24.'true);
        print 
"\n";

        
// 取得した件名をすべて表示します
        
foreach ($subjects as $field) {
            print 
$field;
            print 
"\n";
        } 
        print 
"\n";
    }
}
?>

つまり、File_MARC を使用すると、MARC レコードを読み込んで その中の特定のフィールドやサブフィールドの内容を取得することが簡単にできます。 File_MARC には、いちいち順次処理をしなくても 特定のフィールドを簡単に読み込めるようにするメソッドもあります。 getField は、 該当するフィールド名の最初のレコードを返します。また getFields は、 該当する名前のフィールドをすべて含む配列を返します。 これらのメソッドはどちらも、オプションで boolean 型のパラメータを指定できます。 これは、指定した文字列を Perl 互換の正規表現として扱うかどうかを指定するものです。

レコードからのすべての 650 フィールドの取得

<?php
require 'File/MARC.php';

// MARC レコードを z39 結果文字列から取得します
$bibrecords = new File_MARC($z39_resultFile_MARC::SOURCE_STRING);

// 取得したレコードを順に処理します
while ($record $bibrecords->next()) {
    
// すべての 650 フィールドを配列で取得します
    
$subjects $record->getFields('650');
    if (
$subjects) {
        
// 最初の 24_ フィールドのみを取得します
        
print $record->getField('24.'true);
        print 
"\n";

        
// 取得した件名をすべて表示します
        
foreach ($subjects as $field) {
            print 
$field;
            print 
"\n";
        } 
        print 
"\n";
    }
}
?>

フィールドおよびサブフィールドの順次処理

File_MARC_Data_Field オブジェクトを foreach() で順に処理する際には、 指定したフィールドの MARC タグがキーとして返されます。 また、対応する値には、サブフィールド群が返されます。

同様に、File_MARC_Subfield オブジェクトを foreach() で順に処理する際には、 指定したサブフィールドのコードがキーとして返されます。 また、対応する値には、そのサブフィールドの値が返されます。

MARC レコード内のフィールドとサブフィールドの順次処理

この例では、650 フィールドを順に処理し、各フィールドの サブフィールドにある件名の見出しを表示します。

<?php
require 'File/MARC.php';

// z39 結果文字列から MARC レコード群を取得します
$bibrecords = new File_MARC($z39_resultFile_MARC::SOURCE_STRING);

// 各レコードを処理します
while ($record $bibrecords->next()) {
    
// フィールドを順に処理します
    
foreach ($record->getFields() as $tag => $subfields) {
        
// 650 フィールド以外は読み飛ばします
        
if ($tag == '650') {
            print 
"Subject:";
            foreach (
$subfields->getSubfields() as $code => $value) {
                print 
$value";
            }
            print 
"\n";
        }
    }
}
?>

フィールドインジケータの取得

データフィールドは File_MARC_Data_Field クラスで表されます。 このクラスの関数 getIndicator() を使用すると、 インジケータの値を取得することができます。

インジケータの取得

この例では、MARC レコードのタイトル (245) フィールドを取得し、 そのフィールドの二番目のインジケータを調べます。これによって、そのフィールドに 並べ替えの際に無視すべき非ファイリングインジケータがあるかどうかを判断します。

<?php
require 'File/MARC.php';

$titleField $record->getField('245');
$nonfiling $titleField->getIndicator(2);

if (
$nonfiling) {
  
// $a サブフィールドの一部を使用して並べ替えます
  
$title substr($titleField->getSubfield('a'), $nonfiling);
} else {
  
// $a サブフィールド全体を使用して並べ替えます
  
$title $titleField->getSubfield('a');
}
?>
File_MARC (Previous) File_MARC を使用した MARC データの整形 (Next)
Last updated: Mon, 24 Nov 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.