NAME
MODS::Record - Perl extension for handling MODS records
SYNOPSIS
use MODS::Record qw(xml_string);
my $mods = MODS::Record->new;
my $collection = MODS::Collection->new;
my $mods = $collection->add_mods(ID => '1234');
$mods->add_abstract("Hello", lang => 'eng');
$mods->add_abstract("Bonjour", lang => 'fra');
# Set a deeply nested field...
$mods->add_language()->add_languageTerm('eng');
# Set a list of deeply nested fields...
$mods->add_location(sub {
$_[0]->add_physicalLocation('here');
$_[0]->add_shelfLocation('here too');
$_[0]->add_url('http://here.org/there');
});
# Set an inline XML extension...
$mods->add_accessCondition(xml_string("21212"));
# Retrieve a field by a filter...
$mods->get_abstract(lang => 'fra')->body("Bonjour :)");
$mods->get_abstract(lang => 'fra')->contentType('text/plain');
for ($mods->get_abstract(lang => 'fra')) {
printf "%s\n" , $_->body;
}
# Set a field to a new value
my @newabstract;
for ($mods->get_abstract) {
push @newabstract, $_ unless $_->lang eq 'fra';
}
$mods->set_abstract(@newabstract);
# Clear all abstracts;
$mods->set_abstract(undef);
# Serialize
print $mods->as_json(pretty => 1);
print $mods->as_xml;
# Deserialize
my $mods = MODS::Record->from_xml(IO::File->new('mods.xml'));
my $mods = MODS::Record->from_json(IO::File->new('mods.js'));
DESCRIPTION
This module provides MODS (http://www.loc.gov/standards/mods/) parsing
and creation for MODS Schema 3.5.
METHODS
MODS::Record->new(%attribs)
MODS::Collection->new(%attribs)
Create a new MODS record or collection. Optionally attributes can be
provided as defined by the MODS specification. E.g.
$mods = MODS::Record->new(ID='123');
add_xxx()
Add a new element to the record where 'xxx' is the name of a MODS
element (e.g. titleInfo, name, genre, etc). This method returns an
instance of the added MODS element. E.g.
$titleInfo = $mods->add_titleInfo; # $titleInfo is a 'MODS::Element::TitleInfo'
add_xxx($text,%attribs)
Add a new element to the record where 'xxx' is the name of a MODS
element. Set the text content of the element to $text and optionally
provide further attributes. This method returns an instance of the added
MODS element. E.g.
$mods->add_abstract("My abstract", lang=>'eng');
add_xxx(sub { })
Add a new element to the record where 'xxx' is the name of a MODS
element. The provided coderef gets as input an instance of the added
MODS element. This method returns an instance of the added MODS element.
E.g.
$mods->add_abstract(sub {
my $o = shift;
$o->body("My abstract");
$o->lang("eng");
})
add_xxx($obj)
Add a new element to the record where 'xxx' is the name of a MODS
element. The $obj is an instance of a MODS::Element::Xxx class (where
Xxx is the corresponding MODS element). This method returns an instance
of the added MODS element. E.g.
$mods->add_abstract(
MODS::Element::Abstract->new(_body=>'My abstract', lang=>'eng')
);
get_xxx()
get_xxx(%filter)
get_xxx(sub { })
Retrieve an element from the record where 'xxx' is the name of a MODS
element. This methods return in array context all the matching elements
or the first match in scalar context. Optionally provide a %filter or a
coderef filter function. E.g.
@titles = $mods->get_titleInfo();
$alt = $mods->get_titleInfo(type=>'alternate');
$alt = $mods->get_titleInfo(sub { shift->type eq 'alternate'});
set_xxxx()
set_xxx(undef)
set_xxx($array_ref)
set_xxx($xxx1,$xxx2,...)
Set an element of the record to a new value where 'xxx' is the name of a
MODS element. When no arguments are provided, then this is a null
operation. When undef als argument is provided, then the element is
deleted. To overwrite the existing content of the element an ARRAY (ref)
of MODS::Element::Xxx can be provided (where 'Xxx' is the corresponding
MODS element). E.g.
# Delete all abstracts
$mods->abstract(undef);
# Set all abstracts
$mods->abstract(MODS::Element::Abstract->new(), MODS::Element::Abstract->new(), ...);
$mods->abstract([ MODS::Element::Abstract->new(), MODS::Element::Abstract->new(), ... ]);
as_xml()
as_xml(xml_prolog=>1)
Return the record as XML.
from_xml($string)
from_xml(IO::Handle)
Parse an XML string or IO::Handle into a MODS::Record.
as_json()
as_json(pretty=>1)
Return the record as JSON string.
from_json($string)
from_json(IO::Handle)
Parse and JSON string or JSON::Handle into a MODS::Record.
SEE ALSO
* Library Of Congress MODS pages (http://www.loc.gov/standards/mods/)
DESIGN NOTES
* I'm not a MODS expert
* I needed a MODS module to parse and create MODS records for our
institutional repository
* This module is not created for speed
* This module doesn't have any notion of ordering of MODS elements
themselves (e.g. first 'titleInfo', then 'name'). But each
sub-element keeps its original order (e.g. each 'title' in
'titleInfo').
AUTHORS
* Patrick Hochstenbach