MARC データのフォーマット

MARC データのフォーマット – File_MARC を使用した MARC データの整形

概要

File_MARC_Record クラスを使用すると、 Machine Readable Cataloging (MARC) データを MARC 21 形式、可読形式の文字列および (制限はありますが) MARCXML 形式で書き出すことができます。

MARC 21 形式への整形

レコードを MARC 21 形式で返すには、 File_MARC_Record オブジェクトの toRaw() メソッドをコールします。

MARC 21 データのファイルへの書き込み

この例では、File_MARC_Record で表される MARC レコードを作成し、配列 $records に保存します。 このデータを MARC 21 形式でファイルに書き込むには、 まずファイルをバイナリモードでオープンします。 そして配列内のレコードの内容をファイルに書き込むために toRaw() メソッドをコールします。 これをレコードごとに繰り返します。

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

// convert_metadata_to_marc() は架空のメソッドで、
// File_MARC_Record オブジェクトの配列を返します
$records convert_metadata_to_marc(); 

// バイナリ書き込みモードでファイルをオープンします
$marc21_file fopen("records.mrc""wb");

// レコードを順に処理します
while ($record $records->next()) {
    
// 各レコードを、MARC 21 形式でファイルに書き込みます
    
fwrite($marc21_file$record->toRaw());
}

// ファイルを閉じます
fclose($marc21_file);
?>

MARC データからの可読形式の出力の作成

可読形式で MARC 21 あるいは MARCXML レコードを返すには、 File_MARC_Record オブジェクトの __toString() メソッドをコールします。 File_MARC_Record オブジェクトの print() 関数をコールした際には、暗黙的に __toString() メソッドをコールしていることに注意しましょう。

MARC の可読形式を返す

この例では、各 MARC レコードの内容を可読形式で表示します。 また、明示的に __toString() メソッドをコールし、 可読形式でファイルに書き込みます。入力形式が MARC あるいは MARCXML のどちらであっても、出力用にデータを整形するメソッドは同じであることに注意しましょう。

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

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

// バイナリ書き込みモードでファイルをオープンします
$marc21_file fopen("records.mrc""wb");

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

    
// きれいに整形したレコードをファイルに書き込みます
    
fwrite($marc21_file$record->__toString() . "\n");
}

// ファイルを閉じます
fclose($marc21_file);
?>

MARCXML 形式への整形

レコードを MARCXML 形式で返すには、 File_MARC_Record オブジェクトの toXML() メソッドをコールします。

toXML() メソッドの重要な制約

  • 最も重要なのは、PHP では MARC8 エンコーディングからの変換を行わないということです。 このエンコーディングは既存の MARC レコードの多くで用いられていますが、 これを XML で有効なエンコーディング、たとえば UTF-8 などに変換することはありません。他言語版の MARC ライブラリは、 独自の文字エンコーディング変換ライブラリを作成することでこの問題に対応しているようです。 現時点では、File_MARC の作者は同等の機能のサポートを PEAR パッケージとして組み込むだけの力がありません。 どなたか手伝ってくれる方を募集中です。 しかし、より望ましいのは、iconv や ICU ツールキットに ANSEL および MARC8 エンコーディングのサポートを追加することでしょう。 iconv や ICU ツールキットは、さまざまな言語の多くのオープンソースプロジェクトで エンコーディング変換に使用されています。

  • toXML() メソッドは、現在は ひとつの File_MARC_Record オブジェクトに対して ひとつの妥当な XML MARCXML ドキュメントを作成します。 ふたつの File_MARC_Record オブジェクトで toXML() をコールした結果を単純に連結することはできません。 そうすると、出来上がった XML ドキュメントが妥当な形式ではなくなるからです。 複数のレコードを含む MARCXML ドキュメントを作成したい場合、 現状では開発者自身でそれを行う必要があります。つまり、各 MARCXML ドキュメントの record ノードを取り出し、それを ルート要素 collection の中で連結するのです。

MARCXML データのファイルへの書き込み

この例では、File_MARC_Record で表される MARC レコードを作成し、配列 $records に保存します。 このデータを MARCXML 形式でファイルに書き込むには、 まずファイルをバイナリモードでオープンします。 そして配列内のレコードの内容をファイルに書き込むために toXML() メソッドをコールします。

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

// MARC レコードを作成します
$record create_a_marc_record();

// バイナリ書き込みモードでファイルをオープンします
$marcxml_file fopen("records.mrc""wb");

// レコードを MARCXML 形式でファイルに書き込みます
fwrite($marcxml_file$record->toXML());

// ファイルを閉じます
fclose($marcxml_file);
?>
File_MARC による MARC データの読み込み (Previous) File_Passwd (Next)
Last updated: Thu, 30 Oct 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:

Note by: steven@lotsofdots.be
Hey,

when trying to parse a marc21 xml file with this i noticed that it isn't working.

It has something to do with te namespace "marc::"

the simplexml_load_string an simplexml_load_file functions are loading the data, but when trying to get the records he doesn't find them. When using the function with attributes like :
simplexml_load_string($source,"SimpleXMLElement",0,"marc",true)

he finds the records, but then the attributes are missing.

you can get the records also by the method ->children("marc",true) but not with the basic function method->children()

anbody familiar whit this problem?