MARC-Crosswalk-DublinCore-0.02/ 40777 0 0 0 10222634237 14322 5ustar usergroupMARC-Crosswalk-DublinCore-0.02/bin/ 40777 0 0 0 10222634237 15072 5ustar usergroupMARC-Crosswalk-DublinCore-0.02/bin/marc2dc100666 0 0 2572 10147137766 16446 0ustar usergroup#!/usr/bin/perl =head1 NAME marc2dc - convert a MARC record to Dublin Core =head1 SYNOPSIS % marc2dc [-q] marc.dat =head1 DESCRIPTION This script takes a MARC record as input and converts it to an ad-hoc text format created from the conversion of the record into Dublin Core. =head1 TODO =over 4 =item * generate more useful output =back =head1 AUTHOR =over 4 =item * Brian Cassidy Ebricas@cpan.orgE =back =head1 COPYRIGHT AND LICENSE Copyright 2004 by Brian Cassidy This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut use strict; use warnings; use MARC::Crosswalk::DublinCore; use MARC::Record; use File::Slurp; use Getopt::Std; use Pod::Usage; our $VERSION = '0.01'; my %options; getopts( 'q', \%options ); my $file = $ARGV[ 0 ]; HELP_MESSAGE() unless defined $file; my $blob = read_file( $file ); my $marc = MARC::Record->new_from_usmarc( $blob ); my $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => $options{ q } ); my $dc = $crosswalk->as_dublincore( $marc ); for( $dc->elements ) { my $qualifier = $_->qualifier; my $scheme = $_->scheme; printf( "%s: %s\n", $_->name . ( $qualifier ? ".$qualifier" : '' ) . ( $scheme ? "($scheme)" : '' ), $_->content ); } sub HELP_MESSAGE { pod2usage(); }MARC-Crosswalk-DublinCore-0.02/Build.PL100666 0 0 743 10222602145 15670 0ustar usergroupuse strict; use Module::Build; my $build = Module::Build->new( module_name => 'MARC::Crosswalk::DublinCore', dist_author => 'Brian Cassidy ', license => 'perl', create_readme => 1, create_makefile_pl => 'traditional', script_files => [ qw( bin/marc2dc ) ], requires => { 'DublinCore::Record' => 0, 'MARC::Record' => 0, 'Test::More' => 0 }, ); $build->create_build_script;MARC-Crosswalk-DublinCore-0.02/Changes100666 0 0 362 10222625571 15674 0ustar usergroupRevision history for Perl extension MARC::Crosswalk::DublinCore 0.02 Wed Mar 30 2005 - switched to Module::Build - added dc simple and qualified tests - added pod_coverage.t 0.01 Wed Nov 17 20:31:45 2004 - original version MARC-Crosswalk-DublinCore-0.02/lib/ 40777 0 0 0 10222634237 15070 5ustar usergroupMARC-Crosswalk-DublinCore-0.02/lib/MARC/ 40777 0 0 0 10222634237 15612 5ustar usergroupMARC-Crosswalk-DublinCore-0.02/lib/MARC/Crosswalk/ 40777 0 0 0 10222634237 17562 5ustar usergroupMARC-Crosswalk-DublinCore-0.02/lib/MARC/Crosswalk/DublinCore.pm100666 0 0 32560 10222625571 22272 0ustar usergrouppackage MARC::Crosswalk::DublinCore; =head1 NAME MARC::Crosswalk::DublinCore - Convert data between MARC and Dublin Core =head1 SYNOPSIS my $crosswalk = MARC::Crosswalk::DublinCore->new; # Convert a MARC record to Dublin Core (simple) my $marc = MARC::Record->new_from_usmarc( $blob ); my $dc = $crosswalk->as_dublincore( $marc ); # Convert simple DC to MARC $marc = $crosswalk->as_marc( $dc ); # Convert MARC to qualified DC instead $crosswalk->qualified( 1 ); $dc = $crosswalk->as_dublincore( $marc ); =head1 DESCRIPTION This module provides an implentation of the LOC's spec on how to convert metadata between MARC and Dublin Core format. The spec for converting MARC to Dublin Core is available at: http://www.loc.gov/marc/marc2dc.html, and from DC to MARC: http://www.loc.gov/marc/dccross.html. NB: The conversion cannot be done in a round-trip manner. i.e. Doing a conversion from MARC to DC, then trying to go back to MARC will not yield the original record. =head1 INSTALLATION To install this module via Module::Build: perl Build.PL ./Build # or `perl Build` ./Build test # or `perl Build test` ./Build install # or `perl Build install` To install this module via ExtUtils::MakeMaker: perl Makefile.PL make make test make install =cut use strict; use warnings; use MARC::Record; use MARC::Field; use DublinCore::Record; use DublinCore::Element; use Carp qw( croak ); our $VERSION = '0.02'; my %leader06_lut = ( a => 'Text', c => 'Text', d => 'Text', t => 'Text', e => 'Image', f => 'Image', g => 'Image', k => 'Image', i => 'Sound', j => 'Sound', # m => 'No Type Provided', # o => 'No Type Provided', # p => 'No Type Provided', # r => 'No Type Provided' ); my %leader07_lut = ( c => 'Collection', s => 'Collection', p => 'Collection' ); my @dc_qualified = ( { tag => 245, dc => { name => 'Title' } }, ( map +{ tag => $_, dc => { name => 'Title', qualifier => 'Alternative' } }, ( 130, 210, 240, 242, 246, 730, 740 ) ), ( map +{ tag => $_, dc => { name => 'Creator' } }, ( 100, 110, 111, 700, 710, 711, 720 ) ), ( map +{ tag => $_, indicators => [ undef, 0 ], dc => { name => 'Subject', scheme => 'LCSH' } }, ( 600, 610, 611, 630, 650 ) ), ( map +{ tag => $_, indicators => [ undef, 2 ], dc => { name => 'Subject', scheme => 'MeSH' } }, ( 600, 610, 611, 630, 650 ) ), { tag => '050', dc => { name => 'Subject', scheme => 'LCC' } }, { tag => '082', dc => { name => 'Subject', scheme => 'DDC' } }, { tag => '080', dc => { name => 'Subject', scheme => 'UDC' } }, ( map +{ tag => $_, dc => { name => 'Description' } }, grep { $_ !~ /^(505|506|520|530|540|546)$/ } 500..599 ), { tag => 505, indicators => [ 3, undef ], dc => { name => 'Description', qualifier => 'tableOfContents' } }, { tag => 520, dc => { name => 'Description', qualifier => 'Abstract' } }, { tag => 260, subfields => 'ab', dc => { name => 'Publisher' } }, { tag => 260, subfields => 'cg', dc => { name => 'Date', qualifier => 'Created' } }, { tag => 533, subfields => 'd', dc => { name => 'Date', qualifier => 'Created' } }, { tag => 260, subfields => 'c', dc => { name => 'Date', qualifier => 'Issued' } }, { tag => '008', code => sub { return substr( shift, 7, 4 ); }, dc => { name => 'Date', qualifier => 'Issued' } }, { tag => 'Leader', code => sub { return $leader06_lut{ substr( shift, 6, 1 ) }; }, dc => { name => 'Type', scheme => 'DCMI Type Vocabulary' } }, { tag => 'Leader', code => sub { return $leader07_lut{ substr( shift, 7, 1 ) }; }, dc => { name => 'Type', scheme => 'DCMI Type Vocabulary' } }, { tag => 655, subfield_eq => [ '2', 'dct' ], dc => { name => 'Type', scheme => 'DCMI Type Vocabulary' } }, { tag => 865, subfields => 'q', dc => { name => 'Format', scheme => 'IMT' } }, { tag => 300, subfields => 'a', dc => { name => 'Format', qualifier => 'Extent' } }, { tag => 533, subfields => 'e', dc => { name => 'Format', qualifier => 'Extent' } }, { tag => 340, subfields => 'a', dc => { name => 'Format', qualifier => 'Medium' } }, { tag => 856, subfields => 'u', dc => { name => 'Identifier', scheme => 'URI' } }, { tag => 786, subfields => 'o', dc => { name => 'Source', scheme => 'URI' } }, { tag => '008', code => sub { return substr( shift, 35, 3 ); }, dc => { name => 'Language', scheme => 'ISO 639-2' } }, { tag => '041', dc => { name => 'Language', scheme => 'ISO 639-2' } }, { tag => '546', dc => { name => 'Language', scheme => 'RFC 1766' } }, { tag => 775, dc => { name => 'Relation', qualifier => 'isVersionOf' } }, { tag => 786, subfields => 'nt', dc => { name => 'Relation', qualifier => 'isVersionOf' } }, { tag => 775, dc => { name => 'Relation', qualifier => 'isVersionOf', scheme => 'URI' } }, { tag => 786, subfields => 'o', dc => { name => 'Relation', qualifier => 'isVersionOf', scheme => 'URI' } }, { tag => 775, subfields => 'nt', dc => { name => 'Relation', qualifier => 'hasVersion' } }, { tag => 775, subfields => 'o', dc => { name => 'Relation', qualifier => 'hasVersion', scheme => 'URI' } }, { tag => 785, subfields => 'nt', dc => { name => 'Relation', qualifier => 'isReplaceBy' } }, { tag => 785, subfields => 'o', dc => { name => 'Relation', qualifier => 'isReplaceBy', scheme => 'URI' } }, { tag => 780, subfields => 'nt', dc => { name => 'Relation', qualifier => 'Replaces' } }, { tag => 780, subfields => 'o', dc => { name => 'Relation', qualifier => 'Replaces', scheme => 'URI' } }, { tag => 538, dc => { name => 'Relation', qualifier => 'Requires' } }, { tag => 773, subfields => 'nt', dc => { name => 'Relation', qualifier => 'isPartOf' } }, ( map +{ tag => $_, dc => { name => 'Relation', qualifier => 'isPartOf' } }, ( 760, 440, 490, 800, 810, 811, 830 ) ), { tag => 760, dc => { name => 'Relation', qualifier => 'isPartOf', scheme => 'URI' } }, { tag => 773, subfields => 'o', dc => { name => 'Relation', qualifier => 'isPartOf', scheme => 'URI' } }, { tag => 774, subfields => 'nt', dc => { name => 'Relation', qualifier => 'hasPart' } }, { tag => 774, subfields => 'o', dc => { name => 'Relation', qualifier => 'hasPart', scheme => 'URI' } }, { tag => 510, dc => { name => 'Relation', qualifier => 'isReferencedBy' } }, { tag => 776, subfields => 'nt', dc => { name => 'Relation', qualifier => 'isFormatOf' } }, { tag => 530, dc => { name => 'Relation', qualifier => 'isFormatOf' } }, { tag => 776, subfields => 'o', dc => { name => 'Relation', qualifier => 'isFormatOf', scheme => 'URI' } }, { tag => 530, subfields => 'u', dc => { name => 'Relation', qualifier => 'isFormatOf', scheme => 'URI' } }, { tag => 776, subfields => 'nt', dc => { name => 'Relation', qualifier => 'hasFormat' } }, { tag => 530, dc => { name => 'Relation', qualifier => 'hasFormat' } }, { tag => 776, subfields => 'o', dc => { name => 'Relation', qualifier => 'hasFormat', scheme => 'URI' } }, { tag => 530, subfields => 'u', dc => { name => 'Relation', qualifier => 'hasFormat', scheme => 'URI' } }, ( map +{ tag => $_, dc => { name => 'Coverage', qualifier => 'Spacial' } }, ( 522, 651, 255, 752 ) ), { tag => 650, subfields => 'z', dc => { name => 'Coverage', qualifier => 'Spacial' } }, ( map +{ tag => $_, subfields => 'c', dc => { name => 'Coverage', qualifier => 'Spacial', scheme => 'ISO 3166' } }, ( '043', '044' ) ), { tag => 651, subfield_eq => [ '2', 'tgn' ], dc => { name => 'Coverage', qualifier => 'Spacial', scheme => 'TGN' } }, { tag => 513, subfields => 'b', dc => { name => 'Coverage', qualifier => 'Temporal' } }, { tag => '033', subfields => 'a', dc => { name => 'Coverage', qualifier => 'Temporal' } }, ( map +{ tag => $_, dc => { name => 'Rights' } }, ( 506, 540 ) ) ); my @dc_simple = ( { tag => 245, dc => { name => 'Title' } }, ( map +{ tag => $_, dc => { name => 'Creator' } }, ( 100, 110, 111, 700, 710, 711, 720 ) ), ( map +{ tag => $_, dc => { name => 'Subject' } }, ( 600, 610, 611, 630, 650, 653 ) ), ( map +{ tag => $_, dc => { name => 'Description' } }, grep { $_ !~ /^(506|530|540|546)$/ } 500..599 ), { tag => 260, subfields => 'ab', dc => { name => 'Publisher' } }, { tag => 'Leader', code => sub { return $leader06_lut{ substr( shift, 6, 1 ) }; }, dc => { name => 'Type' } }, { tag => 'Leader', code => sub { return $leader07_lut{ substr( shift, 7, 1 ) }; }, dc => { name => 'Type' } }, { tag => 655, dc => { name => 'Type' } }, { tag => 856, subfields => 'q', dc => { name => 'Format' } }, { tag => 856, subfields => 'u', dc => { name => 'Identifier' } }, { tag => 786, subfields => 'ot', dc => { name => 'Source' } }, { tag => '008', code => sub { return substr( shift, 35, 3 ); }, dc => { name => 'Language' } }, { tag => 546, dc => { name => 'Language' } }, { tag => 530, dc => { name => 'Relation' } }, ( map +{ tag => $_, subfields => 'ot', dc => { name => 'Relation' } }, ( 760..787 ) ), ( map +{ tag => $_, dc => { name => 'Coverage' } }, ( 651, 752 ) ), ( map +{ tag => $_, dc => { name => 'Rights' } }, ( 506, 540 ) ) ); my @marc_qualified; my @marc_simple; =head1 METHODS =head2 new( %options ) Creates a new crosswalk object. You can pass the "qualified" option (true/false) as well. # DC Simple $crosswalk = MARC::Crosswalk::DublinCore->new; # DC Qualified $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 1 ); =cut sub new { my $class = shift; my %options = @_; my $self = {}; bless $self, $class; $self->qualified( 1 ) if $options{ qualified }; return $self; } =head2 qualified( $qualified ) Allows you to specify if qualified Dublin Core should be used in the input or output. Defaults to false (DC simple). # DC Simple $crosswalk->qualified( 0 ); # DC Qualified $crosswalk->qualified( 1 ); =cut sub qualified { my $self = shift; my $qualified = @_; $self->{ _QUALIFIED } = $qualified if @_; return $self->{ _QUALIFIED }; } =head2 as_dublincore( $marc ) convert a MARC::Record to a DublinCore::Record. =cut sub as_dublincore { my $self = shift; my $marc = shift; croak( 'Input is not a MARC::Record!' ) unless $marc->isa( 'MARC::Record' ); my $rules = $self->qualified ? \@dc_qualified : \@dc_simple; my $dc = DublinCore::Record->new; for my $rule ( @$rules ) { for my $field ( $rule->{ tag } eq 'Leader' ? $marc->leader : $marc->field( $rule->{ tag } ) ) { next unless defined $field; my $content = ref $field ? $field->as_string( $rule->{ subfields } ) : $field; if( $rule->{ subfield_eq } ) { my @eq = @{ $rule->{ subfield_eq } }; while( @eq ) { $content = undef unless $field->subfield( shift( @eq ) ) eq shift( @eq ); } } if( $rule->{ indicators } ) { for( 0, 1 ) { next unless defined $rule->{ indicators }->[ $_ ]; $content = undef unless $field->indicator( $_ + 1 ) == $rule->{ indicators }->[ $_ ]; } } if( $rule->{ code } ) { $content = $rule->{ code }->( $content ); } if( $content ) { my $element = DublinCore::Element->new( $rule->{ dc } ); $content =~ s/^\s+|\s+$//; $element->content( $content ); $dc->add( $element ); } } } return $dc; } =head2 as_marc( $dublincore ) convert a DublinCore::Record to a MARC::Record. NB: Not yet implemented. =cut sub as_marc { my $self = shift; my $dc = shift; croak( 'Input is not a DublinCore::Record!' ) unless $dc->isa( 'DublinCore::Record' ); my $rules = $self->qualified ? \@marc_qualified : \@marc_simple; my $marc = MARC::Record->new; croak( 'Not implemented.' ); } =head1 TODO =over 4 =item * Implement as_marc() =item * add tests =back =head1 SEE ALSO =over 4 =item * http://www.loc.gov/marc/marc2dc.html =item * http://www.loc.gov/marc/dccross.html =item * MARC::Record =item * DublinCore::Record =back =head1 AUTHOR =over 4 =item * Brian Cassidy Ebricas@cpan.orgE =back =head1 COPYRIGHT AND LICENSE Copyright 2005 by Brian Cassidy This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1;MARC-Crosswalk-DublinCore-0.02/Makefile.PL100666 0 0 1155 10222634237 16373 0ustar usergroup# Note: this file was auto-generated by Module::Build::Compat version 0.03 use ExtUtils::MakeMaker; WriteMakefile ( 'PL_FILES' => {}, 'INSTALLDIRS' => 'site', 'NAME' => 'MARC::Crosswalk::DublinCore', 'EXE_FILES' => [ 'bin/marc2dc' ], 'VERSION_FROM' => 'lib/MARC/Crosswalk/DublinCore.pm', 'PREREQ_PM' => { 'Test::More' => 0, 'DublinCore::Record' => 0, 'MARC::Record' => 0 } ) ; MARC-Crosswalk-DublinCore-0.02/MANIFEST100666 0 0 317 10222632606 15527 0ustar usergroupbin/marc2dc Build.PL Changes lib/MARC/Crosswalk/DublinCore.pm MANIFEST META.yml t/01-use.t t/10-dc_simple.t t/11-dc_qualified.t t/98-pod_coverage.t t/99-pod.t t/camel.usmarc Makefile.PL README MARC-Crosswalk-DublinCore-0.02/META.yml100666 0 0 617 10222634236 15653 0ustar usergroup--- #YAML:1.0 name: MARC-Crosswalk-DublinCore version: 0.02 author: - Brian Cassidy abstract: Convert data between MARC and Dublin Core license: perl requires: DublinCore::Record: 0 MARC::Record: 0 Test::More: 0 provides: MARC::Crosswalk::DublinCore: file: lib/MARC/Crosswalk/DublinCore.pm version: 0.02 generated_by: Module::Build version 0.2609 MARC-Crosswalk-DublinCore-0.02/README100666 0 0 5266 10222634237 15310 0ustar usergroupNAME MARC::Crosswalk::DublinCore - Convert data between MARC and Dublin Core SYNOPSIS my $crosswalk = MARC::Crosswalk::DublinCore->new; # Convert a MARC record to Dublin Core (simple) my $marc = MARC::Record->new_from_usmarc( $blob ); my $dc = $crosswalk->as_dublincore( $marc ); # Convert simple DC to MARC $marc = $crosswalk->as_marc( $dc ); # Convert MARC to qualified DC instead $crosswalk->qualified( 1 ); $dc = $crosswalk->as_dublincore( $marc ); DESCRIPTION This module provides an implentation of the LOC's spec on how to convert metadata between MARC and Dublin Core format. The spec for converting MARC to Dublin Core is available at: http://www.loc.gov/marc/marc2dc.html, and from DC to MARC: http://www.loc.gov/marc/dccross.html. NB: The conversion cannot be done in a round-trip manner. i.e. Doing a conversion from MARC to DC, then trying to go back to MARC will not yield the original record. INSTALLATION To install this module via Module::Build: perl Build.PL ./Build # or `perl Build` ./Build test # or `perl Build test` ./Build install # or `perl Build install` To install this module via ExtUtils::MakeMaker: perl Makefile.PL make make test make install METHODS new( %options ) Creates a new crosswalk object. You can pass the "qualified" option (true/false) as well. # DC Simple $crosswalk = MARC::Crosswalk::DublinCore->new; # DC Qualified $crosswalk = MARC::Crosswalk::DublinCore->new( qualified => 1 ); qualified( $qualified ) Allows you to specify if qualified Dublin Core should be used in the input or output. Defaults to false (DC simple). # DC Simple $crosswalk->qualified( 0 ); # DC Qualified $crosswalk->qualified( 1 ); as_dublincore( $marc ) convert a MARC::Record to a DublinCore::Record. as_marc( $dublincore ) convert a DublinCore::Record to a MARC::Record. NB: Not yet implemented. TODO * Implement as_marc() * add tests SEE ALSO * http://www.loc.gov/marc/marc2dc.html * http://www.loc.gov/marc/dccross.html * MARC::Record * DublinCore::Record AUTHOR * Brian Cassidy COPYRIGHT AND LICENSE Copyright 2005 by Brian Cassidy This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. MARC-Crosswalk-DublinCore-0.02/t/ 40777 0 0 0 10222634237 14565 5ustar usergroupMARC-Crosswalk-DublinCore-0.02/t/01-use.t100666 0 0 336 10147137767 16057 0ustar usergroupuse Test::More tests => 2; use strict; use warnings; BEGIN { use_ok( 'MARC::Crosswalk::DublinCore' ); } my $crosswalk = MARC::Crosswalk::DublinCore->new; isa_ok( $crosswalk, 'MARC::Crosswalk::DublinCore' ); MARC-Crosswalk-DublinCore-0.02/t/10-dc_simple.t100666 0 0 1662 10222611547 17230 0ustar usergroupuse Test::More tests => 10; BEGIN { use_ok( 'MARC::Crosswalk::DublinCore' ); } use strict; use MARC::File::USMARC; my $crosswalk = MARC::Crosswalk::DublinCore->new; isa_ok( $crosswalk, 'MARC::Crosswalk::DublinCore' ); ok( !$crosswalk->qualified, 'DC simple' ); my $dc = $crosswalk->as_dublincore( MARC::File::USMARC->in( 't/camel.usmarc' )->next ); my $record = { subject => [ 'Active server pages.', 'ActiveX.', 'Perl (Computer program language)' ], type => [ 'Text' ], description => [ '"Wiley Computer Publishing."' ], creator => [ 'Martinsson, Tobias, 1976-' ], publisher => [ 'New York : John Wiley & Sons,' ], language => [ 'eng' ], title => [ 'ActivePerl with ASP and ADO / Tobias Martinsson.' ] }; foreach my $element ( keys %$record ) { my @elements = $dc->$element; is_deeply( [ sort map { $_->content } @elements ], $record->{ $element }, $element ); }MARC-Crosswalk-DublinCore-0.02/t/11-dc_qualified.t100666 0 0 4216 10222611547 17701 0ustar usergroupuse Test::More tests => 12; BEGIN { use_ok( 'MARC::Crosswalk::DublinCore' ); } use strict; use MARC::File::USMARC; my $crosswalk = MARC::Crosswalk::DublinCore->new; isa_ok( $crosswalk, 'MARC::Crosswalk::DublinCore' ); $crosswalk->qualified( 1 ); ok( $crosswalk->qualified, 'DC qualified' ); my $dc = $crosswalk->as_dublincore( MARC::File::USMARC->in( 't/camel.usmarc' )->next ); my $record = { format => [ { content => 'xxi, 289 p. :', qualifier => 'Extent', scheme => undef } ], subject => [ { content => '005.13/3 21', scheme => 'DDC', qualifier => undef }, { content => 'Active server pages.', scheme => 'LCSH', qualifier => undef }, { content => 'ActiveX.', scheme => 'LCSH', qualifier => undef }, { content => 'Perl (Computer program language)', scheme => 'LCSH', qualifier => undef }, { content => 'QA76.73.P22 M33 2000', scheme => 'LCC', qualifier => undef }, ], type => [ { content => 'Text', scheme => 'DCMI Type Vocabulary', qualifier => undef }, ], description => [ { content => '"Wiley Computer Publishing."', qualifier => undef, scheme => undef }, ], creator => [ { content => 'Martinsson, Tobias, 1976-', qualifier => undef, scheme => undef }, ], date => [ { content => '2000', qualifier => 'Issued', scheme => undef }, { content => '2000.', qualifier => 'Created', scheme => undef }, { content => '2000.', qualifier => 'Issued', scheme => undef }, ], publisher => [ { content => 'New York : John Wiley & Sons,', qualifier => undef, scheme => undef }, ], language => [ { content => 'eng', scheme => 'ISO 639-2', qualifier => undef }, ], title => [ { content => 'ActivePerl with ASP and ADO / Tobias Martinsson.', qualifier => undef, scheme => undef }, ] }; foreach my $element ( keys %$record ) { my @elements = sort { $a->content cmp $b->content || $a->qualifier cmp $b->qualifier || $a->scheme cmp $b->scheme } $dc->$element; my @result = map +{ qualifier => $_->qualifier || undef, scheme => $_->scheme || undef, content => $_->content || undef }, @elements; is_deeply( \@result, $record->{ $element }, $element ); }MARC-Crosswalk-DublinCore-0.02/t/98-pod_coverage.t100666 0 0 243 10221106071 17706 0ustar usergroupuse Test::More; eval "use Test::Pod::Coverage 1.00"; plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage" if $@; all_pod_coverage_ok();MARC-Crosswalk-DublinCore-0.02/t/99-pod.t100666 0 0 245 10147137767 16065 0ustar usergroupuse Test::More; use strict; use warnings; eval 'use Test::Pod 1.00'; plan skip_all => 'Test::Pod 1.00 required for testing POD' if $@; all_pod_files_ok(); MARC-Crosswalk-DublinCore-0.02/t/camel.usmarc100666 0 0 14677 10222611547 17215 0ustar usergroup00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development.