Formatting MARC data
Formatting MARC data --
Formatting MARC data with
File_MARC
Overview
The File_MARC_Record class enables you to write
Machine Readable Cataloging (MARC) data in MARC 21
format, in a human-readable string format, and (with some restrictions)
in MARCXML format.
Formatting MARC 21 data
To return a record in MARC 21 format, call the toRaw()
method on the File_MARC_Record object.
Example 43-1. Writing MARC 21 data to a file
In the following example, we have created one or more MARC records
represented by File_MARC_Record objects
stored in the $records array. To write this
data to a file in MARC 21 format, we simply open the file in binary
mode and write the contents of the records in the array to the file
by calling the toRaw() method on each record
in turn.
<?php
require 'File/MARC.php';
// convert_metadata_to_marc() is a fictional method
// that returns an array of File_MARC_Record objects
$records = convert_metadata_to_marc();
// Open a file for binary write access
$marc21_file = fopen("records.mrc", "wb");
// Iterate through the records
while ($record = $records->next()) {
// Write each record to the file in MARC 21 format
fwrite($marc21_file, $record->toRaw());
}
// Close the file
fclose($marc21_file);
?>
|
|
Creating human-readable output from MARC data
To return a human-readable version of a MARC 21 or MARCXML record,
call the __toString() method on the
File_MARC_Record object. Note that you call the
__toString() method implicitly when you call the
print() function on a
File_MARC_Record object.
Example 43-2. Returning a human-readable representation of MARC
In the following example, we print the contents of each
MARC record in a human-readable format and also explicitly call
the __toString() method so that we can write
the human-readable contents to a file. Notice that it does not
matter whether the source format is MARC or MARCXML, the methods
we call to format the data for output are the same.
<?php
require 'File/MARCXML.php';
// Retrieve a set of MARCXML records from a string
$journals = new File_MARCXML($xml_data, File_MARC::SOURCE_STRING);
// Open a file for binary write access
$marc21_file = fopen("records.mrc", "wb");
// Iterate through the retrieved records
while ($record = $journals->next()) {
// Pretty print each record
print $record;
print "\n";
// Write the pretty-printed record to file
fwrite($marc21_file, $record->__toString() . "\n");
}
// Close the file
fclose($marc21_file);
?>
|
|
Formatting MARCXML data
To return a record in MARCXML format, call the toXML()
method on the File_MARC_Record object.
| Significant restrictions on the toXML() method |
Most significantly, PHP offers no means of converting from the MARC8
encoding that most legacy MARC records have been encoded in to a valid
XML encoding such as UTF-8. MARC libraries in other languages have
worked around this basic lack of infrastructure by creating their own
character encoding conversion libraries. At this time, the author of
File_MARC does not have the capacity to build
the same support as a PEAR package but would welcome any assistance.
Better still would be the addition of ANSEL and MARC8 encoding support
to the iconv and ICU toolkits that are used to supply encoding conversion
by most open-source projects and languages.
The toXML() method currently produces a single,
complete, valid XML MARCXML document for a single
File_MARC_Record object. You cannot simply
concatenate the results of calling toXML() on two
File_MARC_Record objects, because that will
produce invalid an invalid XML document. At this time, it is up to the
developer to extract the record node from each MARCXML
document and concatenate them inside a collection root
element if they want to create a MARCXML document that contains more than
a single record.
|
Example 43-3. Writing MARCXML data to a file
In the following example, we have created a MARC record
represented by a File_MARC_Record object
stored in the $record variable. To write this
data to a file in MARCXML format, we simply open the file in binary
mode and write the record to the file by calling the
toXML() method on the record object.
<?php
require 'File/MARC.php';
// Create a MARC record
$record = create_a_marc_record();
// Open a file for binary write access
$marcxml_file = fopen("records.mrc", "wb");
// Write the record to the file in MARCXML format
fwrite($marcxml_file, $record->toXML());
// Close the file
fclose($marcxml_file);
?>
|
|