PICA::Data - PICA record processing
use PICA::Data ':all';
$parser = pica_parser( xml => 'picadata.xml' );
$writer = pica_writer( plain => \*STDOUT );
use PICA::Parser::XML;
use PICA::Writer::Plain;
$parser = PICA::Parser::XML->new( @options );
$writer = PICA::Writer::Plain->new( @options );
use PICA::Schema;
$schema = PICA::Schema->new();
# parse records
while ( my $record = $parser->next ) {
# function accessors
my $ppn = pica_value($record, '003@0');
my $ppn = pica_match($record, '045Ue', split => 1, nested_array => 1);
my $holdings = pica_holdings($record);
my $items = pica_items($record);
...
# object accessors (if parser option 'bless' enabled)
my $ppn = $record->{_id};
my $ppn = $record->value('003@0');
my $ddc = $record->match('045Ue', split => 1, nested_array => 1);
my $holdings = $record->holdings;
my $items = $record->items;
...
# write record
$writer->write($record);
# write record via method (if blessed)
$record->write($writer);
$record->write( xml => @options );
$record->write; # default "plain" writer
# stringify record
my $plain = $record->string;
my $xml = $record->string('xml');
# validate record
my $errors = $schema->check($record);
}
# parse single record from string
my $record = pica_parser('plain', \"...")->next;
# guess parser from input string
my $parser = pica_guess($string)->new(\$string);
PICA::Data provides methods, classes, functions, and picadata to process PICA+ records in Perl.
PICA+ is the internal data format of the Local Library System (LBS) and the Central Library System (CBS) of OCLC, formerly PICA. Similar library formats are the MAchine Readable Cataloging format (MARC) and the Maschinelles Austauschformat fuer Bibliotheken (MAB). In addition to PICA+ in CBS there is the cataloging format Pica3 which can losslessly be convert to PICA+ and vice versa.
Records in PICA::Data are encoded either as array of arrays, the inner arrays
representing PICA fields, or as an object with two keys, _id
and record
,
the latter holding the record as array of arrays, and the former holding the
record identifier, stored in field 003@
, subfield 0
. For instance a
minimal record with just one field (having tag 003@
and no occurrence):
{
_id => '12345X',
record => [
[ '003@', undef, '0' => '12345X' ]
]
}
or in short form:
[ [ '003@', undef, '0' => '12345X' ] ]
PICA path expressions (see PICA::Path) can be used to facilitate processing PICA+ records and PICA::Schema can be used to validate PICA+ records with Avram Schemas.
The following functions can be exported on request (use export tag :all
to
get all of them):
Create a PICA parsers object (see PICA::Parser::Base). Case of the type is ignored and additional parameters are passed to the parser's constructor:
- PICA::Parser::Binary for type
binary
(binary PICA+) - PICA::Parser::Plain for type
plain
orpicaplain
(human-readable PICA+) - PICA::Parser::Plus for type
plus
orpicaplus
(normalized PICA+) - PICA::Parser::JSON for type
json
(PICA JSON) - PICA::Parser::XML for type
xml
orpicaxml
(PICA-XML) - PICA::Parser::PPXML for type
ppxml
(PicaPlus-XML)
Guess PICA serialization format from input data. Returns name of the
corresponding parser class or undef
.
Convert PICA-XML, expressed in XML::Struct structure into an (optionally blessed) PICA record structure.
Create a PICA writer object (see PICA::Writer::Base) in the same way as
pica_parser
with one of
- PICA::Writer::Binary for type
binary
(binary PICA) - PICA::Writer::Generic for type
generic
(PICA with self defined data separators) - PICA::Writer::Plain for type
plain
orpicaplain
(human-readable PICA+) - PICA::Writer::Plus for type
plus
orpicaplus
(normalized PICA+) - PICA::Writer::JSON for type
json
(PICA JSON) - PICA::Writer::XML for type
xml
orpicaxml
(PICA-XML) - PICA::Writer::PPXML for type
ppxml
(PicaPlus-XML)
Equivalent to PICA::Path->new($path).
Equivalent to PICA::Path->match_record($path, %options).
Extract the subfield values from a PICA record based on a PICA path
expression and options (see PICA::Path). Also available as accessor
match($path, %options)
.
Extract the first subfield values from a PICA record based on a PICA path
expression. Also available as accessor value($path)
.
Extract a list of subfield values from a PICA record based on a PICA path expression. The following are virtually equivalent:
pica_values($record, $path);
$path->record_subfields($record);
$record->values($path); # if $record is blessed
Returns a PICA record (or empty array reference) limited to fields specified inione ore more PICA path expression. The following are virtually equivalent:
pica_fields($record, $path);
$path->record_fields($record);
$record->fields($path); # if $record is blessed
Returns a list (as array reference) of local holding records. Also available as
accessor holdings
.
Returns a list (as array reference) of item records. Also available as
accessor items
.
All accessors of PICA::Data
are also available as "FUNCTIONS", prefixed
with pica_
(see "SYNOPSIS").
Extract a list of subfield values from a PICA record based on a PICA::Path expression and options.
Extract a list of subfield values from a PICA record based on a PICA::Path expression.
Same as values
but only returns the first value.
Returns a PICA record limited to fields specified in a PICA::Path expression. Always returns an array reference.
Returns a list (as array reference) of local holding records (level 1 and 2),
where the _id
of each record contains the ILN (subfield 101@a
).
Returns a list (as array reference) of item records (level 1),
where the _id
of each record contains the EPN (subfield 203@/**0
).
Write PICA record with given PICA::Writer::Base or PICA::Writer::Plain by default. This method is a shortcut for blessed record objects:
pica_writer( xml => $file )->write( $record );
$record->write( xml => $file ); # equivalent if $record is blessed
Serialize PICA record in a given format (plain
by default).
Johann Rolschewski, <[email protected]>
Jakob Voß <[email protected]>
Carsten Klee <[email protected]>
Copyright 2014- Johann Rolschewski and Jakob Voss
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
- picadata command line script to parse, serialize, count, and validate PICA+ data.
- Use Catmandu::PICA for more elaborated processing of PICA records with the Catmandu toolkit.
- PICA::Record implemented an alternative framework for processing PICA+ records (deprecated!).