The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

MARC::SubjectMap - framework for translating subject headings

SYNOPSIS

    use MARC::SubjectMap;
    my $map = MARC::SubjectMap->newFromConfig( "config.xml" );

    my $batch = MARC::Batch->new( 'USMARC', 'batch.dat' );
    while ( my $record = $batch->next() ) {
        my $new = $map->translateRecord( $record );
        ...
    }

DESCRIPTION

MARC::SubjectMap is a framework for providing translations of subject headings. MARC::SubjectMap is essentially a configuration which contains a list of fields/subfields to translate or copy, and a list of rules for translating one field/subfield value into another.

Typical usage of the framework will be to use the subjmap-template command line application to generate a template XML configuration from a batch of MARC records. You tell subjmap-template the fields you'd like to translate and/or copy and it will look through the records and extract and add rule templates for the unique values. For example:

    subjmap-template --in=marc.dat --out=config.xml --translate=650ab 

Once the template configuration has been filled in with translations, the MARC batch file can be run through another command line utility called subjmap which will add new subject headings where possible using the configuration file. If a subject headings can't be translated it will be logged to a file so that the configuration file can be improved if necessary.

    subjmap --in=marc.dat --out=new.dat --config=config.xml --log=log.txt

The idea is that all the configuration is done in the XML file, and the command line programs take care of driving these modules for you. Methods and related modules are listed below for the sake of completeness, and if you want to write your own driving program for some reason.

METHODS

new()

The constructor which accepts no arguments.

newFromConfig()

Factory method for creating a MARC::SubjectMap object from an XML configuration. If there is an error you will get it on STDERR.

    my $mapper = MARC::SubjectMap->new( 'config.xml' ); 

writeConfig()

Serializes the configuration to disk as XML.

addField()

Adds a field specification to the configuration. Each specification defines the fields and subfields to look for and copy/translate in MARC data. The information is bundled up in a MARC::SubjectMap::Field object.

fields()

Returns a list of MARC::SubjectMap::Field objects which specify the fields/subfields in MARC data that will be copied and/or translated.

rules()

Get/set the rules being used in this configuration. You should pass in a MARC::SubjectMap::Rules object if you are setting the rules.

    $map->rules( $rules );

The reason why a sepearte object is used to hold the Rules as opposed to the fields being contained in the MARC::SubjectMap object is that there can be many (thousands perhaps) of rules -- which need to be stored differently than the handful of fields.

sourceLanguage()

Option for specifying the three digit language code to be expected in translation records. If a record is passed is translated that is not of the expected source language then a log message will be generated.

translateRecord()

Accepts a MARC::Record object and returns a translated version of it if there were any translations that could be performed. If no translations were possible undef will be returned.

stats()

Returns a hash of statistics for conversions performed by a MARC::SubjectMap object.

setLog()

Set a file to send diagnostic messages to. If unspecified messages will go to STDERR. Alternatively you can pass in a IO::Handle object.

SEE ALSO

AUTHORS

  • Ed Summers <ehs@pobox.com>