NAME

    PICA::Data - PICA record processing

SYNOPSIS

        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 );
    
        # parse records
        while ( my $record = $parser->next ) {
            
            # function accessors
            my $ppn      = pica_value($record, '003@0');
            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 $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');
        }
      
        # parse single record from string
        my $record = pica_parser('plain', \"...")->next;

DESCRIPTION

    PICA::Data provides methods, classes, and functions 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 fields, _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 003@:

        {
          _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.

FUNCTIONS

    The following functions can be exported on request (use export tag :all
    to get all of them):

 pica_parser( $type [, @options] )

    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::XML for type xml or picaxml (PICA-XML)

      * PICA::Parser::Plus for type plus or picaplus (normalized PICA+)

      * PICA::Parser::Plain for type plain or picaplain (human-readable
      PICA+)

 pica_xml_struct( $xml, %options )

    Convert PICA-XML, expressed in XML::Struct structure into an
    (optionally blessed) PICA record structure.

 pica_writer( $type [, @options] )

    Create a PICA writer object (see PICA::Writer::Base) in the same way as
    pica_parser with one of

      * PICA::Writer::XML for type xml or picaxml (PICA-XML)

      * PICA::Writer::Plus for type plus or picaplus (normalized PICA+)

      * PICA::Writer::Plain for type plain or picaplain (human-readable
      PICA+)

 pica_path( $path )

    Equivalent to PICA::Path->new($path).

 pica_values( $record, $path )

    Extract a list of subfield values from a PICA record based on a PICA
    path expression. Also available as accessor values($path).

 pica_value( $record, $path )

    Extract the first subfield values from a PICA record based on a PICA
    path expression. Also available as accessor value($path).

 pica_fields( $record, $path )

    Returns a PICA record (or empty array reference) limited to fields
    specified in a PICA path expression. Also available as accessor
    fields($path).

 pica_holdings( $record )

    Returns a list (as array reference) of local holding records. Also
    available as accessor holdings.

 pica_items( $record )

    Returns a list (as array reference) of item records. Also available as
    accessor items.

ACCESSORS

    All accessors of PICA::Data are also available as "FUNCTIONS", prefixed
    with pica_ (see "SYNOPSIS").

 values( $path )

    Extract a list of subfield values from a PICA record based on a PICA
    path expression.

 value( $path )

    Same as values but only returns the first value.

 fields( $path )

    Returns a PICA record limited to fields specified in a PICA path
    expression. Always returns an array reference.

 holdings

    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).

 items

    Returns a list (as array reference) of item records (level 1), where
    the _id of each record contains the EPN (subfield 203@/**0).

METHODS

 write( [ $type [, @options] ] | $writer )

    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 

CONTRIBUTORS

    Johann Rolschewski, <rolschewski@gmail.com>

    Jakob Voss <voss@gbv.de>

COPYRIGHT AND LICENSE

    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.

SEE ALSO

      * PICA::Record (deprecated) implemented an alternative framework for
      processing PICA+ records.

      * Use Catmandu::PICA for processing PICA records with the Catmandu
      toolkit, for instance to convert PICA XML to plain PICA+:

         catmandu convert PICA --type xml to PICA --type plain < picadata.xml