r2197 - in packages: . libmarc-record-perl
libmarc-record-perl/branches libmarc-record-perl/branches/upstream
libmarc-record-perl/branches/upstream/current
libmarc-record-perl/branches/upstream/current/bin
libmarc-record-perl/branches/upstream/current/etc
libmarc-record-perl/branches/upstream/current/lib
libmarc-record-perl/branches/upstream/current/lib/MARC
libmarc-record-perl/branches/upstream/current/lib/MARC/Doc
libmarc-record-perl/branches/upstream/current/lib/MARC/File
libmarc-record-perl/branches/upstream/current/t
gregor herrmann
gregoa-guest at costa.debian.org
Sat Feb 25 20:45:11 UTC 2006
Author: gregoa-guest
Date: 2006-02-25 20:44:36 +0000 (Sat, 25 Feb 2006)
New Revision: 2197
Added:
packages/libmarc-record-perl/
packages/libmarc-record-perl/branches/
packages/libmarc-record-perl/branches/upstream/
packages/libmarc-record-perl/branches/upstream/current/
packages/libmarc-record-perl/branches/upstream/current/.releaserc
packages/libmarc-record-perl/branches/upstream/current/Changes
packages/libmarc-record-perl/branches/upstream/current/MANIFEST
packages/libmarc-record-perl/branches/upstream/current/META.yml
packages/libmarc-record-perl/branches/upstream/current/Makefile.PL
packages/libmarc-record-perl/branches/upstream/current/README
packages/libmarc-record-perl/branches/upstream/current/bin/
packages/libmarc-record-perl/branches/upstream/current/bin/marcdump
packages/libmarc-record-perl/branches/upstream/current/bin/marclint
packages/libmarc-record-perl/branches/upstream/current/etc/
packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html
packages/libmarc-record-perl/branches/upstream/current/etc/specs
packages/libmarc-record-perl/branches/upstream/current/lib/
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm
packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm
packages/libmarc-record-perl/branches/upstream/current/t/
packages/libmarc-record-perl/branches/upstream/current/t/00.load.t
packages/libmarc-record-perl/branches/upstream/current/t/01.version.t
packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t
packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t
packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t
packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t
packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t
packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t
packages/libmarc-record-perl/branches/upstream/current/t/60.update.t
packages/libmarc-record-perl/branches/upstream/current/t/61.append.t
packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t
packages/libmarc-record-perl/branches/upstream/current/t/62.before.t
packages/libmarc-record-perl/branches/upstream/current/t/63.after.t
packages/libmarc-record-perl/branches/upstream/current/t/64.create.t
packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t
packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t
packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t
packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t
packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t
packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t
packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t
packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t
packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t
packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif
packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc
packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc
packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc
packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t
packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc
packages/libmarc-record-perl/branches/upstream/current/t/convenience.t
packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t
packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t
packages/libmarc-record-perl/branches/upstream/current/t/file-header.t
packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif
packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif
packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif
packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t
packages/libmarc-record-perl/branches/upstream/current/t/lint.t
packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t
packages/libmarc-record-perl/branches/upstream/current/t/pod.t
packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif
packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc
packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif
packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif
packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t
packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc
packages/libmarc-record-perl/branches/upstream/current/t/utf8.t
packages/libmarc-record-perl/tags/
Log:
[svn-inject] Installing original source of libmarc-record-perl
Added: packages/libmarc-record-perl/branches/upstream/current/.releaserc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/.releaserc 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/.releaserc 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4 @@
+sf_group_id 1254
+sf_package_id 41528
+sf_user petdance
+cpan_user PETDANCE
Added: packages/libmarc-record-perl/branches/upstream/current/Changes
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/Changes 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/Changes 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,432 @@
+Revision history for Perl extension MARC::Record.
+
+1.38 March 16th, 2004
+
+ [ENHANCEMENTS]
+ - Performance tweak on MARC::Field->is_control_field() since it
+ gets called a lot when cloning records.
+ - Performance tweak on MARC::Field->as_string(), since it gets
+ called all the time.
+
+
+1.36 March 9th, 2004
+
+ [THINGS THAT MAY BREAK YOUR CODE]
+ - Renamed MARC::Field->is_control_tag() to is_control_field().
+
+ [FIXES]
+ - fixed SYNOPSIS in MARC::Batch to use constructor. Thanks Ed Sperr
+ New England College of Optometry.
+ - fixed reference to the tutorial in README. Thanks Stephen Graham,
+ London Business School.
+ - marcdump and marclint didn't recognize the -v flag.
+ - calls to MARC::Field::subfield() on a control field (tag < 010 )
+ will cause a fatal error, with a friendly message telling you
+ to use data(). Similarly a call to data() on a field >= 010
+ will result in a friendly error telling you to use subfield().
+ Previously a warning was generated, and MARC::Field continued
+ along only to barf when it was unable to find an array ref in
+ $self->{ _subfields }.
+
+ [ENHANCEMENTS]
+ - Finished documentation on all modules. Updated t/pod-coverage.t
+ to keep us in line.
+
+1.34 December 16th, 2003
+ [ENHANCEMENTS]
+ - modified MARC::File::in() to allow passing in filehandles instead
+ of a filename. Useful in situations where you might have data
+ compressed on disk, and want to read from a decompression pipe.
+ This effects MARC::Batch of course as well, which has had its
+ documentation updated.
+ - added t/85.fh.t to test new filehandle passing
+ - Incorrect filetypes passed in to the MARC::Batch constructor
+ now croak instead of die, so you can see where in your code it
+ was called.
+
+ [FIXES]
+ - etc/specs modified to correctly parse LCs docs to get the 250 $b
+ properly. Thanks Bryan Baldus at Quality Books.
+ - new Lint.pm with 250 $b.
+ - MARC::Field now leaves alphabetic indicators as they are instead
+ of squashing to a space. Added test of new functionailty. Thanks
+ Leif Andersson from Stockholms Universitet.
+ - MARC::File::USMARC no longer checks the validity of indicators
+ but leaves that up to MARC::Field (instead of having the check
+ twice).
+ - In MARC::Batch, the 'warn' elements weren't quoted.
+ - warnings_on and strict_on should now be respected.
+
+1.33 November 24th, 2003
+ MARC::Record should now run on Perls back to 5.00503!
+
+ [FIXES]
+ - fixed behavior in MARC::File::USMARC which was causing
+ MARC::File::next() to return a partial record when the record
+ lacked a proper end of directory byte. RT #4474. Added regression
+ test t/82.baddir.t.
+ - we now warn on improper 010 tag access, not croak.
+ - fixed t/80.alphatag to test new MARC::Field::data() behavior
+ - doc fix to insert_field_grouped()
+ - tons of fixes and additions to MARC::Doc::Tutorial
+
+ [INTERNALS]
+ - Moved pl/ to bin/
+ - Split out the sfdocs stuff from Makefile.PL to bin/makesfdocs
+
+1.32 November 5th, 2003
+ [ENHANCEMENTS]
+ - added insert_ordered_fields(), thanks Leif Andersson.
+
+1.31 October 16th, 2003
+ [FIXES]
+ - set_leader_lengths() will now also set other MARC21 leader defaults.
+ Postitions 10-11, 20-23. For details on the defaults see:
+ http://www.loc.gov/marc/bibliographic/ecbdldrd.html
+ - MARC::Batch::next() now accepts a filter function.
+ - Fixed an incorrect instruction in MARC::File::MicroLIF.
+ - marclint actually counts the number of records now.
+
+ [DOCUMENTATION]
+ - Added sample usage for insert_grouped_fields()
+ - Added example about subfield v to x conversion to tutorial.
+ - Documentation fix for MARC::Field::new().
+ - Fixed useage of MARC::Record::append_fields() in example 17
+ of the Tutorial.
+ - Added TODO test for utf8 handling (utf8.t)
+ - Fixed doc bug in MARC::File::USMARC (#2937)
+
+1.30 There is no 1.30. We skipped a number.
+
+1.29 June 05, 2003
+ [ENHANCEMENTS]
+ - MARC::Field::subfield() will return a list of all subfield
+ data when called in a list context...and only the first when
+ called in a scalar context. Also added a test 67.subfield.t
+ to test new functionality.
+
+1.28 May 23, 2003
+ [FIXES]
+ - Fixed MARC::Lint::check_record()'s checking for multiple 1XX tags.
+
+ - Fixed the docs for MARC::Lint and what errors it says it catches.
+
+1.27 May 22, 2003
+ [ENHANCMENTS]
+ - MARC::Field::update() by default will append any subfields which do
+ not exist in the record to the end of the field. Added tests to test
+ the new functionality to 60.update.t
+
+ [FIXES]
+ - Updated MARC::Lint to use the latest field/subfield designations from
+ the Library of Congress. The data for MARC::Lint is now
+ automatically generated from the LC webpage. Thanks to Colin
+ Campbell of Sirsi for the program that does the translation.
+
+ - removed MARC::Lint check_260() since a subfield c is not
+ mandatory (see RT #1565).
+
+1.26 May 8, 2003
+ [FIXES]
+ - Removed the "use warnings" in the couple of files that used it.
+ This obviates the need for the pre5006.patch file.
+
+ - Fixed some warnings for undefs. These only turned up because
+ Test::Harness now has warnings turned on.
+
+1.25 April 22, 2003
+ NO CHANGES. Just compensating for upload problems.
+
+1.24 April 22, 2003
+ [ENHANCEMENTS]
+ - expanded documentation for MARC::Field::as_string()
+
+ [FIX]
+ - modified MARC::File::USMARC to silently ignore any
+ combination of nulls, spaces, CRs, and LFs between
+ records. (They're not allowed to be there, but some
+ vendors put them there anyway.) With this change in
+ place you will now get the complete record--if the
+ inter-record garbage is the only problem--rather than
+ a record with (usually) zero fields.
+
+1.23 March 30, 2003
+ [FIX]
+ - removed t/85.utf8.t since it did not work
+ - removed bytes pragma usage since there is no feasible way to
+ get MARC::Record to properly handle utf8 while it is using
+ substr() so heavily. substr() uses character lengths, and
+ directory positions measure lengths in bytes.
+ - updated pre5006.patch to only remove warnings pragma
+
+1.22 March 23, 2003
+ - added t/85.utf8.t to test record lengths work when utf8 data
+ is present in a record (regression test for RT #2165)
+ - warnings and bytes pragmas are now explicit
+ - added patch for removing warnings and bytes pragmas for Perl
+ versions < 5.006
+ - updated README to include information about the patch
+ [FIX]
+ - removed warnings pragma from MARC/File/USMARC.pm and
+ MARC/File/MicroLIF.pm since with warnings on, they generate quite
+ a few warnings. These are mainly thrown by substr() when
+ working with invalid MARC data.
+
+1.21 March 14, 2003
+ [ENHANCEMENTS]
+ - MARC::File::MicroLIF now reads the MicroLIF header from
+ the input file and makes it available via the header()
+ call. If there is no header in the file, header()
+ will return undef. Because the header is now taken
+ care of when the file is opened,
+ MARC::File::MicroLIF::decode no longer supports skipping
+ the file header.
+ - MARC:File::MicroLIF::decode now detects fields that
+ have no subfields (other than 001-009) rather than
+ passing them through to MARC::Field which croak()s.
+ When such a tag is encountered it is thrown away and
+ a warning added to the MARC::Record, rather than
+ allowing MARC::Field to croak().
+ - Updated data files used to test MARC::File::MicroLIF
+ so that they have a header.
+
+ [FIXES]
+ - MARC:File::MicroLIF now supports input files with any
+ type of line ending--\x0d, \x0a, or \x0d\0a. A file no
+ longer has to have created on a system with compatible
+ line endings.
+ - Fixed invalid assumption in MARC::File::MicroLIF that
+ the MicroLIF header is supposed to begin with 'HDR'.
+
+1.20 February 26, 2003
+ [FIXES]
+ - Removed $VERSION from all modules except for MARC::Record
+ itself.
+ - Fixed a $VERSION problem in MARC::Record that prevented CPAN
+ from indexing the module correctly.
+ - Added more tests to the .t files.
+
+1.18 February 16, 2003
+ [ENHANCEMENTS]
+ - when MARC::Batch::no_strict() will allow you to read in
+ records with invalid record lengths.
+ [FIXES]
+ - Changes to MARC::File::USMARC->decode() to fix the
+ rt.cpan.org bug #2017, "MARC::File::USMARC assumes
+ that fields apper in directory order".
+ - Stricter checking on MARC directory entries.
+
+1.17 January 29, 2003
+ [ENHANCEMENTS]
+ - Added optional subfield string to MARC::Field::as_string().
+ - Added tag-based filtering on the USMARC constructors and
+ passthru support for this in MARC::File::next(). Now you can
+ select which tags get put into your MARC record, and not have
+ to pay the processing costs for fields you're going to ignore.
+ - title_proper() now returns the _a, _n and _p from the 245 in
+ whatever order they happen to appear. Thanks to Anne Highsmith
+ for the change and the test data.
+ - Minor speed tweaks when checking for tags < 010
+ - Made the POD checking in t/99.pod.t work better. Eventually I
+ need to make the same changes into Test::Pod.
+
+1.16 January 28, 2003
+ [ENHANCEMENTS]
+ - title() and author() now return empty strings, rather than
+ "<No XXX found>"
+ - Added title_proper(), edition() and publication_date()
+ convenience methods to MARC::Record.
+ - Added more unit tests.
+
+ [FIXES]
+ - marcdump utility will not output LDR when running under --field
+ option, unless the LDR is specifically asked for.
+
+1.15 December 8, 2002
+ [FIXES]
+ - Ignores and warns about any completely empty subfields (i.e. not
+ even any indicators)
+ - MARC::File::USMARC::decode and MARC::File::MicroLIF::decode needed to
+ be able to be called in a variety of ways: $obj->decode(),
+ MARC::File::MicroLIF->decode() and MARC::File::MicroLIF::decode()
+ Added t/081.decode.t to make sure things are shipshape.
+
+1.14 November 27, 2002
+ [FIXES]
+ - Fixed bug in MARC::File::USMARC that was set off by failure of
+ t/75.warnings.t under ActivePerl and CygWin.
+
+1.13 November 26, 2002
+ [ENHANCEMENTS]
+ - Moved new_from_usmarc() docs & code up right after new() to
+ be more prominent. Thanks to Chris Biemesderfer for pointing this
+ out.
+ - Added Chris Biemesderfer's section to the tutorial which
+ discusses using MARC::Record with Net::Z3950.
+ - Yet another overhaul to MARC::Batch to allow for error trapping.
+ Added the warnings_on() warnings_off() methods to turn on/off
+ warnings on STDERR. Also added strict_on() and strict_off() to
+ change the behavior of next() when an error is encountered.
+ Thanks to Rob Fox of Notre Dame for providing guidance on the type
+ of behavior that is really needed when batch processing.
+ - Added new tests for the improved handling of errors in MARC::Batch.
+ - Added new warnings and strict methods to MARC::Doc::Tutorial, also
+ added more use of MARC::Batch instead of using MARC::File directly.
+ - Improved docs on some functions to explicitly says what gets
+ returned from each function.
+
+1.12 October 9, 2002
+ [ENHANCEMENTS]
+ - Makefile.PL will now generate PDF and HTML documentation for
+ Sourceforge when asked to.
+ - Added a test for insert_field_grouped()
+ - Added subject heading example to Tutorial
+ - Fixed typo in docs for MARC::Record::append_fields()
+ - Added code (and tests) for allowing users to specify alphanumeric
+ tags. This is little used, but it's in the spec, and someone asked
+ for it (Notre Dame). Edits were to MARC::Field and to a lesser
+ extent MARC::Record.
+
+1.11 September 10, 2002
+ [ENHANCEMENTS]
+ - Added a 99.pod.t to check pod
+ - insert_fields_before(), insert_fields_after(), appned_fields(),
+ and insert_grouped_fields() now call croak() instead of _gripe
+ in order to help MARC::Record users to locate where their call
+ is failing. Thanks to Jackie Shieh for pointing this out.
+ - MARC::Batch is now fault tolerant, in that it will store
+ warnings about file format problems, but will not bomb out.
+ The method MARC::Batch::warnings() can be used to get info
+ about what went wrong while reading a record, and users can
+ determine what to do. Thanks to Betsy Earl for solidifying the
+ need for this.
+
+1.10 August 30, 2002
+ [ENHANCEMENTS]
+ - Now runs under Perl 5.005. All you people who have older Perls can
+ now share in the joy that is MARC::Record.
+ - Added warnings() and _warn methods to MARC::Batch, MARC::File to
+ support warning collection and reporting.
+ - Added use bytes to MARC::File::USMARC so that calls to length() will
+ return actual bytes rather than characters if Unicode characters are
+ found in the data. This only works if you're using 5.6.0+.
+
+ [FIXES]
+ - Modified MARC::File::USMARC::_next() to slurp in a record using
+ local $/ = 0x1D, rather than reading record length and then calling
+ read(). This will allow recovery from invalid leaders in batch
+ reading.
+
+1.00 July 3, 2002
+ - _gripe() fires off warnings instead of dying silently.
+ - MARC::File::USMARC no longer creates an error if it's and the
+ end of a file when it tries to next().
+ - Tests use the isa_ok() function to be more stringent in checking
+ return values from functions.
+
+0.94 June 10, 2002
+ - Added $MARC::Record::DEBUG
+ - Added --debug flag to marcdump to enable $MARC::Record::DEBUG
+ - Added 'Validation' section to MARC::Doc::Tutorial
+ - Added append_fields(), insert_fields_after(),
+ insert_fields_before() and deprecated add_fields()
+ - Added test of new methods (t/60.insert.t)
+ - Updated MARC::Doc::Tutorial to reflect change in add_fields()
+
+0.93 May 21, 2002
+ - Added update() and replace_with() methods to MARC::Field
+ - Added more stuff to MARC::Doc::Tutorial
+ - Added MARC::Doc::Tutorial
+ - Changed method call description for as_usmarc() in MARC::Record.
+ - Removed IDEA for cloning in MARC::Record docs since it's been done.
+
+0.92 April 2, 2002
+ - Fixed marclint to use the new MARC::File object
+ - Added MARC::Record::new_from_usmarc() for backward compatibility.
+ This is in addition to the MARC::Record::as_usmarc() function.
+
+0.91 April 2, 2002
+ - Fixed a bad build: MARC::Batch wasn't included in the tarball.
+
+ - marcdump now takes a --lif parm to be able to dump MicroLIF
+ records.
+
+0.90 April 1, 2002
+ - Alpha version of what will become MARC::Record 1.00.
+
+ - MAJOR infrastructure changes. Scripts WILL break.
+
+ - The file-handling has been removed from the MARC::Record class
+ and moved into its own MARC::File::* set of classes.
+
+ - First rudimentary MARC::Batch functionality. This will make
+ it easy to handle bunches of files at once without having to
+ muck with what file you're on.
+
+ - Now fully embracing all the glory of 5.6+ Perl, such as the
+ "our" keyword and $fh filehandles.
+
+0.15 March 19, 2002
+ - Added clone() methods for MARC::Field and MARC::Record, so
+ you can make a copy of an existing record. Plus, this acts
+ as a filter to create records that are subsets of another.
+
+ - Added selective printing of fields in marcdump. Now you
+ can do something like this:
+
+ marcdump myfile.marc --field=245 --field=1XX
+
+ and only get back the title and author fields
+
+0.14 March 7, 2002
+ - Added skip_from_file() to read and ignore a record. It's the
+ same as next_from_file(), without the overhead of the parsing.
+
+0.13 November 18, 2001
+ - MARC::Lint now squawks if there are inappropriate control
+ characters in the data.
+
+0.12 November 13, 2001
+ - new_from_microlif() now allows underscores that are embedded in a
+ subfield, and ignores any HDR line that gets passed to it.
+
+0.11 November 12, 2001
+ - Added inbound microlif support.
+ - Added lif2marc program.
+
+0.10 September 27, 2001
+ - Correctly updates the base address in the leader. Thanks to
+ Tim Wentz (twentz at mc.net) for finding & fixing.
+
+0.09 August 9, 2001
+ - Updated rules from "Understanding MARC" book.
+ - Added delete_field() method.
+
+0.08 May 25, 2001
+ - Added MARC::Record::title and ::author methods
+ - Added the marclint program.
+ - Added the rest of the rules for the 5XX tags forward.
+ - Made the modules compatible with Perl 5.004. The exception
+ is MARC::Lint, which requires 5.005 because of the qr//
+ operator.
+ - as_string() methods now return raw strings, without any special
+ formatting. To get the formatted strings from versions <=0.07,
+ use as_formatted().
+
+0.07 May 22, 2001
+ - Added the rudimentary MARC::Lint module.
+ - Added parms to marcdump program
+
+0.06 May 16, 2001
+ - Added marcdump program as demo and actual useful code
+
+0.05 May 16, 2001
+ - Created t/camel.t as the basis for a test suite.
+ - Removed the MARC::Field::subfields() method
+ - Documentation cleanup.
+
+0.04 May 15, 2001
+ - Sped up the MARC::Record and MARC::Field constructors about 30%.
+
+0.01 Apr 20, 2001
+ - First version.
Added: packages/libmarc-record-perl/branches/upstream/current/MANIFEST
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/MANIFEST 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/MANIFEST 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,65 @@
+.releaserc
+Changes
+MANIFEST
+Makefile.PL
+META.yml
+README
+bin/marcdump
+bin/marclint
+etc/ecbdlist.html
+etc/specs
+lib/MARC/Batch.pm
+lib/MARC/Doc/Tutorial.pod
+lib/MARC/Field.pm
+lib/MARC/File/MicroLIF.pm
+lib/MARC/File.pm
+lib/MARC/File/USMARC.pm
+lib/MARC/Lint.pm
+lib/MARC/Record.pm
+t/00.load.t
+t/01.version.t
+t/10.camel.t
+t/11.astring.t
+t/12.ldr.t
+t/20.clone.t
+t/50.batch.t
+t/60.insert.t
+t/60.update.t
+t/61.append.t
+t/61.replace.t
+t/62.before.t
+t/63.after.t
+t/64.create.t
+t/66.grouped.t
+t/66.ordered.t
+t/70.croak.t
+t/75.warnings.t
+t/80.alphatag.t
+t/81.decode.t
+t/82.baddir.t
+t/83.indicators.t
+t/85.fh.t
+t/alphatag.lif
+t/baddir.usmarc
+t/badind.usmarc
+t/badldr.usmarc
+t/batch-filter.t
+t/camel.usmarc
+t/convenience.t
+t/decode-filter.t
+t/file-filter.t
+t/file-header.t
+t/lineendings-0a.lif
+t/lineendings-0d0a.lif
+t/lineendings-0d.lif
+t/lineendings.t
+t/lint.t
+t/pod.t
+t/pod-coverage.t
+t/sample100.lif
+t/sample1.lif
+t/sample1.usmarc
+t/sample20.lif
+t/title_proper.t
+t/title_proper.usmarc
+t/utf8.t
Added: packages/libmarc-record-perl/branches/upstream/current/META.yml
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/META.yml 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/META.yml 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,14 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: MARC-Record
+version: 1.38
+version_from: lib/MARC/Record.pm
+installdirs: site
+requires:
+ Carp: 0
+ File::Find: 0
+ File::Spec: 0
+ Test::More: 0
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.21
Added: packages/libmarc-record-perl/branches/upstream/current/Makefile.PL
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/Makefile.PL 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/Makefile.PL 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,36 @@
+use 5.005;
+use strict;
+use ExtUtils::MakeMaker;
+use File::Find;
+
+find( \&filecheck, "." );
+
+sub filecheck {
+ unlink if /~$/; # Remove any vi backup files
+ die "Aborting: Swapfile $_ found" if /\.swp$/;
+}
+
+&WriteMakefile(
+ NAME => 'MARC::Record',
+ DISTNAME => 'MARC-Record',
+ VERSION_FROM => 'lib/MARC/Record.pm',
+ ABSTRACT_FROM => 'lib/MARC/Record.pm',
+ PMLIBDIRS => [ qw( lib/ ) ],
+ AUTHOR => 'Andy Lester <andy at petdance.com>',
+ PREREQ_PM => {
+ 'Test::More' => 0,
+ 'File::Spec' => 0,
+ 'File::Find' => 0,
+ 'Carp' => 0,
+ },
+ EXE_FILES => [ qw( bin/marcdump bin/marclint ) ],
+ dist => {
+ COMPRESS => 'gzip -9f',
+ SUFFIX => 'gz',
+ },
+ depend => {
+ Makefile => '$(VERSION_FROM)'
+ },
+ clean => { FILES => 'MARC-Record-*' },
+
+);
Added: packages/libmarc-record-perl/branches/upstream/current/README
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/README 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/README 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,65 @@
+MARC::Record and its family
+===========================
+
+SYNOPSIS
+
+The MARC::* series of modules create a simple object-oriented
+abstraction of MARC record handling. The files are:
+
+MARC::Doc::Tutorial
+ A tutorial explaining how to use MARC::Record.
+
+MARC::Record
+ The core class for representing a single MARC record.
+
+MARC::Field
+ Another core class for representing a single field in a record.
+
+MARC::Batch
+ The basic object for access to a batch of one or more MARC records.
+
+MARC::File
+ Base class for the MARC file.
+
+MARC::File::USMARC
+MARC::File::MicroLIF
+ Subclasses of MARC::File specific to the USMARC and MicroLIF formats
+
+MARC::Lint
+ Extension to check MARC records for validity.
+
+
+INSTALLATION
+
+To install this module type the following:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+
+DEPENDENCIES
+
+If you would like to run MARC::Record under a Perl version that is earlier than
+v5.006 there is a patch which you can apply prior to installing:
+
+ tar xvfz MARC-Record-1.XX.tar.gz
+ cd MARC-Record-1.XX
+ patch -p1 < pre5006.patch
+
+MARC::* requires Perl and Test::More for tests. Test::More comes standard in
+Perl 5.8.
+
+Tests are known to fail under Perl 5.6.0. We recommend you upgrade to a later
+version of Perl, or downgrade to an earlier one if you want to use
+MARC::Record. Perl 5.6.0 is known to have been an unstable release of Perl,
+which was quickly rectified in 5.6.1 and later releases.
+
+COPYRIGHT AND LICENCE
+
+This software is free software and may be distributed under the same
+terms as Perl itself .
+
+Copyright (C) 2001-2002 Andy Lester <marc at petdance.com>
+
Added: packages/libmarc-record-perl/branches/upstream/current/bin/marcdump
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/bin/marcdump 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/bin/marcdump 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,98 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+marcdump - MARC record dump utility
+
+=head1 SYNOPSIS
+
+B<marcdump> [options] file(s)
+
+=cut
+
+use strict;
+use integer;
+
+use MARC::File;
+use MARC::Record;
+use Getopt::Long;
+
+my $opt_print = 1;
+my $opt_quiet = 0;
+my $opt_stats = 1;
+my @opt_field = ();
+my $opt_help = 0;
+my $opt_lif = 0;
+
+my $rc =
+ GetOptions(
+ "version" => sub { print "$0, using MARC::Record v$MARC::Record::VERSION\n"; exit 1; },
+ "print!" => \$opt_print,
+ "lif!" => \$opt_lif,
+ "quiet" => \$opt_quiet,
+ "stats!" => \$opt_stats,
+ "field=s" => \@opt_field,
+ "debug!" => \$MARC::Record::DEBUG,
+ "help" => \$opt_help,
+ );
+
+my @files = @ARGV;
+if ( $opt_help || !@files || !$rc ) {
+ print <DATA>;
+ exit 1;
+}
+
+my $wants_leader = grep { /LDR/ } @opt_field;
+
+my $class = $opt_lif ? "MARC::File::MicroLIF" : "MARC::File::USMARC";
+eval "require $class"; # Must be quoted to get path searching
+
+my %counts;
+my %errors;
+for my $filename ( @files ) {
+ $counts{$filename} = 0;
+ $errors{$filename} = 0;
+
+ warn "$filename\n" unless $opt_quiet;
+
+ my $file = $class->in( $filename ) or die $MARC::File::ERROR;
+
+ while ( my $marc = $file->next() ) {
+ ++$counts{$filename};
+ warn "$counts{$filename} records\n" if ( !$opt_quiet && ($counts{$filename} % 1000 == 0) );
+
+ if ( @opt_field ) {
+ $marc = $marc->clone( @opt_field );
+ $marc->leader('') unless $wants_leader;
+ }
+
+ print $marc->as_formatted, "\n\n" if $opt_print;
+ if ( $marc->warnings() ) {
+ ++$errors{$filename};
+ print join( "\n", $marc->warnings(), "" );
+ }
+ } # while
+ $file->close();
+} # for
+
+if ( $opt_stats ) {
+ print " Recs Errs Filename\n";
+ print "----- ----- --------\n";
+ for my $key ( sort keys %counts ) {
+ printf( "%5d %5d %s\n", $counts{$key}, $errors{$key}, $key );
+ } # for
+} # if stats
+
+__END__
+Usage: marcdump [options] file(s)
+
+Options:
+ --[no]print Print a MicroLIF-style dump of each record
+ --lif Input files are MicroLIF, not USMARC
+ --field=spec Specify a field spec to include. There may be many.
+ Examples:
+ --field=245 --field=1XX
+ --[no]quiet Print status messages
+ --[no]stats Print a statistical summary by file at the end
+ --version Print version information
+ --help Print this summary
Property changes on: packages/libmarc-record-perl/branches/upstream/current/bin/marcdump
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/bin/marclint
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/bin/marclint 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/bin/marclint 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,108 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+marclint - MARC record dump utility
+
+=head1 SYNOPSIS
+
+B<marclint> [options] file(s)
+
+=over 4
+
+=item options
+
+=over 4
+
+=item --help
+
+Print a summary of commands
+
+=item --[no]stats
+
+Print a statistical summary by file at the end. (Default: on)
+
+=back
+
+=back
+
+=cut
+
+use strict;
+use integer;
+
+use MARC::File::USMARC;
+use MARC::Lint;
+use Getopt::Long;
+
+use constant USAGE => <<"END";
+Usage: marclint [options] file(s)
+ options
+ --help
+ Print a summary of commands
+ --version
+ Print version
+ --[no]quiet
+ Suppress status messages
+ --[no]stats
+ Print a statistical summary by file at the end
+END
+
+my $stats = 1;
+my $help = 0;
+my $quiet = 0;
+
+my $rc = GetOptions(
+ "stats!" => \$stats,
+ "quiet!" => \$quiet,
+ "help" => \$help,
+ "version" => sub { print "$0, using MARC::Record v$MARC::Record::VERSION\n"; exit 1; },
+ );
+
+my @files = @ARGV;
+
+die USAGE if $help or (not $rc) or (@files == 0);
+
+my $linter = new MARC::Lint;
+my %counts;
+my %errors;
+
+for my $filename ( @files ) {
+ $counts{$filename} = 0;
+ $errors{$filename} = 0;
+
+ my $file = MARC::File::USMARC->in( $filename ) or die $MARC::File::ERROR;
+ warn "$filename\n" unless $quiet;
+
+ while ( my $marc = $file->next() ) {
+ if ( not $marc ) {
+ warn $MARC::Record::ERROR;
+ ++$errors{$filename};
+ } else {
+ ++$counts{$filename};
+ }
+
+ $linter->check_record( $marc );
+
+ if ( $linter->warnings ) {
+ print join( "\n",
+ $marc->title,
+ $linter->warnings,
+ "",
+ "",
+ );
+ ++$errors{$filename};
+ }
+ } # while
+ $file->close();
+} # for
+
+if ( $stats ) {
+ print "\n\n";
+ print " Recs Errs Filename\n";
+ print "----- ----- --------\n";
+ for my $key ( sort keys %counts ) {
+ printf( "%5d %5d %s\n", $counts{$key}, $errors{$key}, $key );
+ } # for
+} # if stats
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/bin/marclint
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/etc/ecbdlist.html 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html40/loose.dtd">
+<html>
+<head>
+<title>MARC 21 Format for Bibliographic Data: Field List</title>
+<base href="http://www.loc.gov/marc/bibliographic/ecbdlist.html">
+<meta name="description" content="This document is the homepage
+ for the list of data elements from the MARC 21 Bibliographic
+format/">
+<meta name="keywords" content="MARC 21 bibliographic format list
+of elements">
+</head>
+<body bgcolor="#ffffff">
+<h1 align=center><em>MARC 21 FORMAT FOR BIBLIOGRAPHIC DATA: FIELD LIST</em></h1>
+<p align=center>1999 English Edition<br>
+ Update No. 1 (October 2000)<br>
+ Update No. 2 (October 2001)<br>
+ Update No. 3 (October 2002)</p>
+<h2 align=center>Network Development and MARC Standards
+ Office</h2>
+<p>This document lists all valid and obsolete data elements that may appear in
+ MARC 21 bibliographic records. It is intended to meet the need for a simple
+ data element list to support MARC system development and online validation of
+ MARC data elements. This listing does not include any descriptions or examples
+ of MARC data elements. Descriptions and examples can be found in the <em><a href="http://www.loc.gov/marc/bibliographic/">MARC
+ 21 Concise Bibliographic Format</a></em>.</p>
+<hr>
+<pre>--Leader and Directory--<br>
+ LEADER<br> Character Positions<br> 00-04 - Logical record length<br> 05 - Record status<br> a - Increase in encoding level
+ c - Corrected or revised<br> d - Deleted<br> n - New<br> p - Increase in encoding level from prepublication<br> 06 - Type of record<br> a - Language material<br> b - Archival and manuscripts control [OBSOLETE]<br> c - Notated music<br> d - Manuscript notated music<br> e - Cartographic material<br> f - Manuscript cartographic material<br> g - Projected medium<br> h - Microform publications [OBSOLETE]<br> i - Nonmusical sound recording<br> j - Musical sound recording<br> k - Two-dimensional nonprojectable graphic<br> m - Computer file<br> n - Special instructional material [OBSOLETE]<br> o - Kit<br> p - Mixed material<br> r - Three-dimensional artifact or naturally occurring object<br> t - Manuscript language material<br> 07 - Bibliographic level<br> a - Monographic component part<br> b - Serial component part<br> c - Collection<br> d - Subunit<br> i - Integrating resource<br> m - Monograph/item<br> s - Serial<br> 08 - Type of control<br> # - No specific type<br> a - Archival<br> 09 - Character coding scheme<br> # - MARC-8<br> a - UCS/Unicode<br> 10 - Indicator count<br> 11 - Subfield code count<br> 12-16 - Base address of data<br> 17 - Encoding level<br> # - Full level<br> 1 - Full level, material not examined<br> 2 - Less-than-full level, material not examined<br> 3 - Abbreviated level<br> 4 - Core level<br> 5 - Partial (preliminary) level<br> 7 - Minimal level<br> 8 - Prepublication level<br> u - Unknown<br> z - Not applicable<br> 18 - Descriptive cataloging form<br> # - Non-ISBD<br> a - AACR 2<br> i - ISBD<br> p - Partial ISBD (BK) [OBSOLETE]<br> r - Provisional (VM MP MU) [OBSOLETE]<br> u - Unknown<br> 19 - Linked record requirement<br> # - Related record not required<br> r - Related record required<br> 20-23 - Entry map<br> 20 - Length of the length-of-field portion<br> 21 - Length of the starting-character-position portion<br> 22 - Length of the implementation-defined portion<br> 23 - Undefined Entry map character position
+DIRECTORY<br> Character Positions<br> 00-02 - Tag<br> 03-06 - Field length<br> 07-11 - Starting character position
+
+--Control Fields (001-006)--<br>
+001 - CONTROL NUMBER (NR)<br>
+003 - CONTROL NUMBER IDENTIFIER (NR)<br>
+005 - DATE AND TIME OF LATEST TRANSACTION (NR)<br>
+006 - FIXED-LENGTH DATA ELEMENTS--ADDITIONAL MATERIAL CHARACTERISTICS<br> --GENERAL INFORMATION (R)<br> 006--BOOKS<br> Character Positions<br> 00 - Form of material<br> a - Language material<br> t - Manuscript language material<br> 01-04 - Illustrations<br> 05 - Target audience<br> 06 - Form of item<br> 07-10 - Nature of contents<br> 11 - Government publication<br> 12 - Conference publication<br> 13 - Festschrift<br> 14 - Index<br> 15 - Undefined<br> 16 - Literary form<br> 17 - Biography<br> 006--COMPUTER FILES/ELECTRONIC RESOURCES<br> Character Positions<br> 00 - Form of material<br> m - Computer file/Electronic resource<br> 01-04 - Undefined<br> 05 - Target audience<br> 06-08 - Undefined<br> 09 - Type of computer file<br> 10 - Undefined<br> 11 - Government publication<br> 12-17 - Undefined<br> 006--MAPS<br> Character Positions<br> 00 - Form of material<br> e - Cartographic material<br> f - Manuscript cartographic material<br> 01-04 - Relief<br> 05-06 - Projection<br> 07 - Undefined<br> 07 - Prime meridian [OBSOLETE]<br> 08 - Type of cartographic material<br> 09-10 - Undefined<br> 11 - Government publication<br> 12 - Form of item<br> 12 - Undefined [OBSOLETE]<br> 13 - Undefined<br> 14 - Index<br> 15 - Undefined<br> 16-17 - Special format characteristics<br> 006--MIXED MATERIALS<br> Character Positions<br> 00 - Form of material<br> p - Mixed material<br> 01-05 - Undefined<br> 06 - Form of item<br> 07-17 - Undefined<br> 006--MUSIC<br> Character Positions<br> 00 - Form of material<br> c - Notated music<br> d - Manuscript notated music<br> i - Nonmusical sound recording<br> j - Musical sound recording<br> 01-02 - Form of composition<br> 03 - Format of music<br> 04 - Music parts<br> 05 - Target audience<br> 06 - Form of item<br> 07-12 - Accompanying matter<br> 13-14 - Literary text for sound recordings<br> 15 - Undefined
+ 16 - Transposition and arrangement
+ 17 - Undefined<br> 006--CONTINUING RESOURCES<br> Character Positions<br> 00 - Form of material<br> s - Serial/Integrating resource<br> 01 - Frequency<br> 02 - Regularity<br> 03 - ISSN center<br> 04 - Type of continuing resource<br> 05 - Form of original item<br> 06 - Form of item<br> 07 - Nature of entire work<br> 08-10 - Nature of contents<br> 11 - Government publication<br> 12 - Conference publication<br> 13-15 - Undefined<br> 16 - Original alphabet or script of title<br> 17 - Entry convention<br> 006--VISUAL MATERIALS<br> Character Positions<br> 00 - Form of material<br> g - Projected medium<br> k - Two-dimensional nonprojectable graphic<br> o - Kit<br> r - Three-dimensional artifact or naturally occurring object<br> 01-03 - Running time<br> 04 - Undefined<br> 05 - Target audience<br> 06-10 - Undefined<br> 06-10 - Accompanying matter [OBSOLETE]<br> 11 - Government publication<br> 12 - Form of item<br> 12 - Undefined [OBSOLETE]<br> 13-15 - Undefined<br> 16 - Type of visual material<br> 17 - Technique<br><br>--Control Field 007--<br> 007 - PHYSICAL DESCRIPTION FIXED FIELD
+ --GENERAL INFORMATION (R)<br> 007--MAP<br> Character Positions<br> 00 - Category of material<br> a - Map<br> 01 - Specific material designation<br> d - Atlas<br> g - Diagram<br> j - Map<br> k - Profile<br> q - Model<br> r - Remote-sensing image<br> s - Section<br> u - Unspecified<br> y - View<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Color<br> a - One color<br> c - Multicolored<br> | - No attempt to code<br> 04 - Physical medium<br> a - Paper<br> b - Wood<br> c - Stone<br> d - Metal<br> e - Synthetic<br> f - Skin<br> g - Textile<br> j - Glass<br> p - Plaster<br> q - Flexible base photographic, positive<br> r - Flexible base photographic, negative<br> s - Non-flexible base photographic, positive<br> t - Non-flexible base photographic, negative<br> u - Unknown<br> y - Other photographic medium<br> z - Other<br> | - No attempt to code<br> 05 - Type of reproduction<br> f - Facsimile<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 06 - Production/reproduction details<br> a - Photocopy, blueline print<br> b - Photocopy<br> c - Pre-production<br> d - Film<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 07 - Positive/negative aspect<br> a - Positive<br> b - Negative<br> m - Mixed polarity<br> n - Not applicable<br> | - No attempt to code<br> 007--ELECTRONIC RESOURCE<br> Character Positions<br> 00 - Category of material<br> c - Computer file<br> 01 - Specific material designation<br> a - Tape cartridge<br> b - Chip cartridge<br> c - Computer optical disc cartridge<br> f - Tape cassette<br> h - Tape reel<br> j - Magnetic disk<br> m - Magneto-optical disc<br> o - Optical disc<br> r - Remote<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Color<br> a - One color<br> b - Black-and-white<br> c - Multicolored<br> g - Gray scale<br> m - Mixed<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 04 - Dimensions<br> a - 3 1/2 in.<br> e - 12 in.<br> g - 4 3/4 in. or 12 cm.<br> i - 1 1/8 x 2 3/8 in.<br> j - 3 7/8 x 2 1/2 in.<br> n - Not applicable<br> o - 5 1/4 in.<br> u - Unknown<br> v - 8 in.<br> z - Other<br> | - No attempt to code<br> 05 - Sound<br> # - No sound (silent)<br> a - Sound on medium<br> u - Unknown<br> | - No attempt to code<br> 06-08 - Image bit depth<br> 001-999 - Exact bit depth<br> mmm - Multiple<br> nnn - Not applicable<br> --- - Unknown<br> ||| - No attempt to code<br> 09 - File formats<br> a - One<br> m - Multiple<br> u - Unknown<br> | - No attempt to code<br> 10 - Quality assurance target(s)<br> a - Absent<br> n - Not applicable<br> p - Present<br> u - Unknown<br> | - No attempt to code<br> 11 - Antecedent/source<br> a - File reproduced from original<br> b - File reproduced from microform<br> c - File reproduced from an electronic resource<br> d - File reproduced from an intermediate
+ (not microform)<br> m - Mixed<br> n - Not applicable<br> u - Unknown<br> | - No attempt to code<br> 12 - Level of compression<br> a - Uncompressed<br> b - Lossless<br> d - Lossy<br> m - Mixed<br> u - Unknown<br> | - No attempt to code<br> 13 - Reformatting quality<br> a - Access<br> n - Not applicable<br> p - Preservation<br> r - Replacement<br> u - Unknown<br> | - No attempt to code<br> 007--GLOBE<br> Character Positions<br> 00 - Category of material<br> d - Globe<br> 01 - Specific material designation<br> a - Celestial globe<br> b - Planetary or lunar globe<br> c - Terrestrial globe<br> e - Earth moon globe<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Color<br> a - One color<br> c - Multicolored<br> | - No attempt to code<br> 04 - Physical medium<br> a - Paper<br> b - Wood<br> c - Stone<br> d - Metal<br> e - Synthetic<br> f - Skin<br> g - Textile<br> p - Plaster<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 05 - Type of reproduction<br> f - Facsimile<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 007--TACTILE MATERIAL<br> Character Positions<br> 00 - Category of material<br> f - Tactile material<br> 01 - Specific material designation<br> a - Moon<br> b - Braille<br> c - Combination<br> d - Tactile, with no writing system<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03-04 - Class of braille writing<br> # - No specified class of braille writing<br> a - Literary braille<br> b - Format code braille<br> c - Mathematics and scientific braille<br> d - Computer braille<br> e - Music braille<br> m - Multiple braille types<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 05 - Level of contraction<br> a - Uncontracted<br> b - Contracted<br> m - Combination<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 06-08 - Braille music format<br> # - No specified braille music format<br> a - Bar over bar<br> b - Bar by bar<br> c - Line over line<br> d - Paragraph<br> e - Single line<br> f - Section by section<br> g - Line by line<br> h - Open score<br> i - Spanner short form scoring<br> j - Short form scoring<br> k - Outline<br> l - Vertical score<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 09 - Specific physical characteristics<br> a - Print/braille<br> b - Jumbo or enlarged braille<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 007--PROJECTED GRAPHIC<br> Character Positions<br> 00 - Category of material<br> g - Projected graphic<br> 01 - Specific material designation<br> c - Filmstrip cartridge<br> d - Filmslip<br> f - Other filmstrip type<br> o - Filmstrip roll<br> s - Slide<br> t - Transparency<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Color<br> a - One color<br> b - Black-and-white<br> c - Multicolored<br> h - Hand colored<br> m - Mixed<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 04 - Base of emulsion<br> d - Glass<br> e - Synthetic<br> j - Safety film<br> k - Film base, other than safety film<br> m - Mixed collection<br> o - Paper<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 05 - Sound on medium or separate<br> # - No sound (silent)<br> a - Sound on medium<br> b - Sound separate from medium<br> u - Unknown<br> | - No attempt to code<br> 06 - Medium for sound<br> # - No sound (silent)<br> a - Optical sound track on motion picture film<br> b - Magnetic sound track on motion picture film<br> c - Magnetic audio tape in cartridge<br> d - Sound disc<br> e - Magnetic audio tape on reel<br> f - Magnetic audio tape in cassette<br> g - Optical and magnetic sound track on<br> motion picture film<br> h - Videotape<br> i - Videodisc<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 07 - Dimensions<br> a - Standard 8 mm.<br> b - Super 8 mm./single 8 mm.<br> c - 9.5 mm.<br> d - 16 mm.<br> e - 28 mm.<br> f - 35 mm.<br> g - 70 mm.<br> j - 2x2 in. or 5x5 cm.<br> k - 2 1/4 x 2 1/4 in. or 6x6 cm.<br> s - 4x5 in. or 10x13 cm. <br> t - 5x7 in. or 13x18 cm.<br> u - Unknown<br> v - 8x10 in. or 21x26 cm.<br> w - 9x9 in. or 23x23 cm.<br> x - 10x10 in. or 26x26 cm.<br> y - 7x7 in. or 18x18 cm.<br> z - Other<br> | - No attempt to code<br> 08 - Secondary support material<br> # - No secondary support<br> c - Cardboard<br> d - Glass<br> e - Synthetic<br> h - Metal<br> j - Metal and glass<br> k - Synthetic and glass<br> m - Mixed collection<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 007--MICROFORM<br> Character Positions<br> 00 - Category of material<br> h - Microform<br> 01 - Specific material designation<br> a - Aperture card<br> b - Microfilm cartridge<br> c - Microfilm cassette<br> d - Microfilm reel<br> e - Microfiche<br> f - Microfiche cassette<br> g - Microopaque<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Positive/negative aspect<br> a - Positive<br> b - Negative<br> m - Mixed polarity<br> u - Unknown<br> | - No attempt to code<br> 04 - Dimensions<br> a - 8 mm.<br> d - 16 mm.<br> f - 35 mm.<br> g - 70 mm.<br> h - 105 mm.<br> l - 3x5 in. or 8x13 cm.<br> m - 4x6 in. or 11x15 cm.<br> o - 6x9 in. or 16x23 cm.<br> p - 3 1/4 x 7 3/8 in. or 9x19 cm.<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 05 - Reduction ratio range<br> a - Low reduction<br> b - Normal reduction<br> c - High reduction<br> d - Very high reduction<br> e - Ultra high reduction<br> u - Unknown<br> v - Reduction rate varies<br> | - No attempt to code<br> 06-08 - Reduction ratio<br> 09 - Color<br> b - Black-and-white (or monochrome)<br> c - Multicolored<br> m - Mixed<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 10 - Emulsion on film<br> a - Silver halide<br> b - Diazo<br> c - Vesicular<br> m - Mixed emulsion<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 11 - Generation<br> a - First generation (master)<br> b - Printing master<br> c - Service copy<br> m - Mixed generation<br> u - Unknown<br> | - No attempt to code<br> 12 - Base of film<br> a - Safety base, undetermined<br> c - Safety base, acetate undetermined<br> d - Safety base, diacetate<br> p - Safety base, polyester<br> r - Safety base, mixed<br> t - Safety base, triacetate<br> i - Nitrate base<br> m - Mixed base (nitrate and safety)<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 007--NONPROJECTED GRAPHIC<br> Character Positions<br> 00 - Category of material<br> k - Nonprojected graphic<br> 01 - Specific material designation<br> c - Collage<br> d - Drawing<br> e - Painting<br> f - Photomechanical print<br> g - Photonegative<br> h - Photoprint<br> i - Picture<br> j - Print<br> l - Technical drawing<br> n - Chart<br> o - Flash card<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Color<br> a - One color<br> b - Black-and-white<br> c - Multicolored<br> h - Hand colored<br> m - Mixed<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 04 - Primary support material<br> a - Canvas<br> b - Bristol board<br> c - Cardboard/illustration board<br> d - Glass<br> e - Synthetic<br> f - Skin<br> g - Textile<br> h - Metal<br> m - Mixed collection<br> o - Paper<br> p - Plaster<br> q - Hardboard<br> r - Porcelain<br> s - Stone<br> t - Wood<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 05 - Secondary support material<br> # - No secondary support<br> a - Canvas<br> b - Bristol board<br> c - Cardboard/illustration board<br> d - Glass<br> e - Synthetic<br> f - Skin<br> g - Textile<br> h - Metal<br> m - Mixed collection<br> o - Paper<br> p - Plaster<br> q - Hardboard<br> r - Porcelain<br> s - Stone<br> t - Wood<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 007--MOTION PICTURE<br> Character Positions<br> 00 - Category of material<br> m - Motion picture<br> 01 - Specific material designation<br> c - Film cartridge<br> f - Film cassette<br> r - Film reel<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Color<br> b - Black-and-white<br> c - Multicolored<br> h - Hand colored<br> m - Mixed<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 04 - Motion picture presentation format<br> a - Standard sound aperture (reduced frame)<br> b - Nonanamorphic (wide-screen)<br> c - 3D<br> d - Anamorphic (wide-screen)<br> e - Other wide-screen format<br> f - Standard silent aperture (full frame)<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 05 - Sound on medium or separate<br> # - No sound (silent)<br> a - Sound on medium<br> b - Sound separate from medium<br> u - Unknown<br> | - No attempt to code<br> 06 - Medium for sound<br> # - No sound (silent)<br> a - Optical sound track on motion picture film<br> b - Magnetic sound track on motion picture film<br> c - Magnetic audio tape in cartridge<br> d - Sound disc<br> e - Magnetic audio tape on reel <br> f - Magnetic audio tape in cassette<br> g - Optical and magnetic sound track on<br> motion picture film<br> h - Videotape<br> i - Videodisc<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 07 - Dimensions<br> a - Standard 8 mm.<br> b - Super 8 mm./single 8 mm.<br> c - 9.5 mm.<br> d - 16 mm.<br> e - 28 mm.<br> f - 35 mm.<br> g - 70 mm.<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 08 - Configuration of playback channels<br> k - Mixed<br> m - Monaural<br> n - Not applicable<br> q - Quadraphonic, multichannel, or surround<br> s - Stereophonic<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 09 - Production elements<br> a - Workprint<br> b - Trims<br> c - Outtakes<br> d - Rushes<br> e - Mixing tracks<br> f - Title bands/intertitle rolls<br> g - Production rolls<br> n - Not applicable<br> z - Other<br> | - No attempt to code<br> 10 - Positive/negative aspect<br> a - Positive<br> b - Negative<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 11 - Generation<br> d - Duplicate<br> e - Master<br> o - Original<br> r - Reference print/viewing copy<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 12 - Base of film<br> a - Safety base, undetermined<br> c - Safety base, acetate undetermined<br> d - Safety base, diacetate<br> p - Safety base, polyester<br> r - Safety base, mixed<br> t - Safety base, triacetate<br> i - Nitrate base<br> m - Mixed base (nitrate and safety)<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 13 - Refined categories of color<br> a - 3 layer color<br> b - 2 color, single strip<br> c - Undetermined 2 color<br> d - Undetermined 3 color <br> e - 3 strip color<br> f - 2 strip color<br> g - Red strip<br> h - Blue or green strip<br> i - Cyan strip<br> j - Magenta strip<br> k - Yellow strip<br> l - S E N 2<br> m - S E N 3<br> n - Not applicable<br> p - Sepia tone<br> q - Other tone<br> r - Tint<br> s - Tinted and toned<br> t - Stencil color<br> u - Unknown<br> v - Hand colored<br> z - Other<br> | - No attempt to code<br> 14 - Kind of color stock or print<br> a - Imbibition dye transfer prints<br> b - Three layer stock<br> c - Three layer stock, low fade<br> d - Duplitized stock<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 15 - Deterioration stage<br> a - None apparent<br> b - Nitrate: suspicious odor<br> c - Nitrate: pungent odor<br> d - Nitrate: brownish, discoloration, fading, dusty<br> e - Nitrate: sticky<br> f - Nitrate: frothy, bubbles, blisters
+ g - Nitrate: congealed<br> h - Nitrate: powder<br> k - Non-nitrate: detectable deterioration (diacetate odor)<br> l - Non-nitrate: advanced deterioration<br> m - Non-nitrate: disaster<br> | - No attempt to code<br> 16 - Completeness<br> c - Complete<br> i - Incomplete<br> n - Not applicable<br> u - Unknown<br> | - No attempt to code<br> 17-22 - Film inspection date<br> 007--KIT<br> Character Positions<br> 00 - Category of material<br> o - Kit<br> 01 - Specific material designation<br> u - Unspecified<br> | - No attempt to code<br> 007--NOTATED MUSIC<br> Character Positions<br> 00 - Category of material<br> q - Notated music<br> 01 - Specific material designation<br> u - Unspecified<br> | - No attempt to code<br> 007--REMOTE-SENSING IMAGE<br> Character Positions<br> 00 - Category of material<br> r - Remote-sensing image<br> 01 - Specific material designation<br> u - Unspecified<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Altitude of sensor<br> a - Surface<br> b - Airborne<br> c - Spaceborne<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 04 - Attitude of sensor<br> a - Low oblique<br> b - High oblique<br> c - Vertical<br> n - Not applicable<br> u - Unknown<br> | - No attempt to code<br> 05 - Cloud cover<br> 0 - 0-9%<br> 1 - 10-19%<br> 2 - 20-29%<br> 3 - 30-39%<br> 4 - 40-49%<br> 5 - 50-59%<br> 6 - 60-69%<br> 7 - 70-79%<br> 8 - 80-89%<br> 9 - 90-100%<br> n - Not applicable<br> u - Unknown<br> | - No attempt to code<br> 06 - Platform construction type<br> a - Balloon<br> b - Aircraft--low altitude<br> c - Aircraft--medium altitude<br> d - Aircraft--high altitude<br> e - Manned spacecraft<br> f - Unmanned spacecraft<br> g - Land-based remote-sensing device<br> h - Water surface-based remote-sensing device<br> i - Submersible remote-sensing device<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 07 - Platform use category<br> a - Meteorological<br> b - Surface observing<br> c - Space observing<br> m - Mixed uses<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 08 - Sensor type<br> a - Active<br> b - Passive<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 09-10 - Data type<br> aa - Visible light<br> da - Near infrared<br> db - Middle infrared<br> dc - Far infrared<br> dd - Thermal infrared<br> de - Shortwave infrared (SWIR)<br> df - Reflective infrared<br> dv - Combinations<br> dz - Other infrared data <br> ga - Sidelooking airborne radar (SLAR)<br> gb - Synthetic aperture radar (SAR)-Single frequency<br> gc - SAR-multi-frequency (multichannel)<br> gd - SAR-like polarization<br> ge - SAR-cross polarization<br> gf - Infometric SAR<br> gg - polarmetric SAR<br> gu - Passive microwave mapping<br> gz - Other microwave data<br> ja - Far ultraviolet<br> jb - Middle ultraviolet<br> jc - Near ultraviolet<br> jv - Ultraviolet combinations<br> jz - Other ultraviolet data<br> ma - Multi-spectral, multidata<br> mb - Multi-temporal<br> mm - Combination of various data types<br> nn - Not applicable<br> pa - Sonar--water depth<br> pb - Sonar--bottom topography images, sidescan<br> pc - Sonar--bottom topography, near surface<br> pd - Sonar--bottom topography, near bottom<br> pe - Seismic surveys<br> pz - Other acoustical data<br> ra - Gravity anomalies (general)<br> rb - Free-air<br> rc - Bouger<br> rd - Isostatic<br> sa - Magnetic field<br> ta - radiometric surveys<br> uu - Unknown<br> zz - Other<br> || - No attempt to code<br> 007--SOUND RECORDING<br> Character Positions<br> 00 - Category of material<br> s - Sound recording<br> 01 - Specific material designation<br> d - Sound disc<br> e - Cylinder<br> g - Sound cartridge<br> i - Sound-track film<br> q - Roll<br> s - Sound cassette<br> t - Sound-tape reel<br> u - Unspecified<br> w - Wire recording<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Speed<br> a - 16 rpm<br> b - 33 1/3 rpm<br> c - 45 rpm<br> d - 78 rpm<br> e - 8 rpm<br> f - 1.4 m. per sec.<br> h - 120 rpm<br> i - 160 rpm<br> k - 15/16 ips<br> l - 1 7/8 ips<br> m - 3 3/4 ips<br> o - 7 1/2 ips<br> p - 15 ips<br> r - 30 ips<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 04 - Configuration of playback channels<br> m - Monaural<br> q - Quadraphonic<br> s - Stereophonic<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 05 - Groove width/groove pitch<br> m - Microgroove/fine<br> n - Not applicable<br> s - Coarse/standard<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 06 - Dimensions<br> a - 3 in.<br> b - 5 in.<br> c - 7 in.<br> d - 10 in.<br> e - 12 in.<br> f - 16 in.<br> g - 4 3/4 in. or 12 cm.<br> j - 3 7/8 x 2 1/2 in.<br> o - 5 1/4 x 3 7/8 in.<br> n - Not applicable<br> s - 2 3/4 x 4 in.<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 07 - Tape width<br> l - 1/8 in.<br> m - 1/4 in.<br> n - Not applicable<br> o - 1/2 in.<br> p - 1 in.<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 08 - Tape configuration<br> a - Full (1) track<br> b - Half (2) track<br> c - Quarter (4) track<br> d - Eight track<br> e - Twelve track<br> f - Sixteen track<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 09 - Kind of disc, cylinder or tape<br> a - Master tape<br> b - Tape duplication master<br> d - Disc master (negative)<br> i - Instantaneous (recorded on the spot)<br> m - Mass produced<br> n - Not applicable<br> r - Mother (positive)<br> s - Stamper (negative)<br> t - Test pressing<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 10 - Kind of material<br> a - Lacquer coating
+ b - Cellulose nitrate
+ c - Acetate tape with ferrous oxide
+ g - Glass with lacquer
+ i - Aluminum with lacquer
+ r - Paper with lacquer or ferrous oxide<br> l - Metal<br> m - Plastic with metal<br> n - Not applicable [OBSOLETE]<br> p - Plastic<br> s - Shellac<br> u - Unknown<br> w - Wax
+ z - Other<br> | - No attempt to code<br> 11 - Kind of cutting<br> h - Hill-and-dale cutting<br> l - Lateral or combined cutting<br> n - Not applicable<br> u - Unknown<br> | - No attempt to code<br> 12 - Special playback characteristics<br> a - NAB standard<br> b - CCIR standard<br> c - Dolby-B encoded<br> d - dbx encoded<br> e - Digital recording<br> f - Dolby-A encoded<br> g - Dolby-C encoded<br> h - CX encoded<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 13 - Capture and storage technique<br> a - Acoustical capture, direct storage<br> b - Direct storage, not acoustical<br> d - Digital storage<br> e - Analog electrical storage<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 007--TEXT<br> Character Positions<br> 00 - Category of material<br> t - Text<br> 01 - Specific material designation<br> a - Regular print<br> b - Large print<br> c - Braille<br> d - Text in looseleaf binder<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 007--VIDEORECORDING<br> Character Positions<br> 00 - Category of material<br> v - Videorecording<br> 01 - Specific material designation<br> c - Videocartridge<br> d - Videodisc<br> f - Videocassette<br> r - Videoreel<br> u - Unspecified<br> z - Other<br> | - No attempt to code<br> 02 - Undefined<br> 03 - Color<br> a - One color<br> b - Black-and-white<br> c - Multicolored<br> m - Mixed<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 04 - Videorecording format<br> a - Beta (1/2 in., videocassette)<br> b - VHS (1/2 in., videocassette)<br> c - U-matic (3/4 in., videocassette)<br> d - EIAJ (1/2 in. reel)<br> e - Type C (1 in., reel)<br> f - Quadruplex (1 in. or 2 in., reel)<br> g - Laserdisc<br> h - CED (Capacitance Electronic Disc) videodisc<br> i - Betacam (1/2 in., videocassette)<br> j - Betacam SP (1/2 in., videocassette)<br> k - Super-VHS (1/2 in., videocassette)<br> m - M-II (1/2 in., videocassette)<br> o - D-2 (3/4 in., videocassette)<br> p - 8 mm.<br> q - Hi-8 mm.<br> u - Unknown<br> v - DVD<br> z - Other<br> | - No attempt to code<br> 05 - Sound on medium or separate<br> # - No sound (silent)<br> a - Sound on medium<br> b - Sound separate from medium <br> u - Unknown<br> | - No attempt to code<br> 06 - Medium for sound<br> # - No sound (silent)<br> a - Optical sound track on motion picture film<br> b - Magnetic sound track on motion picture film<br> c - Magnetic audio tape in cartridge<br> d - Sound disc<br> e - Magnetic audio tape on reel<br> f - Magnetic audio tape in cassette<br> g - Optical and magnetic sound track on motion picture film<br> h - Videotape<br> i - Videodisc<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 07 - Dimensions<br> a - 8 mm.<br> m - 1/4 in.<br> o - 1/2 in.<br> p - 1 in.<br> q - 2 in.<br> r - 3/4 in.<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 08 - Configuration of playback channels<br> k - Mixed<br> m - Monaural<br> n - Not applicable<br> q - Quadraphonic, multichannel, or surround<br> s - Stereophonic<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 007--UNSPECIFIED<br> Character Positions<br> 00 - Category of material<br> z - Unspecified<br> 01 - Specific material designation<br> m - Multiple physical forms<br> u - Unspecified<br> z - Other<br> | - No attempt to code
+
+--Control Field 008--<br> 008 - FIXED-LENGTH DATA ELEMENTS--GENERAL INFORMATION (NR)<br> 008--ALL MATERIALS<br> Character Positions<br> 00-05 - Date entered on file<br> 06 - Type of date/Publication status<br> b - No dates given; B.C. date involved<br> c - Continuing resource currently published<br> c - Actual date and copyright date [OBSOLETE]<br> d - Continuing resource ceased publication<br> d - Detailed date [OBSOLETE]<br> e - Detailed date<br> i - Inclusive dates of collection<br> k - Range of years of bulk of collection<br> m - Multiple dates<br> n - Dates unknown<br> p - Date of distribution/release/issue and production/recording
+ session when different<br> q - Questionable date<br> r - Reprint/reissue date and original date<br> s - Single known date/probable date<br> t - Publication date and copyright date<br> u - Continuing resource status unknown<br> | - No attempt to code<br> 07-10 - Date 1<br> 1-9 - Date digit<br> # - Date element is not applicable<br> u - Date element is totally or partially unknown<br> | - No attempt to code<br> 11-14 - Date 2<br> 1-9 - Date digit<br> # - Date element is not applicable<br> u - Date element is totally or partially unknown<br> | - No attempt to code<br> 15-17 - Place of publication, production, or execution<br> 35-37 - Language<br> 38 - Modified record<br> # - Not modified<br> d - Dashed-on information omitted<br> o - Completely romanized/printed cards romanized<br> r - Completely romanized/printed cards in script<br> s - Shortened<br> x - Missing characters<br> | - No attempt to code<br> 39 - Cataloging source<br> # - National bibliographic agency<br> a - National Agricultural Library [OBSOLETE]<br> b - National Library of Medicine [OBSOLETE]<br> c - Cooperative cataloging program<br> d - Other<br> n - Report to [OBSOLETE]
+ u - Unknown
+ | - No attempt to code<br> 008--BOOKS<br> Character Positions<br> 18-21 - Illustrations<br> # - No illustrations<br> a - Illustrations<br> b - Maps<br> c - Portraits<br> d - Charts<br> e - Plans<br> f - Plates<br> g - Music<br> h - Facsimiles<br> i - Coats of arms<br> j - Genealogical tables<br> k - Forms<br> l - Samples<br> m - Phonodisc, phonowire, etc.<br> o - Photographs<br> p - Illuminations<br> | - No attempt to code<br> 22 - Target audience<br> # - Unknown or not specified<br> a - Preschool<br> b - Primary<br> c - Pre-adolescent<br> d - Adolescent<br> e - Adult<br> f - Specialized<br> g - General<br> j - Juvenile<br> | - No attempt to code<br> 23 - Form of item<br> # - None of the following<br> a - Microfilm<br> b - Microfiche<br> c - Microopaque<br> d - Large print<br> f - Braille<br> g - Punched paper tape [OBSOLETE]<br> h - Magnetic tape [OBSOLETE]<br> i - Multimedia [OBSOLETE]<br> r - Regular print reproduction<br> s - Electronic<br> z - Other form of reproduction [OBSOLETE]<br> | - No attempt to code<br> 24-27 - Nature of contents<br> # - No specified nature of contents<br> a - Abstracts/summaries<br> b - Bibliographies<br> c - Catalogs<br> d - Dictionaries<br> e - Encyclopedias<br> f - Handbooks<br> g - Legal articles<br> h - Handbooks [OBSOLETE]<br> i - Indexes<br> j - Patent document<br> k - Discographies<br> l - Legislation<br> m - Theses<br> n - Surveys of literature in a subject area<br> o - Reviews<br> p - Programmed texts<br> q - Filmographies<br> r - Directories<br> s - Statistics<br> t - Technical reports
+ u - Standards/specifications<br> v - Legal cases and case notes<br> w - Law reports and digests<br> y - Yearbooks [OBSOLETE]<br> z - Treaties<br> | - No attempt to code<br> 28 - Government publication<br> # - Not a government publication<br> a - Autonomous or semi-autonomous component<br> c - Multilocal<br> f - Federal/national<br> i - International intergovernmental<br> l - Local<br> m - Multistate<br> n - Government publication--level undetermined [OBSOLETE]<br> o - Government publication--level undetermined<br> s - State, provincial, territorial, dependent, etc.<br> u - Unknown if item is government publication<br> z - Other<br> | - No attempt to code<br> 29 - Conference publication<br> 0 - Not a conference publication<br> 1 - Conference publication<br> | - No attempt to code<br> 30 - Festschrift<br> 0 - Not a festschrift<br> 1 - Festschrift<br> | - No attempt to code<br> 31 - Index<br> 0 - No index<br> 1 - Index present<br> | - No attempt to code<br> 32 - Undefined<br> 32 - Main entry in body of entry [OBSOLETE]<br> 0 - Main entry not in body of entry<br> 1 - Main entry in body of entry<br> | - No attempt to code<br> 33 - Literary form<br> 0 - Not fiction (not further specified)<br> 1 - Fiction (not further specified)<br> c - Comic strips<br> d - Dramas<br> e - Essays<br> f - Novels<br> h - Humor, satires, etc.<br> i - Letters<br> j - Short stories<br> m - Mixed forms<br> p - Poetry<br> s - Speeches<br> u - Unknown<br> | - No attempt to code<br> 34 - Biography<br> # - No biographical material<br> a - Autobiography<br> b - Individual biography<br> c - Collective biography<br> d - Contains biographical information<br> | - No attempt to code<br> 008--COMPUTER FILES<br> Character Positions<br> 18-21 - Undefined<br> 18 - Frequency [OBSOLETE]<br> # - No determinable frequency<br> a - Annual<br> b - Bimonthly<br> c - Semiweekly<br> d - Daily<br> e - Biweekly<br> f - Semiannual<br> g - Biennial<br> h - Triennial<br> i - Three times a week<br> j - Three times a month<br> m - Monthly<br> n - Not applicable<br> q - Quarterly<br> s - Semimonthly<br> t - Three times a year<br> u - Unknown<br> w - Weekly<br> z - Other frequencies<br> 19 - Regularity [OBSOLETE]<br> # - Not applicable<br> n - Normalized irregular<br> r - Regular<br> u - Unknown<br> x - Completely irregular<br> 22 - Target audience<br> # - Unknown or not specified<br> a - Preschool<br> b - Primary<br> c - Pre-adolescent<br> d - Adolescent<br> e - Adult<br> f - Specialized<br> g - General<br> j - Juvenile<br> | - No attempt to code<br> 23-25 - Undefined<br> 26 - Type of computer file<br> a - Numeric data<br> b - Computer program<br> c - Representational<br> d - Document<br> e - Bibliographic data<br> f - Font<br> g - Game<br> h - Sound<br> i - Interactive multimedia<br> j - Online system or service<br> m - Combination<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 27 - Undefined<br> 27 - Type of machine [OBSOLETE]<br> a - Computer readable<br> z - Other<br> 28 - Government publication<br> # - Not a government publication<br> a - Autonomous or semi-autonomous component<br> c - Multilocal<br> f - Federal/national<br> i - International intergovernmental<br> l - Local<br> m - Multistate<br> o - Government publication--level undetermined<br> s - State, provincial, territorial, dependent, etc.<br> u - Unknown if item is government publication<br> z - Other<br> | - No attempt to code<br> 29-34 - Undefined<br> 008--MAPS<br> Character Positions<br> 18-21 - Relief<br> # - No relief shown<br> a - Contours<br> b - Shading<br> c - Gradient and bathymetric tints<br> d - Hachures<br> e - Bathymetry/soundings<br> f - Form lines<br> g - Spot heights<br> h - Color [OBSOLETE]<br> i - Pictorially<br> j - Land forms<br> k - Bathymetry/isolines<br> m - Rock drawings<br> z - Other relief type<br> | - No attempt to code<br> 22-23 - Projection<br> ## - Projection not specified<br> aa - Aitoff<br> ab - Gnomic<br> ac - Lambert's azimuthal equal area<br> ad - Orthographic<br> ae - Azimuthal equidistant<br> af - Stereographic<br> ag - General vertical near-sided<br> am - Modified stereographic for Alaska<br> an - Chamberlin trimetric<br> ap - Polar stereographic<br> au - Azimuthal, specific type unknown<br> az - Azimuthal, other<br> ba - Gall<br> bb - Goode's homolographic<br> bc - Lambert's cylindrical equal area<br> bd - Mercator<br> be - Miller<br> bf - Mollweide<br> bg - Sinusoidal<br> bh - Transverse Mercator<br> bi - Gauss-Kruger<br> bj - Equirectangular<br> bo - Oblique Mercator<br> br - Robinson<br> bs - Space oblique Mercator<br> bu - Cylindrical, specific type unknown<br> bz - Cylindrical, other<br> ca - Alber's equal area<br> cb - Bonne<br> cc - Lambert's conformal conic<br> ce - Equidistant conic<br> cp - Polyconic<br> cu - Conic, specific type unknown<br> cz - Conic, other<br> da - Armadillo<br> db - Butterfly<br> dc - Eckert<br> dd - Goode's homolosine<br> de - Miller's bipolar oblique conformal conic<br> df - Van Der Grinten<br> dg - Dimaxion<br> dh - Cordiform<br> dl - Lambert conformal<br> zz - Other<br> | - No attempt to code<br> 24 - Undefined<br> 24 - Prime meridian [OBSOLETE]<br> # - Prime meridian not specified<br> e - Greenwich<br> f - Ferro<br> g - Paris<br> h - Other [OBSOLETE]<br> p - Philadelphia<br> w - Washington, D.C.<br> z - Other<br> 25 - Type of cartographic material<br> a - Single map<br> b - Map series<br> c - Map serial<br> d - Globe<br> e - Atlas<br> f - Separate map supplement to another work<br> g - Map bound as part of another work<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 26-27 - Undefined<br> 26-27 - Publisher code [OBSOLETE]<br> 28 - Government publication<br> # - Not a government publication<br> a - Autonomous or semi-autonomous component<br> c - Multilocal<br> f - Federal/national<br> i - International intergovernmental<br> l - Local<br> m - Multistate<br> o - Government publication--level undetermined<br> s - State, provincial, territorial, dependent, etc.<br> u - Unknown if item is government publication<br> z - Other<br> | - No attempt to code<br> 29 - Form of item<br> # - None of the following<br> a - Microfilm<br> b - Microfiche<br> c - Microopaque<br> d - Large print<br> f - Braille<br> r - Regular print reproduction<br> s - Electronic<br> | - No attempt to code<br> 30 - Undefined<br> 31 - Index<br> 0 - No index<br> 1 - Index present<br> | - No attempt to code<br> 32 - Undefined<br> 32 - Citation indicator [OBSOLETE]<br> 33-34 - Special format characteristics<br> # - No specified special format characteristics<br> a - Photocopy, blue line print [OBSOLETE]<br> b - Photocopy [OBSOLETE]<br> c - Negative photocopy [OBSOLETE]<br> d - Film negative [OBSOLETE] <br> e - Manuscript<br> f - Facsimile [OBSOLETE]<br> g - Relief model [OBSOLETE]<br> h - Rare [OBSOLETE]<br> j - Picture card, post card<br> k - Calendar<br> l - Puzzle<br> m - Braille [OBSOLETE]<br> n - Game<br> o - Wall map<br> p - Playing cards<br> q - Large print [OBSOLETE]<br> r - Loose-leaf<br> z - Other<br> | - No attempt to code<br> 008--MUSIC<br> Character Positions<br> 18-19 - Form of composition<br> an - Anthems<br> bd - Ballads<br> bg - Bluegrass music<br> bl - Blues<br> bt - Ballets<br> ca - Chaconnes<br> cb - Chants, Other religions<br> cc - Chant, Christian<br> cg - Concerti grossi<br> ch - Chorales<br> cl - Chorale preludes<br> cn - Canons and rounds<br> co - Concertos<br> cp - Chansons, polyphonic<br> cr - Carols<br> cs - Chance compositions<br> ct - Cantatas<br> cy - Country music<br> cz - Canzonas<br> df - Dance forms<br> dv - Divertimentos, serenades, cassations, divertissements, notturni<br> fg - Fugues<br> fm - Folk music<br> ft - Fantasias<br> gm - Gospel music<br> hy - Hymns<br> jz - Jazz<br> mc - Musical revues and comedies<br> md - Madrigals<br> mi - Minuets<br> mo - Motets<br> mp - Motion picture music<br> mr - Marches<br> ms - Masses<br> mu - Multiple forms<br> mz - Mazurkas<br> nc - Nocturnes<br> nn - Not applicable<br> op - Operas<br> or - Oratorios<br> ov - Overtures<br> pg - Program music<br> pm - Passion music<br> po - Polonaises<br> pp - Popular music<br> pr - Preludes<br> ps - Passacaglias<br> pt - Part-songs<br> pv - Pavans<br> rc - Rock music<br> rd - Rondos<br> rg - Ragtime music<br> ri - Ricercars<br> rp - Rhapsodies<br> rq - Requiems<br> sd - Square dance music<br> sg - Songs<br> sn - Sonatas<br> sp - Symphonic poems<br> st - Studies and exercises<br> su - Suites<br> sy - Symphonies<br> tc - Toccatas<br> ts - Trio-sonatas<br> uu - Unknown<br> vr - Variations<br> wz - Waltzes<br> zz - Other<br> || - No attempt to code<br> 20 - Format of music<br> a - Full score<br> b - Full score, miniature or study size<br> c - Accompaniment reduced for keyboard <br> d - Voice score<br> e - Condensed score or piano-conductor score<br> g - Close score<br> m - Multiple score formats<br> n - Not applicable<br> u - Unknown<br> z - Other<br> | - No attempt to code
+ 21 - Music parts<br> # - No parts in hand or not specified<br> d - Instrumental and vocal parts<br> e - Instrumental parts
+ f - Vocal parts<br> n - Not applicable
+ u - Unknown
+ | - No attempt to code <br> 21 - Existence of parts [OBSOLETE]<br> # - No parts exist<br> a - Parts exist<br> n - Not applicable<br> u - Unknown<br> 22 - Target audience<br> # - Unknown or not specified<br> a - Preschool<br> b - Primary<br> c - Pre-adolescent<br> d - Adolescent<br> e - Adult<br> f - Specialized<br> g - General<br> j - Juvenile<br> | - No attempt to code<br> 23 - Form of item<br> # - None of the following<br> a - Microfilm<br> b - Microfiche<br> c - Microopaque<br> d - Large print<br> f - Braille<br> g - Punched paper tape [OBSOLETE]<br> h - Magnetic tape [OBSOLETE] <br> i - Multimedia [OBSOLETE]<br> r - Regular print reproduction<br> s - Electronic<br> x - Other form of reproduction [OBSOLETE]<br> z - Other form of reproduction [OBSOLETE]<br> | - No attempt to code<br> 24-29 - Accompanying matter<br> # - No accompanying matter<br> a - Discography<br> b - Bibliography<br> c - Thematic index<br> d - Libretto or text<br> e - Biography of composer or author<br> f - Biography of performer or history of ensemble<br> g - Technical and/or historical information on instruments<br> h - Technical information on music<br> i - Historical information<br> j - Historical information other than music [OBSOLETE]<br> k - Ethnological information<br> n - Not applicable [OBSOLETE]<br> r - Instructional materials<br> s - Music<br> z - Other<br> | - No attempt to code<br> 30-31 - Literary text for sound recordings<br> # - Item is a musical sound recording<br> a - Autobiography<br> b - Biography<br> c - Conference proceedings<br> d - Drama<br> e - Essays<br> f - Fiction<br> g - Reporting<br> h - History<br> i - Instruction<br> j - Language instruction<br> k - Comedy<br> l - Lectures, speeches<br> m - Memoirs<br> n - Not applicable<br> o - Folktales<br> p - Poetry<br> r - Rehearsals<br> s - Sounds<br> t - Interviews<br> z - Other<br> | - No attempt to code<br> 32 - Main entry in body of entry [OBSOLETE]<br> 0 - Main entry not in body of entry<br> 1 - Main entry in body of entry<br> | - No attempt to code<br> 32 - Undefined
+ 33 - Transposition and arrangement <br> # - Not arrangement or transposition or not specified <br> a - Transposition <br> b - Arrangement <br> c - Both transposed and arranged <br> n - Not applicable <br> u - Unknown <br> | - No attempt to code
+ 34 - Undefined<br> 008--CONTINUING RESOURCES<br> Character Positions<br> 18 - Frequency<br> # - No determinable frequency<br> a - Annual<br> b - Bimonthly<br> c - Semiweekly<br> d - Daily<br> e - Biweekly<br> f - Semiannual<br> g - Biennial<br> h - Triennial<br> i - Three times a week<br> j - Three times a month<br> k - Continuously updated<br> m - Monthly<br> q - Quarterly<br> s - Semimonthly<br> t - Three times a year<br> u - Unknown<br> w - Weekly<br> z - Other<br> | - No attempt to code<br> 19 - Regularity<br> n - Normalized irregular<br> r - Regular<br> u - Unknown<br> x - Completely irregular<br> | - No attempt to code<br> 20 - ISSN center<br> # - No ISSN center code assigned<br> 0 - International Center<br> 1 - United States<br> 2 - United Kingdom <br> 3 - Australia [OBSOLETE]<br> 4 - Canada<br> 5 - Moscow Regional Centre [OBSOLETE]<br> 6 - Federal Republic of Germany [OBSOLETE]<br> 7 - France [OBSOLETE]<br> 8 - Argentina [OBSOLETE]<br> 9 - Japan [OBSOLETE]<br> u - Unknown [OBSOLETE]<br> z - Other<br> | - No attempt to code<br> 21 - Type of continuing resource<br> # - None of the following<br> d - Updating database<br> l - Updating loose-leaf<br> m - Monographic series<br> n - Newspaper<br> p - Periodical<br> w - Updating Web site<br> | - No attempt to code<br> 22 - Form of original item<br> # - None of the following<br> a - Microfilm<br> b - Microfiche<br> c - Microopaque<br> d - Large print<br> e - Newspaper format<br> f - Braille<br> g - Punched paper tape [OBSOLETE]<br> h - Magnetic tape [OBSOLETE]<br> i - Multimedia [OBSOLETE]<br> s - Electronic<br> x - Other physical medium [OBSOLETE]<br> z - Other physical medium [OBSOLETE]<br> | - No attempt to code<br> 23 - Form of item<br> # - None of the following<br> a - Microfilm<br> b - Microfiche<br> c - Microopaque<br> d - Large print<br> f - Braille<br> g - Punched paper tape [OBSOLETE]<br> h - Magnetic tape [OBSOLETE]<br> i - Multimedia [OBSOLETE]<br> r - Regular print reproduction<br> s - Electronic<br> z - Other form of reproduction [OBSOLETE]<br> | - No attempt to code<br> 24 - Nature of entire work<br> # - No specified nature of entire work<br> a - Abstracts/summaries<br> b - Bibliographies<br> c - Catalogs<br> d - Dictionaries<br> e - Encyclopedias<br> f - Handbooks<br> g - Legal articles<br> h - Biography<br> i - Indexes<br> k - Discographies<br> l - Legislation<br> m - Theses<br> n - Surveys of literature in a subject area<br> n - Legal cases and case notes [OBSOLETE]<br> o - Reviews<br> p - Programmed texts<br> q - Filmographies<br> r - Directories<br> s - Statistics<br> t - Technical reports
+ u - Standards/specifications<br> v - Legal cases and case notes<br> w - Law reports and digests<br> y - Yearbooks [OBSOLETE]<br> z - Treaties<br> | - No attempt to code<br> 25-27 - Nature of contents<br> # - No specified nature of contents<br> a - Abstracts/summaries<br> b - Bibliographies<br> c - Catalogs<br> d - Dictionaries<br> e - Encyclopedias<br> f - Handbooks<br> g - Legal articles<br> h - Biography<br> i - Indexes<br> k - Discographies<br> l - Legislation<br> m - Theses<br> n - Surveys of literature in a subject area<br> n - Legal cases and case notes [OBSOLETE]<br> o - Reviews<br> p - Programmed texts<br> q - Filmographies<br> r - Directories<br> s - Statistics<br> t - Technical reports
+ u - Standards/specifications<br> v - Legal cases and case notes<br> w - Law reports and digests<br> y - Yearbooks [OBSOLETE]<br> z - Treaties<br> | - No attempt to code<br> 28 - Government publication<br> # - Not a government publication<br> a - Autonomous or semi-autonomous component<br> c - Multilocal<br> f - Federal/national<br> i - International intergovernmental<br> l - Local<br> m - Multistate<br> n - Government publication--level undetermined [OBSOLETE]<br> o - Government publication--level undetermined<br> s - State, provincial, territorial, dependent,etc.<br> u - Unknown if item is government publication<br> z - Other<br> | - No attempt to code<br> 29 - Conference publication<br> 0 - Not a conference publication<br> 1 - Conference publication <br> | - No attempt to code<br> 30-32 - Undefined<br> 30 - Title page availability [OBSOLETE]<br> # - No separate title page issued<br> a - In last issue of volume, loose<br> b - In last issue of volume, attached<br> c - In first issue of next volume, loose<br> d - In first issue of next volume, attached<br> e - Published separately, free upon request<br> f - Published separately, free, automatically sent<br> g - Published separately, purchase, request<br> u - Unknown<br> z - Other title page availability<br> | - No attempt to code<br> 31 - Index availability [OBSOLETE]<br> # - No index published<br> a - Each issue contains index to its own contents (no volume index), loose<br> b - In last issue of volume, loose, separately paged<br> c - In last issue of volume, loose, unpaged<br> d - In last issue of volume, attached<br> e - In first issue of next volume, loose, separately paged<br> f - In first issue of next volume, loose, unpaged<br> g - In first issue of next volume, attached<br> h - Published separately, free, automatically sent<br> i - Published separately, free, upon request<br> j - Published separately, bound from publisher, free, automatically sent<br> k - Published separately, bound from publisher, free, upon request<br> l - Received separately, bound from publisher<br> m - Supplement or subseries, indexed in parent journal index<br> u - Unknown<br> z - Other index availability<br> | - No attempt to code<br> 32 - Cumulative index availability [OBSOLETE]<br> 0 - No cumulative index available<br> 1 - Cumulative index available<br> u - Unknown<br> | - No attempt to code<br> 33 - Original alphabet or script of title<br> # - No alphabet or script given/no key title<br> a - Basic roman<br> b - Extended roman<br> c - Cyrillic<br> d - Japanese<br> e - Chinese<br> f - Arabic<br> g - Greek<br> h - Hebrew<br> i - Thai<br> j - Devanagari<br> k - Korean<br> l - Tamil<br> u - Unknown<br> z - Other<br> | - No attempt to code<br> 34 - Entry convention<br> 0 - Successive entry<br> 1 - Latest entry<br> 2 - Integrated entry<br> | - No attempt to code<br> 008--VISUAL MATERIALS<br> Character Positions<br> 18-20 - Running time for motion pictures and videorecordings<br> 000 - Running time exceeds three characters<br> 001-999 - Running time<br> --- - Running time unknown<br> nnn - Not applicable<br> ||| - No attempt to code<br> 21 - Undefined<br> 21 - In LC collection [OBSOLETE]<br> # - Not in LC<br> a - In LC, print note<br> b - In LC, do not print note<br> u - Unknown<br> 22 - Target audience<br> # - Unknown or not specified<br> a - Preschool<br> b - Primary<br> c - Pre-adolescent<br> d - Adolescent<br> e - Adult<br> f - Specialized<br> g - General<br> j - Juvenile<br> | - No attempt to code<br> 23-27 - Undefined<br> 23-27 - Accompanying matter [OBSOLETE]<br> # - No accompanying matter<br> 0 - No [OBSOLETE]<br> 1 - Yes [OBSOLETE]<br> l - Stills<br> m - Script material<br> o - Posters<br> p - Pressbooks<br> q - Lobby cards<br> r - Instructional materials<br> s - Music<br> z - Other<br> | - No attempt to code<br> 28 - Government publication<br> # - Not a government publication<br> a - Autonomous or semi-autonomous component<br> c - Multilocal<br> f - Federal/national<br> i - International intergovernmental <br> l - Local<br> m - Multistate<br> n - Government publication--level undetermined [OBSOLETE]<br> o - Government publication--level undetermined<br> s - State, provincial, territorial, dependent, etc.<br> u - Unknown if item is government publication<br> z - Other<br> | - No attempt to code<br> 29 - Form of item<br> # - None of the following<br> a - Microfilm<br> b - Microfiche<br> c - Microopaque<br> d - Large print<br> f - Braille<br> r - Regular print reproduction<br> s - Electronic<br> | - No attempt to code<br> 30-32 - Undefined<br> 32 - Main entry in body of entry [OBSOLETE]<br> 0 - Main entry not in body of entry<br> 1 - Main entry in body of entry<br> | - No attempt to code<br> 33 - Type of visual material<br> a - Art original<br> b - Kit<br> c - Art reproduction<br> d - Diorama<br> e - Electronic videorecording [OBSOLETE]<br> f - Filmstrip<br> g - Game<br> i - Picture<br> k - Graphic<br> l - Technical drawing<br> m - Motion picture<br> n - Chart<br> o - Flash card<br> p - Microscope slide<br> q - Model<br> r - Realia<br> s - Slide<br> t - Transparency<br> v - Videorecording<br> w - Toy<br> z - Other<br> | - No attempt to code<br> 34 - Technique<br> # - Not applicable [OBSOLETE]<br> a - Animation<br> c - Animation and live action<br> l - Live action<br> n - Not applicable<br> u - Unknown<br> z - Other technique<br> | - No attempt to code<br> 008--MIXED MATERIALS<br> Character Positions<br> 18-22 - Undefined<br> 23 - Form of item<br> # - None of the following<br> a - Microfilm<br> b - Microfiche<br> c - Microopaque<br> d - Large print<br> f - Braille<br> g - Punched paper tape [OBSOLETE]<br> h - Magnetic tape [OBSOLETE]<br> i - Multimedia [OBSOLETE]<br> j - Handwritten transcript [OBSOLETE]<br> p - Photocopy [OBSOLETE]<br> r - Regular print reproduction<br> s - Electronic<br> t - Typewritten transcript [OBSOLETE]<br> z - Other form of reproduction [OBSOLETE]<br> | - No attempt to code<br> 24-34 - Undefined<br> 30 - Case file indicator [OBSOLETE]<br> # - No case file exists<br> c - Case file exists<br> 32 - Processing status code [OBSOLETE]<br> a - Collection not in library<br> b - Completely processed<br> c - Processed but with unprocessed additions<br> d - Requires processing<br> e - Totally unprocessed<br> f - Under total cloture<br> u - Unknown<br> 33 - Collection status code [OBSOLETE]<br> a - Discrete grouping of material<br> b - Accession<br> c - Active solicitation<br> d - Solicitation unsuccessful<br> e - Information file only<br> u - Unknown<br> 34 - Level of collection control code [OBSOLETE]<br> a - Control on collection level<br> b - Control by series<br> c - Control by container<br> d - Control by folder<br> e - Control by item<br> u - Unknown<br> 009 - PHYSICAL DESCRIPTION FIXED-FIELD FOR ARCHIVAL COLLECTION (VM) - [OBSOLETE]<br> Character Positions<br> 00 - Genealogical stage<br> 01 - Technical stage<br> 02 - Color stage<br> 03 - Film emulsion<br> 04 - Film base<br> 05 - Negative or positive sound<br> 06 - Additional types of color<br> 07 - Longitudinal shrinkage<br> 08 - Perforation shrinkage<br> 09 - Film deterioration<br> 10 - Completeness<br> 11-14 - Film inspection date
+
+--Number and Code Fields (01X-04X)--<br> 010 - LIBRARY OF CONGRESS CONTROL NUMBER (NR)<br> Indicators<br> First - Undefined<br> # - Undefined<br> Second - Undefined<br> # - Undefined<br> Subfield Codes<br> $a - LC control number (NR)<br> $b - NUCMC control number (R)<br> $z - Canceled/invalid LC control number (R)<br> $8 - Field link and sequence number (R)
+ 011 - LINKING LIBRARY OF CONGRESS CONTROL NUMBER (NR) [OBSOLETE]<br> Indicators<br> First - Undefined<br> # - Undefined<br> Second - Undefined<br> # - Undefined<br> Subfield Codes<br> $a - LINKING LC control number (R)
+ 013 - PATENT CONTROL INFORMATION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Number (NR)
+ $b - Country (NR)
+ $c - Type of number (NR)
+ $d - Date (R)
+ $e - Status (R)
+ $f - Party to document (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 015 - NATIONAL BIBLIOGRAPHY NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - National bibliography number (R)
+ $2 - Source (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 016 - NATIONAL BIBLIOGRAPHIC AGENCY CONTROL NUMBER (R)
+ Indicators
+ First - National bibliographic agency
+ # - National Library of Canada
+ 7 - Agency identified in subfield $2
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Record control number (NR)
+ $z - Canceled or invalid record control number (R)
+ $2 - Source (NR)
+ $8 - Field link and sequence number (R)
+ 017 - COPYRIGHT OR LEGAL DEPOSIT NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Copyright registration number (R)
+ $b - Assigning agency (NR)
+ $2 - Source (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 018 - COPYRIGHT ARTICLE-FEE CODE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Copyright article-fee code (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 020 - INTERNATIONAL STANDARD BOOK NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - International Standard Book Number (NR)
+ $c - Terms of availability (NR)
+ $z - Canceled/invalid ISBN (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 022 - INTERNATIONAL STANDARD SERIAL NUMBER (R)
+ Indicators
+ First - Level of international interest
+ # - No level specified
+ 0 - Serial of international interest
+ 1 - Serial not of international interest
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - International Standard Serial Number (NR)
+ $y - Incorrect ISSN (R)
+ $z - Canceled ISSN (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 024 - OTHER STANDARD IDENTIFIER (R)
+ Indicators
+ First - Type of standard number or code
+ 0 - International Standard Recording Code (ISRC)
+ 1 - Universal Product Code (UPC)
+ 2 - International Standard Music Number (ISMN)
+ 3 - International Article Number (EAN)
+ 4 - Serial Item and Contribution Identifier (SICI)
+ 7 - Source specified in subfield $2
+ 8 - Unspecified type of standard number or code
+ Second - Difference indicator
+ # - No information provided
+ 0 - No difference
+ 1 - Difference
+ Subfield Codes
+ $a - Standard number or code (NR)
+ $c - Terms of availability (NR)
+ $d - Additional codes following the standard number or code (NR)
+ $z - Canceled/invalid standard number or code (R)
+ $2 - Source of number or code (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 025 - OVERSEAS ACQUISITION NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Overseas acquisition number (R)
+ $8 - Field link and sequence number (R)
+ 026 - FINGERPRINT IDENTIFIER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - First and second groups of characters (R) <br> $b - Third and fourth groups of characters (R) <br> $c - Date (NR) <br> $d - Number of volume or part (R) <br> $e - Unparsed fingerprint (NR) <br> $2 - Source (NR)<br> $5 - Institution to which field applies (R) <br> $6 - Linkage (NR) <br> $8 - Field link and sequence number (R) <br> 027 - STANDARD TECHNICAL REPORT NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Standard technical report number (NR)
+ $z - Canceled/invalid number (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 028 - PUBLISHER NUMBER (R)
+ Indicators
+ First - Type of publisher number
+ 0 - Issue number
+ 1 - Matrix number
+ 2 - Plate number
+ 3 - Other music number
+ 4 - Videorecording number
+ 5 - Other publisher number
+ Second - Note/added entry controller
+ 0 - No note, no added entry
+ 1 - Note, added entry
+ 2 - Note, no added entry
+ 3 - No note, added entry
+ Subfield Codes
+ $a - Publisher number (NR)
+ $b - Source (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 030 - CODEN DESIGNATION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - CODEN (NR)
+ $z - Canceled/invalid CODEN (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 032 - POSTAL REGISTRATION NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Postal registration number (NR)
+ $b - Source (agency assigning number) (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 033 - DATE/TIME AND PLACE OF AN EVENT (R)
+ Indicators
+ First - Type of date in subfield $a
+ # - No date information
+ 0 - Single date
+ 1 - Multiple single dates
+ 2 - Range of dates
+ Second - Type of event
+ # - No information provided
+ 0 - Capture
+ 1 - Broadcast
+ 2 - Finding
+ Subfield Codes
+ $a - Formatted date/time (R)
+ $b - Geographic classification area code (R)
+ $c - Geographic classification subarea code (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 034 - CODED CARTOGRAPHIC MATHEMATICAL DATA (R)
+ Indicators
+ First - Type of scale
+ 0 - Scale indeterminable/No scale recorded
+ 1 - Single scale
+ 3 - Range of scales
+ Second - Type of ring
+ # - Not applicable
+ 0 - Outer ring
+ 1 - Exclusion ring
+ Subfield Codes
+ $a - Category of scale (NR)
+ a - Linear scale
+ b - Angular scale
+ z - Other type of scale
+ $b - Constant ratio linear horizontal scale (R)
+ $c - Constant ratio linear vertical scale (R)
+ $d - Coordinates--westernmost longitude (NR)
+ $e - Coordinates--easternmost longitude (NR)
+ $f - Coordinates--northernmost latitude (NR)
+ $g - Coordinates--southernmost latitude (NR)
+ $h - Angular scale (R)
+ $j - Declination--northern limit (NR)
+ $k - Declination--southern limit (NR)
+ $m - Right ascension--eastern limit (NR)
+ $n - Right ascension--western limit (NR)
+ $p - Equinox (NR)
+ $s - G-ring latitude (R)
+ $t - G-ring longitude (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 035 - SYSTEM CONTROL NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - System control number (NR)
+ $z - Canceled/invalid control number (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 036 - ORIGINAL STUDY NUMBER FOR COMPUTER DATA FILES (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Original study number (NR)
+ $b - Source (agency assigning number) (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 037 - SOURCE OF ACQUISITION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Stock number (NR)
+ $b - Source of stock number/acquisition (NR)
+ $c - Terms of availability (R)
+ $f - Form of issue (R)
+ $g - Additional format characteristics (R)
+ $n - Note (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 038 - RECORD CONTENT LICENSOR (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Record content licensor (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 040 - CATALOGING SOURCE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Original cataloging agency (NR)
+ $b - Language of cataloging (NR)
+ $c - Transcribing agency (NR)
+ $d - Modifying agency (R)
+ $e - Description conventions (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 041 - LANGUAGE CODE (R)
+ Indicators
+ First - Translation indication
+ 0 - Item not a translation/does not include a translation
+ 1 - Item is or includes a translation
+ Second - Source of code
+ # - MARC language code
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Language code of text/sound track or separate title (R)
+ $b - Language code of summary or abstract/overprinted title or subtitle (R)
+ $d - Language code of sung or spoken text (R)
+ $e - Language code of librettos (R)
+ $f - Language code of table of contents (R)
+ $g - Language code of accompanying material other than librettos (R)
+ $h - Language code of original and/or intermediate translations of text (R)
+ $2 - Source of code (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 042 - AUTHENTICATION CODE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Authentication code (R)
+ dc - Dublin Core
+ dhca - Dance Heritage Coalition Access Project
+ gamma - Georgia Archives & Manuscripts Automated Access Project
+ gils - Government Information Location Service
+ isds/c - ISSN Canada
+ lc - Library of Congress
+ lcac - LC Annotated Children's Cataloging Program
+ lccopycat - LC copy cataloging
+ lccopycat-nm - LC copy cataloging-Near Match
+ lcd - CONSER full authority application
+ lcderive - LC derived cataloging
+ lchlas - Handbook of Latin American Studies
+ lcllh - LC Law Library Hispanic
+ lcnccp - LC National Coordinated Cataloging Program
+ lcnitrate - LC nitrate film
+ lcnuc - National Union Catalog
+ lcode - LC overseas data entry
+ msc - CONSER minimal authority application
+ nlc - National Library of Canada
+ nlmcopyc - National Library of Medicine copy cataloging
+ nsdp - National Serial Data Program
+ ntccf - LC National Translations Center citation file
+ pcc - Program for Cooperative Cataloging
+ premarc - LC PreMARC Retrospective Conversion Project
+ sanb - South African National Bibliography Project
+ xisds/c - ISSN Canada does not consider item a serial
+ xlc - LC does not consider item a serial
+ xnlc - NLC does not consider item a serial
+ xnsdp - NSDP does not consider item a serial
+ 043 - GEOGRAPHIC AREA CODE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Geographic area code (R)
+ $b - Local GAC code (R)
+ $c - ISO code (R)
+ $2 - Source of local code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 044 - COUNTRY OF PUBLISHING/PRODUCING ENTITY CODE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Country of publishing/producing entity code (R)
+ $b - Local subentity code (R)
+ $c - ISO code (R)
+ $2 - Source of local subentity code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 045 - TIME PERIOD OF CONTENT (NR)
+ Indicators
+ First - Type of time period in subfield $b or $c
+ # - Subfield $b or $c not present
+ 0 - Single date/time
+ 1 - Multiple single dates/times
+ 2 - Range of dates/times
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Time period code (R)
+ $b - Formatted 9999 B.C. through C.E. time period (R)
+ $c - Formatted pre-9999 B.C. time period (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 046 - SPECIAL CODED DATES (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Type of date code (NR)
+ i - Inclusive dates of collection
+ k - Bulk of collection
+ m - Multiple dates
+ n - Unknown dates
+ p - Distribution/release/issue and production/recording session dates
+ q - Questionable date
+ r - Reissue and originaldates
+ s - Single known/probable date
+ t - Publication date and copyright dates
+ x - Incorrect dates
+ $b - Date 1 (B.C. date) (NR)
+ $c - Date 1 (C.E. date) (NR)
+ $d - Date 2 (B.C. date) (NR)
+ $e - Date 2 (C.E. date) (NR)
+ $j - Date resource modified (NR) <br> $k - Beginning or single date created (NR) <br> $l - Ending date created (NR) <br> $m - Beginning of date valid (NR) <br> $n - End of date valid (NR) <br> $2 - Source of date (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 047 - FORM OF MUSICAL COMPOSITION CODE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Form of musical composition code (R)
+ $8 - Field link and sequence number (R)
+ 048 - NUMBER OF MUSICAL INSTRUMENTS OR VOICES CODE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Performer or ensemble (R)
+ $b - Soloist (R)
+ $8 - Field link and sequence number(R)
+ Instrument or Voices Codes
+ ba - Brass - Horn
+ bb - Brass--Trumpet
+ bc - Brass--Cornet
+ bd - Brass--Trombone
+ be - Brass--Tuba
+ bf - Brass--Baritone
+ bn - Brass--Unspecified
+ bu - Brass--Unknown
+ by - Brass--Ethnic
+ bz - Brass--Other
+ ca - Choruses--Mixed
+ cb - Choruses--Women's
+ cc - Choruses--Men's
+ cd - Choruses--Children's
+ cn - Choruses--Unspecified
+ cu - Choruses--Unknown
+ cy - Choruses--Ethnic
+ ea - Electronic--Synthesizer
+ eb - Electronic--Tape
+ ec - Electronic--Computer
+ ed - Electronic--Ondes Martinot
+ en - Electronic--Unspecified
+ eu - Electronic--Unknown
+ ez - Electronic--Other
+ ka - Keyboard--Piano
+ kb - Keyboard--Organ
+ kc - Keyboard--Harpsichord
+ kd - Keyboard--Clavichord
+ ke - Keyboard--Continuo
+ kf - Keyboard--Celeste
+ kn - Keyboard--Unspecified
+ ku - Keyboard--Unknown
+ ky - Keyboard--Ethnic
+ kz - Keyboard--Other
+ oa - Larger ensemble--Full orchestra
+ ob - Larger ensemble--Chamber orch.
+ oc - Larger ensemble--String orchestra
+ od - Larger ensemble--Band
+ oe - Larger ensemble--Dance orchestra
+ of - Larger ensemble--Brass band
+ on - Larger ensemble--Unspecified
+ ou - Larger ensemble--Unknown
+ oy - Larger ensemble--Ethnic
+ oz - Larger ensemble--Other
+ pa - Percussion--Timpani
+ pb - Percussion--Xylophone
+ pc - Percussion--Marimba
+ pd - Percussion--Drum
+ pn - Percussion--Unspecified
+ pu - Percussion--Unknown
+ py - Percussion--Ethnic
+ pz - Percussion--Other
+ sa - Strings, bowed--Violin
+ sb - Strings, bowed--Viola
+ sc - Strings, bowed--Violoncello
+ sd - Strings, bowed--Double bass
+ se - Strings, bowed--Viol
+ sf - Strings, bowed--Viola d'amore
+ sg - Strings, bowed--Viola da gamba
+ sn - Strings, bowed--Unspecified
+ su - Strings, bowed--Unknown
+ sy - Strings, bowed--Ethnic
+ sz - Strings, bowed--Other
+ ta - Strings, plucked--Harp
+ tb - Strings, plucked--Guitar
+ tc - Strings, plucked--Lute
+ td - Strings, plucked--Mandolin
+ tn - Strings, plucked--Unspecified
+ tu - Strings, plucked--Unknown
+ ty - Strings, plucked--Ethnic
+ tz - Strings, plucked--Other
+ va - Voices--Soprano
+ vb - Voices--Mezzo Soprano
+ vc - Voices--Alto
+ vd - Voices--Tenor
+ ve - Voices--Baritone
+ vf - Voices--Bass
+ vg - Voices--Counter tenor
+ vh - Voices--High voice
+ vi - Voices--Medium voice
+ vj - Voices--Low voice
+ vn - Voices--Unspecified
+ vu - Voices--Unknown
+ vy - Voices--Ethnic
+ wa - Woodwinds--Flute
+ wb - Woodwinds--Oboe
+ wc - Woodwinds--Clarinet
+ wd - Woodwinds--Bassoon
+ we - Woodwinds--Piccolo
+ wf - Woodwinds--English horn
+ wg - Woodwinds--Bass clarinet
+ wh - Woodwinds--Recorder
+ wi - Woodwinds--Saxophone
+ wn - Woodwinds--Unspecified
+ wu - Woodwinds--Unknown
+ wy - Woodwinds--Ethnic
+ wz - Woodwinds--Other
+ zn - Unspecified instruments
+ zu - Unknown
+
+--Classification and Call Number Fields (05X-08X)--
+ 050 - LIBRARY OF CONGRESS CALL NUMBER (R)
+ Indicators
+ First - Existence in LC collection
+ # - No information provided
+ 0 - Item is in LC
+ 1 - Item is not in LC
+ Second - Source of call number
+ # - No information provided [OBSOLETE]
+ 0 - Assigned by LC
+ 4 - Assigned by agency other than LC
+ Second - Series call number (SE) [OBSOLETE]
+ 0 - No series involved
+ 1 - Main series
+ 2 - Subseries
+ 3 - Sub-subseries
+ Subfield Codes
+ $a - Classification number (R)
+ $b - Item number (NR)
+ $d - Supplementary class number (MU) [OBSOLETE]
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 051 - LIBRARY OF CONGRESS COPY, ISSUE, OFFPRINT STATEMENT (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Second - Series call number (SE) [OBSOLETE]
+ 0 - No series involved
+ 1 - Main series
+ 2 - Subseries
+ 3 - Sub-subseries
+ Subfield Codes
+ $a - Classification number (NR)
+ $b - Item number (NR)
+ $c - Copy information (NR)
+ $8 - Field link and sequence number (R)
+ 052 - GEOGRAPHIC CLASSIFICATION (R)
+ Indicators
+ First - Code source
+ # - Library of Congress Classification
+ 0 - U.S. Dept. of Defense Classification [OBSOLETE]
+ 1 - U.S. Dept. of Defense Classification
+ 7 - Source specified in subfield $2
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Geographic classification area code (NR)
+ $b - Geographic classification subarea code (R)
+ $c - Subject (MP) [OBSOLETE]
+ $d - Populated place name (R)
+ $2 - Code source (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 055 - CLASSIFICATION NUMBERS ASSIGNED IN CANADA (R)
+ Indicators
+ First - Existence in NLC collection
+ # - Information not provided
+ 0 - Work held by NLC
+ 1 - Work not held by NLC
+ Second - Type, completeness, source of class/call number
+ 0 - LC-based call number assigned by NLC
+ 1 - Complete LC class number assigned by NLC
+ 2 - Incomplete LC class number assigned by NLC
+ 3 - LC-based call number assigned by the contributing library
+ 4 - Complete LC class number assigned by the contributing library
+ 5 - Incomplete LC class number assigned by the contributing library
+ 6 - Other call number assigned by NLC
+ 7 - Other class number assigned by NLC
+ 8 - Other call number assigned by the contributing library
+ 9 - Other class number assigned by the contributing library
+ Subfield Codes
+ $a - Classification number (NR)
+ $b - Item number (NR)
+ $2 - Source of call/class number (NR)
+ $8 - Field link and sequence number (R)
+ 060 - NATIONAL LIBRARY OF MEDICINE CALL NUMBER (R)
+ Indicators
+ First - Existence in NLM collection
+ # - No information provided
+ 0 - Item is in NLM
+ 1 - Item is not in NLM
+ Second - Source of call number
+ # - No information provided [OBSOLETE]
+ 0 - Assigned by NLM
+ 4 - Assigned by agency other than NLM
+ Second - Series call number (SE) [OBSOLETE]
+ 0 - No series involved
+ 1 - Main series
+ 2 - Subseries
+ 3 - Sub-subseries
+ Subfield Codes
+ $a - Classification number (R)
+ $b - Item number (NR)
+ $8 - Field link and sequence number (R)
+ 061 - NATIONAL LIBRARY OF MEDICINE COPY STATEMENT (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Second - Series call number (SE) [OBSOLETE]
+ 0 - No series involved
+ 1 - Main series
+ 2 - Subseries
+ 3 - Sub-subseries
+ Subfield Codes
+ $a - Classification number (R)
+ $b - Item number (NR)
+ $c - Copy information (NR)
+ $8 - Field link and sequence number (R)
+ 066 - CHARACTER SETS PRESENT (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Primary G0 character set (NR)
+ $b - Primary G1 character set (NR)
+ $c - Alternate G0 or G1 character set (R)
+ 070 - NATIONAL AGRICULTURAL LIBRARY CALL NUMBER (R)
+ Indicators
+ First - Existence in NAL collection
+ 0 - Item is in NAL
+ 1 - Item is not in NAL
+ Second - Undefined
+ # - Undefined
+ Second - Series call number (SE) [OBSOLETE]
+ 0 - No series involved
+ 1 - Main series
+ 2 - Subseries
+ 3 - Sub-subseries
+ Subfield Codes
+ $a - Classification number (R)
+ $b - Item number (NR)
+ $8 - Field link and sequence number (R)
+ 071 - NATIONAL AGRICULTURAL LIBRARY COPY STATEMENT (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Second - Series call number (SE) [OBSOLETE]
+ 0 - No series involved
+ 1 - Main series
+ 2 - Subseries
+ 3 - Sub-subseries
+ Subfield Codes
+ $a - Classification number (R)
+ $b - Item number (NR)
+ $c - Copy information (NR)
+ $8 - Field link and sequence number (R)
+ 072 - SUBJECT CATEGORY CODE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Code source
+ 0 - NAL subject category code list
+ 7 - Code source specified in subfield $2
+ Subfield Codes
+ $a - Subject category code (NR)
+ $x - Subject category code subdivision (R)
+ $2 - Code source (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 074 - GPO ITEM NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - GPO item number (NR)
+ $z - Canceled/invalid GPO item number (R)
+ $8 - Field link and sequence number (R)
+ 080 - UNIVERSAL DECIMAL CLASSIFICATION NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Universal Decimal Classification number (NR)
+ $b - Item number (NR)
+ $x - Common auxiliary subdivision (R)
+ $2 - Edition identifier (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 082 - DEWEY DECIMAL CLASSIFICATION NUMBER (R)
+ Indicators
+ First - Type of edition
+ # - No edition information recorded (BK CF MU VM SE) [OBSOLETE]
+ 0 - Full edition
+ 1 - Abridged edition
+ 2 - Abridged NST version (BK MU VM SE) [OBSOLETE]
+ Second - Source of classification number
+ # - No information provided
+ 0 - Assigned by LC
+ 4 - Assigned by agency other than LC
+ Subfield Codes
+ $a - Classification number (R)
+ $b - Item number (NR)
+ $b - DDC number--abridged NST version (SE) [OBSOLETE]
+ $2 - Edition number (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 084 - OTHER CLASSIFICATION NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Classification number (R)
+ $b - Item number (NR)
+ $2 - Source of number (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 086 - GOVERNMENT DOCUMENT CLASSIFICATION NUMBER (R)
+ Indicators
+ First - Number source
+ # - Source specified in subfield $2
+ # - Undefined (BK MP MU VM SE) [OBSOLETE]
+ 0 - Superintendent of Documents Classification System
+ 1 - Government of Canada Publications: Outline of Classification
+ First - Government jurisdiction (BK MP MU VM SE) [OBSOLETE]
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Classification number (NR)
+ $z - Canceled/invalid classification number (R)
+ $2 - Number source (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 088 - REPORT NUMBER (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Report number (NR)
+ $z - Canceled/invalid report number (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 090 - LOCAL CALL NUMBER (BK AM CF MP MU VM SE) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Local class number (NR)
+ $b - Local Cutter number (NR)
+ 090 - SHELF LOCATION (AM)[OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Shelf location (NR)
+ 091 - MICROFILM SHELF LOCATION (AM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Microfilm shelf location (NR)
+
+--Main Entry Fields (1XX)--
+ 100 - MAIN ENTRY--PERSONAL NAME (NR)
+ Indicators
+ First - Type of personal name entry element
+ 0 - Forename
+ 1 - Surname
+ 2 - Multiple surname [OBSOLETE]
+ 3 - Family name
+ Second - Undefined
+ # - Undefined
+ Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+ Subfield Codes
+ $a - Personal name (NR)
+ $b - Numeration (NR)
+ $c - Titles and other words associated with a name (R)
+ $d - Dates associated with a name (NR)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $j - Attribution qualifier (R)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $q - Fuller form of name (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 110 - MAIN ENTRY--CORPORATE NAME (NR)
+ Indicators
+ First - Type of corporate name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Undefined
+ # - Undefined
+ Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+ Subfield Codes
+ $a - Corporate name or jurisdiction name as entry element (NR)
+ $b - Subordinate unit (R)
+ $c - Location of meeting (NR)
+ $d - Date of meeting or treaty signing (R)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section/meeting (R)
+ $p - Name of part/section of a work (R)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 111 - MAIN ENTRY--MEETING NAME (NR)
+ Indicators
+ First - Type of meeting name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Undefined
+ # - Undefined
+
+ Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+ Subfield Codes
+ $a - Meeting name or jurisdiction name as entry element (NR)
+ $b - Number (BK CF MP MU SE VM MX) [OBSOLETE]
+ $c - Location of meeting (NR)
+ $d - Date of meeting (NR)
+ $e - Subordinate unit (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section/meeting (R)
+ $p - Name of part/section of a work (R)
+ $q - Name of meeting following jurisdiction name entry element (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 130 - MAIN ENTRY--UNIFORM TITLE (NR)
+ Indicators
+ First - Nonfiling characters
+ 0-9 - Number of nonfiling characters present
+ # - Nonfiling characters not specified [OBSOLETE]
+ Second - Undefined
+ # - Undefined
+ Second - Main entry/subject relationship (BK MU SE) [OBSOLETE]
+ Subfield Codes
+ $a - Uniform title (NR)
+ $d - Date of treaty signing (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Title and Title-Related Fields (20X-24X)--
+ 210 - ABBREVIATED TITLE (R)
+ Indicators
+ First - Title added entry
+ 0 - No added entry
+ 1 - Added entry
+ Second - Type
+ # - Abbreviated key title
+ 0 - Other abbreviated title
+ Subfield Codes
+ $a - Abbreviated title (NR)
+ $b - Qualifying information (NR)
+ $2 - Source (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 211 - ACRONYM OR SHORTENED TITLE (R) [OBSOLETE]
+ Indicators
+ First - Title added entry
+ 0 - No title added entry
+ 1 - Title added entry
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters present
+ Subfield Codes
+ $a - Acronym or shortened title (NR)
+ $6 - Linkage (NR)
+ 212 - VARIANT ACCESS TITLE (R) [OBSOLETE]
+ Indicators
+ First - Title added entry
+ 0 - No title added entry
+ 1 - Title added entry
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Variant access title (NR)
+ $6 - Linkage (NR)
+ 214 - AUGMENTED TITLE (R) [OBSOLETE]
+ Indicators
+ First - Title added entry
+ 0 - No title added entry
+ 1 - Title added entry
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters present
+ Subfield Codes
+ $a - Augmented title (NR)
+ $6 - Linkage (NR)
+ 222 - KEY TITLE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ First - Specifies whether variant title and/or added entry is required
+ (CF SE) [OBSOLETE]
+ 0 - No key title added entry; title proper same
+ 1 - Key title added entry; title proper different
+ 2 - Key title added entry; title proper same
+ 3 - No key title added entry; title proper different
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Key title (NR)
+ $b - Qualifying information (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 240 - UNIFORM TITLE (NR)
+ Indicators
+ First - Uniform title printed or displayed
+ 0 - Not printed or displayed
+ 1 - Printed or displayed
+ 2 - Not printed on card, title added entry (MU) [OBSOLETE]
+ 3 - Printed on card, title added entry (MU) [OBSOLETE]
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Uniform title (NR)
+ $d - Date of treaty signing (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 241 - ROMANIZED TITLE (BK AM CF MP MU VM) (NR) [OBSOLETE]
+ Indicators
+ First - Title added entry
+ 0 - No title added entry
+ 1 - Title added entry
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Romanized title (NR)
+ $h - Medium (NR)
+ 242 - TRANSLATION OF TITLE BY CATALOGING AGENCY (R)
+ Indicators
+ First - Title added entry
+ 0 - No added entry
+ 1 - Added entry
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Title (NR)
+ $b - Remainder of title (NR)
+ $c - Statement of responsibility, etc. (NR)
+ $d - Designation of section (BK AM MP MU VM SE) [OBSOLETE]
+ $e - Name of part/section (BK AM MP MU VM SE) [OBSOLETE]
+ $h - Medium (NR)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $y - Language code of translated title (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 243 - COLLECTIVE UNIFORM TITLE (NR)
+ Indicators
+ First - Uniform title printed or displayed
+ 0 - Not printed or displayed
+ 1 - Printed or displayed
+ 2 - Not printed on card, title added entry (MU) [OBSOLETE]
+ 3 - Printed on card, title added entry (MU) [OBSOLETE]
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Uniform title (NR)
+ $d - Date of treaty signing (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 245 - TITLE STATEMENT (NR)
+ Indicators
+ First - Title added entry
+ 0 - No added entry
+ 1 - Added entry
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Title (NR)
+ $b - Remainder of title (NR)
+ $c - Statement of responsibility, etc. (NR)
+ $d - Designation of section (SE) [OBSOLETE]
+ $e - Name of part/section (SE) [OBSOLETE]
+ $f - Inclusive dates (NR)
+ $g - Bulk dates (NR)
+ $h - Medium (NR)
+ $k - Form (R)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $s - Version (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 246 - VARYING FORM OF TITLE (R)
+ Indicators
+ First - Note/added entry controller
+ 0 - Note, no added entry
+ 1 - Note, added entry
+ 2 - No note, no title added entry
+ 3 - No note, added entry
+ Second - Type of title
+ # - No type specified
+ 0 - Portion of title
+ 1 - Parallel title
+ 2 - Distinctive title
+ 3 - Other title
+ 4 - Cover title
+ 5 - Added title page title
+ 6 - Caption title
+ 7 - Running title
+ 8 - Spine title
+ Subfield Codes
+ $a - Title proper/short title (NR)
+ $b - Remainder of title (NR)
+ $d - Designation of section (SE) [OBSOLETE]
+ $e - Name of part/section (SE) [OBSOLETE]
+ $f - Date or sequential designation (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $i - Display text (NR)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 247 - FORMER TITLE (R)
+ Indicators
+ First - Title added entry
+ 0 - No added entry
+ 1 - Added entry
+ Second - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Subfield Codes
+ $a - Title (NR)
+ $b - Remainder of title (NR)
+ $d - Designation of section (SE) [OBSOLETE]
+ $e - Name of part/section (SE) [OBSOLETE]
+ $f - Date or sequential designation (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $x - International Standard Serial Number (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Edition, Imprint, etc. Fields 250-270--
+ 250 - EDITION STATEMENT (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Edition statement (NR)
+ $b - Remainder of edition statement(NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 254 - MUSICAL PRESENTATION STATEMENT (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Musical presentation statement (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 255 - CARTOGRAPHIC MATHEMATICAL DATA (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Statement of scale (NR)
+ $b - Statement of projection (NR)
+ $c - Statement of coordinates (NR)
+ $d - Statement of zone (NR)
+ $e - Statement of equinox (NR)
+ $f - Outer G-ring coordinate pairs (NR)
+ $g - Exclusion G-ring coordinate pairs (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 256 - COMPUTER FILE CHARACTERISTICS (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Computer file characteristics (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 257 - COUNTRY OF PRODUCING ENTITY FOR ARCHIVAL FILMS (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Country of producing entity (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 260 - PUBLICATION, DISTRIBUTION, ETC. (IMPRINT) (R)
+ Indicators
+ First - Sequence of publishing statements
+ # - Not applicable/No information provided/Earliest available publisher
+ 2 - Intervening publisher
+ 3 - Current/latest publisher
+ Second - Undefined
+ # - Undefined
+ First - Presence of publisher in imprint (BK MP MU SE) [OBSOLETE]
+ 0 - Publisher, distributor, etc. is present
+ 1 - Publisher, distributor, etc. is not present
+ Second - Added entry/publisher relationship (SE) [OBSOLETE]
+ 0 - Publisher, distributor, etc. not same as issuing body in added entry
+ 1 - Publisher, distributor, etc. same as issuing body in added entry
+ Subfield Codes
+ $a - Place of publication, distribution, etc. (R)
+ $b - Name of publisher, distributor, etc. (R)
+ $c - Date of publication, distribution, etc. (R)
+ $d - Plate or publisher's number for music (Pre-AACR 2) (NR) [LOCAL]
+ $e - Place of manufacture (NR)
+ $f - Manufacturer (NR)
+ $g - Date of manufacture (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 261 - IMPRINT STATEMENT FOR FILMS (Pre-AACR 1 Revised) (NR) [LOCAL]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Producing company (R)
+ $b - Releasing company (primary distributor) (R)
+ $d - Date of production, release, etc. (R)
+ $e - Contractual producer (R)
+ $f - Place of production, release, etc. (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 262 - IMPRINT STATEMENT FOR SOUND RECORDINGS (Pre-AACR 2) (NR) [LOCAL]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Place of production, release, etc. (NR)
+ $b - Publisher or trade name (NR)
+ $c - Date of production, release, etc. (NR)
+ $k - Serial identification (NR)
+ $l - Matrix and/or take number (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 263 - PROJECTED PUBLICATION DATE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Projected publication date (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 265 - SOURCE FOR ACQUISITION/SUBSCRIPTION ADDRESS (NR) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Source for acquisition/subscription address (R)
+ $6 - Linkage (NR)
+ 270 - ADDRESS (R)
+ Indicators
+ First - Level
+ # - No level specified
+ 1 - Primary
+ 2 - Secondary
+ Second - Type of address
+ # - No type specified
+ 0 - Mailing
+ 7 - Type specified in subfield $i
+ Subfield Codes
+ $a - Address (R)
+ $b - City (NR)
+ $c - State or province (NR)
+ $d - Country (NR)
+ $e - Postal code (NR)
+ $f - Terms preceding attention name (NR)
+ $g - Attention name (NR)
+ $h - Attention position (NR)
+ $i - Type of address (NR)
+ $j - Specialized telephone number (R)
+ $k - Telephone number (R)
+ $l - Fax number (R)
+ $m - Electronic mail address (R)
+ $n - TDD or TTY number (R)
+ $p - Contact person (R)
+ $q - Title of contact person (R)
+ $r - Hours (R)
+ $z - Public note (R)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Physical Description, etc. Fields (3XX)--
+ 300 - PHYSICAL DESCRIPTION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Extent (R)
+ $b - Other physical details (NR)
+ $c - Dimensions (R)
+ $e - Accompanying material (NR)
+ $f - Type of unit (R)
+ $g - Size of unit (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 301 - PHYSICAL DESCRIPTION FOR FILMS (PRE-AACR 2) (VM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Extent of item (NR)
+ $b - Sound characteristics (NR)
+ $c - Color characteristics (NR)
+ $d - Dimensions (NR)
+ $e - Accompanying material (NR)
+ $f - Speed (NR)
+ 302 - PAGE OR ITEM COUNT (BK AM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Page count (NR)
+ 303 - UNIT COUNT (AM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Unit count (NR)
+ 304 - LINEAR FOOTAGE (AM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Linear footage (NR)
+ 305 - PHYSICAL DESCRIPTION FOR SOUND RECORDINGS (Pre-AACR 2) (MU) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Extent (NR)
+ $b - Other physical details (NR)
+ $c - Dimensions (NR)
+ $d - Microgroove or standard (NR)
+ $e - Stereophonic, monaural (NR)
+ $f - Number of tracks (NR)
+ $m - Serial identification (NR)
+ $n - Matrix and/or take number (NR)
+ $6 - Linkage (NR)
+ 306 - PLAYING TIME (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Playing time (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 307 - HOURS, ETC. (R)
+ Indicators
+ First - Display constant controller
+ # - Hours
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Hours (NR)
+ $b - Additional information (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 308 - PHYSICAL DESCRIPTION FOR FILMS (ARCHIVAL) (VM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Number of reels (NR)
+ $b - Footage (NR)
+ $c - Sound characteristics (NR)
+ $d - Color characteristics (NR)
+ $e - Width (NR)
+ $f - Presentation format (NR)
+ $6 - Linkage (NR)
+ 310 - CURRENT PUBLICATION FREQUENCY (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Current publication frequency (NR)
+ $b - Date of current publication frequency (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 315 - FREQUENCY (NR) (CF MP) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Frequency (R)
+ $b - Dates of frequency (R)
+ $6 - Linkage (NR)
+ 321 - FORMER PUBLICATION FREQUENCY (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Former publication frequency (NR)
+ $b - Dates of former publication frequency (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 340 - PHYSICAL MEDIUM (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Material base and configuration (R)
+ $b - Dimensions (R)
+ $c - Materials applied to surface (R)
+ $d - Information recording technique (R)
+ $e - Support (R)
+ $f - Production rate/ratio (R)
+ $h - Location within medium (R)
+ $i - Technical specifications of medium (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 342 - GEOSPATIAL REFERENCE DATA (R)
+ Indicators
+ First - Geospatial reference dimension
+ 0 - Horizontal coordinate system
+ 1 - Vertical coordinate system
+ Second - Geospatial reference method
+ 0 - Geographic
+ 1 - Map projection
+ 2 - Grid coordinate system
+ 3 - Local planar
+ 4 - Local
+ 5 - Geodetic model
+ 6 - Altitude
+ 7 - Method specified in $2
+ 8 - Depth
+ Subfield Codes
+ $a - Name (NR)
+ $b - Coordinate or distance units (NR)
+ $c - Latitude resolution (NR)
+ $d - Longitude resolution (NR)
+ $e - Standard parallel or oblique line latitude (R)
+ $f - Oblique line longitude (R)
+ $g - Longitude of central meridian or projection center (NR)
+ $h - Latitude of projection origin or projection center (NR)
+ $i - False easting (NR)
+ $j - False northing (NR)
+ $k - Scale factor (NR)
+ $l - Height of perspective point above surface (NR)
+ $m - Azimuthal angle (NR)
+ $n - Azimuth measure point longitude or straight vertical
+ longitude from pole (NR)
+ $o - Landsat number and path number (NR)
+ $p - Zone identifier (NR)
+ $q - Ellipsoid name (NR)
+ $r - Semi-major axis (NR)
+ $s - Denominator of flattening ratio (NR)
+ $t - Vertical resolution (NR)
+ $u - Vertical encoding method (NR)
+ $v - Local planar, local, or other projection or grid description (NR)
+ $w - Local planar or local georeference information (NR)
+ $2 - Reference method used (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 343 - PLANAR COORDINATE DATA (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Planar coordinate encoding method (NR)
+ $b - Planar distance units (NR)
+ $c - Abscissa resolution (NR)
+ $d - Ordinate resolution (NR)
+ $e - Distance resolution (NR)
+ $f - Bearing resolution (NR)
+ $g - Bearing units (NR)
+ $h - Bearing reference direction (NR)
+ $i - Bearing reference meridian (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 350 - PRICE (NR) (BK AM CF MU VM SE) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Price (R)
+ $b - Form of issue (R)
+ $6 - Linkage (NR)
+ 351 - ORGANIZATION AND ARRANGEMENT OF MATERIALS (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Organization (R)
+ $b - Arrangement (R)
+ $c - Hierarchical level (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 352 - DIGITAL GRAPHIC REPRESENTATION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Direct reference method (NR)
+ $b - Object type (R)
+ $c - Object count (R)
+ $d - Row count (NR)
+ $e - Column count (NR)
+ $f - Vertical count (NR)
+ $g - VPF topology level (NR)
+ $i - Indirect reference description (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 355 - SECURITY CLASSIFICATION CONTROL (R)
+ Indicators
+ First - Controlled element
+ 0 - Document
+ 1 - Title
+ 2 - Abstract
+ 3 - Contents note
+ 4 - Author
+ 5 - Record
+ 8 - Other element
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Security classification (NR)
+ $b - Handling instructions (R)
+ $c - External dissemination information (R)
+ $d - Downgrading or declassification event (NR)
+ $e - Classification system (NR)
+ $f - Country of origin code (NR)
+ $g - Downgrading date (NR)
+ $h - Declassification date (NR)
+ $j - Authorization (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 357 - ORIGINATOR DISSEMINATION CONTROL (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfields
+ $a - Originator control term (NR)
+ $b - Originating agency (R)
+ $c - Authorized recipients of material (R)
+ $g - Other restrictions (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 359 - RENTAL PRICE (VM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Code
+ $a - Rental price (NR)
+ 362 - DATES OF PUBLICATION AND/OR SEQUENTIAL DESIGNATION (R)
+ Indicators
+ First - Format of date
+ 0 - Formatted style
+ 1 - Unformatted note
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Dates of publication and/or sequential designation (NR)
+ $z - Source of information (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Series Statement Fields (4XX)--
+ 400 - SERIES STATEMENT/ADDED ENTRY--PERSONAL NAME (R) [US-LOCAL]
+ Indicators
+ First - Type of personal name entry element
+ 0 - Forename
+ 1 - Surname
+ 2 - Multiple surname [OBSOLETE]
+ 3 - Family name
+ Second - Pronoun represents main entry
+ 0 - Main entry not represented by pronoun
+ 1 - Main entry represented by pronoun
+ Subfield Codes
+ $a - Personal name (NR)
+ $b - Numeration (NR)
+ $c - Titles and other words associated with a name (R)
+ $d - Dates associated with a name (NR)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $q - Fuller form of name (NR) [OBSOLETE]
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Volume number/sequential designation (NR)
+ $x - International Standard Serial Number (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 410 - SERIES STATEMENT/ADDED ENTRY--CORPORATE NAME (R) [US-LOCAL]
+ Indicators
+ First - Type of corporate name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Pronoun represents main entry
+ 0 - Main entry not represented by pronoun
+ 1 - Main entry represented by pronoun
+ Subfield Codes
+ $a - Corporate name or jurisdiction name as entry element (NR)
+ $b - Subordinate unit (R)
+ $c - Location of meeting (NR)
+ $d - Date of meeting or treaty signing (R)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section/meeting (R)
+ $p - Name of part/section of a work (R)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Volume number/sequential designation (NR)
+ $x - International Standard Serial Number (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 411 - SERIES STATEMENT/ADDED ENTRY--MEETING NAME (R) [US-LOCAL]
+ Indicators
+ First - Type of meeting name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Pronoun represents main entry
+ 0 - Main entry not represented by pronoun
+ 1 - Main entry represented by pronoun
+ Subfield Codes
+ $a - Meeting name or jurisdiction name as entry element (NR)
+ $b - Number [OBSOLETE]
+ $c - Location of meeting (NR)
+ $d - Date of meeting (NR)
+ $e - Subordinate unit (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section/meeting (R)
+ $p - Name of part/section of a work (R)
+ $q - Name of meeting following jurisdiction name entry element (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Volume number/sequential designation (NR)
+ $x - International Standard Serial Number (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 440 - SERIES STATEMENT/ADDED ENTRY--TITLE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Title (NR)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $v - Volume number/sequential designation (NR)
+ $x - International Standard Serial Number (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 490 - SERIES STATEMENT (R)
+ Indicators
+ First - Specifies whether series is traced
+ 0 - Series not traced
+ 1 - Series traced differently
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Series statement (R)
+ $l - Library of Congress call number (NR)
+ $v - Volume number/sequential designation (R)
+ $x - International Standard Serial Number (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Note Fields (Part 1: 50X-53X)--
+ 500 - GENERAL NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - General note (NR)
+ $l - Library of Congress call number (SE) [OBSOLETE]
+ $x - International Standard Serial Number (SE) [OBSOLETE]
+ $z - Source of note information (AM SE) [OBSOLETE]
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 501 - WITH NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - With note (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 502 - DISSERTATION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Dissertation note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 503 - BIBLIOGRAPHIC HISTORY NOTE (R) (BK CF MU) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Bibliographic history note (NR)
+ $6 - Linkage (NR)
+ 504 - BIBLIOGRAPHY, ETC. NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Bibliography, etc. note (NR)
+ $b - Number of references (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 505 - FORMATTED CONTENTS NOTE (R)
+ Indicators
+ First - Display constant controller
+ 0 - Contents
+ 1 - Incomplete contents
+ 2 - Partial contents
+ 8 - No display constant generated
+ Second - Level of content designation
+ # - Basic
+ 0 - Enhanced
+ Subfield Codes
+ $a - Formatted contents note (NR)
+ $g - Miscellaneous information (R)
+ $r - Statement of responsibility (R)
+ $t - Title (R)
+ $u - Uniform Resource Identifier (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 506 - RESTRICTIONS ON ACCESS NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Terms governing access (NR)
+ $b - Jurisdiction (R)
+ $c - Physical access provisions (R)
+ $d - Authorized users (R)
+ $e - Authorization (R)
+ $u - Uniform Resource Identifier (R)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 507 - SCALE NOTE FOR GRAPHIC MATERIAL (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Representative fraction of scale note (NR)
+ $b - Remainder of scale note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 508 - CREATION/PRODUCTION CREDITS NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Creation/production credits note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 510 - CITATION/REFERENCES NOTE (R)
+ Indicators
+ First - Coverage/location in source
+ 0 - Coverage unknown
+ 1 - Coverage complete
+ 2 - Coverage is selective
+ 3 - Location in source not given
+ 4 - Location in source given
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Name of source (NR)
+ $b - Coverage of source (NR)
+ $c - Location within source (NR)
+ $x - International Standard Serial Number (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 511 - PARTICIPANT OR PERFORMER NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - No information provided (VM MU) [OBSOLETE]
+ 0 - No display constant generated
+ 1 - Cast
+ 2 - Presenter (VM MU) [OBSOLETE]
+ 3 - Narrator (VM MU) [OBSOLETE]
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Participant or performer note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 512 - EARLIER OR LATER VOLUMES SEPARATELY CATALOGED NOTE (SE) (R) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Earlier or later volumes separately cataloged note (NR)
+ $6 - Linkage (NR)
+ 513 - TYPE OF REPORT AND PERIOD COVERED NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Type of report (NR)
+ $b - Period covered (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 514 - DATA QUALITY NOTE (NR)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Attribute accuracy report (NR)
+ $b - Attribute accuracy value (R)
+ $c - Attribute accuracy explanation (R)
+ $d - Logical consistency report (NR)
+ $e - Completeness report (NR)
+ $f - Horizontal position accuracy report (NR)
+ $g - Horizontal position accuracy value (R)
+ $h - Horizontal position accuracy explanation (R)
+ $i - Vertical positional accuracy report (NR)
+ $j - Vertical positional accuracy value (R)
+ $k - Vertical positional accuracy explanation (R)
+ $m - Cloud cover (NR)
+ $u - Uniform Resource Identifier (R)
+ $z - Display note (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 515 - NUMBERING PECULIARITIES NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Numbering peculiarities note (NR)
+ $z - Source of note information (NR) (SE) [OBSOLETE]
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 516 - TYPE OF COMPUTER FILE OR DATA NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Type of file
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Type of computer file or data note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 517 - CATEGORIES OF FILMS NOTE (ARCHIVAL) (VM) (NR) [OBSOLETE]
+ Indicators
+ First - Fiction specification
+ 0 - Nonfiction
+ 1 - Fiction
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Different formats (NR)
+ $b - Content descriptors (R)
+ $c - Additional animation techniques (R)
+ 518 - DATE/TIME AND PLACE OF AN EVENT NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Date/time and place of an event note (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 520 - SUMMARY, ETC. (R)
+ Indicators
+ First - Display constant controller
+ # - Summary
+ 0 - Subject
+ 1 - Review
+ 2 - Scope and content
+ 3 - Abstract
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Summary, etc. note (NR)
+ $b - Expansion of summary note (NR)
+ $u - Uniform Resource Identifier (R)
+ $z - Source of note information (NR) [OBSOLETE]
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 521 - TARGET AUDIENCE NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Audience
+ 0 - Reading grade level
+ 1 - Interest age level
+ 2 - Interest grade level
+ 3 - Special audience characteristics
+ 4 - Motivation interest level
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Target audience note (R)
+ $b - Source (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 522 - GEOGRAPHIC COVERAGE NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Geographic coverage
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Geographic coverage note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 523 - TIME PERIOD OF CONTENT NOTE (NR) (CF) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Time period of content note (NR)
+ $b - Dates of data collection note (NR)
+ $6 - Linkage (NR)
+ 524 - PREFERRED CITATION OF DESCRIBED MATERIALS NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Cite as
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Preferred citation of described materials note (NR)
+ $2 - Source of schema used (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 525 - SUPPLEMENT NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Supplement note (NR)
+ $z - Source of note information (NR) (SE) [OBSOLETE]
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 526 - STUDY PROGRAM INFORMATION NOTE (R)
+ Indicators
+ First - Display constant controller
+ 0 - Reading program
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Program name (NR)
+ $b - Interest level (NR)
+ $c - Reading level (NR)
+ $d - Title point value (NR)
+ $i - Display text (NR)
+ $x - Nonpublic note (R)
+ $z - Public note (R)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 527 - CENSORSHIP NOTE (VM) (R) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Censorship note (NR)
+ $6 - Linkage (NR)
+ 530 - ADDITIONAL PHYSICAL FORM AVAILABLE NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Additional physical form available note (NR)
+ $b - Availability source (NR)
+ $c - Availability conditions (NR)
+ $d - Order number (NR)
+ $u - Uniform Resource Identifier (R)
+ $z - Source of note information (NR) (AM CF VM SE) [OBSOLETE]
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 533 - REPRODUCTION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Type of reproduction (NR)
+ $b - Place of reproduction (R)
+ $c - Agency responsible for reproduction (R)
+ $d - Date of reproduction (NR)
+ $e - Physical description of reproduction (NR)
+ $f - Series statement of reproduction (R)
+ $m - Dates and/or sequential designation of issues reproduced (R)
+ $n - Note about reproduction (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $7 - Fixed-length data elements of reproduction (NR)
+ 0 - Type of date/Publication status
+ 1-4 - Date 1
+ 5-8 - Date 2
+ 9-11 - Place of publication, production, or execution
+ 12 - Frequency
+ n - Not applicable
+ 13 - Regularity
+ # - Not applicable
+ 14 - Form of item
+ $8 - Field link and sequence number (R)
+ 534 - ORIGINAL VERSION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ First - Specifies presence of series statement on original (BK MP MU VM SE) [OBSOLETE]
+ 0 - Note excludes series of original
+ 1 - Note includes series of original
+ Subfield Codes
+ $a - Main entry of original (NR)
+ $b - Edition statement of original (NR)
+ $c - Publication, distribution, etc. of original (NR)
+ $e - Physical description, etc. of original (NR)
+ $f - Series statement of original (R)
+ $k - Key title of original (R)
+ $l - Location of original (NR)
+ $m - Material specific details (NR)
+ $n - Note about original (R)
+ $p - Introductory phrase (NR)
+ $t - Title statement of original (NR)
+ $x - International Standard Serial Number (R)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 535 - LOCATION OF ORIGINALS/DUPLICATES NOTE (R)
+ Indicators
+ First - Additional information about custodian
+ 0 - Repository (AM) [OBSOLETE]
+ 1 - Holder of originals
+ 2 - Holder of duplicates
+ 3 - Holder of oral tapes (AM) [OBSOLETE]
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Custodian (NR)
+ $b - Postal address (R)
+ $c - Country (R)
+ $d - Telecommunications address (R)
+ $g - Repository location code (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Note Fields (Part 2: 53X-58X)--
+ 536 - FUNDING INFORMATION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Text of note (NR)
+ $b - Contract number (R)
+ $c - Grant number (R)
+ $d - Undifferentiated number (R)
+ $e - Program element number (R)
+ $f - Project number (R)
+ $g - Task number (R)
+ $h - Work unit number (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 537 - SOURCE OF DATA NOTE (NR) (CF) [OBSOLETE]
+ Indicators
+ First - Display constant controller
+ # - No information provided
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Source of data note (NR)
+ $6 - Linkage (NR)
+ 538 - SYSTEM DETAILS NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - System details note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 540 - TERMS GOVERNING USE AND REPRODUCTION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Terms governing use and reproduction (NR)
+ $b - Jurisdiction (NR)
+ $c - Authorization (NR)
+ $d - Authorized users (NR)
+ $u - Uniform Resource Identifier (R)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 541 - IMMEDIATE SOURCE OF ACQUISITION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Source of acquisition (NR)
+ $b - Address (NR)
+ $c - Method of acquisition (NR)
+ $d - Date of acquisition (NR)
+ $e - Accession number (NR)
+ $f - Owner (NR)
+ $h - Purchase price (NR)
+ $n - Extent (R)
+ $o - Type of unit (R)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 543 - SOLICITATION INFORMATION NOTE (AM) (R) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Solicitation information note (NR)
+ $6 - Linkage (NR)
+ 544 - LOCATION OF OTHER ARCHIVAL MATERIALS NOTE (R)
+ Indicators
+ First - Relationship
+ # - No information provided
+ 0 - Associated materials
+ 1 - Related materials
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Custodian (R)
+ $b - Address (R)
+ $c - Country (R)
+ $d - Title (R)
+ $e - Provenance (R)
+ $n - Note (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 545 - BIOGRAPHICAL OR HISTORICAL DATA (R)
+ Indicators
+ First - Type of data
+ # - No information provided
+ 0 - Biographical sketch
+ 1 - Administrative history
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Biographical or historical note (NR)
+ $b - Expansion (NR)
+ $u - Uniform Resource Identifier (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 546 - LANGUAGE NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Language note (NR)
+ $b - Information code or alphabet (R)
+ $z - Source of note information (NR) (SE) [OBSOLETE]
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 547 - FORMER TITLE COMPLEXITY NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Former title complexity note (NR)
+ $z - Source of note information (NR) (SE) [OBSOLETE]
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 550 - ISSUING BODY NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ First - Existence of additional information (SE) [OBSOLETE]
+ 0 - Repetitious
+ 1 - Not repetitious
+ Subfield Codes
+ $a - Issuing body note (NR)
+ $z - Source of note information (NR) (SE) [OBSOLETE]
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 552 - ENTITY AND ATTRIBUTE INFORMATION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Entity type label (NR)
+ $b - Entity type definition and source (NR)
+ $c - Attribute label (NR)
+ $d - Attribute definition and source (NR)
+ $e - Enumerated domain value (R)
+ $f - Enumerated domain value definition and source (R)
+ $g - Range domain minimum and maximum (NR)
+ $h - Codeset name and source (NR)
+ $i - Unrepresentable domain (NR)
+ $j - Attribute units of measurement and resolution (NR)
+ $k - Beginning date and ending date of attribute values (NR)
+ $l - Attribute value accuracy (NR)
+ $m - Attribute value accuracy explanation (NR)
+ $n - Attribute measurement frequency (NR)
+ $o - Entity and attribute overview (R)
+ $p - Entity and attribute detail citation (R)
+ $u - Uniform Resource Identifier (R)
+ $z - Display note (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 555 - CUMULATIVE INDEX/FINDING AIDS NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Indexes
+ 0 - Finding aids
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Cumulative index/finding aids note (NR)
+ $b - Availability source (R)
+ $c - Degree of control (NR)
+ $d - Bibliographic reference (NR)
+ $u - Uniform Resource Identifier (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 556 - INFORMATION ABOUT DOCUMENTATION NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Documentation
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Information about documentation note (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 561 - OWNERSHIP AND CUSTODIAL HISTORY (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - History (NR)
+ $b - Time of collation (NR) [OBSOLETE]
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 562 - COPY AND VERSION IDENTIFICATION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Identifying markings (R)
+ $b - Copy identification (R)
+ $c - Version identification (R)
+ $d - Presentation format (R)
+ $e - Number of copies (R)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 563 - BINDING INFORMATION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Binding note (NR) <br> $u - Uniform Resource Identifier (R)<br> $3 - Materials specified (NR) <br> $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 565 - CASE FILE CHARACTERISTICS NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - File size
+ 0 - Case file characteristics
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Number of cases/variables (NR)
+ $b - Name of variable (R)
+ $c - Unit of analysis (R)
+ $d - Universe of data (R)
+ $e - Filing scheme or code (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 567 - METHODOLOGY NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Methodology
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Methodology note (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 570 - EDITOR NOTE (SE) (R) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Editor note (NR)
+ $z - Source of note information (NR)
+ $6 - Linkage (NR)
+ 580 - LINKING ENTRY COMPLEXITY NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Linking entry complexity note (NR)
+ $z - Source of note information (NR) [OBSOLETE]
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 581 - PUBLICATIONS ABOUT DESCRIBED MATERIALS NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Publications
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Publications about described materials note (NR)
+ $z - International Standard Book Number (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 582 - RELATED COMPUTER FILES NOTE (R) (CF) [OBSOLETE]
+ Indicators
+ First - Display constant controller
+ # - No information provided
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Related computer files note (NR)
+ $6 - Linkage (NR)
+ 583 - ACTION NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Action (NR)
+ $b - Action identification (R)
+ $c - Time/date of action (R)
+ $d - Action interval (R)
+ $e - Contingency for action (R)
+ $f - Authorization (R)
+ $h - Jurisdiction (R)
+ $i - Method of action (R)
+ $j - Site of action (R)
+ $k - Action agent (R)
+ $l - Status (R)
+ $n - Extent (R)
+ $o - Type of unit (R)
+ $u - Uniform Resource Identifier (R)
+ $x - Nonpublic note (R)
+ $z - Public note (R)
+ $2 - Source of term (NR)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 584 - ACCUMULATION AND FREQUENCY OF USE NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Accumulation (R)
+ $b - Frequency of use (R)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 585 - EXHIBITIONS NOTE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Exhibitions note (NR)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 586 - AWARDS NOTE (R)
+ Indicators
+ First - Display constant controller
+ # - Awards
+ 8 - No display constant generated
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Awards note (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 59X - LOCAL NOTES
+ 590 - LOCAL NOTE (BK CF MP MU SE VM MX) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Local note (NR)
+ 590 - RECEIPT DATE NOTE (VM) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Receipt date (NR)
+ $b - Provenance (NR)
+ $d - Condition of individual reels (NR)
+ $d - Origin of safety copy (NR)
+
+--Subject Access Fields (6XX)--
+ 600 - SUBJECT ADDED ENTRY--PERSONAL NAME (R)
+ Indicators
+ First - Type of personal name entry element
+ 0 - Forename
+ 1 - Surname
+ 2 - Multiple surname [OBSOLETE]
+ 3 - Family name
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Personal name (NR)
+ $b - Numeration (NR)
+ $c - Titles and other words associated with a name (R)
+ $d - Dates associated with a name (NR)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $j - Attribution qualifier (R)<br> $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $q - Fuller form of name (NR)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 610 - SUBJECT ADDED ENTRY--CORPORATE NAME (R)
+ Indicators
+ First - Type of corporate name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Corporate name or jurisdiction name as entry element (NR)
+ $b - Subordinate unit (R)
+ $c - Location of meeting (NR)
+ $d - Date of meeting or treaty signing (R)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section/meeting (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 611 - SUBJECT ADDED ENTRY--MEETING NAME (R)
+ Indicators
+ First - Type of meeting name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Meeting name or jurisdiction name as entry element (NR)
+ $b - Number (BK CF MP MU SE VM MX) [OBSOLETE]
+ $c - Location of meeting (NR)
+ $d - Date of meeting (NR)
+ $e - Subordinate unit (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section/meeting (R)
+ $p - Name of part/section of a work (R)
+ $q - Name of meeting following jurisdiction name entry element (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 630 - SUBJECT ADDED ENTRY--UNIFORM TITLE (R)
+ Indicators
+ First - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ # - Nonfiling characters not specified [OBSOLETE]
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Uniform title (NR)
+ $d - Date of treaty signing (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 648 - SUBJECT ADDED ENTRY--CHRONOLOGICAL TERM (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Chronological term (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 650 - SUBJECT ADDED ENTRY--TOPICAL TERM (R)
+ Indicators
+ First - Level of subject
+ # - No information provided
+ 0 - No level specified
+ 1 - Primary
+ 2 - Secondary
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Topical term or geographic name as entry element (NR)
+ $b - Topical term following geographic name as entry element (NR)
+ $c - Location of event (NR)
+ $d - Active dates (NR)
+ $e - Relator term (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 651 - SUBJECT ADDED ENTRY--GEOGRAPHIC NAME (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Geographic name (NR)
+ $b - Geographic name following place entry element (R) [OBSOLETE]
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 652 - SUBJECT ADDED ENTRY--REVERSED GEOGRAPHIC (BK MP SE) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Geographic name of place element (NR)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ 653 - INDEX TERM--UNCONTROLLED (R)
+ Indicators
+ First - Level of index term
+ # - No information provided
+ 0 - No level specified
+ 1 - Primary
+ 2 - Secondary
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Uncontrolled term (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 654 - SUBJECT ADDED ENTRY--FACETED TOPICAL TERMS (R)
+ Indicators
+ First - Level of subject
+ # - No information provided
+ 0 - No level specified
+ 1 - Primary
+ 2 - Secondary
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Focus term (R)
+ $b - Non-focus term (R)
+ $c - Facet/hierarchy designation (R)
+ $v - Form subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of heading or term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 655 - INDEX TERM--GENRE/FORM (R)
+ Indicators
+ First - Type of heading
+ # - Basic
+ 0 - Faceted
+ Second - Thesaurus
+ 0 - Library of Congress Subject Headings
+ 1 - LC subject headings for children's literature
+ 2 - Medical Subject Headings
+ 3 - National Agricultural Library subject authority file
+ 4 - Source not specified
+ 5 - Canadian Subject Headings
+ 6 - Répertoire de vedettes-matière
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Genre/form data or focus term (NR)
+ $b - Non-focus term (R)
+ $c - Facet/hierarchy designation (R)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of term (NR)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 656 - INDEX TERM--OCCUPATION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Source of term
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Occupation (NR)
+ $k - Form (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 657 - INDEX TERM--FUNCTION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Source of term
+ 7 - Source specified in subfield $2
+ Subfield Codes
+ $a - Function (NR)
+ $v - Form subdivision (R)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 658 - INDEX TERM--CURRICULUM OBJECTIVE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Main curriculum objective (NR)
+ $b - Subordinate curriculum objective (R)
+ $c - Curriculum code (NR)
+ $d - Correlation factor (NR)
+ $2 - Source of term or code (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Added Entry Fields (70X-75X)--
+ 700 - ADDED ENTRY--PERSONAL NAME (R)
+ Indicators
+ First - Type of personal name entry element
+ 0 - Forename
+ 1 - Surname
+ 2 - Multiple surname [OBSOLETE]
+ 3 - Family name
+ Second - Type of added entry
+ # - No information provided
+ 0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Printed on card (VM) [OBSOLETE]
+ 2 - Analytical entry
+ 3 - Not printed on card (VM) [OBSOLETE]
+ Subfield Codes
+ $a - Personal name (NR)
+ $b - Numeration (NR)
+ $c - Titles and other words associated with a name (R)
+ $d - Dates associated with a name (NR)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $j - Attribution qualifier (R)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $q - Fuller form of name (NR)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $x - International Standard Serial Number (NR)
+ $3 - Materials specified (NR)
+ $4 - Relator code (R)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 705 - ADDED ENTRY--PERSONAL NAME (PERFORMER) (MU) [OBSOLETE]
+ Indicators
+ First - Type of personal name entry element
+ 0 - Forename
+ 1 - Single surname
+ 2 - Multiple surname
+ 3 - Family name
+ Second - Type of added entry
+ 0 - Alternative entry
+ 1 - Secondary entry
+ 2 - Analytical entry
+ Subfield Codes
+ $a - Personal name (NR)
+ $b - Numeration (NR)
+ $c - Titles and other words associated with a name (R)
+ $d - Dates associated with a name (NR)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ 710 - ADDED ENTRY--CORPORATE NAME (R)
+ Indicators
+ First - Type of corporate name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Type of added entry
+ # - No information provided
+ 0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Printed on card (VM) [OBSOLETE]
+ 2 - Analytical entry
+ 3 - Not printed on card (VM) [OBSOLETE]
+ Subfield Codes
+ $a - Corporate name or jurisdiction name as entry element (NR)
+ $b - Subordinate unit (R)
+ $c - Location of meeting (NR)
+ $d - Date of meeting or treaty signing (R)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section/meeting (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $x - International Standard Serial Number (NR)
+ $3 - Materials specified (NR)
+ $4 - Relator code (R)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 711 - ADDED ENTRY--MEETING NAME (R)
+ Indicators
+ First - Type of meeting name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Type of added entry
+ # - No information provided
+ 0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Printed on card (VM) [OBSOLETE]
+ 2 - Analytical entry
+ 3 - Not printed on card (VM) [OBSOLETE]
+ Subfield Codes
+ $a - Meeting name or jurisdiction name as entry element (NR)
+ $b - Number (BK CF MP MU SE VM MX) [OBSOLETE]
+ $c - Location of meeting (NR)
+ $d - Date of meeting (NR)
+ $e - Subordinate unit (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section/meeting (R)
+ $p - Name of part/section of a work (R)
+ $q - Name of meeting following jurisdiction name entry element (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $x - International Standard Serial Number (NR)
+ $3 - Materials specified (NR)
+ $4 - Relator code (R)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 715 - ADDED ENTRY--CORPORATE NAME (PERFORMING GROUP) (MU) [OBSOLETE]
+ Indicators
+ First - Type of corporate name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Type of added entry
+ 0 - Alternative entry
+ 1 - Secondary entry
+ 2 - Analytical entry
+ Subfield Codes
+ $a - Corporate name or jurisdiction name (NR)
+ $b - Subordinate unit (R)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section/meeting (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Nonprinting information (NR)
+ 720 - ADDED ENTRY--UNCONTROLLED NAME (R)
+ Indicators
+ First - Type of name
+ # - Not specified
+ 1 - Personal
+ 2 - Other
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Name (NR)
+ $e - Relator term (R)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 730 - ADDED ENTRY--UNIFORM TITLE (R)
+ Indicators
+ First - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ # - Nonfiling characters not specified [OBSOLETE]
+ Second - Type of added entry
+ # - No information provided
+ 0 - Alternative entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Secondary entry (BK CF MP MU SE MX) [OBSOLETE]
+ 1 - Printed on card (VM) [OBSOLETE]
+ 2 - Analytical entry
+ 3 - Not printed on card (VM) [OBSOLETE]
+ Subfield Codes
+ $a - Uniform title (NR)
+ $d - Date of treaty signing (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $x - International Standard Serial Number (NR)
+ $3 - Materials specified (NR)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 740 - ADDED ENTRY--UNCONTROLLED RELATED/ANALYTICAL TITLE (R)
+ Indicators
+ First - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ # - Nonfiling characters not specified [OBSOLETE]
+ Second - Type of added entry
+ # - No information provided
+ 0 - Alternative entry (BK AM CF MP MU) [OBSOLETE]
+ 1 - Secondary entry (BK AM CF MP MU) [OBSOLETE]
+ 1 - Printed on card (VM) [OBSOLETE]
+ 2 - Analytical entry
+ 3 - Not printed on card (VM) [OBSOLETE]
+ Subfield Codes
+ $a - Uncontrolled related/analytical title (NR)
+ $h - Medium (NR)
+ $n - Number of part/section of a work (R)
+ $p - Name of part/section of a work (R)
+ $5 - Institution to which field applies (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 752 - ADDED ENTRY--HIERARCHICAL PLACE NAME (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Country (NR)
+ $b - State, province, territory (NR)
+ $c - County, region, islands area (NR)
+ $d - City (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 753 - SYSTEM DETAILS ACCESS TO COMPUTER FILES (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Make and model of machine (NR)
+ $b - Programming language (NR)
+ $c - Operating system (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 754 - ADDED ENTRY--TAXONOMIC IDENTIFICATION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Taxonomic name (R)
+ $c - Taxonomic category (R)
+ $d - Common or alternative name (R)
+ $x - Non-public note (R)
+ $z - Public note (R)
+ $2 - Source of taxonomic identification (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 755 - ADDED ENTRY--PHYSICAL CHARACTERISTICS (R) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Access term (NR)
+ $x - General subdivision (R)
+ $y - Chronological subdivision (R)
+ $z - Geographic subdivision (R)
+ $2 - Source of term (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+
+--Linking Entry Fields (76X-78X)--
+ 760 - MAIN SERIES ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Main series
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 762 - SUBSERIES ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Has subseries
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 765 - ORIGINAL LANGUAGE ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Translation of
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 767 - TRANSLATION ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Translated as
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 770 - SUPPLEMENT/SPECIAL ISSUE ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Has supplement
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 772 - SUPPLEMENT PARENT ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Supplement to
+ 0 - Parent
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Stan dard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 773 - HOST ITEM ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - In
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $p - Abbreviated title (NR)
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 774 - CONSTITUENT UNIT ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Constituent unit
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 775 - OTHER EDITION ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Other edition available
+ 8 - No display constant generated
+ Second - Edition entry same as main entry or title (SE) [OBSOLETE]
+ 0 - Entry not the same
+ 1 - Entry is the same as title
+ 2 - Entry is the same as main entry and title
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $e - Language code (NR)
+ $f - Country code (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 776 - ADDITIONAL PHYSICAL FORM ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Available in another form
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 777 - ISSUED WITH ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Issued with
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 780 - PRECEDING ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Type of relationship
+ 0 - Continues
+ 1 - Continues in part
+ 2 - Supersedes
+ 3 - Supersedes in part
+ 4 - Formed by the union of ... and ...
+ 5 - Absorbed
+ 6 - Absorbed in part
+ 7 - Separated from
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 785 - SUCCEEDING ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Type of relationship
+ 0 - Continued by
+ 1 - Continued in part by
+ 2 - Superseded by
+ 3 - Superseded in part by
+ 4 - Absorbed by
+ 5 - Absorbed in part by
+ 6 - Split into ... and ...
+ 7 - Merged with ... to form ...
+ 8 - Changed back to
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $q - Parallel title (NR) (BK SE) [OBSOLETE]
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standa rd Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 786 - DATA SOURCE ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Data source
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $j - Period of content (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $p - Abbreviated title (NR)
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $v - Source Contribution (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+ 787 - NONSPECIFIC RELATIONSHIP ENTRY (R)
+ Indicators
+ First - Note controller
+ 0 - Display note
+ 1 - Do not display note
+ Second - Display constant controller
+ # - Related item
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Main entry heading (NR)
+ $b - Edition (NR)
+ $c - Qualifying information (NR)
+ $d - Place, publisher, and date of publication (NR)
+ $g - Relationship information (R)
+ $h - Physical description (NR)
+ $i - Display text (NR)
+ $k - Series data for related item (R)
+ $m - Material-specific details (NR)
+ $n - Note (R)
+ $o - Other item identifier (R)
+ $r - Report number (R)
+ $s - Uniform title (NR)
+ $t - Title (NR)
+ $u - Standard Technical Report Number (NR)
+ $w - Record control number (R)
+ $x - International Standard Serial Number (NR)
+ $y - CODEN designation (NR)
+ $z - International Standard Book Number (R)
+ $6 - Linkage (NR)
+ $7 - Control subfield (NR)
+ 0 - Type of main entry heading
+ 1 - Form of name
+ 2 - Type of record
+ 3 - Bibliographic level
+ $8 - Field link and sequence number (R)
+
+--Series Added Entry Fields (80X-830)--
+ 800 - SERIES ADDED ENTRY--PERSONAL NAME (R)
+ Indicators
+ First - Type of personal name entry element
+ 0 - Forename
+ 1 - Surname
+ 3 - Family name
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Personal name (NR)
+ $b - Numeration (NR)
+ $c - Titles and other words associated with a name (R)
+ $d - Dates associated with a name (NR)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $j - Attribution qualifier (R)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $q - Fuller form of name (NR)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Volume/sequential designation (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 810 - SERIES ADDED ENTRY--CORPORATE NAME (R)
+ Indicators
+ First - Type of corporate name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Corporate name or jurisdiction name as entry element (NR)
+ $b - Subordinate unit (R)
+ $c - Location of meeting (NR)
+ $d - Date of meeting or treaty signing (R)
+ $e - Relator term (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section/meeting (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Volume/sequential designation (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 811 - SERIES ADDED ENTRY--MEETING NAME (R)
+ Indicators
+ First - Type of meeting name entry element
+ 0 - Inverted name
+ 1 - Jurisdiction name
+ 2 - Name in direct order
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Meeting name or jurisdiction name as entry element (NR)
+ $c - Location of meeting (NR)
+ $d - Date of meeting (NR)
+ $e - Subordinate unit (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $n - Number of part/section/meeting (R)
+ $p - Name of part/section of a work (R)
+ $q - Name of meeting following jurisdiction name entry element (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $u - Affiliation (NR)
+ $v - Volume/sequential designation (NR)
+ $4 - Relator code (R)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 830 - SERIES ADDED ENTRY--UNIFORM TITLE (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Uniform title (NR)
+ $d - Date of treaty signing (R)
+ $f - Date of a work (NR)
+ $g - Miscellaneous information (NR)
+ $h - Medium (NR)
+ $k - Form subheading (R)
+ $l - Language of a work (NR)
+ $m - Medium of performance for music (R)
+ $n - Number of part/section of a work (R)
+ $o - Arranged statement for music (NR)
+ $p - Name of part/section of a work (R)
+ $r - Key for music (NR)
+ $s - Version (NR)
+ $t - Title of a work (NR)
+ $v - Volume/sequential designation (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 840 - SERIES ADDED ENTRY--TITLE (R) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Nonfiling characters
+ 0-9 - Number of nonfiling characters
+ Subfield Codes
+ $a - Title (NR)
+ $h - Medium (NR)
+ $v - Volume/sequential designation (NR)
+
+--Holdings, Location, Alternate Graphics, etc. Fields (841-88X)--
+ 841 - HOLDINGS CODED DATA VALUES (NR)
+ 842 - TEXTUAL PHYSICAL FORM DESIGNATOR (NR)
+ 843 - REPRODUCTION NOTE (R)
+ 844 - NAME OF UNIT (NR)
+ 845 - TERMS GOVERNING USE AND REPRODUCTION NOTE (R)
+ 850 - HOLDING INSTITUTION (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Holding institution (R)
+ $b - Holdings (NR) (MU VM SE) [OBSOLETE]
+ $d - Inclusive dates (NR) (MU VM SE) [OBSOLETE]
+ $e - Retention statement (NR) (CF MU VM SE) [OBSOLETE]
+ $8 - Field link and sequence number (R)
+ 851 - LOCATION (R) [OBSOLETE]
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Name (custodian or owner) (NR)
+ $b - Institutional division (NR)
+ $c - Street address (NR)
+ $d - Country (NR)
+ $e - Location of units (NR)
+ $f - Item number (NR)
+ $g - Repository location code (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ 852 - LOCATION (R)
+ Indicators
+ First - Shelving scheme
+ # - No information provided
+ 0 - Library of Congress classification
+ 1 - Dewey Decimal classification
+ 2 - National Library of Medicine classification
+ 3 - Superintendent of Documents classification
+ 4 - Shelving control number
+ 5 - Title
+ 6 - Shelved separately
+ 7 - Source specified in subfield $2
+ 8 - Other scheme
+ Second - Shelving order
+ # - No information provided
+ 0 - Not enumeration
+ 1 - Primary enumeration
+ 2 - Alternative enumeration
+ Subfield Codes
+ $a - Location (NR)
+ $b - Sublocation or collection (R)
+ $c - Shelving location (R)
+ $e - Address (R)
+ $f - Coded location qualifier (R)
+ $g - Non-coded location qualifier (R)
+ $h - Classification part (NR)
+ $i - Item part (R)
+ $j - Shelving control number (NR)
+ $k - Call number prefix (R)
+ $l - Shelving form of title (NR)
+ $m - Call number suffix (R)
+ $n - Country code (NR)
+ $p - Piece designation (NR)
+ $q - Piece physical condition (NR)
+ $s - Copyright article-fee code (R)
+ $t - Copy number (NR)
+ $x - Nonpublic note (R)
+ $z - Public note (R)
+ $2 - Source of classification or shelving scheme (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Sequence number (NR)
+ 853 - CAPTIONS AND PATTERN--BASIC BIBLIOGRAPHIC UNIT (R)
+ 854 - CAPTIONS AND PATTERN--SUPPLEMENTARY MATERIAL (R)
+ 855 - CAPTIONS AND PATTERN--INDEXES (R)
+ 856 - ELECTRONIC LOCATION AND ACCESS (R)
+ Indicators
+ First - Access method
+ # - No information provided
+ 0 - Email
+ 1 - FTP
+ 2 - Remote login (Telnet)
+ 3 - Dial-up
+ 4 - HTTP
+ 7 - Method specified in subfield $2
+ Second - Relationship
+ # - No information provided
+ 0 - Resource
+ 1 - Version of resource
+ 2 - Related resource
+ 8 - No display constant generated
+ Subfield Codes
+ $a - Host name (R)
+ $b - Access number (R)
+ $c - Compression information (R)
+ $d - Path (R)
+ $f - Electronic name (R)
+ $g - Uniform Resource Name (R) [OBSOLETE]
+ $h - Processor of request (NR)
+ $i - Instruction (R)
+ $j - Bits per second (NR)
+ $k - Password (NR)
+ $l - Logon (NR)
+ $m - Contact for access assistance (R)
+ $n - Name of location of host (NR)
+ $o - Operating system (NR)
+ $p - Port (NR)
+ $q - Electronic format type (NR)
+ $r - Settings (NR)
+ $s - File size (R)
+ $t - Terminal emulation (R)
+ $u - Uniform Resource Identifier (R)
+ $v - Hours access method available (R)
+ $w - Record control number (R)
+ $x - Nonpublic note (R)
+ $y - Link text (R)
+ $z - Public note (R)
+ $2 - Access method (NR)
+ $3 - Materials specified (NR)
+ $6 - Linkage (NR)
+ $8 - Field link and sequence number (R)
+ 863 - ENUMERATION AND CHRONOLOGY--BASIC BIBLIOGRAPHIC UNIT (R)
+ 864 - ENUMERATION AND CHRONOLOGY--SUPPLEMENTARY MATERIAL (R)
+ 865 - ENUMERATION AND CHRONOLOGY--INDEXES (R)
+ 866 - TEXTUAL HOLDINGS--BASIC BIBLIOGRAPHIC UNIT (R)
+ 867 - TEXTUAL HOLDINGS--SUPPLEMENTARY MATERIAL (R)
+ 868 - TEXTUAL HOLDINGS--INDEXES (R)
+ 870 - VARIANT PERSONAL NAME (SE) [OBSOLETE]
+ 871 - VARIANT CORPORATE NAME (SE)[OBSOLETE]
+ 872 - VARIANT CONFERENCE OR MEETING NAME (SE) [OBSOLETE]
+ 873 - VARIANT UNIFORM TITLE HEADING (SE) [OBSOLETE]
+ 876 - ITEM INFORMATION--BASIC BIBLIOGRAPHIC UNIT (R)
+ 877 - ITEM INFORMATION--SUPPLEMENTARY MATERIAL (R)
+ 878 - ITEM INFORMATION--INDEXES (R)
+ 880 - ALTERNATE GRAPHIC REPRESENTATION (R)
+ Indicators
+ First - Same as associated field
+ Second - Same as associated field
+ Subfield Codes
+ $6 - Linkage (NR)
+ $a-z Same as associated field
+ $0-5 Same as associated field
+ $7-9 Same as associated field
+ 886 - FOREIGN MARC INFORMATION FIELD (R)
+ Indicators
+ First - Type of field
+ 0 - Leader
+ 1 - Variable control fields (002-009)
+ 2 - Variable data fields (010-999)
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Tag of the foreign MARC field (NR)
+ $b - Content of the foreign MARC field (NR)
+ $2 - Source of data (NR)
+ $a-z - Foreign MARC subfield (R)
+ $0-9 - Foreign MARC subfield (R)
+ 887 - NON-MARC INFORMATION FIELD (R)
+ Indicators
+ First - Undefined
+ # - Undefined
+ Second - Undefined
+ # - Undefined
+ Subfield Codes
+ $a - Content of non-MARC field (NR)
+ $2 - Source of data (NR)
+</pre>
+<hr>
+<p> <b>Go to:</b> <a href="http://www.loc.gov/marc/marc.html">MARC Home Page</a>
+ | <a href="http://www.loc.gov/">Library of Congress Home Page</a>
+<p>
+<hr>
+<img src="http://www.loc.gov/homepage/lc2.gif" alt="Library of Congress"> <strong>Library
+of Congress</strong><br>
+<address>
+<!--help desk email start -->
+<a href="http://www.loc.gov/help/help-desk.html">Library of Congress Help Desk</a>
+<!--help desk email end -->
+(
+<!-- #BeginDate format:Am3 -->10/03/2003<!-- #EndDate -->
+) </address>
+</body>
+
+</html>
+
Added: packages/libmarc-record-perl/branches/upstream/current/etc/specs
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/etc/specs 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/etc/specs 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,118 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
+=head1 specs
+
+Turns http://www.loc.gov/marc/bibliographic/ecbdist.html into the format
+used by MARC::Lint.pm
+
+Takes ecbdist.html as input. Skips fixed fields and data marked
+"[OBSOLETE]" Also, the HTML file doesn't include the 841-88X tags,
+so those are hardcoded here.
+
+=head1 AUTHOR
+
+Originally written by Colin Campbell at Sirsi, and taken over and modified
+by Andy Lester.
+
+=cut
+
+open( my $fh, "../lib/MARC/Lint.pm" ) or die "Can't open module";
+while ( <$fh> ) {
+ print;
+ last if /^__DATA__/;
+}
+close $fh;
+
+local $/ = undef;
+my $text = <>;
+$text =~ s/(<BR>|\r|\n)+/\n/ig;
+my @lines = split( /\n/, $text );
+
+
+my $in_tag = undef;
+my $i1;
+my $i2;
+my $curr_indicator;
+my $ntags;
+my $desc1;
+my $desc2;
+
+my $started = 0;
+for ( @lines ) {
+ unless ($started) {
+ $started=1 if /Number and Code Fields/;
+ next;
+ }
+ s/^\s+//;
+ s/\s+$//;
+ next if $_ eq "";
+
+ if ( /^(\d\d\d)/ ) {
+ my $tag = $1;
+ if (/OBSOLETE/) {
+ $in_tag = 0;
+ next;
+ }
+
+ /$tag - (.+) \((N?R)\)/ or die "Tag $tag is invalid format";
+ my $desc = $1;
+ my $nr = $2;
+ ++$ntags;
+ $in_tag = 1;
+ print "\n" if $ntags > 1;
+ print "$tag\t$nr\t$desc\n";
+ $i1 = $i2 = "";
+ next;
+ }
+
+ next unless $in_tag;
+ next if /OBSOLETE/;
+
+ if (/^First - (.+)/) {
+ $curr_indicator = 1;
+ $desc1 = $1;
+ } elsif (/^Second - (.+)/) {
+ print_indicator( 1, $i1, $desc1 );
+ undef $desc1;
+ $curr_indicator = 2;
+ $desc2 = $1;
+ } elsif (/^Subfield/) {
+ print_indicator( 2, $i2, $desc2 );
+ undef $desc2;
+ $curr_indicator = 0;
+ } else {
+ if ($curr_indicator) {
+ my $data = '';
+ if (/^(\d-\d)/) {
+ $data = $1;
+ } elsif (/^([#0123456789])/) {
+ $data = $1;
+ }
+ $data = "b" if $data eq "#";
+ if ($curr_indicator == 1) {
+ $i1 .= $data;
+ } elsif ($curr_indicator == 2) {
+ $i2 .= $data;
+ }
+
+ } else {
+ if ( /^\$(.) - (.+)\s*\((N?R)\)/ ) {
+ my ($sub,$desc,$nr) = ($1,$2,$3);
+ print "$sub\t$nr\t$desc\n";
+ }
+ }
+ }
+} # main while
+
+sub print_indicator {
+ my $n = shift;
+ my $val = shift;
+ my $desc = shift;
+
+ $val = "blank" if $val eq "b";
+
+ print "ind$n\t$val\t$desc\n";
+}
Property changes on: packages/libmarc-record-perl/branches/upstream/current/etc/specs
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Batch.pm 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,279 @@
+package MARC::Batch;
+
+=head1 NAME
+
+MARC::Batch - Perl module for handling files of MARC::Record objects
+
+=head1 SYNOPSIS
+
+MARC::Batch hides all the file handling of files of C<MARC::Record>s.
+C<MARC::Record> still does the file I/O, but C<MARC::Batch> handles the
+multiple-file aspects.
+
+ use MARC::Batch;
+
+ my $batch = new MARC::Batch-new( 'USMARC', @files );
+ while ( my $marc = $batch->next ) {
+ print $marc->subfield(245,"a"), "\n";
+ }
+
+=head1 EXPORT
+
+None. Everything is a class method.
+
+=cut
+
+use strict;
+use integer;
+use Carp qw( croak );
+
+=head1 METHODS
+
+=head2 new( $type, @files )
+
+Create a C<MARC::Batch> object that will process C<@files>.
+
+C<$type> must be either "USMARC" or "MicroLIF". If you want to specify
+"MARC::File::USMARC" or "MARC::File::MicroLIF", that's OK, too. C<new()> returns a
+new MARC::Batch object.
+
+C<@files> can be a list of filenames:
+
+ my $batch = MARC::Batch->new( 'USMARC', 'file1.marc', 'file2.marc' );
+
+Your C<@files> may also contain filehandles. So if you've got a large
+file that's gzipped you can open a pipe to F<gzip> and pass it in:
+
+ my $fh = IO::File->new( 'gunzip -c marc.dat.gz |' );
+ my $batch = MARC::Batch->new( 'USMARC', $fh );
+
+And you can mix and match if you really want to:
+
+ my $batch = MARC::Batch->new( 'USMARC', $fh, 'file1.marc' );
+
+=cut
+
+sub new {
+ my $class = shift;
+ my $type = shift;
+
+ my $marcclass = ($type =~ /^MARC::File/) ? $type : "MARC::File::$type";
+
+ eval "require $marcclass";
+ croak $@ if $@;
+
+ my @files = @_;
+
+ my $self = {
+ filestack => \@files,
+ filename => undef,
+ marcclass => $marcclass,
+ file => undef,
+ warnings => [],
+ 'warn' => 1,
+ strict => 1,
+ };
+
+ bless $self, $class;
+
+ return $self;
+} # new()
+
+
+=head2 next()
+
+Read the next record from that batch, and return it as a MARC::Record
+object. If the current file is at EOF, close it and open the next
+one. C<next()> will return C<undef> when there is no more data to be
+read from any batch files.
+
+By default, C<next()> also will return C<undef> if an error is
+encountered while reading from the batch. If not checked for this can
+cause your iteration to terminate prematurely. To alter this behavior,
+see C<strict_off()>. You can retrieve warning messages using the
+C<warnings()> method.
+
+Optionally you can pass in a filter function as a subroutine reference
+if you are only interested in particular fields from the record. This
+can boost performance.
+
+=cut
+
+sub next {
+ my ( $self, $filter ) = @_;
+ if ( $filter and ref($filter) ne 'CODE' ) {
+ croak( "filter function in next() must be a subroutine reference" );
+ }
+
+ if ( $self->{file} ) {
+
+ # get the next record
+ my $rec = $self->{file}->next( $filter );
+
+ # collect warnings from MARC::File::* object
+ my @warnings = $self->{file}->warnings();
+ if ( @warnings ) {
+ $self->warnings( @warnings );
+ return if $self->{ strict };
+ }
+
+ if ($rec) {
+
+ # collect warnings from the MARC::Record object
+ my @warnings = $rec->warnings();
+
+ if (@warnings) {
+ $self->warnings( @warnings );
+ return if $self->{ strict };
+ }
+
+ # return the MARC::Record object
+ return($rec);
+
+ }
+
+ }
+
+ # Get the next file off the stack, if there is one
+ $self->{filename} = shift @{$self->{filestack}} or return;
+
+ # Instantiate a filename for it
+ my $marcclass = $self->{marcclass};
+ $self->{file} = $marcclass->in( $self->{filename} ) or return;
+
+ # call this method again now that we've got a file open
+ return( $self->next( $filter ) );
+
+}
+
+=head2 strict_off()
+
+If you would like C<MARC::Batch> to continue after it has encountered what
+it believes to be bad MARC data then use this method to turn strict B<OFF>.
+A call to C<strict_off()> always returns true (1).
+
+C<strict_off()> can be handy when you don't care about the quality of your
+MARC data, and just want to plow through it. For safety, C<MARC::Batch>
+strict is B<ON> by default.
+
+=cut
+
+sub strict_off {
+ my $self = shift;
+ $self->{ strict } = 0;
+ return(1);
+}
+
+=head2 strict_on()
+
+The opposite of C<strict_off()>, and the default state. You shouldn't
+have to use this method unless you've previously used C<strict_off()>, and
+want it back on again. When strict is B<ON> calls to next() will return
+undef when an error is encountered while reading MARC data. strict_on()
+always returns true (1).
+
+=cut
+
+sub strict_on {
+ my $self = shift;
+ $self->{ strict } = 1;
+ return(1);
+}
+
+=head2 warnings()
+
+Returns a list of warnings that have accumulated while processing a particular
+batch file. As a side effect the warning buffer will be cleared.
+
+ my @warnings = $batch->warnings();
+
+This method is also used internally to set warnings, so you probably don't
+want to be passing in anything as this will set warnings on your batch object.
+
+C<warnings()> will return the empty list when there are no warnings.
+
+=cut
+
+sub warnings {
+ my ($self, at new) = @_;
+ if ( @new ) {
+ push( @{ $self->{warnings} }, @new );
+ print STDERR join( "\n", @new ) if $self->{'warn'};
+ } else {
+ my @old = @{ $self->{warnings} };
+ $self->{warnings} = [];
+ return(@old);
+ }
+}
+
+
+=head2 warnings_off()
+
+Turns off the default behavior of printing warnings to STDERR. However, even
+with warnings off the messages can still be retrieved using the warnings()
+method if you wish to check for them.
+
+C<warnings_off()> always returns true (1).
+
+=cut
+
+sub warnings_off {
+ my $self = shift;
+ $self->{ 'warn' } = 0;
+
+ return 1;
+}
+
+=head2 warnings_on()
+
+Turns on warnings so that diagnostic information is printed to STDERR. This
+is on by default so you shouldn't have to use it unless you've previously
+turned off warnings using warnings_off().
+
+warnings_on() always returns true (1).
+
+=cut
+
+sub warnings_on {
+ my $self = shift;
+ $self->{ 'warn' } = 1;
+}
+
+=head2 filename()
+
+Returns the currently open filename or C<undef> if there is not currently a file
+open on this batch object.
+
+=cut
+
+sub filename {
+ my $self = shift;
+
+ return $self->{filename};
+}
+
+
+1;
+
+__END__
+
+=head1 RELATED MODULES
+
+L<MARC::Record>, L<MARC::Lint>
+
+=head1 TODO
+
+None yet. Send me your ideas and needs.
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Doc/Tutorial.pod 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,1252 @@
+=head1 NAME
+
+MARC::Doc::Tutorial - A documentation-only module for new users of MARC::Record
+
+
+
+=head1 SYNOPSIS
+
+ perldoc MARC::Doc::Tutorial
+
+
+
+=head1 INTRODUCTION
+
+=head2 What is MARC?
+
+The MAchine Readable Cataloging format was designed by the Library of
+Congress in the late 1960s in order to allow libraries to convert their card
+catalogs into a digital format. The advantages of having computerized card
+catalogs were soon realized, and now MARC is being used by all sorts of
+libraries around the world to provide computerized access to their collections.
+MARC data in transmission format is optimized for processing by computers, so
+it's not very readable for the normal human. For more about the MARC format,
+visit the Library of Congress at http://www.loc.gov/marc/
+
+=head2 What is this Tutorial?
+
+The document you are reading is a beginners guide to using Perl to processing
+MARC data, written in the 'cookbook' style. Inside, you will find recipes on
+how to read, write, update and convert MARC data using the MARC::Record CPAN
+package. As with any cookbook, you should feel free to dip in at any section
+and use the recipe you find interesting. If you are new to Perl, you may
+want to read from the beginning.
+
+The document you are reading is distributed with the MARC::Record package,
+however in case you are reading it somewhere else, you can find the latest
+version at CPAN: http://www.cpan.org/modules/by-module/MARC/. You'll notice
+that some sections aren't filled in yet, which is a result of this document
+being a work in progress. If you have ideas for new sections please make a
+suggestion to perl4lib: http://www.rice.edu/perl4lib/.
+
+=head2 History of MARC on CPAN
+
+In 1999, a group of developers began working on MARC.pm to provide a Perl
+module for working with MARC data. MARC.pm was quite successful since it
+grew to include many new options that were requested by the Perl/library
+community. However, in adding these features the module swiftly outgrew its
+own clothes, and maintenance and addition of new features became extremely
+difficult. In addition, as libraries began using MARC.pm to process large MARC
+data files (>1000 records) they noticed that memory consumption would skyrocket.
+Memory consumption became an issue for large batches of records because
+MARC.pm's object model was based on the 'batch' rather than the record... so
+each record in the file would often be read into memory. There were ways of
+getting around this, but they were not obvious. Some effort was made to
+reconcile the two approaches (batch and record), but with limited success.
+
+In mid 2001, Andy Lester released MARC::Record and MARC::Field which provided
+a much simpler and maintainable package for processing MARC data with Perl.
+As its name suggests, MARC::Record treats an individual MARC record as the
+primary Perl object, rather than having the object represent a given set of
+records. Instead of forking the two projects, the developers agreed to
+encourage use of the MARC::Record framework, and to work on enhancing
+MARC::Record rather than extending MARC.pm further. Soon afterwards,
+MARC::Batch was added, which allows you to read in a large data file
+without having to worry about memory consumption.
+
+=head2 Brief Overview of MARC Classes
+
+The MARC::Record package is made up of several separate packages. This
+can be somewhat confusing to people new to Perl, or Object Oriented
+Programming. However this framework allows easy extension, and is built
+to support new input/output formats as their need arises. For a good
+introduction to using the object oriented features of Perl, see
+the perlboot documentation that came with your version of Perl.
+
+Here are the packages that get installed with MARC::Record:
+
+=over 4
+
+=item MARC::Batch
+
+A convenience class for accessing MARC data contained in an external file.
+
+=item MARC::Field
+
+An object for representing the indicators and subfields of a single MARC field.
+
+=item MARC::Lint
+
+An extension to check the validity of MARC records.
+
+=item MARC::Record
+
+This primary class represents a MARC record, being a container for multiple MARC::Field objects.
+
+=item MARC::Doc::Tutorial
+
+This document!
+
+=item MARC::File
+
+A superclass for representing files of MARC data.
+
+=item MARC::File::MicroLIF
+
+A subclass of MARC::File for working with data encoded in the MicroLIF format.
+
+=item MARC::File::USMARC
+
+A subclass of MARC::File for working with data encoded in the USMARC format.
+
+=back
+
+=head2 Help Wanted!
+
+It's already been mentioned but it's worth mentioning again:
+MARC::Doc::Tutorial is a work in progress, and you are encouraged to submit
+any suggestions for additional recipes via the perl4lib mailing list at
+http://www.rice.edu/perl4lib. Also, the development group is always looking
+for additional developers with good ideas; if you are interested you can
+sign up at SourceForge: http://sourceforge.net/projects/marcpm/.
+
+
+
+=head1 READING
+
+=head2 Reading a record from a file
+
+Let's say you have a USMARC record in 'file.dat' and
+you'd like to read in the record and print out its title.
+
+ 1 ## Example R1
+ 2
+ 3 ## create a MARC::Batch object.
+ 4 use MARC::Batch;
+ 5 my $batch = MARC::Batch('USMARC', 'file.dat');
+ 6
+ 7 ## get a MARC record from the MARC::Batch object.
+ 8 ## the $record will be a MARC::Record object.
+ 9 my $record = $batch->next();
+ 10
+ 11 ## print the title contained in the record.
+ 12 print $record->title(),"\n";
+
+Using the distribution's 't/camel.usmarc', your result should be:
+
+ ActivePerl with ASP and ADO / Tobias Martinsson.
+
+=head2 Iterating through a batch file
+
+Now imagine that 'file.dat' actually contains multiple records and
+we want to print the title for each of them. Our program doesn't have
+to change very much at all: we just need to add a loop around our call
+to C<next()>.
+
+ 1 ## Example R2
+ 2
+ 3 ## create a MARC::Batch object.
+ 4 use MARC::Batch;
+ 5 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 6
+ 7 while (my $record = $batch->next()) {
+ 8
+ 9 ## print the title contained in the record.
+ 10 print $record->title(),"\n";
+ 11
+ 12 }
+
+The call to the C<next()> method at line 7 returns the next record from the
+file. C<next()> returns C<undef> when there are no more records left in the file,
+which causes the C<while> loop to end. This is a useful idiom for reading in
+all the records in a file. Your results with 'camel.usmarc' should be:
+
+ ActivePerl with ASP and ADO / Tobias Martinsson.
+ Programming the Perl DBI / Alligator Descartes and Tim Bunce.
+ .
+ .
+ .
+ Cross-platform Perl / Eric F. Johnson.
+
+=head2 Checking for errors
+
+It is a good idea to get in the habit of checking for errors. MARC/Perl has
+been designed to help you do this. Calls to C<next()> when iterating through a
+batch file will return C<undef> when there are no more records to return...
+B<AND> when an error was encountered (see the next recipe to subvert this).
+You probably want to make sure that you didn't abruptly stop reading a
+batch file because of an error.
+
+ 1 ## Example R3
+ 2
+ 3 ## create a MARC::Batch object.
+ 4 use MARC::Batch;
+ 5 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 6
+ 7 ## get a marc record from the MARC::Batch object.
+ 8 ## $record will be a MARC::Record object.
+ 9 while ( my $record = $batch->next() ) {
+ 10 print $record->title(),"\n";
+ 11 }
+ 12
+ 13 ## make sure there weren't any problems.
+ 14 if ( my @warnings = $batch->warnings() ) {
+ 15 print "\nWarnings were detected!\n", @warnings;
+ 16 }
+
+The call to C<warnings()> at line 14 will retrieve any warning messages and store
+them in C<@warnings>. This allows you to detect when C<next()> has aborted
+prematurely (before the end of the file has been reached). When a warning is
+detected, an explanation is sent to C<STDERR>. By introducing an error into
+'camel.usmarc', we'll receive the following output to C<STDOUT>:
+
+ Warnings were detected!
+ Invalid indicators "a0" forced to blanks in record 1 for tag 245
+
+=head2 Recovering from errors
+
+You may want to keep reading a batch file even after an error has been encountered.
+If so, you will want to turn strict mode off using the C<strict_off()> method. You
+can also prevent warnings from being printed to C<STDERR> using the C<warnings_off()>
+method. By default, strict is on as a safety precaution to prevent you from using corrupt
+MARC data. Once off, you can turn both strict and warnings back on again with the
+C<strict_on()> and C<warnings_on()> methods.
+
+ 1 ## Example R4
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC', 'file.dat');
+ 5 $batch->strict_off();
+ 6
+ 7 while ( my $record = $batch->next() ) {
+ 8 print $record->title(),"\n";
+ 9 }
+ 10
+ 11 ## make sure there weren't any problems.
+ 12 if ( my @warnings = $batch->warnings() ) {
+ 13 print "\nWarnings were detected!\n", @warnings;
+ 14 }
+
+Introducing a second error to the 'camel.usmarc' file gives the following:
+
+ ActivePerl with ASP and ADO / Tobias Martinsson.
+ Programming the Perl DBI / Alligator Descartes and Tim Bunce.
+ .
+ .
+ .
+ Cross-platform Perl / Eric F. Johnson.
+
+ Warnings were detected!
+ Invalid indicators "a0" forced to blanks in record 1 for tag 245
+ Invalid indicators "a0" forced to blanks in record 5 for tag 245
+
+=head2 Looking at a field
+
+Our previous examples use MARC::Record's C<title()> method to easily access
+the 245 field, but you will probably want programs that access lots of other
+MARC fields. MARC::Record's C<field()> method gives you complete access to the
+data found in any MARC field. The C<field()> method returns a MARC::Field
+object which can be used to access the data, indicators, and even the
+individual subfields. Our next example shows how this is done.
+
+ 1 ## Example R5
+ 2
+ 3 ## open a file.
+ 4 use MARC::Batch;
+ 5 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 6
+ 7 ## read a record.
+ 8 my $record = $batch->next();
+ 9
+ 10 ## get the 100 field as a MARC::Field object.
+ 11 my $field = $record->field('100');
+ 12 print "The 100 field contains: ",$field->as_string(),"\n";
+ 13 print "The 1st indicator is ",$field->indicator(1),"\n";
+ 14 print "The 2nd indicator is ",$field->indicator(2),"\n";
+ 15 print "Subfield d contains: ",$field->subfield('d'),"\n";
+
+Which results in something like:
+
+ The 100 field contains: Martinsson, Tobias, 1976-
+ The 1st indicator is 1
+ The 2nd indicator is
+ Subfield d contains: 1976-
+
+As before, use a C<while> loop to iterate through all the records in a batch.
+
+=head2 Looking at repeatable fields
+
+So how do you retrieve data from repeatable fields? The C<field()> method
+can help you with this as well. In our previous example's line 11, the
+C<field()> method was used in a I<scalar> context, since the result was being
+assigned to the variable C<$field>. However in a I<list> context, C<field()>
+will return all the fields in the record of that particular type. For example:
+
+ 1 ## Example R6
+ 2
+ 3 use MARC::Batch;
+ 4 my $file = MARC::Batch->new('USMARC','file.dat');
+ 5 my $record = $batch->next();
+ 6
+ 7 ## get all the 650 fields (list context).
+ 8 my @fields = $record->field('650');
+ 9
+ 10 ## examine each 650 field and print it out.
+ 11 foreach my $field (@fields) {
+ 12 print $field->as_string(),"\n";
+ 13 }
+
+Which prints out the following for the first record of 't/camel.usmarc':
+
+ Active server pages.
+ ActiveX.
+
+=head2 Looking at a set of related fields
+
+C<field()> also allows you to retrieve similar fields using '.' as a wildcard.
+
+ 1 ## Example R7
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 5 my $record = $batch->next();
+ 6
+ 7 # retrieve all title fields in one shot.
+ 8 foreach my $field ($record->field('2..')) {
+ 9 print $field->tag(),' contains ',$field->as_string(),"\n";
+ 10 }
+
+Notice the shorthand in line 8 which compacts lines 7-13 of our previous example.
+Instead of storing the fields in an array, the C<field()> still returns a list
+in the C<for> loop. Line 9 uses the C<tag()> method which returns the tag number
+for a particular MARC field, which is useful when you aren't certain what
+tag you are currently dealing with. Sample output from this recipe:
+
+ 245 contains ActivePerl with ASP and ADO / Tobias Martinsson.
+ 260 contains New York : John Wiley & Sons, 2000.
+
+You can also return all tags for a specific record by using '...'
+in C<field> (though, see the next recipe).
+
+=head2 Looking at all the fields in a record
+
+The last example in this section illustrates how to retrieve I<all> the fields
+in a record using the C<fields()> method. This method is similar to passing
+'...' as a wildcard (see our previous recipe for alternative access).
+
+ 1 ## Example R8
+ 2
+ 3 use MARC::Batch;
+ 4 my $file = MARC::Batch->new('USMARC','file.dat');
+ 5 my $record = $batch->next();
+ 6
+ 7 ## get all of the fields using the fields() method.
+ 8 my @fields = $record->fields();
+ 9
+ 10 ## print out the tag, the indicators and the field contents.
+ 11 foreach my $field (@fields) {
+ 12 print
+ 13 $field->tag(), " ",
+ 14 defined $field->indicator(1) ? $field->indicator(1) : "",
+ 15 defined $field->indicator(2) ? $field->indicator(2) : "",
+ 16 " ", $field->as_string, " \n";
+ 17 }
+
+The above code would print the following for the first record of 't/camel.usmarc':
+
+ 001 fol05731351
+ 003 IMchF
+ .
+ .
+ .
+ 300 xxi, 289 p. : ill. ; 23 cm. + 1 computer laser disc (4 3/4 in.)
+ 500 "Wiley Computer Publishing."
+ 650 0 Perl (Computer program language)
+ 630 00 Active server pages.
+ 630 00 ActiveX.
+
+
+
+=head1 CREATING
+
+The examples in the Section 1 covered how to read in existing USMARC data
+in a file. Section 2 will show you how to create a MARC record from scratch.
+The techniques in this section would allow you to write programs which
+create MARC records that could then be loaded into an online catalog, or
+sent to a third party.
+
+=head2 Creating a record
+
+To create a new MARC record, you'll need to first create a MARC::Record object,
+add a leader (though MARC::Record can create leaders automatically if you don't
+specifically define one), and then create and add MARC::Field objects to your
+MARC::Record object. For example:
+
+ 1 ## Example C1
+ 2
+ 3 ## create a MARC::Record object.
+ 4 use MARC::Record;
+ 5 my $record = MARC::Record->new();
+ 6
+ 7 ## add the leader to the record. optional.
+ 8 $record->leader('00903pam 2200265 a 4500');
+ 9
+ 10 ## create an author field.
+ 11 my $author = MARC::Field->new(
+ 12 '100',1,'',
+ 13 a => 'Logan, Robert K.',
+ 14 d => '1939-'
+ 15 );
+ 16 $record->append_fields($author);
+ 17
+ 18 ## create a title field.
+ 19 my $title = MARC::Field->new(
+ 20 '245','1','4',
+ 21 a => 'The alphabet effect /',
+ 22 c => 'Robert K. Logan.'
+ 23 );
+ 24 $record->append_fields($title);
+
+The key to creating records from scratch is to use C<append_fields()>, which adds
+a field to the end of the record. Since each field gets added at the end, it's up
+to you to order the fields the way you want. C<insert_fields_before()> and
+C<insert_fields_after()> are similar methods that allow you to define where
+the field gets added. These methods are covered in more detail below.
+
+
+
+=head1 WRITING
+
+Sections 1 and 2 showed how to read and create USMARC data. Once you know how
+to read and create, it becomes important to know how to write the USMARC data
+to disk in order to save your work. In these examples, we will create a new record
+and save it to a file called 'record.dat'.
+
+=head2 Writing records to a file
+
+ 1 ## Example W1
+ 2
+ 3 ## create a MARC::Record object.
+ 4 use MARC::Record;
+ 5 my $record = MARC::Record->new();
+ 6
+ 7 ## add the leader to the record. optional.
+ 8 $record->leader('00903pam 2200265 a 4500');
+ 9
+ 10 ## create an author field.
+ 11 my $author = MARC::Field->new(
+ 12 '100',1,'',
+ 13 a => 'Logan, Robert K.',
+ 14 d => '1939-'
+ 15 );
+ 16
+ 17 ## create a title field.
+ 18 my $title = MARC::Field->new(
+ 19 '245','1','4',
+ 20 a => 'The alphabet effect /',
+ 21 c => 'Robert K. Logan.'
+ 22 );
+ 23
+ 24 $record->append_fields($author, $title);
+ 25
+ 26 ## open a filehandle to write to 'record.dat'.
+ 27 open(OUTPUT, '> record.dat') or die $!;
+ 28 print OUTPUT $record->as_usmarc();
+ 29 close(OUTPUT);
+
+
+The C<as_usmarc()> method call at line 28 returns a scalar value which is
+the raw USMARC data for C<$record>. The raw data is then promptly printed to
+the C<OUTPUT> file handle. If you want to output multiple records to a file,
+simply repeat the process at line 28 for the additional records. Also of
+note is the C<append_fields> method: unlike recipe C1 which called the
+method once for each field added, this recipe demonstrates that
+C<append_fields> can accept multiple arguments.
+
+Note to the curious: the C<as_usmarc()> method is actually an alias to the
+MARC::File::USMARC C<encode()> method. Having separate C<encode()> methods is
+a design feature of the MARC class hierarchy, since it allows extensions to
+be built that translate MARC::Record objects into different data formats.
+
+=head2 Debugging with C<as_formatted()>
+
+Since raw USMARC data isn't very easy for humans to read, it is often useful
+to be able to see the contents of your MARC::Record object represented in a
+'pretty' way for debugging purposes. If you have a MARC::Record object you'd
+like to pretty-print, use the C<as_formatted()> method.
+
+ 1 ## Example W2
+ 2
+ 3 ## create a MARC::Record object.
+ 4 use MARC::Record;
+ 5 my $record = MARC::Record->new();
+ 6
+ 7 $record->leader('00903pam 2200265 a 4500');
+ 8
+ 9 $record->append_fields(
+ 10 MARC::Field->new('100','1','', a=>'Logan, Robert K.', d=>'1939-'),
+ 11 MARC::Field->new('245','1','4', a=>'The alphabet effect /', c=>'Robert K. Logan.')
+ 12 );
+ 13
+ 14 ## pretty print the record.
+ 15 print $record->as_formatted(), "\n";
+
+This code will pretty print the contents of the newly created record:
+
+ LDR 00903pam 2200265 a 4500
+ 100 1 _aLogan, Robert K.
+ _d1939-
+ 245 14 _aThe alphabet effect /
+ _cRobert K. Logan.
+
+Notice on lines 9-12 how you can add a list of new fields by creating
+MARC::Field objects within a call to C<append_fields()>. This is yet
+another shorthand method to those shown in recipes C1 and W1. For more
+pretty-printing capabilities, try C<marcdump()> in our next recipe.
+
+=head2 Debugging with marcdump()
+
+If you have written USMARC data to a file (as in recipe W2) and you would
+like to verify that the data is stored correctly you can use the C<marcdump>
+command line utility that was installed with the MARC::Record package:
+
+ % marcdump record.dat
+ record.dat
+ LDR 00122pam 2200049 a 4500
+ 100 1 _aLogan, Robert K.
+ _d1939-
+ 245 14 _aThe alphabet effect /
+ _cRobert K. Logan.
+
+ Recs Errs Filename
+ ----- ----- --------
+ 1 0 record.dat
+
+As you can see, this command results in the record being pretty printed to
+your screen (C<STDOUT>) similarly to the C<as_formatted> method from recipe
+W2. It is useful for verifying your USMARC data after it has been stored on
+disk. More details about debugging are found later in VALIDATING.
+
+
+
+=head1 UPDATING
+
+Now that you know how to read, write and create MARC data, you have the
+tools you need to update or edit exiting MARC data. Updating MARC
+data is a common task for library catalogers. Sometimes there are huge
+amounts of records that need to be touched up... and while the touch ups are
+very detail oriented, they are also highly repetitive. Luckily, computers
+are tireless, and not very prone to error (assuming the programmer isn't).
+
+When libraries receive large batches of MARC records for electronic text
+collections such as NetLibrary, Making of America, or microfiche sets like
+Early American Imprints, the records are often loaded into an online system
+and then the system is used to update the records. Unfortunately, not all
+these systems are created equal, and catalogers have to spend a great deal
+of time touching up each individual record. An alternative would be to
+process the records prior to import and then, once in the system, the records
+would not need editing. This scenario would save a great deal of time for
+the cataloger who would be liberated to spend their time doing original
+cataloging... which computers are notably bad at!
+
+=head2 Adding a field
+
+Imagine a batch of records in 'file.dat' that you'd like to add local notes (590)
+to, then saving your changes:
+
+ 1 ## Example U1
+ 2
+ 3 ## create our MARC::Batch object.
+ 4 use MARC::Batch;
+ 5 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 6
+ 7 ## open a file handle to write to.
+ 8 open(OUT,'>new.dat') or die $!;
+ 9
+ 10 ## read each record, modify, then print.
+ 11 while ( my $record = $batch->next() ) {
+ 12
+ 13 ## add a 590 field.
+ 14 $record->append_fields(
+ 15 MARC::Field->new('590','','',a=>'Access provided by Enron.')
+ 16 );
+ 17
+ 18 print OUT $record->as_usmarc();
+ 19
+ 20 }
+ 21
+ 22 close(OUT);
+
+=head2 Preserving field order
+
+As its name suggests, C<append_fields()> will add the 590 field in recipe U1
+to the end of the record. If you want to preserve a particular order, you can
+use the C<insert_fields_before()> and C<insert_fields_after()> methods. In order
+to use these, you need to locate the field you want to insert before or after.
+Here is an example (C<insert_fields_after()> works similarly):
+
+ 1 ## Example U2
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 5 open(OUT,'>new.dat') or die $!;
+ 6
+ 7 ## read in each record.
+ 8 while ( my $record = $batch->next() ) {
+ 9
+ 10 ## find the tag after 590.
+ 11 my $before;
+ 12 foreach ($record->fields()) {
+ 13 $before = $_;
+ 14 last if $_->tag() > 590;
+ 15 }
+ 16
+ 17 ## create the 590 field.
+ 18 my $new = MARC::Field->new('590','','',a=>'Access provided by Enron.');
+ 19
+ 20 ## insert our 590 field after the $before.
+ 21 $record->insert_fields_before($before,$new);
+ 22
+ 23 ## and print out the new record.
+ 24 print OUT $record->as_usmarc();
+ 25
+ 26 }
+
+=head2 Deleting a field
+
+You can also delete fields that you don't want. But you will probably want
+to check that the field contains what you expect before deleting it. Let's
+say Enron has gone out of business and the 590 field needs to be deleted:
+
+ 1 ## Example U3
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','new.dat');
+ 5 open(OUT,'>newer.dat') or die $1;
+ 6
+ 7 while ( my $record = $batch->next() ) {
+ 8
+ 9 ## get the 590 record.
+ 10 my $field = $record->field('590');
+ 11
+ 12 ## if there is a 590 AND it has the word "Enron"...
+ 13 if ($field and $field->as_string() =~ /Enron/i) {
+ 14
+ 15 ## delete it!
+ 16 $record->delete_field($field);
+ 17
+ 18 }
+ 19
+ 20 ## output possibly modified record.
+ 21 print OUT $record->as_usmarc();
+ 22
+ 23 }
+
+The 590 field is retrieved on line 10, but notice how we check that we
+actually received a valid C<$field>, and that it then contains the word
+'Enron' before we delete it. You need to pass C<delete_field()> a MARC::Field
+object that can be retrieved with the C<field()> method.
+
+=head2 Changing existing fields
+
+Perhaps rather than adding or deleting a field, you need to modify an
+existing field. This is achieved in several steps: first, read in the
+MARC record you want to update, and then the field you're interested in.
+From there, call the field's C<update> or C<replace_with> methods to modify
+its contents, and then resave the record. Below is an example of updating existing
+590 field's containing the word 'Enron' to indicate that access is now
+provided through Arthur Andersen:
+
+ 1 ## Example U4
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','new.dat');
+ 5 open(OUT,'>newer.dat') or die $1;
+ 6
+ 7 while ( my $record = $batch->next() ) {
+ 8
+ 9 ## look for a 590 containing "Enron"...
+ 10 my $field = $record->field('590');
+ 11 if ($field and $field->as_string =~ /Enron/i) {
+ 12
+ 13 ## create a new 590 field.
+ 14 my $new_field = MARC::Field->new(
+ 15 '590','','', a => 'Access provided by Arthur Andersen.' );
+ 16
+ 17 ## replace existing with our new one.
+ 18 $field->replace_with($new_field);
+ 19
+ 20 }
+ 21
+ 22 ## output possibly modified record.
+ 23 print OUT $record->as_usmarc();
+ 24
+ 25 }
+
+In this example, we used MARC::Field's method C<replace_with()> to replace
+an existing field in the record with a new field that we created. To use
+C<replace_with()>, you need to retrieve the field you want to replace from
+a MARC::Record object (line 10), create a new field to replace the existing
+one with (lines 13-15), and then call the existing field's C<replace_with()>
+method passing the new field as an argument (lines 18). You must pass
+C<replace_with()> a valid MARC::Field object.
+
+=head2 Updating subfields and indicators
+
+If you'd rather not replace an existing field with a new one, you can also
+edit the contents of the field itself using the C<update()> method. Let's say
+you've got a batch of records and want to make sure that the 2nd indicator
+for the 245 field is properly set for titles that begin with 'The' (where
+the indicator should be '4').
+
+ 1 ## Example U5
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 5 open(OUT,'>new.dat') or die $!;
+ 6
+ 7 while (my $record = $batch->next()) {
+ 8
+ 9 ## retrieve the 245 record.
+ 10 my $field_245 = $record->field('245');
+ 11
+ 12 ## if we got 245 and it starts with 'The'...
+ 13 if ($field_245 and $field_245->as_string() =~ /^The /) {
+ 14
+ 15 ## if the 2nd indicator isn't 4, update
+ 16 if ($field_245->indicator(2) != 4) {
+ 17 $field_245->update( ind2 => 4 );
+ 18 }
+ 19
+ 20 }
+ 21
+ 22 print OUT $record->as_usmarc();
+ 23
+ 24 }
+
+In a similar fashion, you can update individual or multiple subfields:
+
+ $field_245->update( a => 'History of the World :', b => 'part 1' );
+
+But beware, you can only update the first occurrence of a subfield using
+C<update()>. If you need to do more finer grained updates, you are advised to
+build a new field and replace the existing field with C<replace_with()>.
+
+=head2 Changing a record's leader
+
+The above procedure works for fields, but editing the leader requires that you
+use the C<leader()> method. When called with no arguments, C<leader()> will return
+the current leader, and when you pass a scalar value as an argument, the
+leader will be set to this value. This example shows how you might want
+to update position 6 of a records leader to reflect a computer file.
+
+ 1 ## Example U6
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 5 open(OUT,'>new.dat') or die $!;
+ 6 my $record = $batch->next();
+ 7
+ 8 ## get the current leader.
+ 9 my $leader = $record->leader();
+ 10
+ 11 ## replace position 6 with 'm'
+ 12 substr($leader,6,1) = 'm';
+ 13
+ 14 ## update the leader
+ 15 $record->leader($leader);
+ 16
+ 17 ## save the record to a file
+ 18 print OUT $record->as_usmarc();
+
+=head2 Modifying fields without indicators
+
+MARC::Record and MARC::Field are smart and know that you don't have field
+indicators with tags less than 010. Here's an example of updating/adding
+an 005 field to indicate a new transaction time. For a little pizzazz, we
+use Perl's C<localtime()> to generate the data we need for this field.
+
+ 1 ## Example U7
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 5 open(OUT,'>new.dat') or die $!;
+ 6
+ 7 while (my $record = $batch->next() ) {
+ 8
+ 9 ## see if there is a 005 field.
+ 10 my $field_005 = $record->field('005');
+ 11
+ 12 ## delete it if we find one.
+ 13 $record->delete_field($field_005) if $field_005;
+ 14
+ 15 ## figure out the contents of our new 005 field.
+ 16 my ($sec,$min,$hour,$mday,$mon,$year) = localtime();
+ 17 $year += 1900; $mon += 1; # catering to offsets.
+ 18 my $datetime = sprintf("%4d%02d%02d%02d%02d%02d.0",
+ 19 $year,$mon,$mday,$hour,$min,$sec);
+ 20
+ 21 ## create a new 005 field using our new datetime.
+ 22 $record->append_fields( MARC::Field->new('005',$datetime) );
+ 23
+ 24 ## save record to a file.
+ 25 print OUT $record->as_usmarc();
+ 26
+ 27 }
+
+=head2 Reordering subfields
+
+You may find yourself in the situation where you would like to
+programmatically reorder, and possibly modify, subfields in a particular
+field. For example, imagine that you have a batch of records that have
+856 fields which contain subfields z, u, and possibly 3... in any order!
+Now imagine that you'd like to standardize the subfield z, and reorder them
+so that subfield 3 precedes subfield z, which precedes subfield u. This is
+tricky but can be done in the following manner: read in a record, extract
+the existing 856 field, build a new 856 field based on the existing one,
+replace the existing field with your newly created version.
+
+ 1 ## Example U8
+ 2
+ 3 use MARC::Batch;
+ 4 my $batch = MARC::Batch->new('USMARC','856.dat');
+ 5 open(OUT,'>856_new.dat') or die $!;
+ 6
+ 7 while (my $record = $batch->next()) {
+ 8
+ 9 my $existing = $record->field('856');
+ 10
+ 11 ## make sure 856 exists.
+ 12 if ($existing) {
+ 13
+ 14 ## our ordered subfields.
+ 15 my @subfields = ();
+ 16
+ 17 ## if we have a subfield 3, add it.
+ 18 if (defined($existing->subfield('3'))) {
+ 19 push(@subfields,'3',$existing->subfield('3'));
+ 20 }
+ 21
+ 22 ## now add subfields z and u.
+ 23 push(@subfields,'z','Access restricted',
+ 24 'u',$existing->subfield('u'));
+ 25
+ 26 ## create a new 856.
+ 27 my $new = MARC::Field->new(
+ 28 856', $existing->indicator(1),
+ 29 $existing->indicator(2), @subfields
+ 30 );
+ 31
+ 32 ## replace the existing subfield.
+ 33 $existing->replace_with($new);
+ 34
+ 35 }
+ 36
+ 37 ## write out the record
+ 38 print OUT $record->as_usmarc();
+ 39
+ 40 }
+
+=head2 Updating subject subfield x to subfield v
+
+As a somewhat more complicated example, you may find yourself wanting to
+update the last subfield x in a 650 field to be a subfield v instead. With
+the MARC::Field C<subfields()> and C<replace_with()> methods along with
+some fancy footwork this can be done relatively easily.
+
+ 1 ## Example U9
+ 2
+ 3 use MARC::Batch;
+ 4
+ 5 my $file = shift;
+ 6
+ 7 my $batch = MARC::Batch->new('USMARC', $file);
+ 8 while ( my $record = $batch->next() ) {
+ 9
+ 10 # go through all 6XX fields in the record.
+ 11 foreach my $subject ( $record->field( '6..' ) ) {
+ 12
+ 13 # extract subfields as an array of array refs.
+ 14 my @subfields = $subject->subfields();
+ 15
+ 16 # setup an array to store our new field.
+ 17 my @newSubfields = ();
+ 18
+ 19 # a flag to indicate that we found an subfield x.
+ 20 my $foundX = 0;
+ 21
+ 22 # use pop() to read the subfields backwards.
+ 23 while ( my $subfield = pop( @subfields ) ) {
+ 24
+ 25 # for convenience, pull out the subfield
+ 26 # code and data from the array ref.
+ 27 my ($code,$data) = @$subfield;
+ 28
+ 29 # if the subfield code is 'x' and
+ 30 # we haven't already found one...
+ 31 if ( $code eq 'x' and ! $foundX ) {
+ 32
+ 33 # change to a v.
+ 34 $code = 'v';
+ 35
+ 36 # set flag so we know not to
+ 37 # translate any more subfield x.
+ 38 $foundX = 1;
+ 39
+ 40 }
+ 41
+ 42 # add our (potentially changed) subfield
+ 43 # data to our new subfield data array.
+ 44 unshift( @newSubfields, $code, $data );
+ 45
+ 46 }
+ 47
+ 48 # if we did find a subfield x, then create a new field using our
+ 49 # new subfield data, and replace the old one with the new one.
+ 50 if ( $foundX ) {
+ 51 my $newSubject = MARC::Field->new(
+ 52 $subject->tag(),
+ 53 $subject->indicator(1),
+ 54 $subject->indicator(2),
+ 55 @newSubfields
+ 56 );
+ 57 $subject->replace_with( $newSubject );
+ 58 }
+ 59
+ 60 }
+ 61
+ 62 # output the potentially changed record as MARC.
+ 63 print $record->as_usmarc();
+ 64
+ 65 }
+
+
+
+=head1 VALIDATING
+
+The MARC::Record package has some extra goodies to allow you to validate
+records: MARC::Lint. MARC::Lint provides an extensive battery of tests,
+and it also provides a framework for adding more.
+
+=head2 Using MARC::Lint
+
+Here is an example of using MARC::Lint to generate a list of errors
+present in a batch of records in a file named 'file.dat':
+
+ 1 ## Example V1
+ 2
+ 3 use MARC::Batch;
+ 4 use MARC::Lint;
+ 5
+ 6 my $batch = MARC::Batch->new('USMARC','file.dat');
+ 7 my $linter = MARC::Lint->new();
+ 8 my $counter = 0;
+ 9
+ 10 while (my $record = $batch->next() ) {
+ 11
+ 12 $counter++;
+ 13
+ 14 ## feed the record to our linter object.
+ 15 $linter->check_record($record);
+ 16
+ 17 ## get the warnings...
+ 18 my @warnings = $linter->warnings();
+ 19
+ 20 ## output any warnings.
+ 21 if (@warnings) {
+ 22
+ 23 print "RECORD $counter\n";
+ 24 print join("\n", at warnings),"\n";
+ 25
+ 26 }
+ 27
+ 28 }
+
+MARC::Lint is quite thorough, and will check the following when validating:
+presence of a 245 field, repeatability of fields and subfields, valid use of
+subfield within particular fields, presence of indicators and their values.
+
+=head2 Customizing MARC::Lint
+
+MARC::Lint makes no claim to check B<everything> that might be wrong with
+a MARC record. In practice, individual libraries may have their own idea
+about what is valid or invalid. For example, a library may mandate that
+all MARC records with an 856 field should have a subfield z that reads
+"Connect to this resource".
+
+MARC::Lint does provide a framework for adding rules. It can be done using
+the object oriented programming technique of inheritance. In short, you
+can create your own subclass of MARC::Lint, and then use it to validate your
+records. Here's an example:
+
+ 1 ## Example V2
+ 2
+ 3 ## first, create our own subclass of MARC::Lint.
+ 4 ## should be saved in a file called MyLint.pm.
+ 5
+ 6 package MyLint;
+ 7 use base qw(MARC::Lint);
+ 8
+ 9 ## add a method to check that the 856
+ 10 ## fields contain a correct subfield z.
+ 11 sub check_856 {
+ 12
+ 13 ## your method is passed the MARC::Lint
+ 14 ## and MARC::Field objects for the record.
+ 15 my ($self,$field) = @_;
+ 16
+ 17 if ($field->subfield('z') ne 'Connect to this resource') {
+ 18
+ 19 ## add a warning to our lint object.
+ 20 $self->warn("856 subfield z must read 'Connect to this resource'.");
+ 21
+ 22 }
+ 23
+ 24 }
+
+Then create a separate program that uses your subclass to validate your MARC
+records. You'll need to make sure your program is able to find your module
+(in this case, MyLint.pm)... this can be achieved by putting both MyLint.pm
+and the following program in the same directory:
+
+ 1 ## Example V3
+ 2
+ 3 use MARC::Batch;
+ 4 use MyLint;
+ 5
+ 6 my $linter = MyLint->new();
+ 7 my $batch = MARC::Batch->new('USMARC','file.marc');
+ 8 my $counter = 0;
+ 9
+ 10 while (my $record = $batch->next()) {
+ 11
+ 12 $counter++;
+ 13
+ 14 ## check the record
+ 15 $linter->check_record($record);
+ 16
+ 17 ## get the warnings, and print them out
+ 18 my @warnings = $linter->warnings();
+ 19 if (@warnings) {
+ 20 print "RECORD $counter\n";
+ 21 print join("\n", at warnings),"\n";
+ 22 }
+ 23
+ 24 }
+
+Notice how the call to C<check_record()> at line 15 automatically calls the
+C<check_record> in MARC::Lint. The property of inheritance is what makes
+this happen. C<$linter> is an instance of the MyLint class, and MyLint
+inherits from the MARC::Lint class, which allows C<$linter> to inherit all
+the functionality of a normal MARC::Lint object B<plus> the new
+functionality found in the C<check_856> method.
+
+Notice also that we don't have to call C<check_856()> directly. The call to
+C<check_record()> automatically looks for any C<check_XXX> methods that it can
+call to verify the record. Pretty neat stuff. If you've added validation
+checks that you think could be of use to the general public, please share them
+on the perl4lib mailing list, or become a developer and add them to the source!
+
+=head1 SWOLLEN APPENDICES
+
+Brian Eno fans might catch this reference to his autobiography which was
+comprised of a years worth of diary entries plus extra topics at the end, and
+was entitled "A Year With Swollen Appendices". The following section is a grab
+bag group of appendices. Many of them are not filled in yet; this is because
+they are just ideas... so perhaps the appendices aren't that swollen yet.
+Feel free to suggest new ones, or to fill these in.
+
+=head2 Comparing Collections
+
+=head2 Authority Records
+
+=head2 URLs
+
+=head2 ISBN/ISSNs
+
+=head2 Call numbers
+
+=head2 Subject headings
+
+Suppose you have a batch of MARC records and you want to extract all the
+subject headings, generating a report of how many times each subject
+heading appeared in the batch:
+
+ 1 use MARC::File::USMARC;
+ 2 use constant MAX => 20;
+ 3
+ 4 my %counts;
+ 5
+ 6 my $filename = shift or die "Must specify filename\n";
+ 7 my $file = MARC::File::USMARC->in( $filename );
+ 8
+ 9 while ( my $marc = $file->next() ) {
+ 10 for my $field ( $marc->field("6..") ) {
+ 11 my $heading = $field->subfield('a');
+ 12
+ 13 # trailing whitespace / punctuation.
+ 14 $heading =~ s/[.,]?\s*$//;
+ 15
+ 16 # Now count it.
+ 17 ++$counts{$heading};
+ 18 }
+ 19 }
+ 20 $file->close();
+ 21
+ 22 # Sort the list of headings based on the count of each.
+ 23 my @headings = reverse sort { $counts{$a} <=> $counts{$b} } keys %counts;
+ 24
+ 25 # Take the top N hits...
+ 26 @headings = @headings[0..MAX-1];
+ 27
+ 28 # And print out the results.
+ 29 for my $heading ( @headings ) {
+ 30 printf( "%5d %s\n", $counts{$heading}, $heading );
+ 31 }
+
+Which will generate results like this:
+
+ 600 United States
+ 140 World War, 1939-1945
+ 78 Great Britain
+ 63 Afro-Americans
+ 61 Indians of North America
+ 58 American poetry
+ 55 France
+ 53 West (U.S.)
+ 53 Science fiction
+ 53 American literature
+ 50 Shakespeare, William
+ 48 Soviet Union
+ 46 Mystery and detective stories
+ 45 Presidents
+ 43 China
+ 40 Frontier and pioneer life
+ 38 English poetry
+ 37 Authors, American
+ 37 English language
+ 35 Japan
+
+=head2 HTML
+
+=head2 XML
+
+=head2 Excel
+
+=head2 Databases
+
+=head2 Z39.50
+
+Chris Biemesderfer was kind enough to contribute a short example of how
+to use MARC::Record in tandem with Net::Z3950. Net::Z3950 is a CPAN
+module which provides an easy to use interface to the Z39.50 protocol so that
+you can write programs that retrieve records from bibliographic database
+around the world.
+
+Chris' program is a command line utility which you run like so:
+
+ ./zm.pl 0596000278
+
+where 0596000278 is an ISBN (for the 3rd edition of the Camel incidentally).
+The program will query the Library of Congress Z39.50 server for the ISBN,
+and dump out the retrieved MARC record on the screen. The program is designed
+to lookup multiple ISBNs if you separate them with a space. This is just an
+example showing what is possible.
+
+ 1 #!/usr/bin/perl -w
+ 2
+ 3 # GET-MARC-ISBN -- Get MARC records by ISBN from a Z39.50 server
+ 4
+ 5 use strict;
+ 6 use Carp;
+ 7 use Net::Z3950;
+ 8 use MARC::Record;
+ 9
+ 10 exit if ($#ARGV < 0);
+ 11
+ 12 # We handle multiple ISBNs in the same query by assembling a
+ 13 # (potentially very large) search string with Prefix Query Notation
+ 14 # that ORs the ISBN-bearing attributes.
+ 15 #
+ 16 # For purposes of automation, we want to request batches of many MARC
+ 17 # records. I am not a Z39.50 weenie, though, and I don't know
+ 18 # offhand if there is a limit on how big a PQN query can be...
+ 19
+ 20 my $zq = "\@attr 1=7 ". pop();
+ 21 while (@ARGV) { $zq = '@or @attr 1=7 '. pop() ." $zq" }
+ 22
+ 23 ## HERE IS THE CODE FOR Z3950 REC RETRIEVAL
+ 24 # Set up connection management structures, connect
+ 25 # to the server, and submit the Z39.50 query.
+ 26
+ 27 my $mgr = Net::Z3950::Manager->new( databaseName => 'voyager' );
+ 28 $mgr->option( elementSetName => "f" );
+ 29 $mgr->option( preferredRecordSyntax => Net::Z3950::RecordSyntax::USMARC );
+ 30
+ 31 my $conn = $mgr->connect('z3950.loc.gov', '7090');
+ 32 croak "Unable to connect to server" if !defined($conn);
+ 33
+ 34 my $rs = $conn->search($zq);
+ 35
+ 36 my $numrec = $rs->size();
+ 37 print STDERR "$numrec record(s) found\n";
+ 38
+ 39 for (my $ii = 1; $ii <= $numrec; $ii++) {
+ 40
+ 41 # Extract MARC records from Z3950
+ 42 # result set, and load MARC::Record.
+ 43 my $zrec = $rs->record($ii);
+ 44 my $mrec = MARC::Record->new_from_usmarc($zrec->rawdata());
+ 45 print $mrec->as_formatted, "\n\n";
+ 46
+ 47 }
+
+=head2 Procite/Endnote
+
+=head1 CONTRIBUTORS
+
+Many thanks to all the contributors who have made this document possible.
+
+=over 4
+
+=item *
+
+Chris Biemesderfer <chris at seagoat.com>
+
+=item *
+
+Morbus Iff <morbus at disobey.com>
+
+=item *
+
+Andy Lester <andy at petdance.com>
+
+=item *
+
+Christopher Morgan <morgan at acm.org>
+
+=item *
+
+Shashi Pinheiro <SPinheiro at utsa.edu>
+
+=item *
+
+Jackie Shieh <jshieh at umich.edu>
+
+=item *
+
+Ed Summers <ehs at pobox.com>
+
+=back
+
+
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,561 @@
+package MARC::Field;
+
+use strict;
+use integer;
+use Carp;
+
+use constant SUBFIELD_INDICATOR => "\x1F";
+use constant END_OF_FIELD => "\x1E";
+
+use vars qw( $ERROR );
+
+=head1 NAME
+
+MARC::Field - Perl extension for handling MARC fields
+
+=head1 SYNOPSIS
+
+ use MARC::Field;
+
+ my $field = MARC::Field->new( 245, '1', '0',
+ 'a' => 'Raccoons and ripe corn / ',
+ 'c' => 'Jim Arnosky.'
+ );
+ $field->add_subfields( "a", "1st ed." );
+
+=head1 DESCRIPTION
+
+Defines MARC fields for use in the MARC::Record module. I suppose
+you could use them on their own, but that wouldn't be very interesting.
+
+=head1 EXPORT
+
+None by default. Any errors are stored in C<$MARC::Field::ERROR>, which
+C<$MARC::Record> usually bubbles up to C<$MARC::Record::ERROR>.
+
+=head1 METHODS
+
+=head2 new()
+
+The constructor, which will return a MARC::Field object. Typically you will
+pass in the tag number, indicator 1, indicator 2, and then a list of any
+subfield/data pairs. For example:
+
+ my $field = MARC::Field->new(
+ 245, '1', '0',
+ 'a' => 'Raccoons and ripe corn / ',
+ 'c' => 'Jim Arnosky.'
+ );
+
+Or if you want to add a field < 010 that does not have indicators.
+
+ my $field = MARC::Field->new( '001', ' 14919759' );
+
+=cut
+
+sub new($) {
+ my $class = shift;
+ $class = ref($class) || $class;
+
+ ## MARC spec indicates that tags can have alphabetical
+ ## characters in them! If they do appear we assume that
+ ## they have indicators like tags > 010
+ my $tagno = shift;
+ ($tagno =~ /^[0-9A-Za-z]{3}$/)
+ or croak( "Tag \"$tagno\" is not a valid tag." );
+ my $is_control = (($tagno =~ /^\d+$/) && ($tagno < 10));
+
+ my $self = bless {
+ _tag => $tagno,
+ _warnings => [],
+ _is_control_field => $is_control,
+ }, $class;
+
+ if ( $is_control ) {
+ $self->{_data} = shift;
+ } else {
+ for my $indcode ( qw( _ind1 _ind2 ) ) {
+ my $indicator = shift;
+ if ( $indicator !~ /^[0-9A-Za-z ]$/ ) {
+ $self->_warn( "Invalid indicator \"$indicator\" forced to blank" ) unless ($indicator eq "");
+ $indicator = " ";
+ }
+ $self->{$indcode} = $indicator;
+ } # for
+
+ (@_ >= 2)
+ or croak( "Field $tagno must have at least one subfield" );
+
+ # Normally, we go thru add_subfields(), but internally we can cheat
+ $self->{_subfields} = [@_];
+ }
+
+ return $self;
+} # new()
+
+
+=head2 tag()
+
+Returns the three digit tag for the field.
+
+=cut
+
+sub tag {
+ my $self = shift;
+ return $self->{_tag};
+}
+
+=head2 indicator(indno)
+
+Returns the specified indicator. Returns C<undef> and sets
+C<$MARC::Field::ERROR> if the I<indno> is not 1 or 2, or if
+the tag doesn't have indicators.
+
+=cut
+
+sub indicator($) {
+ my $self = shift;
+ my $indno = shift;
+
+ $self->_warn( "Fields below 010 do not have indicators" )
+ if $self->is_control_field;
+
+ if ( $indno == 1 ) {
+ return $self->{_ind1};
+ } elsif ( $indno == 2 ) {
+ return $self->{_ind2};
+ } else {
+ croak( "Indicator number must be 1 or 2" );
+ }
+}
+
+=head2 is_control_field()
+
+Tells whether this field is one of the control tags from 001-009.
+
+=cut
+
+sub is_control_field {
+ my $self = shift;
+ return $self->{_is_control_field};
+}
+
+=head2 subfield(code)
+
+When called in a scalar context returns the text from the first subfield
+matching the subfield code.
+
+ my $subfield = $field->subfield( 'a' );
+
+Or if you think there might be more than one you can get all of them by
+calling in a list context:
+
+ my @subfields = $field->subfield( 'a' );
+
+If no matching subfields are found, C<undef> is returned in a scalar context
+and an empty list in a list context.
+
+If the tag is less than an 010, C<undef> is returned and
+C<$MARC::Field::ERROR> is set.
+
+=cut
+
+sub subfield {
+ my $self = shift;
+ my $code_wanted = shift;
+
+ croak( "Fields below 010 do not have subfields, use data()" )
+ if $self->is_control_field;
+
+ my @data = @{$self->{_subfields}};
+ my @found;
+ while ( defined( my $code = shift @data ) ) {
+ if ( $code eq $code_wanted ) {
+ push( @found, shift @data );
+ } else {
+ shift @data;
+ }
+ }
+ if ( wantarray() ) { return @found; }
+ return( $found[0] );
+}
+
+=head2 subfields()
+
+Returns all the subfields in the field. What's returned is a list of
+lists, where the inner list is a subfield code and the subfield data.
+
+For example, this might be the subfields from a 245 field:
+
+ [
+ [ 'a', 'Perl in a nutshell :' ],
+ [ 'b', 'A desktop quick reference.' ],
+ ]
+
+=cut
+
+sub subfields {
+ my $self = shift;
+
+ $self->_warn( "Fields below 010 do not have subfields" )
+ if $self->is_control_field;
+
+ my @list;
+ my @data = @{$self->{_subfields}};
+ while ( defined( my $code = shift @data ) ) {
+ push( @list, [$code, shift @data] );
+ }
+ return @list;
+}
+
+=head2 data()
+
+Returns the data part of the field, if the tag number is less than 10.
+
+=cut
+
+sub data($) {
+ my $self = shift;
+
+ croak( "data() is only for tags less than 010, use subfield()" )
+ unless $self->is_control_field;
+
+ $self->{_data} = $_[0] if @_;
+
+ return $self->{_data};
+}
+
+=head2 add_subfields(code,text[,code,text ...])
+
+Adds subfields to the end of the subfield list.
+
+ $field->add_subfields( 'c' => '1985' );
+
+Returns the number of subfields added, or C<undef> if there was an error.
+
+=cut
+
+sub add_subfields(@) {
+ my $self = shift;
+
+ croak( "Subfields are only for tags >= 10" )
+ if $self->is_control_field;
+
+ push( @{$self->{_subfields}}, @_ );
+ return @_/2;
+}
+
+
+
+=head2 update()
+
+Allows you to change the values of the field. You can update indicators
+and subfields like this:
+
+ $field->update( ind2 => '4', a => 'The ballad of Abe Lincoln');
+
+If you attempt to update a subfield which does not currently exist in the field,
+then a new subfield will be appended to the field. If you don't like this
+auto-vivification you must check for the existence of the subfield prior to
+update.
+
+ if ( $field->subfield( 'a' ) ) {
+ $field->update( 'a' => 'Cryptonomicon' );
+ }
+
+If you want to update a field that has no indicators or subfields (000-009)
+just call update() with one argument, the string that you would like to
+set the field to.
+
+ $field = $record->field( '003' );
+ $field->update('IMchF');
+
+Note: when doing subfield updates be aware that C<update()> will only
+update the first occurrence. If you need to do anything more complicated
+you will probably need to create a new field and use C<replace_with()>.
+
+Returns the number of items modified.
+
+=cut
+
+sub update {
+ my $self = shift;
+
+ ## tags 000 - 009 don't have indicators or subfields
+ if ( $self->is_control_field ) {
+ $self->{_data} = shift;
+ return(1);
+ }
+
+ ## otherwise we need to update subfields and indicators
+ my @data = @{$self->{_subfields}};
+ my $changes = 0;
+
+ while ( @_ ) {
+
+ my $arg = shift;
+ my $val = shift;
+
+ ## indicator update
+ if ($arg =~ /^ind[12]$/) {
+ $self->{"_$arg"} = $val;
+ $changes++;
+ }
+
+ ## subfield update
+ else {
+ my $found = 0;
+ ## update existing subfield
+ for ( my $i=0; $i<@data; $i+=2 ) {
+ if ($data[$i] eq $arg) {
+ $data[$i+1] = $val;
+ $found = 1;
+ $changes++;
+ last;
+ }
+ } # for
+
+ ## append new subfield
+ if ( !$found ) {
+ push( @data, $arg, $val );
+ $changes++;
+ }
+ }
+
+ } # while
+
+ ## synchronize our subfields
+ $self->{_subfields} = \@data;
+ return($changes);
+
+}
+
+=head2 replace_with()
+
+Allows you to replace an existing field with a new one. You need to pass
+C<replace()> a MARC::Field object to replace the existing field with. For
+example:
+
+ $field = $record->field('245');
+ my $new_field = new MARC::Field('245','0','4','The ballad of Abe Lincoln.');
+ $field->replace_with($new_field);
+
+Doesn't return a meaningful or reliable value.
+
+=cut
+
+sub replace_with {
+
+ my ($self,$new) = @_;
+ ref($new) =~ /^MARC::Field$/
+ or croak("Must pass a MARC::Field object");
+
+ %$self = %$new;
+
+}
+
+
+=head2 as_string( [$subfields] )
+
+Returns a string of all subfields run together. A space is added to
+the result between each subfield. The tag number and subfield
+character are not included.
+
+Subfields appear in the output string in the order in which they
+occur in the field.
+
+If C<$subfields> is specified, then only those subfields will be included.
+
+ my $field = MARC::Field->new(
+ 245, '1', '0',
+ 'a' => 'Abraham Lincoln',
+ 'h' => '[videorecording] :',
+ 'b' => 'preserving the union /',
+ 'c' => 'A&E Home Video.'
+ );
+ print $field->as_string( 'abh' ); # Only those three subfields
+ # prints 'Abraham Lincoln [videorecording] : preserving the union /'.
+
+Note that subfield h comes before subfield b in the output.
+
+=cut
+
+sub as_string() {
+ my $self = shift;
+ my $subfields = shift;
+
+ if ( $self->is_control_field ) {
+ return $self->{_data};
+ }
+
+ my @subs;
+
+ my $subs = $self->{_subfields};
+ my $nfields = @$subs / 2;
+ for my $i ( 1..$nfields ) {
+ my $offset = ($i-1)*2;
+ my $code = $subs->[$offset];
+ my $text = $subs->[$offset+1];
+ push( @subs, $text ) if !$subfields || $code =~ /^[$subfields]$/;
+ } # for
+
+ return join( " ", @subs );
+}
+
+
+=head2 as_formatted()
+
+Returns a pretty string for printing in a MARC dump.
+
+=cut
+
+sub as_formatted() {
+ my $self = shift;
+
+ my @lines;
+
+ if ( $self->is_control_field ) {
+ push( @lines, sprintf( "%03s %s", $self->{_tag}, $self->{_data} ) );
+ } else {
+ my $hanger = sprintf( "%03s %1.1s%1.1s", $self->{_tag}, $self->{_ind1}, $self->{_ind2} );
+
+ my $subs = $self->{_subfields};
+ my $nfields = @$subs / 2;
+ my $offset = 0;
+ for my $i ( 1..$nfields ) {
+ push( @lines, sprintf( "%-6.6s _%1.1s%s", $hanger, $subs->[$offset++], $subs->[$offset++] ) );
+ $hanger = "";
+ } # for
+ }
+
+ return join( "\n", @lines );
+}
+
+
+=head2 as_usmarc()
+
+Returns a string for putting into a USMARC file. It's really only
+useful by C<MARC::Record::as_usmarc()>.
+
+=cut
+
+sub as_usmarc() {
+ my $self = shift;
+
+ # Tags < 010 are pretty easy
+ if ( $self->is_control_field ) {
+ return $self->data . END_OF_FIELD;
+ } else {
+ my @subs;
+ my @subdata = @{$self->{_subfields}};
+ while ( @subdata ) {
+ push( @subs, join( "", SUBFIELD_INDICATOR, shift @subdata, shift @subdata ) );
+ } # while
+
+ return
+ join( "",
+ $self->indicator(1),
+ $self->indicator(2),
+ @subs,
+ END_OF_FIELD,
+ );
+ }
+}
+
+=head2 clone()
+
+Makes a copy of the field. Note that this is not just the same as saying
+
+ my $newfield = $field;
+
+since that just makes a copy of the reference. To get a new object, you must
+
+ my $newfield = $field->clone;
+
+Returns a MARC::Field record.
+
+=cut
+
+sub clone {
+ my $self = shift;
+
+ my $tagno = $self->{_tag};
+ my $is_control = (($tagno =~ /^\d+$/) && ($tagno < 10));
+
+ my $clone =
+ bless {
+ _tag => $tagno,
+ _warnings => [],
+ _is_control_field => $is_control,
+ }, ref($self);
+
+ if ( $is_control ) {
+ $clone->{_data} = $self->{_data};
+ } else {
+ $clone->{_ind1} = $self->{_ind1};
+ $clone->{_ind2} = $self->{_ind2};
+ $clone->{_subfields} = [@{$self->{_subfields}}];
+ }
+
+ return $clone;
+}
+
+=head2 warnings()
+
+Returns the warnings that were created when the record was read.
+These are things like "Invalid indicators converted to blanks".
+
+The warnings are items that you might be interested in, or might
+not. It depends on how stringently you're checking data. If
+you're doing some grunt data analysis, you probably don't care.
+
+=cut
+
+sub warnings() {
+ my $self = shift;
+
+ return @{$self->{_warnings}};
+}
+
+# NOTE: _warn is an object method
+sub _warn($) {
+ my $self = shift;
+
+ push( @{$self->{_warnings}}, join( "", @_ ) );
+}
+
+sub _gripe(@) {
+ $ERROR = join( "", @_ );
+
+ warn $ERROR;
+
+ return;
+}
+
+
+1;
+
+__END__
+
+=head1 SEE ALSO
+
+See the "SEE ALSO" section for L<MARC::Record>.
+
+=head1 TODO
+
+See the "TODO" section for L<MARC::Record>.
+
+=cut
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
Property changes on: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Field.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/MicroLIF.pm 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,303 @@
+package MARC::File::MicroLIF;
+
+=head1 NAME
+
+MARC::File::MicroLIF - MicroLIF-specific file handling
+
+=cut
+
+use strict;
+use integer;
+use vars qw( $ERROR );
+
+use MARC::File;
+use vars qw( @ISA ); @ISA = qw( MARC::File );
+
+use MARC::Record qw( LEADER_LEN );
+
+=head1 SYNOPSIS
+
+ use MARC::File::MicroLIF;
+
+ my $file = MARC::File::MicroLIF->in( $filename );
+
+ while ( my $marc = $file->next() ) {
+ # Do something
+ }
+ $file->close();
+ undef $file;
+
+=head1 EXPORT
+
+None.
+
+=cut
+
+
+=for internal
+
+The buffer must be large enough to handle any valid record because
+we don't check for cases like a CR/LF pair or an end-of-record/CR/LF
+trio being only partially in the buffer.
+
+The max valid record is the max MARC record size (99999) plus one
+or two characters per tag (CR, LF, or CR/LF). It's hard to say
+what the max number of tags is, so here we use 6000. (6000 tags
+can be squeezed into a MARC record only if every tag has only one
+subfield containing a maximum of one character, or if data from
+multiple tags overlaps in the MARC record body. We're pretty safe.)
+
+=cut
+
+use constant BUFFER_MIN => (99999 + 6000 * 2);
+
+=head1 METHODS
+
+=head2 in()
+
+Opens a MicroLIF file for reading.
+
+=cut
+
+sub in {
+ my $class = shift;
+ my $self = $class->SUPER::in( @_ );
+
+ if ( $self ) {
+ bless $self, $class;
+
+ $self->{exhaustedfh} = 0;
+ $self->{inputbuf} = '';
+ $self->{header} = undef;
+
+ # get the MicroLIF header, but handle the case in
+ # which it's missing.
+ my $header = $self->_get_chunk( 1 );
+ if ( defined $header ) {
+ if ( $header =~ /^LDR/ ) {
+ # header missing, put this back
+ $self->_unget_chunk( $header . "\n" );
+
+ # XXX should we warn of a missing header?
+ }
+ else {
+ $self->{header} = $header;
+ }
+ }
+ else {
+ # can't read from the file
+ undef $self;
+ }
+ }
+
+ return $self;
+} # new
+
+
+# fill the buffer if we need to
+sub _fill_buffer {
+ my $self = shift;
+ my $ok = 1;
+
+ if ( !$self->{exhaustedfh} && length( $self->{inputbuf} ) < BUFFER_MIN ) {
+ # append the next chunk of bytes to the buffer
+ my $read = read $self->{fh}, $self->{inputbuf}, BUFFER_MIN, length($self->{inputbuf});
+ if ( !defined $read ) {
+ # error!
+ $ok = undef;
+ $MARC::File::ERROR = "error reading from file " . $self->{filename};
+ }
+ elsif ( $read < 1 ) {
+ $self->{exhaustedfh} = 1;
+ }
+ }
+
+ return $ok;
+}
+
+
+=for internal
+
+Gets the next chunk of data. If C<$want_line> is true then you get
+the next chunk ending with any combination of \r and \n of any length.
+If it is false or not passed then you get the next chunk ending with
+\x60 followed by any combination of \r and \n of any length.
+
+All trailing \r and \n are stripped.
+
+=cut
+
+sub _get_chunk {
+ my $self = shift;
+ my $want_line = shift || 0;
+
+ my $chunk = undef;
+
+ if ( $self->_fill_buffer() && length($self->{inputbuf}) > 0 ) {
+
+ # the buffer always has at least one full line in it, so we're
+ # guaranteed that if there are no line endings then we're
+ # on the last line.
+
+ if ( $want_line ) {
+ if ( $self->{inputbuf} =~ /^([^\x0d\x0a]*)([\x0d\x0a]+)/ ) {
+ $chunk = $1;
+ $self->{inputbuf} = substr( $self->{inputbuf}, length($1)+length($2) );
+ }
+ }
+ else {
+ # couldn't figure out how to make this work as a regex
+ my $pos = -1;
+ while ( !$chunk ) {
+ $pos = index( $self->{inputbuf}, '`', $pos+1 );
+ last if $pos < 0;
+ if ( substr($self->{inputbuf}, $pos+1, 1) eq "\x0d" or substr($self->{inputbuf}, $pos+1, 1) eq "\x0a" ) {
+ $chunk = substr( $self->{inputbuf}, 0, $pos+1 ); # include the '`' but not the newlines
+ while ( substr($self->{inputbuf}, $pos+1, 1) eq "\x0d" or substr($self->{inputbuf}, $pos+1, 1) eq "\x0a" ) {
+ ++$pos;
+ }
+ # $pos now pointing at last newline char
+ $self->{inputbuf} = substr( $self->{inputbuf}, $pos+1 );
+ }
+ }
+ }
+
+ if ( !$chunk ) {
+ $chunk = $self->{inputbuf};
+ $self->{inputbuf} = '';
+ $self->{exhaustedfh} = 1;
+ }
+ }
+
+ return $chunk;
+}
+
+
+# $chunk is put at the beginning of the buffer exactly as
+# passed in. No line endings are added.
+sub _unget_chunk {
+ my $self = shift;
+ my $chunk = shift;
+ $self->{inputbuf} = $chunk . $self->{inputbuf};
+ return;
+}
+
+
+sub _next {
+ my $self = shift;
+
+ my $lifrec = $self->_get_chunk();
+
+ # for ease, make the newlines match this platform
+ $lifrec =~ s/[\x0a\x0d]+/\n/g if defined $lifrec;
+
+ return $lifrec;
+}
+
+
+=head2 header()
+
+If the MicroLIF file has a file header then the header is returned.
+If the file has no header or the file has not yet been opened then
+C<undef> is returned.
+
+=cut
+
+sub header {
+ my $self = shift;
+ return $self->{header};
+}
+
+=head2 decode()
+
+Decodes a MicroLIF record and returns a USMARC record.
+
+Can be called in one of three different ways:
+
+ $object->decode( $lif )
+ MARC::File::MicroLIF->decode( $lif )
+ MARC::File::MicroLIF::decode( $lif )
+
+=cut
+
+sub decode {
+ my $self = shift;
+ my $location = '';
+ my $text = '';
+
+ ## decode can be called in a variety of ways
+ ## this bit of code covers all three
+
+ if ( ref($self) =~ /^MARC::File/ ) {
+ $location = 'in record '.$self->{recnum};
+ $text = shift;
+ } else {
+ $location = 'in record 1';
+ $text = $self=~/MARC::File/ ? shift : $self;
+ }
+
+ my $marc = MARC::Record->new();
+
+ my @lines = split( /\n/, $text );
+ for my $line ( @lines ) {
+
+ ($line =~ s/^([0-9A-Za-z]{3})//) or
+ $marc->_warn( "Invalid tag number: ".substr( $line, 0, 3 )." $location" );
+ my $tagno = $1;
+
+ ($line =~ s/\^`?$//)
+ or $marc->_warn( "Tag $tagno $location is missing a trailing caret." );
+
+ if ( $tagno eq "LDR" ) {
+ $marc->leader( substr( $line, 0, LEADER_LEN ) );
+ } elsif ( $tagno =~ /^\d+$/ and $tagno < 10 ) {
+ $marc->add_fields( $tagno, $line );
+ } else {
+ $line =~ s/^(.)(.)//;
+ my ($ind1,$ind2) = ($1,$2);
+ my @subfields;
+ my @subfield_data_pairs = split( /_(?=[a-z0-9])/, $line );
+ if ( scalar @subfield_data_pairs < 2 ) {
+ $marc->_warn( "Tag $tagno $location has no subfields--discarded." );
+ }
+ else {
+ shift @subfield_data_pairs; # Leading _ makes an empty pair
+ for my $pair ( @subfield_data_pairs ) {
+ my ($subfield,$data) = (substr( $pair, 0, 1 ), substr( $pair, 1 ));
+ push( @subfields, $subfield, $data );
+ }
+ $marc->add_fields( $tagno, $ind1, $ind2, @subfields );
+ }
+ }
+ } # for
+
+ return $marc;
+}
+
+1;
+
+__END__
+
+=head1 TODO
+
+=over 4
+
+=back
+
+=head1 RELATED MODULES
+
+L<MARC::File>
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File/USMARC.pm 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,356 @@
+package MARC::File::USMARC;
+
+=head1 NAME
+
+MARC::File::USMARC - USMARC-specific file handling
+
+=cut
+
+use strict;
+use integer;
+
+use vars qw( $ERROR );
+
+use MARC::File;
+use vars qw( @ISA ); @ISA = qw( MARC::File );
+
+use MARC::Record qw( LEADER_LEN );
+use constant SUBFIELD_INDICATOR => "\x1F";
+use constant END_OF_FIELD => "\x1E";
+use constant END_OF_RECORD => "\x1D";
+use constant DIRECTORY_ENTRY_LEN => 12;
+
+=head1 SYNOPSIS
+
+ use MARC::File::USMARC;
+
+ my $file = MARC::File::USMARC->in( $filename );
+
+ while ( my $marc = $file->next() ) {
+ # Do something
+ }
+ $file->close();
+ undef $file;
+
+=head1 EXPORT
+
+None.
+
+=head1 METHODS
+
+=cut
+
+sub _next {
+ my $self = shift;
+ my $fh = $self->{fh};
+
+ my $reclen;
+ return if eof($fh);
+
+ local $/ = END_OF_RECORD;
+ my $usmarc = <$fh>;
+
+ # remove illegal garbage that sometimes occurs between records
+ $usmarc =~ s/^[ \x00\x0a\x0d]+//;
+
+ return unless $usmarc;
+
+ if ( length($usmarc) < 5 ) {
+ $self->_warn( "Couldn't find record length" );
+ }
+
+ $reclen = substr($usmarc,0,5);
+
+ if ( $reclen !~ /^\d{5}$/ or $reclen != length($usmarc) ) {
+ $self->_warn( "Invalid record length \"$reclen\"" );
+ }
+
+ return $usmarc;
+}
+
+=head2 decode( $string [, \&filter_func ] )
+
+Constructor for handling data from a USMARC file. This function takes care of
+all the tag directory parsing & mangling.
+
+Any warnings or coercions can be checked in the C<warnings()> function.
+
+The C<$filter_func> is an optional reference to a user-supplied function
+that determines on a tag-by-tag basis if you want the tag passed to it
+to be put into the MARC record. The function is passed the tag number
+and the raw tag data, and must return a boolean. The return of a true
+value tells MARC::File::USMARC::decode that the tag should get put into
+the resulting MARC record.
+
+For example, if you only want title and subject tags in your MARC record,
+try this:
+
+ sub filter {
+ my ($tagno,$tagdata) = @_;
+
+ return ($tagno == 245) || ($tagno >= 600 && $tagno <= 699);
+ }
+
+ my $marc = MARC::File::USMARC->decode( $string, \&filter );
+
+Why would you want to do such a thing? The big reason is that creating
+fields is processor-intensive, and if your program is doing read-only
+data analysis and needs to be as fast as possible, you can save time by
+not creating fields that you'll be ignoring anyway.
+
+Another possible use is if you're only interested in printing certain
+tags from the record, then you can filter them when you read from disc
+and not have to delete unwanted tags yourself.
+
+=cut
+
+sub decode {
+
+ my $text;
+ my $location = '';
+
+ ## decode can be called in a variety of ways
+ ## $object->decode( $string )
+ ## MARC::File::USMARC->decode( $string )
+ ## MARC::File::USMARC::decode( $string )
+ ## this bit of code covers all three
+
+ my $self = shift;
+ if ( ref($self) =~ /^MARC::File/ ) {
+ $location = 'in record '.$self->{recnum};
+ $text = shift;
+ } else {
+ $location = 'in record 1';
+ $text = $self=~/MARC::File/ ? shift : $self;
+ }
+
+ my $filter_func = shift;
+
+ my $marc = MARC::Record->new();
+
+ # Check for an all-numeric record length
+ ($text =~ /^(\d{5})/)
+ or return $marc->_warn( "Record length \"", substr( $text, 0, 5 ), "\" is not numeric $location" );
+
+ my $reclen = $1;
+ ($reclen == length($text))
+ or $marc->_warn( "Invalid record length $location: Leader says $reclen bytes, but it's actually ", length( $text ) );
+
+ (substr($text, -1, 1) eq END_OF_RECORD)
+ or $marc->_warn( "Invalid record terminator $location" );
+
+ $marc->leader( substr( $text, 0, LEADER_LEN ) );
+
+ # bytes 12 - 16 of leader give offset to the body of the record
+ my $data_start = 0 + substr( $text, 12, 5 );
+
+
+ # immediately after the leader comes the directory (no separator)
+ my $dir = substr( $text, LEADER_LEN, $data_start - LEADER_LEN - 1 ); # -1 to allow for \x1e at end of directory
+
+ # character after the directory must be \x1e
+ (substr($text, $data_start-1, 1) eq END_OF_FIELD)
+ or $marc->_warn( "No directory found $location" );
+
+ # all directory entries 12 bytes long, so length % 12 must be 0
+ (length($dir) % DIRECTORY_ENTRY_LEN == 0)
+ or $marc->_warn( "Invalid directory length $location" );
+
+
+ # go through all the fields
+ my $nfields = length($dir)/DIRECTORY_ENTRY_LEN;
+ for ( my $n = 0; $n < $nfields; $n++ ) {
+ my ( $tagno, $len, $offset ) = unpack( "A3 A4 A5", substr($dir, $n*DIRECTORY_ENTRY_LEN, DIRECTORY_ENTRY_LEN) );
+
+ # Check directory validity
+ ($tagno =~ /^[0-9A-Za-z]{3}$/)
+ or $marc->_warn( "Invalid tag in directory $location: \"$tagno\"" );
+
+ ($len =~ /^\d{4}$/)
+ or $marc->_warn( "Invalid length in directory $location tag $tagno: \"$len\"" );
+
+ ($offset =~ /^\d{5}$/)
+ or $marc->_warn( "Invalid offset in directory $location tag $tagno: \"$offset\"" );
+
+ ($offset + $len <= $reclen)
+ or $marc->_warn( "Directory entry $location runs off the end of the record tag $tagno" );
+
+ my $tagdata = substr( $text, $data_start + $offset, $len );
+
+ ($len == length($tagdata))
+ or $marc->_warn( "Invalid length in directory for tag $tagno $location" );
+
+ if ( substr($tagdata, -1, 1) eq END_OF_FIELD ) {
+ # get rid of the end-of-tag character
+ chop $tagdata;
+ --$len;
+ } else {
+ $marc->_warn( "field does not end in end of field character in tag $tagno $location" );
+ }
+
+ warn "Specs: ", join( "|", $tagno, $len, $offset, $tagdata ), "\n" if $MARC::Record::DEBUG;
+
+
+ if ( $filter_func ) {
+ next unless $filter_func->( $tagno, $tagdata );
+ }
+
+
+ if ( ($tagno =~ /^\d+$/) && ($tagno < 10) ) {
+ $marc->append_fields( MARC::Field->new( $tagno, $tagdata ) );
+ } else {
+ my @subfields = split( SUBFIELD_INDICATOR, $tagdata );
+ my $indicators = shift @subfields;
+ my ($ind1, $ind2);
+
+ if ( length( $indicators ) > 2 or length( $indicators ) == 0 ) {
+ $marc->_warn( "Invalid indicators \"$indicators\" forced to blanks $location for tag $tagno\n" );
+ ($ind1,$ind2) = (" ", " ");
+ } else {
+ $ind1 = substr( $indicators,0, 1 );
+ $ind2 = substr( $indicators,1, 1 );
+ }
+
+ # Split the subfield data into subfield name and data pairs
+ my @subfield_data;
+ for ( @subfields ) {
+ if ( length > 0 ) {
+ push( @subfield_data, substr($_,0,1),substr($_,1) );
+ } else {
+ $marc->_warn( "Entirely empty subfield found in tag $tagno" );
+ }
+ }
+
+ if ( !@subfield_data ) {
+ $marc->_warn( "no subfield data found $location for tag $tagno" );
+ next;
+ }
+
+ my $field = MARC::Field->new($tagno, $ind1, $ind2, @subfield_data );
+ if ( $field->warnings() ) {
+ $marc->_warn( $field->warnings() );
+ }
+ $marc->append_fields( $field );
+ }
+ } # looping through all the fields
+
+
+ return $marc;
+}
+
+=head2 update_leader()
+
+If any changes get made to the MARC record, the first 5 bytes of the
+leader (the length) will be invalid. This function updates the
+leader with the correct length of the record as it would be if
+written out to a file.
+
+=cut
+
+sub update_leader() {
+ my $self = shift;
+
+ my (undef,undef,$reclen,$baseaddress) = $self->_build_tag_directory();
+
+ $self->_set_leader_lengths( $reclen, $baseaddress );
+}
+
+=head2 _build_tag_directory()
+
+Function for internal use only: Builds the tag directory that gets
+put in front of the data in a MARC record.
+
+Returns two array references, and two lengths: The tag directory, and the data fields themselves,
+the length of all data (including the Leader that we expect will be added),
+and the size of the Leader and tag directory.
+
+=cut
+
+sub _build_tag_directory {
+ my $marc = shift;
+ $marc = shift if (ref($marc)||$marc) =~ /^MARC::File/;
+ die "Wanted a MARC::Record but got a ", ref($marc) unless ref($marc) eq "MARC::Record";
+
+ my @fields;
+ my @directory;
+
+ my $dataend = 0;
+ for my $field ( $marc->fields() ) {
+ # Dump data into proper format
+ my $str = $field->as_usmarc;
+ push( @fields, $str );
+
+ # Create directory entry
+ my $len = length $str;
+ my $direntry = sprintf( "%03s%04d%05d", $field->tag, $len, $dataend );
+ push( @directory, $direntry );
+ $dataend += $len;
+ }
+
+ my $baseaddress =
+ LEADER_LEN + # better be 24
+ ( @directory * DIRECTORY_ENTRY_LEN ) +
+ # all the directory entries
+ 1; # end-of-field marker
+
+
+ my $total =
+ $baseaddress + # stuff before first field
+ $dataend + # Length of the fields
+ 1; # End-of-record marker
+
+
+
+ return (\@fields, \@directory, $total, $baseaddress);
+}
+
+=head2 encode()
+
+Returns a string of characters suitable for writing out to a USMARC file,
+including the leader, directory and all the fields.
+
+=cut
+
+sub encode() {
+ my $marc = shift;
+ $marc = shift if (ref($marc)||$marc) =~ /^MARC::File/;
+
+ my ($fields,$directory,$reclen,$baseaddress) = _build_tag_directory($marc);
+ $marc->set_leader_lengths( $reclen, $baseaddress );
+
+ # Glomp it all together
+ return join("",$marc->leader, @$directory, END_OF_FIELD, @$fields, END_OF_RECORD);
+}
+
+1;
+
+__END__
+
+=head1 RELATED MODULES
+
+L<MARC::Record>
+
+=head1 TODO
+
+Make some sort of autodispatch so that you don't have to explicitly
+specify the MARC::File::X subclass, sort of like how DBI knows to
+use DBD::Oracle or DBD::Mysql.
+
+Create a toggle-able option to check inside the field data for
+end of field characters. Presumably it would be good to have
+it turned on all the time, but it's nice to be able to opt out
+if you don't want to take the performance hit.
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/File.pm 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,237 @@
+package MARC::File;
+
+=head1 NAME
+
+MARC::File - Base class for files of MARC records
+
+=cut
+
+use strict;
+use integer;
+
+use vars qw( $ERROR );
+
+=head1 SYNOPSIS
+
+ use MARC::File::USMARC;
+
+ my $file = MARC::File::USMARC->in( $filename );
+
+ while ( my $marc = $file->next() ) {
+ # Do something
+ }
+ $file->close();
+ undef $file;
+
+=head1 EXPORT
+
+None.
+
+=head1 METHODS
+
+=head2 in()
+
+Opens a file for import. Ordinarily you will use C<MARC::File::USMARC>
+or C<MARC::File::MicroLIF> to do this.
+
+ my $file = MARC::File::USMARC->in( 'file.marc' );
+
+Returns a C<MARC::File> object, or C<undef> on failure. If you
+encountered an error the error message will be stored in
+C<$MARC::File::ERROR>.
+
+Optionally you can also pass in a filehandle, and C<MARC::File>.
+will "do the right thing".
+
+ my $handle = IO::File->new( 'gunzip -c file.marc.gz |' );
+ my $file = MARC::File::USMARC->in( $handle );
+
+=cut
+
+sub in {
+ my $class = shift;
+ my $arg = shift;
+ my ( $filename, $fh );
+
+ ## if a valid filehandle was passed in
+ my $ishandle = do { no strict; defined fileno($arg); };
+ if ( $ishandle ) {
+ $filename = scalar( $arg );
+ $fh = $arg;
+ }
+
+ ## otherwise check if it's a filename, and
+ ## return undef if we weren't able to open it
+ else {
+ $filename = $arg;
+ $fh = eval { local *FH; open( FH, $arg ) or die; *FH{IO}; };
+ if ( $@ ) {
+ $MARC::File::ERROR = "Couldn't open $filename: $@";
+ return;
+ }
+ }
+
+ binmode( $fh );
+ my $self = {
+ filename => $filename,
+ fh => $fh,
+ recnum => 0,
+ warnings => [],
+ };
+
+ return( bless $self, $class );
+
+} # new()
+
+sub out {
+ die "Not yet written";
+}
+
+=head2 next( [\&filter_func] )
+
+Reads the next record from the file handle passed in.
+
+The C<$filter_func> is a reference to a filtering function. Currently,
+only USMARC records support this. See L<MARC::File::USMARC>'s C<decode()>
+function for details.
+
+Returns a MARC::Record reference, or C<undef> on error.
+
+=cut
+
+sub next {
+ my $self = shift;
+ $self->{recnum}++;
+ my $rec = $self->_next() or return;
+ return $self->decode($rec, @_);
+}
+
+=head2 skip()
+
+Skips over the next record in the file. Same as C<next()>,
+without the overhead of parsing a record you're going to throw away
+anyway.
+
+Returns 1 or undef.
+
+=cut
+
+sub skip {
+ my $self = shift;
+ my $rec = $self->_next() or return;
+ return 1;
+}
+
+=head2 warnings()
+
+Simlilar to the methods in L<MARC::Record> and L<MARC::Batch>,
+C<warnings()> will return any warnings that have accumulated while
+processing this file; and as a side-effect will clear the warnings buffer.
+
+=cut
+
+sub warnings {
+ my $self = shift;
+ my @warnings = @{ $self->{warnings} };
+ $self->{warnings} = [];
+ return(@warnings);
+}
+
+=head2 close()
+
+Closes the file, both from the object's point of view, and the actual file.
+
+=cut
+
+sub close {
+ my $self = shift;
+ close( $self->{fh} );
+ delete $self->{fh};
+ delete $self->{filename};
+ return;
+}
+
+sub _unimplemented() {
+ my $self = shift;
+ my $method = shift;
+ warn "Method $method must be overridden";
+}
+
+=head2 write()
+
+Writes a record to the output file. This method must be overridden
+in your subclass.
+
+=head2 decode()
+
+Decodes a record into a USMARC format. This method must be overridden
+in your subclass.
+
+=cut
+
+sub write { $_[0]->_unimplemented("write"); }
+sub decode { $_[0]->_unimplemented("decode"); }
+
+# NOTE: _warn must be called as an object method
+
+sub _warn {
+ my ($self,$warning) = @_;
+ push( @{ $self->{warnings} }, "$warning in record ".$self->{recnum} );
+ return( $self );
+}
+
+# NOTE: _gripe can be called as an object method, or not. Your choice.
+# NOTE: it's use is now depracated use _warn instead
+sub _gripe(@) {
+ my @parms = @_;
+ if ( @parms ) {
+ my $self = shift @parms;
+
+ if ( ref($self) =~ /^MARC::File/ ) {
+ push( @parms, " at byte ", tell($self->{fh}) )
+ if $self->{fh};
+ push( @parms, " in file ", $self->{filename} ) if $self->{filename};
+ } else {
+ unshift( @parms, $self );
+ }
+
+ $ERROR = join( "", @parms );
+ warn $ERROR;
+ }
+
+ return;
+}
+
+1;
+
+__END__
+
+=head1 RELATED MODULES
+
+L<MARC::Record>
+
+=head1 TODO
+
+=over 4
+
+=item * C<out()> method
+
+We only handle files for input right now.
+
+=back
+
+=cut
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,2829 @@
+package MARC::Lint;
+
+use strict;
+use integer;
+
+use MARC::Record;
+use MARC::Field;
+
+=head1 NAME
+
+MARC::Lint - Perl extension for checking validity of MARC records
+
+=head1 SYNOPSIS
+
+ use MARC::File::USMARC;
+ use MARC::Lint;
+
+ my $lint = new MARC::Lint;
+ my $filename = shift;
+
+ my $file = MARC::File::USMARC->in( $filename );
+ while ( my $marc = $file->next() ) {
+ $lint->check_record( $marc );
+
+ # Print the title tag
+ print $marc->title, "\n";
+
+ # Print the errors that were found
+ print join( "\n", $lint->warnings ), "\n";
+ } # while
+
+Given the following MARC record:
+
+ LDR 00000nam 22002538a 4500
+ 100 14 _aWall, Larry.
+ 110 1 _aO'Reilly & Associates.
+ 245 90 _aProgramming Perl /
+ _aBig Book of Perl /
+ _cLarry Wall, Tom Christiansen & Jon Orwant.
+ 250 _a3rd ed.
+ 250 _a3rd ed.
+ 260 _aCambridge, Mass. :
+ _bO'Reilly,
+ _r2000.
+ 590 4 _aPersonally signed by Larry.
+ 856 43 _uhttp://www.perl.com/
+
+the following errors are generated:
+
+ 1XX: Only one 1XX tag is allowed, but I found 2 of them.
+ 100: Indicator 2 must be blank
+ 245: Indicator 1 must be 0 or 1
+ 245: Subfield _a is not repeatable.
+ 250: Field is not repeatable.
+ 260: Subfield _r is not valid.
+ 856: Indicator 2 must be blank, 0, 1, 2 or 8
+
+=head1 DESCRIPTION
+
+Module for checking validity of MARC records. 99% of the users will want to do
+something like is shown in the synopsis. The other intrepid 1% will overload the
+C<MARC::Lint> module's methods and provide their own special field-level checking.
+
+What this means is that if you have certain requirements, such as making sure that
+all 952 tags have a certain call number in them, you can write a function that
+checks for that, and still get all the benefits of the MARC::Lint framework.
+
+=head1 EXPORT
+
+None. Everything is done through objects.
+
+=head1 METHODS
+
+=head2 new()
+
+No parms needed. The C<MARC::Lint> object is little more than a list of warnings
+and a bunch of rules.
+
+=cut
+
+sub new {
+ my $class = shift;
+ $class = ref($class) || $class;
+
+ my $self = {
+ _warnings => [],
+ };
+ bless $self, $class;
+
+ $self->_read_rules();
+
+ return $self;
+}
+
+=head2 warnings()
+
+Returns a list of warnings found by C<check_record()> and its brethren.
+
+=cut
+
+sub warnings {
+ my $self = shift;
+
+ return wantarray ? @{$self->{_warnings}} : scalar @{$self->{_warnings}};
+}
+
+=head2 clear_warnings()
+
+Clear the list of warnings for this linter object. It's automatically called
+when you call C<check_record()>.
+
+=cut
+
+sub clear_warnings {
+ my $self = shift;
+
+ $self->{_warnings} = [];
+}
+
+=head2 warn( $str [, $str...] )
+
+Create a warning message, built from strings passed, like a C<print> statement.
+
+Typically, you'll leave this to C<check_record()>, but industrious programmers
+may want to do their own checking as well.
+
+=cut
+
+sub warn {
+ my $self = shift;
+
+ push( @{$self->{_warnings}}, join( "", @_ ) );
+
+ return;
+}
+
+=head2 check_record( $marc )
+
+Does all sorts of lint-like checks on the MARC record I<$marc>, both on the record as a whole,
+and on the individual fields & subfields.
+
+=cut
+
+sub check_record {
+ my $self = shift;
+ my $marc = shift;
+
+ $self->clear_warnings();
+
+ (ref($marc) eq "MARC::Record")
+ or return $self->warn( "Must pass a MARC::Record object to check_record" );
+
+ my @_1xx = $marc->field( "1.." );
+ my $n1xx = scalar @_1xx;
+ if ( $n1xx > 1 ) {
+ $self->warn( "1XX: Only one 1XX tag is allowed, but I found $n1xx of them." );
+ }
+
+ if ( not $marc->field( 245 ) ) {
+ $self->warn( "245: No 245 tag." );
+ }
+
+
+ my %field_seen;
+ my $rules = $self->{_rules};
+ for my $field ( $marc->fields ) {
+ my $tagno = $field->tag;
+ my $tagrules = $rules->{$tagno} or next;
+
+ if ( $tagrules->{NR} && $field_seen{$tagno} ) {
+ $self->warn( "$tagno: Field is not repeatable." );
+ }
+
+ if ( $tagno >= 10 ) {
+ for my $ind ( 1..2 ) {
+ my $indvalue = $field->indicator($ind);
+ if ( not ($indvalue =~ $tagrules->{"ind$ind" . "_regex"}) ) {
+ $self->warn(
+ "$tagno: Indicator $ind must be ",
+ $tagrules->{"ind$ind" . "_desc"},
+ " but it's \"$indvalue\""
+ );
+ }
+ }
+
+ my %sub_seen;
+ for my $subfield ( $field->subfields ) {
+ my ($code,$data) = @$subfield;
+
+ my $rule = $tagrules->{$code};
+ if ( not defined $rule ) {
+ $self->warn( "$tagno: Subfield _$code is not allowed." );
+ } elsif ( ($rule eq "NR") && $sub_seen{$code} ) {
+ $self->warn( "$tagno: Subfield _$code is not repeatable." );
+ }
+
+ if ( $data =~ /[\t\r\n]/ ) {
+ $self->warn( "$tagno: Subfield _$code has an invalid control character" );
+ }
+
+ ++$sub_seen{$code};
+ }
+ }
+
+ # Check to see if a check_xxx() function exists, and call it on the field if it does
+ my $checker = "check_$tagno";
+ if ( $self->can( $checker ) ) {
+ $self->$checker( $field );
+ }
+
+ ++$field_seen{$tagno};
+ } # for
+
+ return;
+}
+
+=head2 check_I<xxx>( $field )
+
+Various functions to check the different fields. If the function doesn't exist,
+then it doesn't get checked.
+
+=head2 check_245( $field )
+
+Makes sure that the 245 has an _a subfield.
+
+=cut
+
+sub check_245 {
+ my $self = shift;
+ my $field = shift;
+
+ if ( not $field->subfield( "a" ) ) {
+ $self->warn( "245: Must have a subfield _a." );
+ }
+}
+
+=head1 SEE ALSO
+
+Check the docs for L<MARC::Record>. All software links are there.
+
+=head1 TODO
+
+=over 4
+
+=item * ISBN and ISSN checking
+
+We can check the 020 and 022 fields with the C<Business::ISBN> and
+C<Business::ISSN> modules, respectively.
+
+=back
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+
+# Used only to read the stuff from __DATA__
+sub _read_rules() {
+ my $self = shift;
+
+ my $tell = tell(DATA); # Stash the position so we can reset it for next time
+
+ local $/ = "";
+ while ( my $tagblock = <DATA> ) {
+ my @lines = split( /\n/, $tagblock );
+ s/\s+$// for @lines;
+
+ next unless @lines >= 4; # Some of our entries are tag-only
+
+ my $tagline = shift @lines;
+ my @keyvals = split( /\s+/, $tagline, 3 );
+ my $tagno = shift @keyvals;
+ my $repeatable = shift @keyvals;
+
+ $self->_parse_tag_rules( $tagno, $repeatable, @lines );
+ } # while
+
+ # Set the pointer back to where it was, in case we do this again
+ seek( DATA, $tell, 0 );
+}
+
+sub _parse_tag_rules {
+ my $self = shift;
+ my $tagno = shift;
+ my $repeatable = shift;
+ my @lines = @_;
+
+ my $rules = ($self->{_rules}->{$tagno} ||= {});
+ $rules->{$repeatable} = $repeatable;
+
+ for ( @lines ) {
+ my @keyvals = split( /\s+/, $_, 3 );
+ my $key = shift @keyvals;
+ my $val = shift @keyvals;
+
+ $rules->{$key} = $val;
+
+ # Do magic for indicators
+ if ( $key =~ /^ind/ ) {
+ my $desc;
+ my $regex;
+
+ if ( $val eq "blank" ) {
+ $desc = "blank";
+ $regex = qr/^ $/;
+ } else {
+ $desc = _nice_list($val);
+ $val =~ s/^b/ /;
+ $regex = qr/^[$val]$/;
+ }
+
+ $rules->{$key."_desc"} = $desc;
+ $rules->{$key."_regex"} = $regex;
+ } # if indicator
+ } # while
+}
+
+
+sub _nice_list($) {
+ my $str = shift;
+
+ if ( $str =~ s/(\d)-(\d)/$1 thru $2/ ) {
+ return $str;
+ }
+
+ my @digits = split( //, $str );
+ $digits[0] = "blank" if $digits[0] eq "b";
+ my $last = pop @digits;
+ return join( ", ", @digits ) . " or $last";
+}
+
+sub _ind_regex($) {
+ my $str = shift;
+
+ return qr/^ $/ if $str eq "blank";
+
+ return qr/^[$str]$/;
+}
+
+
+1;
+
+__DATA__
+010 NR LIBRARY OF CONGRESS CONTROL NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR LC control number
+b R NUCMC control number
+z R Canceled/invalid LC control number
+8 R Field link and sequence number
+
+013 R PATENT CONTROL INFORMATION
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Number
+b NR Country
+c NR Type of number
+d R Date
+e R Status
+f R Party to document
+6 NR Linkage
+8 R Field link and sequence number
+
+015 R NATIONAL BIBLIOGRAPHY NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a R National bibliography number
+2 NR Source
+6 NR Linkage
+8 R Field link and sequence number
+
+016 R NATIONAL BIBLIOGRAPHIC AGENCY CONTROL NUMBER
+ind1 b7 National bibliographic agency
+ind2 blank Undefined
+a NR Record control number
+z R Canceled or invalid record control number
+2 NR Source
+8 R Field link and sequence number
+
+017 R COPYRIGHT OR LEGAL DEPOSIT NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a R Copyright registration number
+b NR Assigning agency
+2 NR Source
+6 NR Linkage
+8 R Field link and sequence number
+
+018 NR COPYRIGHT ARTICLE-FEE CODE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Copyright article-fee code
+6 NR Linkage
+8 R Field link and sequence number
+
+020 R INTERNATIONAL STANDARD BOOK NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR International Standard Book Number
+c NR Terms of availability
+z R Canceled/invalid ISBN
+6 NR Linkage
+8 R Field link and sequence number
+
+022 R INTERNATIONAL STANDARD SERIAL NUMBER
+ind1 b01 Level of international interest
+ind2 blank Undefined
+a NR International Standard Serial Number
+y R Incorrect ISSN
+z R Canceled ISSN
+6 NR Linkage
+8 R Field link and sequence number
+
+024 R OTHER STANDARD IDENTIFIER
+ind1 0123478 Type of standard number or code
+ind2 b01 Difference indicator
+a NR Standard number or code
+c NR Terms of availability
+d NR Additional codes following the standard number or code
+z R Canceled/invalid standard number or code
+2 NR Source of number or code
+6 NR Linkage
+8 R Field link and sequence number
+
+025 R OVERSEAS ACQUISITION NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a R Overseas acquisition number
+8 R Field link and sequence number
+
+026 R FINGERPRINT IDENTIFIER
+ind1 blank Undefined
+ind2 blank Undefined
+a R First and second groups of characters
+b R Third and fourth groups of characters
+c NR Date
+d R Number of volume or part
+e NR Unparsed fingerprint
+2 NR Source
+5 R Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+027 R STANDARD TECHNICAL REPORT NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Standard technical report number
+z R Canceled/invalid number
+6 NR Linkage
+8 R Field link and sequence number
+
+028 R PUBLISHER NUMBER
+ind1 012345 Type of publisher number
+ind2 0123 Note/added entry controller
+a NR Publisher number
+b NR Source
+6 NR Linkage
+8 R Field link and sequence number
+
+030 R CODEN DESIGNATION
+ind1 blank Undefined
+ind2 blank Undefined
+a NR CODEN
+z R Canceled/invalid CODEN
+6 NR Linkage
+8 R Field link and sequence number
+
+032 R POSTAL REGISTRATION NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Postal registration number
+b NR Source (agency assigning number)
+6 NR Linkage
+8 R Field link and sequence number
+
+033 R DATE/TIME AND PLACE OF AN EVENT
+ind1 b012 Type of date in subfield $a
+ind2 b012 Type of event
+a R Formatted date/time
+b R Geographic classification area code
+c R Geographic classification subarea code
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+034 R CODED CARTOGRAPHIC MATHEMATICAL DATA
+ind1 013 Type of scale
+ind2 b01 Type of ring
+a NR Category of scale
+b R Constant ratio linear horizontal scale
+c R Constant ratio linear vertical scale
+d NR Coordinates--westernmost longitude
+e NR Coordinates--easternmost longitude
+f NR Coordinates--northernmost latitude
+g NR Coordinates--southernmost latitude
+h R Angular scale
+j NR Declination--northern limit
+k NR Declination--southern limit
+m NR Right ascension--eastern limit
+n NR Right ascension--western limit
+p NR Equinox
+s R G-ring latitude
+t R G-ring longitude
+6 NR Linkage
+8 R Field link and sequence number
+
+035 R SYSTEM CONTROL NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR System control number
+z R Canceled/invalid control number
+6 NR Linkage
+8 R Field link and sequence number
+
+036 NR ORIGINAL STUDY NUMBER FOR COMPUTER DATA FILES
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Original study number
+b NR Source (agency assigning number)
+6 NR Linkage
+8 R Field link and sequence number
+
+037 R SOURCE OF ACQUISITION
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Stock number
+b NR Source of stock number/acquisition
+c R Terms of availability
+f R Form of issue
+g R Additional format characteristics
+n R Note
+6 NR Linkage
+8 R Field link and sequence number
+
+038 NR RECORD CONTENT LICENSOR
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Record content licensor
+6 NR Linkage
+8 R Field link and sequence number
+
+040 NR CATALOGING SOURCE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Original cataloging agency
+b NR Language of cataloging
+c NR Transcribing agency
+d R Modifying agency
+e NR Description conventions
+6 NR Linkage
+8 R Field link and sequence number
+
+041 R LANGUAGE CODE
+ind1 01 Translation indication
+ind2 b7 Source of code
+a R Language code of text/sound track or separate title
+b R Language code of summary or abstract/overprinted title or subtitle
+d R Language code of sung or spoken text
+e R Language code of librettos
+f R Language code of table of contents
+g R Language code of accompanying material other than librettos
+h R Language code of original and/or intermediate translations of text
+2 NR Source of code
+6 NR Linkage
+8 R Field link and sequence number
+
+042 NR AUTHENTICATION CODE
+ind1 blank Undefined
+ind2 blank Undefined
+a R Authentication code
+
+043 NR GEOGRAPHIC AREA CODE
+ind1 blank Undefined
+ind2 blank Undefined
+a R Geographic area code
+b R Local GAC code
+c R ISO code
+2 R Source of local code
+6 NR Linkage
+8 R Field link and sequence number
+
+044 NR COUNTRY OF PUBLISHING/PRODUCING ENTITY CODE
+ind1 blank Undefined
+ind2 blank Undefined
+a R Country of publishing/producing entity code
+b R Local subentity code
+c R ISO code
+2 R Source of local subentity code
+6 NR Linkage
+8 R Field link and sequence number
+
+045 NR TIME PERIOD OF CONTENT
+ind1 b012 Type of time period in subfield $b or $c
+ind2 blank Undefined
+a R Time period code
+b R Formatted 9999 B.C. through C.E. time period
+c R Formatted pre-9999 B.C. time period
+6 NR Linkage
+8 R Field link and sequence number
+
+046 R SPECIAL CODED DATES
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Type of date code
+b NR Date 1 (B.C. date)
+c NR Date 1 (C.E. date)
+d NR Date 2 (B.C. date)
+e NR Date 2 (C.E. date)
+j NR Date resource modified
+k NR Beginning or single date created
+l NR Ending date created
+m NR Beginning of date valid
+n NR End of date valid
+2 NR Source of date
+6 NR Linkage
+8 R Field link and sequence number
+
+047 NR FORM OF MUSICAL COMPOSITION CODE
+ind1 blank Undefined
+ind2 blank Undefined
+a R Form of musical composition code
+8 R Field link and sequence number
+
+048 R NUMBER OF MUSICAL INSTRUMENTS OR VOICES CODE
+ind1 blank Undefined
+ind2 blank Undefined
+a R Performer or ensemble
+b R Soloist
+8 R Field link and sequence number
+
+050 R LIBRARY OF CONGRESS CALL NUMBER
+ind1 b01 Existence in LC collection
+ind2 040123 Source of call number
+a R Classification number
+b NR Item number
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+051 R LIBRARY OF CONGRESS COPY, ISSUE, OFFPRINT STATEMENT
+ind1 blank Undefined
+ind2 b0123 Undefined
+a NR Classification number
+b NR Item number
+c NR Copy information
+8 R Field link and sequence number
+
+052 R GEOGRAPHIC CLASSIFICATION
+ind1 b17 Code source
+ind2 blank Undefined
+a NR Geographic classification area code
+b R Geographic classification subarea code
+d R Populated place name
+2 NR Code source
+6 NR Linkage
+8 R Field link and sequence number
+
+055 R CLASSIFICATION NUMBERS ASSIGNED IN CANADA
+ind1 b01 Existence in NLC collection
+ind2 0123456789 Type, completeness, source of class/call number
+a NR Classification number
+b NR Item number
+2 NR Source of call/class number
+8 R Field link and sequence number
+
+060 R NATIONAL LIBRARY OF MEDICINE CALL NUMBER
+ind1 b01 Existence in NLM collection
+ind2 040123 Source of call number
+a R Classification number
+b NR Item number
+8 R Field link and sequence number
+
+061 R NATIONAL LIBRARY OF MEDICINE COPY STATEMENT
+ind1 blank Undefined
+ind2 b0123 Undefined
+a R Classification number
+b NR Item number
+c NR Copy information
+8 R Field link and sequence number
+
+066 NR CHARACTER SETS PRESENT
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Primary G0 character set
+b NR Primary G1 character set
+c R Alternate G0 or G1 character set
+
+070 R NATIONAL AGRICULTURAL LIBRARY CALL NUMBER
+ind1 01 Existence in NAL collection
+ind2 b0123 Undefined
+a R Classification number
+b NR Item number
+8 R Field link and sequence number
+
+071 R NATIONAL AGRICULTURAL LIBRARY COPY STATEMENT
+ind1 blank Undefined
+ind2 b0123 Undefined
+a R Classification number
+b NR Item number
+c NR Copy information
+8 R Field link and sequence number
+
+072 R SUBJECT CATEGORY CODE
+ind1 blank Undefined
+ind2 07 Code source
+a NR Subject category code
+x R Subject category code subdivision
+2 NR Code source
+6 NR Linkage
+8 R Field link and sequence number
+
+074 R GPO ITEM NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR GPO item number
+z R Canceled/invalid GPO item number
+8 R Field link and sequence number
+
+080 R UNIVERSAL DECIMAL CLASSIFICATION NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Universal Decimal Classification number
+b NR Item number
+x R Common auxiliary subdivision
+2 NR Edition identifier
+6 NR Linkage
+8 R Field link and sequence number
+
+082 R DEWEY DECIMAL CLASSIFICATION NUMBER
+ind1 01 Type of edition
+ind2 b04 Source of classification number
+a R Classification number
+b NR Item number
+2 NR Edition number
+6 NR Linkage
+8 R Field link and sequence number
+
+084 R OTHER CLASSIFICATION NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a R Classification number
+b NR Item number
+2 NR Source of number
+6 NR Linkage
+8 R Field link and sequence number
+
+086 R GOVERNMENT DOCUMENT CLASSIFICATION NUMBER
+ind1 b01 Number source
+ind2 blank Undefined
+a NR Classification number
+z R Canceled/invalid classification number
+2 NR Number source
+6 NR Linkage
+8 R Field link and sequence number
+
+088 R REPORT NUMBER
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Report number
+z R Canceled/invalid report number
+6 NR Linkage
+8 R Field link and sequence number
+
+100 NR MAIN ENTRY--PERSONAL NAME
+ind1 013 Type of personal name entry element
+ind2 blank Undefined
+a NR Personal name
+b NR Numeration
+c R Titles and other words associated with a name
+d NR Dates associated with a name
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+j R Attribution qualifier
+k R Form subheading
+l NR Language of a work
+n R Number of part/section of a work
+p R Name of part/section of a work
+q NR Fuller form of name
+t NR Title of a work
+u NR Affiliation
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+110 NR MAIN ENTRY--CORPORATE NAME
+ind1 012 Type of corporate name entry element
+ind2 blank Undefined
+a NR Corporate name or jurisdiction name as entry element
+b R Subordinate unit
+c NR Location of meeting
+d R Date of meeting or treaty signing
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+k R Form subheading
+l NR Language of a work
+n R Number of part/section/meeting
+p R Name of part/section of a work
+t NR Title of a work
+u NR Affiliation
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+111 NR MAIN ENTRY--MEETING NAME
+ind1 012 Type of meeting name entry element
+ind2 blank Undefined
+a NR Meeting name or jurisdiction name as entry element
+c NR Location of meeting
+d NR Date of meeting
+e R Subordinate unit
+f NR Date of a work
+g NR Miscellaneous information
+k R Form subheading
+l NR Language of a work
+n R Number of part/section/meeting
+p R Name of part/section of a work
+q NR Name of meeting following jurisdiction name entry element
+t NR Title of a work
+u NR Affiliation
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+130 NR MAIN ENTRY--UNIFORM TITLE
+ind1 0-9 Nonfiling characters
+ind2 blank Undefined
+a NR Uniform title
+d R Date of treaty signing
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+t NR Title of a work
+6 NR Linkage
+8 R Field link and sequence number
+
+210 R ABBREVIATED TITLE
+ind1 01 Title added entry
+ind2 b0 Type
+a NR Abbreviated title
+b NR Qualifying information
+2 R Source
+6 NR Linkage
+8 R Field link and sequence number
+
+222 R KEY TITLE
+ind1 b0123 Specifies whether variant title and/or added entry is required
+ind2 0-9 Nonfiling characters
+a NR Key title
+b NR Qualifying information
+6 NR Linkage
+8 R Field link and sequence number
+
+240 NR UNIFORM TITLE
+ind1 01 Uniform title printed or displayed
+ind2 0-9 Nonfiling characters
+a NR Uniform title
+d R Date of treaty signing
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+6 NR Linkage
+8 R Field link and sequence number
+
+242 R TRANSLATION OF TITLE BY CATALOGING AGENCY
+ind1 01 Title added entry
+ind2 0-9 Nonfiling characters
+a NR Title
+b NR Remainder of title
+c NR Statement of responsibility, etc.
+h NR Medium
+n R Number of part/section of a work
+p R Name of part/section of a work
+y NR Language code of translated title
+6 NR Linkage
+8 R Field link and sequence number
+
+243 NR COLLECTIVE UNIFORM TITLE
+ind1 01 Uniform title printed or displayed
+ind2 0-9 Nonfiling characters
+a NR Uniform title
+d R Date of treaty signing
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+6 NR Linkage
+8 R Field link and sequence number
+
+245 NR TITLE STATEMENT
+ind1 01 Title added entry
+ind2 0-9 Nonfiling characters
+a NR Title
+b NR Remainder of title
+c NR Statement of responsibility, etc.
+f NR Inclusive dates
+g NR Bulk dates
+h NR Medium
+k R Form
+n R Number of part/section of a work
+p R Name of part/section of a work
+s NR Version
+6 NR Linkage
+8 R Field link and sequence number
+
+246 R VARYING FORM OF TITLE
+ind1 0123 Note/added entry controller
+ind2 b012345678 Type of title
+a NR Title proper/short title
+b NR Remainder of title
+f NR Date or sequential designation
+g NR Miscellaneous information
+h NR Medium
+i NR Display text
+n R Number of part/section of a work
+p R Name of part/section of a work
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+247 R FORMER TITLE
+ind1 01 Title added entry
+ind2 01 Note controller
+a NR Title
+b NR Remainder of title
+f NR Date or sequential designation
+g NR Miscellaneous information
+h NR Medium
+n R Number of part/section of a work
+p R Name of part/section of a work
+x NR International Standard Serial Number
+6 NR Linkage
+8 R Field link and sequence number
+
+250 NR EDITION STATEMENT
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Edition statement
+b NR Remainder of edition statement
+6 NR Linkage
+8 R Field link and sequence number
+
+254 NR MUSICAL PRESENTATION STATEMENT
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Musical presentation statement
+6 NR Linkage
+8 R Field link and sequence number
+
+255 R CARTOGRAPHIC MATHEMATICAL DATA
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Statement of scale
+b NR Statement of projection
+c NR Statement of coordinates
+d NR Statement of zone
+e NR Statement of equinox
+f NR Outer G-ring coordinate pairs
+g NR Exclusion G-ring coordinate pairs
+6 NR Linkage
+8 R Field link and sequence number
+
+256 NR COMPUTER FILE CHARACTERISTICS
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Computer file characteristics
+6 NR Linkage
+8 R Field link and sequence number
+
+257 NR COUNTRY OF PRODUCING ENTITY FOR ARCHIVAL FILMS
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Country of producing entity
+6 NR Linkage
+8 R Field link and sequence number
+
+260 R PUBLICATION, DISTRIBUTION, ETC. (IMPRINT)
+ind1 b23 Sequence of publishing statements
+ind2 b0101 Undefined
+a R Place of publication, distribution, etc.
+b R Name of publisher, distributor, etc.
+c R Date of publication, distribution, etc.
+d NR Plate or publisher's number for music (Pre-AACR 2)
+e NR Place of manufacture
+f NR Manufacturer
+g NR Date of manufacture
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+261 NR IMPRINT STATEMENT FOR FILMS (Pre-AACR 1 Revised)
+ind1 blank Undefined
+ind2 blank Undefined
+a R Producing company
+b R Releasing company (primary distributor)
+d R Date of production, release, etc.
+e R Contractual producer
+f R Place of production, release, etc.
+6 NR Linkage
+8 R Field link and sequence number
+
+262 NR IMPRINT STATEMENT FOR SOUND RECORDINGS (Pre-AACR 2)
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Place of production, release, etc.
+b NR Publisher or trade name
+c NR Date of production, release, etc.
+k NR Serial identification
+l NR Matrix and/or take number
+6 NR Linkage
+8 R Field link and sequence number
+
+263 NR PROJECTED PUBLICATION DATE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Projected publication date
+6 NR Linkage
+8 R Field link and sequence number
+
+270 R ADDRESS
+ind1 b12 Level
+ind2 b07 Type of address
+a R Address
+b NR City
+c NR State or province
+d NR Country
+e NR Postal code
+f NR Terms preceding attention name
+g NR Attention name
+h NR Attention position
+i NR Type of address
+j R Specialized telephone number
+k R Telephone number
+l R Fax number
+m R Electronic mail address
+n R TDD or TTY number
+p R Contact person
+q R Title of contact person
+r R Hours
+z R Public note
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+300 R PHYSICAL DESCRIPTION
+ind1 blank Undefined
+ind2 blank Undefined
+a R Extent
+b NR Other physical details
+c R Dimensions
+e NR Accompanying material
+f R Type of unit
+g R Size of unit
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+306 NR PLAYING TIME
+ind1 blank Undefined
+ind2 blank Undefined
+a R Playing time
+6 NR Linkage
+8 R Field link and sequence number
+
+307 R HOURS, ETC.
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Hours
+b NR Additional information
+6 NR Linkage
+8 R Field link and sequence number
+
+310 NR CURRENT PUBLICATION FREQUENCY
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Current publication frequency
+b NR Date of current publication frequency
+6 NR Linkage
+8 R Field link and sequence number
+
+321 R FORMER PUBLICATION FREQUENCY
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Former publication frequency
+b NR Dates of former publication frequency
+6 NR Linkage
+8 R Field link and sequence number
+
+340 R PHYSICAL MEDIUM
+ind1 blank Undefined
+ind2 blank Undefined
+a R Material base and configuration
+b R Dimensions
+c R Materials applied to surface
+d R Information recording technique
+e R Support
+f R Production rate/ratio
+h R Location within medium
+i R Technical specifications of medium
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+342 R GEOSPATIAL REFERENCE DATA
+ind1 01 Geospatial reference dimension
+ind2 012345678 Geospatial reference method
+a NR Name
+b NR Coordinate or distance units
+c NR Latitude resolution
+d NR Longitude resolution
+e R Standard parallel or oblique line latitude
+f R Oblique line longitude
+g NR Longitude of central meridian or projection center
+h NR Latitude of projection origin or projection center
+i NR False easting
+j NR False northing
+k NR Scale factor
+l NR Height of perspective point above surface
+m NR Azimuthal angle
+o NR Landsat number and path number
+p NR Zone identifier
+q NR Ellipsoid name
+r NR Semi-major axis
+s NR Denominator of flattening ratio
+t NR Vertical resolution
+u NR Vertical encoding method
+v NR Local planar, local, or other projection or grid description
+w NR Local planar or local georeference information
+2 NR Reference method used
+6 NR Linkage
+8 R Field link and sequence number
+
+343 R PLANAR COORDINATE DATA
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Planar coordinate encoding method
+b NR Planar distance units
+c NR Abscissa resolution
+d NR Ordinate resolution
+e NR Distance resolution
+f NR Bearing resolution
+g NR Bearing units
+h NR Bearing reference direction
+i NR Bearing reference meridian
+6 NR Linkage
+8 R Field link and sequence number
+
+351 R ORGANIZATION AND ARRANGEMENT OF MATERIALS
+ind1 blank Undefined
+ind2 blank Undefined
+a R Organization
+b R Arrangement
+c NR Hierarchical level
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+352 R DIGITAL GRAPHIC REPRESENTATION
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Direct reference method
+b R Object type
+c R Object count
+d NR Row count
+e NR Column count
+f NR Vertical count
+g NR VPF topology level
+i NR Indirect reference description
+6 NR Linkage
+8 R Field link and sequence number
+
+355 R SECURITY CLASSIFICATION CONTROL
+ind1 0123458 Controlled element
+ind2 blank Undefined
+a NR Security classification
+b R Handling instructions
+c R External dissemination information
+d NR Downgrading or declassification event
+e NR Classification system
+f NR Country of origin code
+g NR Downgrading date
+h NR Declassification date
+j R Authorization
+6 NR Linkage
+8 R Field link and sequence number
+
+357 NR ORIGINATOR DISSEMINATION CONTROL
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Originator control term
+b R Originating agency
+c R Authorized recipients of material
+g R Other restrictions
+6 NR Linkage
+8 R Field link and sequence number
+
+362 R DATES OF PUBLICATION AND/OR SEQUENTIAL DESIGNATION
+ind1 01 Format of date
+ind2 blank Undefined
+a NR Dates of publication and/or sequential designation
+z NR Source of information
+6 NR Linkage
+8 R Field link and sequence number
+
+400 R SERIES STATEMENT/ADDED ENTRY--PERSONAL NAME
+ind1 013 Type of personal name entry element
+ind2 01 Pronoun represents main entry
+a NR Personal name
+b NR Numeration
+c R Titles and other words associated with a name
+d NR Dates associated with a name
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+k R Form subheading
+l NR Language of a work
+n R Number of part/section of a work
+p R Name of part/section of a work
+t NR Title of a work
+u NR Affiliation
+v NR Volume number/sequential designation
+x NR International Standard Serial Number
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+410 R SERIES STATEMENT/ADDED ENTRY--CORPORATE NAME
+ind1 012 Type of corporate name entry element
+ind2 01 Pronoun represents main entry
+a NR Corporate name or jurisdiction name as entry element
+b R Subordinate unit
+c NR Location of meeting
+d R Date of meeting or treaty signing
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+k R Form subheading
+l NR Language of a work
+n R Number of part/section/meeting
+p R Name of part/section of a work
+t NR Title of a work
+u NR Affiliation
+v NR Volume number/sequential designation
+x NR International Standard Serial Number
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+411 R SERIES STATEMENT/ADDED ENTRY--MEETING NAME
+ind1 012 Type of meeting name entry element
+ind2 01 Pronoun represents main entry
+a NR Meeting name or jurisdiction name as entry element
+c NR Location of meeting
+d NR Date of meeting
+e R Subordinate unit
+f NR Date of a work
+g NR Miscellaneous information
+k R Form subheading
+l NR Language of a work
+n R Number of part/section/meeting
+p R Name of part/section of a work
+q NR Name of meeting following jurisdiction name entry element
+t NR Title of a work
+u NR Affiliation
+v NR Volume number/sequential designation
+x NR International Standard Serial Number
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+440 R SERIES STATEMENT/ADDED ENTRY--TITLE
+ind1 blank Undefined
+ind2 0-9 Nonfiling characters
+a NR Title
+n R Number of part/section of a work
+p R Name of part/section of a work
+v NR Volume number/sequential designation
+x NR International Standard Serial Number
+6 NR Linkage
+8 R Field link and sequence number
+
+490 R SERIES STATEMENT
+ind1 01 Specifies whether series is traced
+ind2 blank Undefined
+a R Series statement
+l NR Library of Congress call number
+v R Volume number/sequential designation
+x NR International Standard Serial Number
+6 NR Linkage
+8 R Field link and sequence number
+
+500 R GENERAL NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR General note
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+501 R WITH NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR With note
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+502 R DISSERTATION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Dissertation note
+6 NR Linkage
+8 R Field link and sequence number
+
+504 R BIBLIOGRAPHY, ETC. NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Bibliography, etc. note
+b NR Number of references
+6 NR Linkage
+8 R Field link and sequence number
+
+505 R FORMATTED CONTENTS NOTE
+ind1 0128 Display constant controller
+ind2 b0 Level of content designation
+a NR Formatted contents note
+g R Miscellaneous information
+r R Statement of responsibility
+t R Title
+u R Uniform Resource Identifier
+6 NR Linkage
+8 R Field link and sequence number
+
+506 R RESTRICTIONS ON ACCESS NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Terms governing access
+b R Jurisdiction
+c R Physical access provisions
+d R Authorized users
+e R Authorization
+u R Uniform Resource Identifier
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+507 NR SCALE NOTE FOR GRAPHIC MATERIAL
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Representative fraction of scale note
+b NR Remainder of scale note
+6 NR Linkage
+8 R Field link and sequence number
+
+508 R CREATION/PRODUCTION CREDITS NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Creation/production credits note
+6 NR Linkage
+8 R Field link and sequence number
+
+510 R CITATION/REFERENCES NOTE
+ind1 01234 Coverage/location in source
+ind2 blank Undefined
+a NR Name of source
+b NR Coverage of source
+c NR Location within source
+x NR International Standard Serial Number
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+511 R PARTICIPANT OR PERFORMER NOTE
+ind1 01 Display constant controller
+ind2 blank Undefined
+a NR Participant or performer note
+6 NR Linkage
+8 R Field link and sequence number
+
+513 R TYPE OF REPORT AND PERIOD COVERED NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Type of report
+b NR Period covered
+6 NR Linkage
+8 R Field link and sequence number
+
+514 NR DATA QUALITY NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Attribute accuracy report
+b R Attribute accuracy value
+c R Attribute accuracy explanation
+d NR Logical consistency report
+e NR Completeness report
+f NR Horizontal position accuracy report
+g R Horizontal position accuracy value
+h R Horizontal position accuracy explanation
+i NR Vertical positional accuracy report
+j R Vertical positional accuracy value
+k R Vertical positional accuracy explanation
+m NR Cloud cover
+u R Uniform Resource Identifier
+z R Display note
+6 NR Linkage
+8 R Field link and sequence number
+
+515 R NUMBERING PECULIARITIES NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Numbering peculiarities note
+6 NR Linkage
+8 R Field link and sequence number
+
+516 R TYPE OF COMPUTER FILE OR DATA NOTE
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Type of computer file or data note
+6 NR Linkage
+8 R Field link and sequence number
+
+518 R DATE/TIME AND PLACE OF AN EVENT NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Date/time and place of an event note
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+520 R SUMMARY, ETC.
+ind1 b01238 Display constant controller
+ind2 blank Undefined
+a NR Summary, etc. note
+b NR Expansion of summary note
+u R Uniform Resource Identifier
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+521 R TARGET AUDIENCE NOTE
+ind1 b012348 Display constant controller
+ind2 blank Undefined
+a R Target audience note
+b NR Source
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+522 R GEOGRAPHIC COVERAGE NOTE
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Geographic coverage note
+6 NR Linkage
+8 R Field link and sequence number
+
+524 R PREFERRED CITATION OF DESCRIBED MATERIALS NOTE
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Preferred citation of described materials note
+2 NR Source of schema used
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+525 R SUPPLEMENT NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Supplement note
+6 NR Linkage
+8 R Field link and sequence number
+
+526 R STUDY PROGRAM INFORMATION NOTE
+ind1 08 Display constant controller
+ind2 blank Undefined
+a NR Program name
+b NR Interest level
+c NR Reading level
+d NR Title point value
+i NR Display text
+x R Nonpublic note
+z R Public note
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+530 R ADDITIONAL PHYSICAL FORM AVAILABLE NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Additional physical form available note
+b NR Availability source
+c NR Availability conditions
+d NR Order number
+u R Uniform Resource Identifier
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+533 R REPRODUCTION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Type of reproduction
+b R Place of reproduction
+c R Agency responsible for reproduction
+d NR Date of reproduction
+e NR Physical description of reproduction
+f R Series statement of reproduction
+m R Dates and/or sequential designation of issues reproduced
+n R Note about reproduction
+3 NR Materials specified
+6 NR Linkage
+7 NR Fixed-length data elements of reproduction
+8 R Field link and sequence number
+
+534 R ORIGINAL VERSION NOTE
+ind1 blank Undefined
+ind2 b01 Undefined
+a NR Main entry of original
+b NR Edition statement of original
+c NR Publication, distribution, etc. of original
+e NR Physical description, etc. of original
+f R Series statement of original
+k R Key title of original
+l NR Location of original
+m NR Material specific details
+n R Note about original
+p NR Introductory phrase
+t NR Title statement of original
+x R International Standard Serial Number
+z R International Standard Book Number
+6 NR Linkage
+8 R Field link and sequence number
+
+535 R LOCATION OF ORIGINALS/DUPLICATES NOTE
+ind1 12 Additional information about custodian
+ind2 blank Undefined
+a NR Custodian
+b R Postal address
+c R Country
+d R Telecommunications address
+g NR Repository location code
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+536 R FUNDING INFORMATION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Text of note
+b R Contract number
+c R Grant number
+d R Undifferentiated number
+e R Program element number
+f R Project number
+g R Task number
+h R Work unit number
+6 NR Linkage
+8 R Field link and sequence number
+
+538 R SYSTEM DETAILS NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR System details note
+6 NR Linkage
+8 R Field link and sequence number
+
+540 R TERMS GOVERNING USE AND REPRODUCTION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Terms governing use and reproduction
+b NR Jurisdiction
+c NR Authorization
+d NR Authorized users
+u R Uniform Resource Identifier
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+541 R IMMEDIATE SOURCE OF ACQUISITION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Source of acquisition
+b NR Address
+c NR Method of acquisition
+d NR Date of acquisition
+e NR Accession number
+f NR Owner
+h NR Purchase price
+n R Extent
+o R Type of unit
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+544 R LOCATION OF OTHER ARCHIVAL MATERIALS NOTE
+ind1 b01 Relationship
+ind2 blank Undefined
+a R Custodian
+b R Address
+c R Country
+d R Title
+e R Provenance
+n R Note
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+545 R BIOGRAPHICAL OR HISTORICAL DATA
+ind1 b01 Type of data
+ind2 blank Undefined
+a NR Biographical or historical note
+b NR Expansion
+u R Uniform Resource Identifier
+6 NR Linkage
+8 R Field link and sequence number
+
+546 R LANGUAGE NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Language note
+b R Information code or alphabet
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+547 R FORMER TITLE COMPLEXITY NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Former title complexity note
+6 NR Linkage
+8 R Field link and sequence number
+
+550 R ISSUING BODY NOTE
+ind1 blank Undefined
+ind2 b01 Undefined
+a NR Issuing body note
+6 NR Linkage
+8 R Field link and sequence number
+
+552 R ENTITY AND ATTRIBUTE INFORMATION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Entity type label
+b NR Entity type definition and source
+c NR Attribute label
+d NR Attribute definition and source
+e R Enumerated domain value
+f R Enumerated domain value definition and source
+g NR Range domain minimum and maximum
+h NR Codeset name and source
+i NR Unrepresentable domain
+j NR Attribute units of measurement and resolution
+k NR Beginning date and ending date of attribute values
+l NR Attribute value accuracy
+m NR Attribute value accuracy explanation
+n NR Attribute measurement frequency
+o R Entity and attribute overview
+p R Entity and attribute detail citation
+u R Uniform Resource Identifier
+z R Display note
+6 NR Linkage
+8 R Field link and sequence number
+
+555 R CUMULATIVE INDEX/FINDING AIDS NOTE
+ind1 b08 Display constant controller
+ind2 blank Undefined
+a NR Cumulative index/finding aids note
+b R Availability source
+c NR Degree of control
+d NR Bibliographic reference
+u R Uniform Resource Identifier
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+556 R INFORMATION ABOUT DOCUMENTATION NOTE
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Information about documentation note
+z R International Standard Book Number
+6 NR Linkage
+8 R Field link and sequence number
+
+561 R OWNERSHIP AND CUSTODIAL HISTORY
+ind1 blank Undefined
+ind2 blank Undefined
+a NR History
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+562 R COPY AND VERSION IDENTIFICATION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a R Identifying markings
+b R Copy identification
+c R Version identification
+d R Presentation format
+e R Number of copies
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+563 R BINDING INFORMATION
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Binding note
+u R Uniform Resource Identifier
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+565 R CASE FILE CHARACTERISTICS NOTE
+ind1 b08 Display constant controller
+ind2 blank Undefined
+a NR Number of cases/variables
+b R Name of variable
+c R Unit of analysis
+d R Universe of data
+e R Filing scheme or code
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+567 R METHODOLOGY NOTE
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Methodology note
+6 NR Linkage
+8 R Field link and sequence number
+
+580 R LINKING ENTRY COMPLEXITY NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Linking entry complexity note
+6 NR Linkage
+8 R Field link and sequence number
+
+581 R PUBLICATIONS ABOUT DESCRIBED MATERIALS NOTE
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Publications about described materials note
+z R International Standard Book Number
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+583 R ACTION NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Action
+b R Action identification
+c R Time/date of action
+d R Action interval
+e R Contingency for action
+f R Authorization
+h R Jurisdiction
+i R Method of action
+j R Site of action
+k R Action agent
+l R Status
+n R Extent
+o R Type of unit
+u R Uniform Resource Identifier
+x R Nonpublic note
+z R Public note
+2 NR Source of term
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+584 R ACCUMULATION AND FREQUENCY OF USE NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a R Accumulation
+b R Frequency of use
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+585 R EXHIBITIONS NOTE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Exhibitions note
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+586 R AWARDS NOTE
+ind1 b8 Display constant controller
+ind2 blank Undefined
+a NR Awards note
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+600 R SUBJECT ADDED ENTRY--PERSONAL NAME
+ind1 013 Type of personal name entry element
+ind2 01234567 Thesaurus
+a NR Personal name
+b NR Numeration
+c R Titles and other words associated with a name
+d NR Dates associated with a name
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+j R Attribution qualifier
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+q NR Fuller form of name
+r NR Key for music
+s NR Version
+t NR Title of a work
+u NR Affiliation
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+610 R SUBJECT ADDED ENTRY--CORPORATE NAME
+ind1 012 Type of corporate name entry element
+ind2 01234567 Thesaurus
+a NR Corporate name or jurisdiction name as entry element
+b R Subordinate unit
+c NR Location of meeting
+d R Date of meeting or treaty signing
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section/meeting
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+t NR Title of a work
+u NR Affiliation
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+611 R SUBJECT ADDED ENTRY--MEETING NAME
+ind1 012 Type of meeting name entry element
+ind2 01234567 Thesaurus
+a NR Meeting name or jurisdiction name as entry element
+c NR Location of meeting
+d NR Date of meeting
+e R Subordinate unit
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+n R Number of part/section/meeting
+p R Name of part/section of a work
+q NR Name of meeting following jurisdiction name entry element
+s NR Version
+t NR Title of a work
+u NR Affiliation
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+630 R SUBJECT ADDED ENTRY--UNIFORM TITLE
+ind1 0-9 Nonfiling characters
+ind2 01234567 Thesaurus
+a NR Uniform title
+d R Date of treaty signing
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+t NR Title of a work
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+648 R SUBJECT ADDED ENTRY--CHRONOLOGICAL TERM
+ind1 blank Undefined
+ind2 01234567 Thesaurus
+a NR Chronological term
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+650 R SUBJECT ADDED ENTRY--TOPICAL TERM
+ind1 b012 Level of subject
+ind2 01234567 Thesaurus
+a NR Topical term or geographic name as entry element
+b NR Topical term following geographic name as entry element
+c NR Location of event
+d NR Active dates
+e NR Relator term
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+651 R SUBJECT ADDED ENTRY--GEOGRAPHIC NAME
+ind1 blank Undefined
+ind2 01234567 Thesaurus
+a NR Geographic name
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+653 R INDEX TERM--UNCONTROLLED
+ind1 b012 Level of index term
+ind2 blank Undefined
+a R Uncontrolled term
+6 NR Linkage
+8 R Field link and sequence number
+
+654 R SUBJECT ADDED ENTRY--FACETED TOPICAL TERMS
+ind1 b012 Level of subject
+ind2 blank Undefined
+a R Focus term
+b R Non-focus term
+c R Facet/hierarchy designation
+v R Form subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of heading or term
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+655 R INDEX TERM--GENRE/FORM
+ind1 b0 Type of heading
+ind2 01234567 Thesaurus
+a NR Genre/form data or focus term
+b R Non-focus term
+c R Facet/hierarchy designation
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of term
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+656 R INDEX TERM--OCCUPATION
+ind1 blank Undefined
+ind2 7 Source of term
+a NR Occupation
+k NR Form
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of term
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+657 R INDEX TERM--FUNCTION
+ind1 blank Undefined
+ind2 7 Source of term
+a NR Function
+v R Form subdivision
+x R General subdivision
+y R Chronological subdivision
+z R Geographic subdivision
+2 NR Source of term
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+658 R INDEX TERM--CURRICULUM OBJECTIVE
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Main curriculum objective
+b R Subordinate curriculum objective
+c NR Curriculum code
+d NR Correlation factor
+2 NR Source of term or code
+6 NR Linkage
+8 R Field link and sequence number
+
+700 R ADDED ENTRY--PERSONAL NAME
+ind1 013 Type of personal name entry element
+ind2 b2 Type of added entry
+a NR Personal name
+b NR Numeration
+c R Titles and other words associated with a name
+d NR Dates associated with a name
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+j R Attribution qualifier
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+q NR Fuller form of name
+r NR Key for music
+s NR Version
+t NR Title of a work
+u NR Affiliation
+x NR International Standard Serial Number
+3 NR Materials specified
+4 R Relator code
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+710 R ADDED ENTRY--CORPORATE NAME
+ind1 012 Type of corporate name entry element
+ind2 b2 Type of added entry
+a NR Corporate name or jurisdiction name as entry element
+b R Subordinate unit
+c NR Location of meeting
+d R Date of meeting or treaty signing
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section/meeting
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+t NR Title of a work
+u NR Affiliation
+x NR International Standard Serial Number
+3 NR Materials specified
+4 R Relator code
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+711 R ADDED ENTRY--MEETING NAME
+ind1 012 Type of meeting name entry element
+ind2 b2 Type of added entry
+a NR Meeting name or jurisdiction name as entry element
+c NR Location of meeting
+d NR Date of meeting
+e R Subordinate unit
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+n R Number of part/section/meeting
+p R Name of part/section of a work
+q NR Name of meeting following jurisdiction name entry element
+s NR Version
+t NR Title of a work
+u NR Affiliation
+x NR International Standard Serial Number
+3 NR Materials specified
+4 R Relator code
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+720 R ADDED ENTRY--UNCONTROLLED NAME
+ind1 b12 Type of name
+ind2 blank Undefined
+a NR Name
+e R Relator term
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+730 R ADDED ENTRY--UNIFORM TITLE
+ind1 0-9 Nonfiling characters
+ind2 b2 Type of added entry
+a NR Uniform title
+d R Date of treaty signing
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+t NR Title of a work
+x NR International Standard Serial Number
+3 NR Materials specified
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+740 R ADDED ENTRY--UNCONTROLLED RELATED/ANALYTICAL TITLE
+ind1 0-9 Nonfiling characters
+ind2 b2 Type of added entry
+a NR Uncontrolled related/analytical title
+h NR Medium
+n R Number of part/section of a work
+p R Name of part/section of a work
+5 NR Institution to which field applies
+6 NR Linkage
+8 R Field link and sequence number
+
+752 R ADDED ENTRY--HIERARCHICAL PLACE NAME
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Country
+b NR State, province, territory
+c NR County, region, islands area
+d NR City
+6 NR Linkage
+8 R Field link and sequence number
+
+753 R SYSTEM DETAILS ACCESS TO COMPUTER FILES
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Make and model of machine
+b NR Programming language
+c NR Operating system
+6 NR Linkage
+8 R Field link and sequence number
+
+754 R ADDED ENTRY--TAXONOMIC IDENTIFICATION
+ind1 blank Undefined
+ind2 blank Undefined
+a R Taxonomic name
+c R Taxonomic category
+d R Common or alternative name
+x R Non-public note
+z R Public note
+2 NR Source of taxonomic identification
+6 NR Linkage
+8 R Field link and sequence number
+
+760 R MAIN SERIES ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+m NR Material-specific details
+n R Note
+o R Other item identifier
+s NR Uniform title
+t NR Title
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+762 R SUBSERIES ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+m NR Material-specific details
+n R Note
+o R Other item identifier
+s NR Uniform title
+t NR Title
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+765 R ORIGINAL LANGUAGE ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+767 R TRANSLATION ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+770 R SUPPLEMENT/SPECIAL ISSUE ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+772 R SUPPLEMENT PARENT ENTRY
+ind1 01 Note controller
+ind2 b08 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Stan dard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+773 R HOST ITEM ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+p NR Abbreviated title
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+3 NR Materials specified
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+774 R CONSTITUENT UNIT ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+775 R OTHER EDITION ENTRY
+ind1 01 Note controller
+ind2 b8012 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+e NR Language code
+f NR Country code
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+776 R ADDITIONAL PHYSICAL FORM ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+777 R ISSUED WITH ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+s NR Uniform title
+t NR Title
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+780 R PRECEDING ENTRY
+ind1 01 Note controller
+ind2 01234567 Type of relationship
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+785 R SUCCEEDING ENTRY
+ind1 01 Note controller
+ind2 012345678 Type of relationship
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standa rd Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+786 R DATA SOURCE ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+j NR Period of content
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+p NR Abbreviated title
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+v NR Source Contribution
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+787 R NONSPECIFIC RELATIONSHIP ENTRY
+ind1 01 Note controller
+ind2 b8 Display constant controller
+a NR Main entry heading
+b NR Edition
+c NR Qualifying information
+d NR Place, publisher, and date of publication
+g R Relationship information
+h NR Physical description
+i NR Display text
+k R Series data for related item
+m NR Material-specific details
+n R Note
+o R Other item identifier
+r R Report number
+s NR Uniform title
+t NR Title
+u NR Standard Technical Report Number
+w R Record control number
+x NR International Standard Serial Number
+y NR CODEN designation
+z R International Standard Book Number
+6 NR Linkage
+7 NR Control subfield
+8 R Field link and sequence number
+
+800 R SERIES ADDED ENTRY--PERSONAL NAME
+ind1 013 Type of personal name entry element
+ind2 blank Undefined
+a NR Personal name
+b NR Numeration
+c R Titles and other words associated with a name
+d NR Dates associated with a name
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+j R Attribution qualifier
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+q NR Fuller form of name
+r NR Key for music
+s NR Version
+t NR Title of a work
+u NR Affiliation
+v NR Volume/sequential designation
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+810 R SERIES ADDED ENTRY--CORPORATE NAME
+ind1 012 Type of corporate name entry element
+ind2 blank Undefined
+a NR Corporate name or jurisdiction name as entry element
+b R Subordinate unit
+c NR Location of meeting
+d R Date of meeting or treaty signing
+e R Relator term
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section/meeting
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+t NR Title of a work
+u NR Affiliation
+v NR Volume/sequential designation
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+811 R SERIES ADDED ENTRY--MEETING NAME
+ind1 012 Type of meeting name entry element
+ind2 blank Undefined
+a NR Meeting name or jurisdiction name as entry element
+c NR Location of meeting
+d NR Date of meeting
+e R Subordinate unit
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+n R Number of part/section/meeting
+p R Name of part/section of a work
+q NR Name of meeting following jurisdiction name entry element
+s NR Version
+t NR Title of a work
+u NR Affiliation
+v NR Volume/sequential designation
+4 R Relator code
+6 NR Linkage
+8 R Field link and sequence number
+
+830 R SERIES ADDED ENTRY--UNIFORM TITLE
+ind1 blank Undefined
+ind2 0-9 Nonfiling characters
+a NR Uniform title
+d R Date of treaty signing
+f NR Date of a work
+g NR Miscellaneous information
+h NR Medium
+k R Form subheading
+l NR Language of a work
+m R Medium of performance for music
+n R Number of part/section of a work
+o NR Arranged statement for music
+p R Name of part/section of a work
+r NR Key for music
+s NR Version
+t NR Title of a work
+v NR Volume/sequential designation
+6 NR Linkage
+8 R Field link and sequence number
+
+841 NR HOLDINGS CODED DATA VALUES
+
+842 NR TEXTUAL PHYSICAL FORM DESIGNATOR
+
+843 R REPRODUCTION NOTE
+
+844 NR NAME OF UNIT
+
+845 R TERMS GOVERNING USE AND REPRODUCTION NOTE
+
+850 R HOLDING INSTITUTION
+ind1 blank Undefined
+ind2 blank Undefined
+a R Holding institution
+8 R Field link and sequence number
+
+852 R LOCATION
+ind1 b012345678 Shelving scheme
+ind2 b012 Shelving order
+a NR Location
+b R Sublocation or collection
+c R Shelving location
+e R Address
+f R Coded location qualifier
+g R Non-coded location qualifier
+h NR Classification part
+i R Item part
+j NR Shelving control number
+k R Call number prefix
+l NR Shelving form of title
+m R Call number suffix
+n NR Country code
+p NR Piece designation
+q NR Piece physical condition
+s R Copyright article-fee code
+t NR Copy number
+x R Nonpublic note
+z R Public note
+2 NR Source of classification or shelving scheme
+3 NR Materials specified
+6 NR Linkage
+8 NR Sequence number
+
+853 R CAPTIONS AND PATTERN--BASIC BIBLIOGRAPHIC UNIT
+
+854 R CAPTIONS AND PATTERN--SUPPLEMENTARY MATERIAL
+
+855 R CAPTIONS AND PATTERN--INDEXES
+
+856 R ELECTRONIC LOCATION AND ACCESS
+ind1 b012347 Access method
+ind2 b0128 Relationship
+a R Host name
+b R Access number
+c R Compression information
+d R Path
+f R Electronic name
+h NR Processor of request
+i R Instruction
+j NR Bits per second
+k NR Password
+l NR Logon
+m R Contact for access assistance
+n NR Name of location of host
+o NR Operating system
+p NR Port
+q NR Electronic format type
+r NR Settings
+s R File size
+t R Terminal emulation
+u R Uniform Resource Identifier
+v R Hours access method available
+w R Record control number
+x R Nonpublic note
+y R Link text
+z R Public note
+2 NR Access method
+3 NR Materials specified
+6 NR Linkage
+8 R Field link and sequence number
+
+863 R ENUMERATION AND CHRONOLOGY--BASIC BIBLIOGRAPHIC UNIT
+
+864 R ENUMERATION AND CHRONOLOGY--SUPPLEMENTARY MATERIAL
+
+865 R ENUMERATION AND CHRONOLOGY--INDEXES
+
+866 R TEXTUAL HOLDINGS--BASIC BIBLIOGRAPHIC UNIT
+
+867 R TEXTUAL HOLDINGS--SUPPLEMENTARY MATERIAL
+
+868 R TEXTUAL HOLDINGS--INDEXES
+
+876 R ITEM INFORMATION--BASIC BIBLIOGRAPHIC UNIT
+
+877 R ITEM INFORMATION--SUPPLEMENTARY MATERIAL
+
+878 R ITEM INFORMATION--INDEXES
+
+880 R ALTERNATE GRAPHIC REPRESENTATION
+ind1 Same as associated field
+ind2 Same as associated field
+6 NR Linkage
+
+886 R FOREIGN MARC INFORMATION FIELD
+ind1 012 Type of field
+ind2 blank Undefined
+a NR Tag of the foreign MARC field
+b NR Content of the foreign MARC field
+2 NR Source of data
+
+887 R NON-MARC INFORMATION FIELD
+ind1 blank Undefined
+ind2 blank Undefined
+a NR Content of non-MARC field
+2 NR Source of data
Property changes on: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Lint.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,822 @@
+package MARC::Record;
+
+=head1 NAME
+
+MARC::Record - Perl extension for handling MARC records
+
+=cut
+
+use strict;
+use integer;
+
+use vars qw( $ERROR );
+
+use MARC::Field;
+use Carp qw(croak);
+
+=head1 VERSION 1.38
+
+ $Id: Record.pm,v 1.81 2004/03/16 21:52:58 petdance Exp $
+
+=cut
+
+use vars qw( $VERSION );
+$VERSION = '1.38';
+
+use Exporter;
+use vars qw( @ISA @EXPORTS @EXPORT_OK );
+ at ISA = qw( Exporter );
+ at EXPORTS = qw();
+ at EXPORT_OK = qw( LEADER_LEN );
+
+use vars qw( $DEBUG ); $DEBUG = 0;
+
+use constant LEADER_LEN => 24;
+
+=head1 DESCRIPTION
+
+Module for handling MARC records as objects. The file-handling stuff is
+in MARC::File::*.
+
+=head1 EXPORT
+
+None.
+
+=head1 ERROR HANDLING
+
+Any errors generated are stored in C<$MARC::Record::ERROR>.
+Warnings are kept with the record and accessible in the C<warnings()> method.
+
+=head1 CONSTRUCTORS
+
+=head2 new()
+
+Base constructor for the class. It just returns a completely empty record.
+To get real data, you'll need to populate it with fields, or use one of
+the MARC::File::* modules to read from a file.
+
+=cut
+
+sub new {
+ my $class = shift;
+ $class = ref($class) || $class; # Handle cloning
+ my $self = {
+ _leader => ' ' x 24,
+ _fields => [],
+ _warnings => [],
+ };
+ return bless $self, $class;
+} # new()
+
+=head2 new_from_usmarc( $marcblob [, \&filter_func($tagno,$tagdata)] )
+
+This is a wrapper around C<MARC::File::USMARC::decode()> for compatibility with
+older versions of MARC::Record.
+
+The C<wanted_func()> is optional. See L<MARC::File::USMARC>::decode for details.
+
+=cut
+
+sub new_from_usmarc {
+ my $blob = shift;
+ $blob = shift if (ref($blob) || ($blob eq "MARC::Record"));
+
+ require MARC::File::USMARC;
+
+ return MARC::File::USMARC::decode( $blob, @_ );
+}
+
+=head1 COMMON FIELD RETRIEVAL METHODS
+
+Following are a number of convenience methods for commonly-retrieved
+data fields. Please note that they each return strings, not MARC::Field
+objects. They return empty strings if the appropriate field or subfield
+is not found. This is as opposed to the C<field()>/C<subfield()> methods
+which return C<undef> if something's not found. My assumption is that
+these methods are used for quick & dirty reports and you don't want to
+mess around with noting if something is undef.
+
+Also note that no punctuation cleanup is done. If the 245a is
+"Programming Perl / ", then that's what you'll get back, rather than
+"Programming Perl".
+
+=head2 title()
+
+Returns the title from the 245 tag.
+
+=cut
+
+sub title() {
+ my $self = shift;
+
+ my $field = $self->field(245);
+ return $field ? $field->as_string : "";
+}
+
+=head2 title_proper()
+
+Returns the title proper from the 245 tag, subfields a, n and p.
+
+=cut
+
+sub title_proper() {
+ my $self = shift;
+
+ my $field = $self->field(245);
+
+ if ( $field ) {
+ return $field->as_string('anp');
+ } else {
+ return "";
+ }
+}
+
+=head2 author()
+
+Returns the author from the 100, 110 or 111 tag.
+
+=cut
+
+sub author() {
+ my $self = shift;
+
+ my $field = $self->field('100|110|111');
+ return $field ? $field->as_string : "";
+}
+
+=head2 edition()
+
+Returns the edition from the 250 tag, subfield a.
+
+=cut
+
+sub edition() {
+ my $self = shift;
+
+ my $str = $self->subfield(250,'a');
+ return defined $str ? $str : "";
+}
+
+=head2 publication_date()
+
+Returns the publication date from the 260 tag, subfield c.
+
+=cut
+
+sub publication_date() {
+ my $self = shift;
+
+ my $str = $self->subfield(260,'c');
+ return defined $str ? $str : "";
+}
+
+=head1 FIELD & SUBFIELD ACCESS METHODS
+
+=head2 fields()
+
+Returns a list of all the fields in the record. The list contains
+a MARC::Field object for each field in the record.
+
+=cut
+
+sub fields() {
+ my $self = shift;
+ return @{$self->{_fields}};
+}
+
+=head2 field( I<tagspec(s)> )
+
+Returns a list of tags that match the field specifier, or in scalar
+context, just the first matching tag.
+
+The field specifier can be a simple number (i.e. "245"), or use the "."
+notation of wildcarding (i.e. subject tags are "6..").
+
+=cut
+
+my %field_regex;
+
+sub field {
+ my $self = shift;
+ my @specs = @_;
+
+ my @list = ();
+ for my $tag ( @specs ) {
+ my $regex = $field_regex{ $tag };
+
+ # Compile & stash it if necessary
+ if ( not defined $regex ) {
+ $regex = qr/^$tag$/;
+ $field_regex{ $tag } = $regex;
+ } # not defined
+
+ for my $maybe ( $self->fields ) {
+ if ( $maybe->tag =~ $regex ) {
+ return $maybe unless wantarray;
+
+ push( @list, $maybe );
+ } # if
+ } # for $maybe
+ } # for $tag
+
+ return @list;
+}
+
+=head2 subfield( $tag, $subfield )
+
+Shortcut method for getting just a subfield for a tag. These are equivalent:
+
+ my $title = $marc->field('245')->subfield("a");
+ my $title = $marc->subfield('245',"a");
+
+If either the field or subfield can't be found, C<undef> is returned.
+
+=cut
+
+sub subfield {
+ my $self = shift;
+ my $tag = shift;
+ my $subfield = shift;
+
+ my $field = $self->field($tag) or return;
+ return $field->subfield($subfield);
+} # subfield()
+
+=for internal
+
+=cut
+
+sub _all_parms_are_fields {
+ for ( @_ ) {
+ return 0 unless ref($_) eq 'MARC::Field';
+ }
+ return 1;
+}
+
+=head2 append_fields( @fields )
+
+Appends the field specified by C<$field> to the end of the record.
+C<@fields> need to be MARC::Field objects.
+
+ my $field = MARC::Field->new('590','','','a' => 'My local note.');
+ $record->append_fields($field);
+
+Returns the number of fields appended.
+
+=cut
+
+sub append_fields {
+ my $self = shift;
+
+ _all_parms_are_fields(@_) or croak('Arguments must be MARC::Field objects');
+
+ push(@{ $self->{_fields} }, @_);
+ return scalar @_;
+}
+
+=head2 insert_fields_before( $before_field, @new_fields )
+
+Inserts the field specified by C<$new_field> before the field C<$before_field>.
+Returns the number of fields inserted, or undef on failures.
+Both C<$before_field> and all C<@new_fields> need to be MARC::Field objects.
+If they are not an exception will be thrown.
+
+ my $before_field = $record->field('260');
+ my $new_field = MARC::Field->new('250','','','a' => '2nd ed.');
+ $record->insert_fields_before($before_field,$new_field);
+
+=cut
+
+sub insert_fields_before {
+ my $self = shift;
+
+ _all_parms_are_fields(@_)
+ or croak('All arguments must be MARC::Field objects');
+
+ my ($before, at new) = @_;
+
+ ## find position of $before
+ my $fields = $self->{_fields};
+ my $pos = 0;
+ foreach my $f (@$fields) {
+ last if ($f == $before);
+ $pos++;
+ }
+
+ ## insert before $before
+ if ($pos >= @$fields) {
+ $self->_warn("Couldn't find field to insert before");
+ return;
+ }
+ splice(@$fields,$pos,0, at new);
+ return scalar @new;
+
+}
+
+=head2 insert_fields_after( $after_field, @new_fields )
+
+Identical to C<insert_fields_before()>, but fields are added after
+C<$after_field>. Remember, C<$after_field> and any new fields must be
+valid MARC::Field objects or else an exception will be thrown.
+
+=cut
+
+sub insert_fields_after {
+ my $self = shift;
+
+ _all_parms_are_fields(@_) or croak('All arguments must be MARC::Field objects');
+ my ($after, at new) = @_;
+
+ ## find position of $after
+ my $fields = $self->{_fields};
+ my $pos = 0;
+ foreach my $f (@$fields) {
+ last if ($f == $after);
+ $pos++;
+ }
+
+ ## insert after $after
+ if ($pos+1 >= @$fields) {
+ $self->_warn("Couldn't find field to insert after");
+ return;
+ }
+ splice(@$fields,$pos+1,0, at new);
+ return scalar @new;
+}
+
+=head2 insert_fields_ordered( @new_fields )
+
+Will insert fields in strictly numerical order. So a 008 will be filed
+after a 001 field. See C<insert_grouped_field()> for an additional ordering.
+
+=cut
+
+sub insert_fields_ordered {
+ my ( $self, @new ) = @_;
+
+ _all_parms_are_fields(@new)
+ or croak('All arguments must be MARC::Field objects');
+
+ ## go through each new field
+ NEW_FIELD: foreach my $newField ( @new ) {
+
+ ## find location before which it should be inserted
+ EXISTING_FIELD: foreach my $field ( @{ $self->{_fields} } ) {
+ if ( $field->tag() >= $newField->tag() ) {
+ $self->insert_fields_before( $field, $newField );
+ next NEW_FIELD;
+ }
+ }
+
+ ## if we fell through then this new field is higher than
+ ## all the existing fields, so we append.
+ $self->append_fields( $newField );
+
+ }
+ return( scalar( @new ) );
+}
+
+=head2 insert_grouped_field( $field )
+
+Will insert the specified MARC::Field object into the record in grouped
+order and return true (1) on success, and false (undef) on failure.
+
+ my $field = MARC::Field->new( '510', 'Indexed by Google.' );
+ $record->insert_grouped_field( $field );
+
+For example, if a '650' field is inserted with C<insert_grouped_field()>
+it will be inserted at the end of the 6XX group of tags. After discussion
+most people wanted the ability to add a new field to the end of the
+hundred group where it belonged. The reason is that according to the MARC
+format, fields within a record are supposed to be grouped by block
+(hundred groups). This means that fields may not necessarily be in tag
+order.
+
+=cut
+
+sub insert_grouped_field {
+ my ($self,$new) = @_;
+ _all_parms_are_fields($new) or croak('Argument must be MARC::Field object');
+
+ ## try to find the end of the field group and insert it there
+ my $limit = int($new->tag() / 100);
+ my $found = 0;
+ foreach my $field ($self->fields()) {
+ if ( int($field->tag() / 100) > $limit ) {
+ $self->insert_fields_before($field,$new);
+ $found = 1;
+ last;
+ }
+ }
+
+ ## if we couldn't find the end of the group, then we must not have
+ ## any tags this high yet, so just append it
+ if (!$found) {
+ $self->append_fields($new);
+ }
+
+ return(1);
+
+}
+
+
+=head2 delete_field( $field )
+
+Deletes a field from the record.
+
+The field must have been retrieved from the record using the
+C<field()> method. For example, to delete a 526 tag if it exists:
+
+ my $tag526 = $marc->field( "526" );
+ if ( $tag526 ) {
+ $marc->delete_field( $tag526 );
+ }
+
+C<delete_field()> returns the number of fields that were deleted.
+This shouldn't be 0 unless you didn't get the tag properly.
+
+=cut
+
+sub delete_field {
+ my $self = shift;
+ my $deleter = shift;
+ my $list = $self->{_fields};
+
+ my $old_count = @$list;
+ @$list = grep { $_ != $deleter } @$list;
+ return $old_count - @$list;
+}
+
+=head2 as_usmarc()
+
+This is a wrapper around C<MARC::File::USMARC::encode()> for compatibility with
+older versions of MARC::Record.
+
+=cut
+
+sub as_usmarc() {
+ my $self = shift;
+
+ require MARC::File::USMARC;
+
+ return MARC::File::USMARC::encode( $self );
+}
+
+=head2 as_formatted()
+
+Returns a pretty string for printing in a MARC dump.
+
+=cut
+
+sub as_formatted() {
+ my $self = shift;
+
+ my @lines = ( "LDR " . ($self->{_leader} || "") );
+ for my $field ( @{$self->{_fields}} ) {
+ push( @lines, $field->as_formatted() );
+ }
+
+ return join( "\n", @lines );
+} # as_formatted
+
+
+=head2 leader()
+
+Returns the leader for the record. Sets the leader if I<text> is defined.
+No error checking is done on the validity of the leader.
+
+=cut
+
+sub leader {
+ my $self = shift;
+ my $text = shift;
+
+ if ( defined $text ) {
+ (length($text) eq 24)
+ or $self->_warn( "Leader must be 24 bytes long" );
+ $self->{_leader} = $text;
+ } # set the leader
+
+ return $self->{_leader};
+} # leader()
+
+=head2 set_leader_lengths( $reclen, $baseaddr )
+
+Internal function for updating the leader's length and base address.
+
+=cut
+
+sub set_leader_lengths {
+ my $self = shift;
+ my $reclen = shift;
+ my $baseaddr = shift;
+ substr($self->{_leader},0,5) = sprintf("%05d",$reclen);
+ substr($self->{_leader},12,5) = sprintf("%05d",$baseaddr);
+ # MARC21 defaults: http://www.loc.gov/marc/bibliographic/ecbdldrd.html
+ substr($self->{_leader},10,2) = '22';
+ substr($self->{_leader},20,4) = '4500';
+}
+
+=head2 clone()
+
+The C<clone()> method makes a copy of an existing MARC record and returns
+the new version. Note that you cannot just say:
+
+ my $newmarc = $oldmarc;
+
+This just makes a copy of the reference, not a new object. You must use
+the C<clone()> method like so:
+
+ my $newmarc = $oldmarc->clone;
+
+You can also specify field specs to filter down only a
+certain subset of fields. For instance, if you only wanted the
+title and ISBN tags from a record, you could do this:
+
+ my $small_marc = $marc->clone( 245, '020' );
+
+The order of the fields is preserved as it was in the original record.
+
+=cut
+
+sub clone {
+ my $self = shift;
+ my @keeper_tags = @_;
+
+ my $clone = $self->new();
+ $clone->{_leader} = $self->{_leader};
+
+ my $filtered = @keeper_tags ? [$self->field( @keeper_tags )] : undef;
+
+ for my $field ( $self->fields() ) {
+ if ( !$filtered || (grep {$field eq $_} @$filtered ) ) {
+ $clone->add_fields( $field->clone );
+ }
+ }
+
+ # XXX FIX THIS $clone->update_leader();
+
+ return $clone;
+}
+
+=head2 warnings()
+
+Returns the warnings (as a list) that were created when the record was read.
+These are things like "Invalid indicators converted to blanks".
+
+ my @warnings = $record->warnings();
+
+The warnings are items that you might be interested in, or might
+not. It depends on how stringently you're checking data. If
+you're doing some grunt data analysis, you probably don't care.
+
+A side effect of calling warnings() is that the warning buffer will
+be cleared.
+
+=cut
+
+sub warnings() {
+ my $self = shift;
+ my @warnings = @{$self->{_warnings}};
+ $self->{_warnings} = [];
+ return @warnings;
+}
+
+=head2 add_fields()
+
+C<add_fields()> is now deprecated, and users are encouraged to use
+C<append_fields()>, C<insert_fields_after()>, and C<insert_fields_before()>
+since they do what you want probably. It is still here though, for backwards
+compatability.
+
+C<add_fields()> adds MARC::Field objects to the end of the list. Returns the
+number of fields added, or C<undef> if there was an error.
+
+There are three ways of calling C<add_fields()> to add data to the record.
+
+=over 4
+
+=item 1 Create a MARC::Field object and add it
+
+ my $author = MARC::Field->new(
+ 100, "1", " ", a => "Arnosky, Jim."
+ );
+ $marc->add_fields( $author );
+
+=item 2 Add the data fields directly, and let C<add_fields()> take care of the objectifying.
+
+ $marc->add_fields(
+ 245, "1", "0",
+ a => "Raccoons and ripe corn /",
+ c => "Jim Arnosky.",
+ );
+
+=item 3 Same as #2 above, but pass multiple fields of data in anonymous lists
+
+ $marc->add_fields(
+ [ 250, " ", " ", a => "1st ed." ],
+ [ 650, "1", " ", a => "Raccoons." ],
+ );
+
+=back
+
+=cut
+
+sub add_fields {
+ my $self = shift;
+
+ my $nfields = 0;
+ my $fields = $self->{_fields};
+
+ while ( my $parm = shift ) {
+ # User handed us a list of data (most common possibility)
+ if ( ref($parm) eq "" ) {
+ my $field = MARC::Field->new( $parm, @_ )
+ or return _gripe( $MARC::Field::ERROR );
+ push( @$fields, $field );
+ ++$nfields;
+ last; # Bail out, we're done eating parms
+
+ # User handed us an object.
+ } elsif ( ref($parm) eq "MARC::Field" ) {
+ push( @$fields, $parm );
+ ++$nfields;
+
+ # User handed us an anonymous list of parms
+ } elsif ( ref($parm) eq "ARRAY" ) {
+ my $field = MARC::Field->new(@$parm)
+ or return _gripe( $MARC::Field::ERROR );
+ push( @$fields, $field );
+ ++$nfields;
+
+ } else {
+ croak( "Unknown parm of type", ref($parm), " passed to add_fields()" );
+ } # if
+
+ } # while
+
+ return $nfields;
+}
+
+# NOTE: _warn is an object method
+sub _warn {
+ my $self = shift;
+ push( @{$self->{_warnings}}, join( "", @_ ) );
+ return( $self );
+}
+
+
+# NOTE: _gripe is NOT an object method
+sub _gripe {
+ $ERROR = join( "", @_ );
+
+ warn $ERROR;
+
+ return;
+}
+
+
+1;
+
+__END__
+
+=head1 DESIGN NOTES
+
+A brief discussion of why MARC::Record is done the way it is:
+
+=over 4
+
+=item * It's built for quick prototyping
+
+One of the areas Perl excels is in allowing the programmer to
+create easy solutions quickly. MARC::Record is designed along
+those same lines. You want a program to dump all the 6XX
+tags in a file? MARC::Record is your friend.
+
+=item * It's built for extensibility
+
+Currently, I'm using MARC::Record for analyzing bibliographic
+data, but who knows what might happen in the future? MARC::Record
+needs to be just as adept at authority data, too.
+
+=item * It's designed around accessor methods
+
+I use method calls everywhere, and I expect calling programs to do
+the same, rather than accessing internal data directly. If you
+access an object's hash fields on your own, future releases may
+break your code.
+
+=item * It's not built for speed
+
+One of the tradeoffs in using accessor methods is some overhead
+in the method calls. Is this slow? I don't know, I haven't measured.
+I would suggest that if you're a cycle junkie that you use
+Benchmark.pm to check to see where your bottlenecks are, and then
+decide if MARC::Record is for you.
+
+=back
+
+=head1 RELATED MODULES
+
+L<MARC::Record>, L<MARC::Lint>
+
+=head1 SEE ALSO
+
+=over 4
+
+=item * perl4lib (L<http://www.rice.edu/perl4lib/>)
+
+A mailing list devoted to the use of Perl in libraries.
+
+=item * Library Of Congress MARC pages (L<http://www.loc.gov/marc/>)
+
+The definitive source for all things MARC.
+
+
+=item * I<Understanding MARC Bibliographic> (L<http://lcweb.loc.gov/marc/umb/>)
+
+Online version of the free booklet. An excellent overview of the MARC format. Essential.
+
+
+=item * Tag Of The Month (L<http://www.tagofthemonth.com/>)
+
+Follett Software Company's
+(L<http://www.fsc.follett.com/>) monthly discussion of various MARC tags.
+
+=back
+
+=head1 TODO
+
+=over 4
+
+=item * Incorporate MARC.pm in the distribution.
+
+Combine MARC.pm and MARC::* into one distribution.
+
+=item * Podify MARC.pm
+
+=item * Allow regexes across the entire tag
+
+Imagine something like this:
+
+ my @sears_headings = $marc->tag_grep( /Sears/ );
+
+(from Mike O'Regan)
+
+=item * Insert a field in an arbitrary place in the record
+
+=item * Allow deleting a field
+
+ for my $field ( $record->field( "856" ) ) {
+ $record->delete_field( $field ) unless useful($field);
+ } # for
+
+(from Anne Highsmith hismith at tamu.edu)
+
+
+=item * Modifying an existing field
+
+=back
+
+=head1 BUGS, WISHES AND CORRESPONDENCE
+
+Please feel free to email me at C<< <andy at petdance.com> >>. I'm glad
+to help as best I can, and I'm always interested in bugs, suggestions
+and patches.
+
+An excellent place to look for information, and get quick help, is from
+the perl4lib mailing list. See L<http://perl4lib.perl.org> for more
+information about this list, and other helpful MARC information.
+
+The MARC::Record development team uses the RT bug tracking system at
+L<http://rt.cpan.org>. If your email is about a bug or suggestion,
+please report it through the RT system. This is a huge help for the
+team, and you'll be notified of progress as things get fixed or updated.
+If you prefer not to use the website, you can send your bug to C<<
+<bug-MARC-Record at rt.cpan.org> >>
+
+=head1 IDEAS
+
+Ideas are things that have been considered, but nobody's actually asked for.
+
+=over 4
+
+=item * Create multiple output formats.
+
+These could be ASCII, XML, or MarcMaker.
+
+=back
+
+=head1 LICENSE
+
+This code may be distributed under the same terms as Perl itself.
+
+Please note that these modules are not products of or supported by the
+employers of the various contributors to the code.
+
+=head1 AUTHOR
+
+Andy Lester, C<< <andy at petdance.com> >>
+
+=cut
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/lib/MARC/Record.pm
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/00.load.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/00.load.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/00.load.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,17 @@
+# $Id: 00.load.t,v 1.5 2004/03/09 23:25:18 petdance Exp $
+
+use strict;
+
+use Test::More tests=>7;
+
+BEGIN {
+ use_ok( 'MARC::Record' );
+ use_ok( 'MARC::Batch' );
+ use_ok( 'MARC::Lint' );
+ use_ok( 'MARC::Field' );
+ use_ok( 'MARC::File' );
+ use_ok( 'MARC::File::MicroLIF' );
+ use_ok( 'MARC::File::USMARC' );
+}
+
+diag( "Testing MARC::Record $MARC::Record::VERSION" );
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/00.load.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/01.version.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/01.version.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/01.version.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,20 @@
+# $Id: 01.version.t,v 1.1 2003/04/23 02:57:02 petdance Exp $
+
+use strict;
+
+use Test::More tests=>2;
+
+BEGIN {
+ use_ok( 'MARC::Record' );
+}
+
+my $ver = $MARC::Record::VERSION;
+
+open( FH, $INC{'MARC/Record.pm'} ) or die $!;
+while ( <FH> ) {
+ chomp;
+ pass(), exit if $_ eq "=head1 VERSION $ver";
+}
+fail( "Never found the version line" );
+
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/01.version.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,134 @@
+# $Id: 10.camel.t,v 1.16 2003/04/23 03:19:34 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use strict;
+
+use Test::More tests => 30;
+
+BEGIN {
+ use_ok( 'MARC::Record' );
+ use_ok( 'MARC::File::USMARC' );
+}
+
+# Test 1: Testing as_usmarc()
+my $marc = MARC::Record->new();
+isa_ok( $marc, 'MARC::Record', 'MARC record' );
+
+$marc->leader("00000nam 22?????8a 4500"); # The ????? represents meaningless digits at this point
+my $nfields = $marc->add_fields(
+ ["001","fol05865967"],
+ ["003","IMchF"],
+ ["010", "","",
+ a => " 00055799",
+ ],
+ [100, "1","",
+ a => "Wall, Larry."
+ ],
+ [245, "1","0",
+ a => "Programming Perl / ",
+ c => "Larry Wall, Tom Christiansen & Jon Orwant.",
+ ],
+ [250, "", "",
+ a => "3rd ed.",
+ ],
+ [260, "", "",
+ a => "Cambridge, Mass. : ",
+ b => "O'Reilly, ",
+ c => "2000.",
+ ],
+ [650, " ","0",
+ a => "Perl (Computer program language)",
+ ],
+ [700, "1"," ",
+ a => "Christiansen, Tom.",
+ ],
+ [700, "1"," ",
+ a => "Orwant, Jon.",
+ ],
+ );
+
+is( $nfields, 10, 'Expected 10 fields' );
+
+my $expected = "00397nam 22001458a 4500001001200000003000600012010001600018100001700034245006800051250001200119260004300131650003700174700002300211700001700234\x1Efol05865967\x1EIMchF\x1E \x1Fa 00055799\x1E1 \x1FaWall, Larry.\x1E10\x1FaProgramming Perl / \x1FcLarry Wall, Tom Christiansen & Jon Orwant.\x1E \x1Fa3rd ed.\x1E \x1FaCambridge, Mass. : \x1FbO'Reilly, \x1Fc2000.\x1E 0\x1FaPerl (Computer program language)\x1E1 \x1FaChristiansen, Tom.\x1E1 \x1FaOrwant, Jon.\x1E\x1D";
+
+is( MARC::File::USMARC->encode( $marc ), $expected, 'encode()' );
+
+is( $marc->as_usmarc(), $expected, 'as_usmarc()' );
+
+my $marc_from_blob = MARC::Record->new_from_usmarc( $expected );
+isa_ok( $marc_from_blob, 'MARC::Record', 'MARC record imported from a blob' );
+is( $marc->as_usmarc(), $expected, 'MARC from blob encodes correctly' );
+
+# Test 2: as_string()
+$expected = join( "", <DATA> );
+my $generated = $marc->as_formatted;
+chomp $expected;
+chomp $generated;
+ok( $generated eq $expected, 'as_formatted()' );
+
+
+# Test 3: multiple fields by number
+TEST3: {
+ my @fields = $marc->field("700");
+ is( scalar @fields, 2, 'Multiple 700 tags' );
+
+ my $field = $fields[0];
+ isa_ok( $field, "MARC::Field" );
+ is( $field->subfield("a"), 'Christiansen, Tom.', ' Tom Christiansen' );
+
+ $field = $fields[1];
+ isa_ok( $field, "MARC::Field" );
+ is( $field->subfield("a"), 'Orwant, Jon.', ' Jon Orwant' );
+}
+
+
+# Test 4: multiple fields by the ".." notation
+TEST4: {
+ my @fields = $marc->field("7..");
+ is( scalar @fields, 2, 'Multiple 7.. tags' );
+
+ my $field = $fields[0];
+ isa_ok( $field, "MARC::Field" );
+ is( $field->subfield("a"), 'Christiansen, Tom.', ' Tom Christiansen' );
+
+ $field = $fields[1];
+ isa_ok( $field, "MARC::Field" );
+ is( $field->subfield("a"), 'Orwant, Jon.', ' Jon Orwant' );
+}
+
+# Test 5: field/subfield
+is( $marc->subfield( 100, "a" ), "Wall, Larry.", 'Field/subfield lookup' );
+
+# Test 6: Reading from disk
+
+my $file = MARC::File::USMARC->in( "t/camel.usmarc" );
+isa_ok( $file, 'MARC::File', "Opened input file" );
+
+my $diskmarc;
+for my $n ( 1..8 ) {
+ $diskmarc = $file->next();
+ isa_ok( $diskmarc, 'MARC::Record', " Record #$n" );
+}
+
+if ( $diskmarc ) {
+ is( $diskmarc->subfield(245,"c"), $marc->subfield(245,"c"), "Disk MARC matches built MARC" );
+}
+$file->close;
+
+__END__
+LDR 00397nam 22001458a 4500
+001 fol05865967
+003 IMchF
+010 _a 00055799
+100 1 _aWall, Larry.
+245 10 _aProgramming Perl /
+ _cLarry Wall, Tom Christiansen & Jon Orwant.
+250 _a3rd ed.
+260 _aCambridge, Mass. :
+ _bO'Reilly,
+ _c2000.
+650 0 _aPerl (Computer program language)
+700 1 _aChristiansen, Tom.
+700 1 _aOrwant, Jon.
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/10.camel.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,26 @@
+use Test::More ( tests => 5 );
+
+use strict;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+}
+
+my $b = MARC::Batch->new( 'USMARC', 't/camel.usmarc' );
+isa_ok( $b, 'MARC::Batch' );
+
+my $r = $b->next();
+isa_ok( $r, 'MARC::Record' );
+
+my $f245 = $r->field( '245' );
+is(
+ $f245->as_string( 'a' ),
+ 'ActivePerl with ASP and ADO /',
+ 'as_string() with one subfield'
+);
+is(
+ $f245->as_string( 'ac' ),
+ 'ActivePerl with ASP and ADO / Tobias Martinsson.',
+ 'as_string() with two subfields'
+);
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/11.astring.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/12.ldr.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+
+# test to make sure leader is being populated properly
+
+use strict;
+use Test::More tests => 7;
+
+use_ok( 'MARC::Record' );
+
+my $r = MARC::Record->new();
+isa_ok( $r, 'MARC::Record' );
+$r->append_fields(
+ MARC::Field->new(
+ 245, 0, 0, a => 'Curious George battles the MARC leader'
+ )
+);
+
+my $marc = $r->as_usmarc();
+like( substr( $marc,0, 5 ), qr/^\d+$/, 'leader length' );
+is( substr( $marc, 10, 1 ), '2', 'indicator count' );
+is( substr( $marc, 11, 1 ), '2', 'subfield code count' );
+like( substr( $marc, 12, 5 ), qr/^\d+$/, 'base address' );
+is( substr( $marc, 20, 4 ), '4500', 'entry map' );
+
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,27 @@
+# $Id: 20.clone.t,v 1.7 2003/02/25 20:41:58 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use integer;
+use strict;
+
+use Test::More tests=>6;
+
+BEGIN {
+ use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC input file object' );
+my $marc = $file->next();
+isa_ok( $marc, 'MARC::Record', 'Read from file' );
+$file->close;
+
+my $clone = $marc->clone;
+isa_ok( $clone, 'MARC::Record', 'Cloned record' );
+
+ok( $marc != $clone, 'Clone and original are different' );
+
+ok( $marc->as_formatted eq $clone->as_formatted,
+ 'Clone and original match content' );
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/20.clone.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,48 @@
+# $Id: 50.batch.t,v 1.10 2003/04/23 03:10:50 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>268;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+}
+
+
+
+# Test the USMARC stuff
+USMARC: {
+ my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+ isa_ok( $batch, 'MARC::Batch', 'MARC batch' );
+
+ my $n = 0;
+ while ( my $marc = $batch->next() ) {
+ isa_ok( $marc, 'MARC::Record' );
+
+ my $f245 = $marc->field( '245' );
+ isa_ok( $f245, 'MARC::Field' );
+ ++$n;
+ }
+ is( $n, 10, 'Got 10 USMARC records' );
+}
+
+# Test MicroLIF batch
+
+MicroLIF: {
+ my @files = <t/sample*.lif>;
+ is( scalar @files, 3, 'Only have 3 sample*.lif files' );
+
+ my $batch = new MARC::Batch( 'MicroLIF', @files );
+ isa_ok( $batch, 'MARC::Batch', 'MicroLIF batch' );
+
+ my $n = 0;
+ while ( my $marc = $batch->next() ) {
+ isa_ok( $marc, 'MARC::Record' );
+
+ my $f245 = $marc->field( '245' );
+ isa_ok( $f245, 'MARC::Field' );
+ ++$n;
+ }
+ is( $n, 121, 'Got 120 LIF records' );
+}
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/50.batch.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,167 @@
+# $Id: 60.insert.t,v 1.8 2003/02/26 05:30:45 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>16;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+ use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval' );
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation' );
+
+my $newagain = MARC::Field->new('650','','0','a','Hockey etiquette.');
+isa_ok( $newagain, 'MARC::Field', 'Field creation' );
+
+## test append_fields()
+
+my $nappended = $record->append_fields($new);
+is( $nappended, 1, "Added one field" );
+
+my $expected =
+<<MARC_DATA;
+LDR 00755cam 22002414a 4500
+001 fol05731351
+003 IMchF
+005 20000613133448.0
+008 000107s2000 nyua 001 0 eng
+010 _a 00020737
+020 _a0471383147 (paper/cd-rom : alk. paper)
+040 _aDLC
+ _cDLC
+ _dDLC
+042 _apcc
+050 00 _aQA76.73.P22
+ _bM33 2000
+082 00 _a005.13/3
+ _221
+100 1 _aMartinsson, Tobias,
+ _d1976-
+245 10 _aActivePerl with ASP and ADO /
+ _cTobias Martinsson.
+260 _aNew York :
+ _bJohn Wiley & Sons,
+ _c2000.
+300 _axxi, 289 p. :
+ _bill. ;
+ _c23 cm. +
+ _e1 computer laser disc (4 3/4 in.)
+500 _a"Wiley Computer Publishing."
+650 0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+650 0 _aWorld Wide Web.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted, $expected, "append_fields");
+my $ndeleted = $record->delete_field($new);
+is( $ndeleted, 1, "Deleted one field" );
+
+## test insert_fields_after
+
+my $nadds = $record->insert_fields_after($f650,$new,$newagain);
+is( $nadds, 2, 'Added 2 fields' );
+
+$expected =
+<<MARC_DATA;
+LDR 00755cam 22002414a 4500
+001 fol05731351
+003 IMchF
+005 20000613133448.0
+008 000107s2000 nyua 001 0 eng
+010 _a 00020737
+020 _a0471383147 (paper/cd-rom : alk. paper)
+040 _aDLC
+ _cDLC
+ _dDLC
+042 _apcc
+050 00 _aQA76.73.P22
+ _bM33 2000
+082 00 _a005.13/3
+ _221
+100 1 _aMartinsson, Tobias,
+ _d1976-
+245 10 _aActivePerl with ASP and ADO /
+ _cTobias Martinsson.
+260 _aNew York :
+ _bJohn Wiley & Sons,
+ _c2000.
+300 _axxi, 289 p. :
+ _bill. ;
+ _c23 cm. +
+ _e1 computer laser disc (4 3/4 in.)
+500 _a"Wiley Computer Publishing."
+650 0 _aPerl (Computer program language)
+650 0 _aWorld Wide Web.
+650 0 _aHockey etiquette.
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_after');
+my $n = $record->delete_field($new);
+is( $n, 1 );
+
+$n = $record->delete_field($newagain);
+is( $n, 1 );
+
+
+## test insert_record_before
+
+$nadds = $record->insert_fields_before($f650, MARC::Field->new('650','4','3','a','House painting.'), $new );
+is( $nadds, 2, 'Added 2 more fields' );
+
+$expected =
+<<MARC_DATA;
+LDR 00755cam 22002414a 4500
+001 fol05731351
+003 IMchF
+005 20000613133448.0
+008 000107s2000 nyua 001 0 eng
+010 _a 00020737
+020 _a0471383147 (paper/cd-rom : alk. paper)
+040 _aDLC
+ _cDLC
+ _dDLC
+042 _apcc
+050 00 _aQA76.73.P22
+ _bM33 2000
+082 00 _a005.13/3
+ _221
+100 1 _aMartinsson, Tobias,
+ _d1976-
+245 10 _aActivePerl with ASP and ADO /
+ _cTobias Martinsson.
+260 _aNew York :
+ _bJohn Wiley & Sons,
+ _c2000.
+300 _axxi, 289 p. :
+ _bill. ;
+ _c23 cm. +
+ _e1 computer laser disc (4 3/4 in.)
+500 _a"Wiley Computer Publishing."
+650 43 _aHouse painting.
+650 0 _aWorld Wide Web.
+650 0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_before');
+
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/60.insert.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/60.update.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/60.update.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/60.update.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,61 @@
+# $Id: 60.update.t,v 1.10 2003/05/21 13:42:59 edsummers Exp $
+# Test updating a MARC record for the Camel book
+
+use strict;
+use integer;
+use Data::Dumper;
+
+use Test::More tests=>20;
+
+BEGIN {
+ use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+my $marc = $file->next();
+isa_ok( $marc, 'MARC::Record' ) or die "Can't read the test record";
+$file->close;
+
+my $field = $marc->field('245');
+isa_ok( $field, 'MARC::Field', 'new 245' );
+
+my $nchanges = $field->update('a' => 'Programming Python /', 'ind1' => '4' );
+is( $marc->subfield('245','a') => 'Programming Python /',
+ 'Updated 1 subfield' );
+is( $field->indicator(1) => '4', 'Indicator 1 changed' );
+is( $nchanges, 2, 'number of changes is correct' );
+
+$nchanges = $field->update('a' => 'Programming Python /', 'c' => 'Mark Lutz');
+is( $field->as_string() => 'Programming Python / Mark Lutz',
+ 'Updated 2 subfields');
+is( $nchanges, 2, 'number of changes is correct' );
+
+
+## make sure we can update fields with no subfields or indicators (000-009)
+
+my $f003 = $marc->field('003');
+isa_ok( $f003, 'MARC::Field' );
+my $n = $f003->update('XXXX');
+is( $n, 1, 'number of changes is correct' );
+
+$f003 = $marc->field('003');
+isa_ok( $f003, 'MARC::Field' );
+is( $f003->as_string(), 'XXXX', 'Update for fields 000-009 works' );
+
+## if an update is attempted on a non existent subfield it will be
+## appended to the end of the subfield
+
+$field = $marc->field( '245' );
+isa_ok( $field, 'MARC::Field', 'got 245' );
+$n = $field->update( 'z' => 'foo bar' );
+is( $n, 1, 'numer of changes correct' );
+is( $field->subfield( 'z' ), 'foo bar', 'update() append worked' );
+
+$n = $field->update( 'x' => 'homer', 'y' => 'plato', 'z' => 'bart' );
+is( $n, 3, 'number of changes correct' );
+is( $field->subfield( 'x' ), 'homer', 'update() append 1' );
+is( $field->subfield( 'y' ), 'plato', 'update() append 2' );
+is( $field->subfield( 'z' ), 'bart', 'update() append 3' );
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/60.update.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/61.append.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/61.append.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/61.append.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,65 @@
+# $Id: 61.append.t,v 1.7 2003/02/26 05:30:45 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+ use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval' );
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation' );
+
+my $nadded = $record->append_fields($new);
+is( $nadded, 1 );
+
+my $expected =
+<<MARC_DATA;
+LDR 00755cam 22002414a 4500
+001 fol05731351
+003 IMchF
+005 20000613133448.0
+008 000107s2000 nyua 001 0 eng
+010 _a 00020737
+020 _a0471383147 (paper/cd-rom : alk. paper)
+040 _aDLC
+ _cDLC
+ _dDLC
+042 _apcc
+050 00 _aQA76.73.P22
+ _bM33 2000
+082 00 _a005.13/3
+ _221
+100 1 _aMartinsson, Tobias,
+ _d1976-
+245 10 _aActivePerl with ASP and ADO /
+ _cTobias Martinsson.
+260 _aNew York :
+ _bJohn Wiley & Sons,
+ _c2000.
+300 _axxi, 289 p. :
+ _bill. ;
+ _c23 cm. +
+ _e1 computer laser disc (4 3/4 in.)
+500 _a"Wiley Computer Publishing."
+650 0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+650 0 _aWorld Wide Web.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted, $expected, "append_fields");
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/61.append.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,35 @@
+# $Id: 61.replace.t,v 1.4 2003/02/25 20:42:03 petdance Exp $
+# Test updating a MARC record for the Camel book
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+ use_ok( 'MARC::File::USMARC' );
+ use_ok( 'MARC::Field' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File', 'MARC input file' ) or die;
+my $marc = $file->next();
+isa_ok( $marc, 'MARC::Record', 'Read from file' );
+$file->close;
+
+my $cur_245 = $marc->field('245');
+isa_ok( $cur_245, 'MARC::Field' );
+my $new_245 = MARC::Field->new(
+ '245','0','0',
+ a => 'Programming Python /',
+ c => 'Mark Lutz'
+);
+isa_ok( $new_245, 'MARC::Field' );
+
+$cur_245->replace_with($new_245);
+my $latest_245 = $marc->field('245');
+isa_ok( $latest_245, 'MARC::Field' );
+
+is( $latest_245->as_string() => 'Programming Python / Mark Lutz',
+ 'Replaced a field');
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/61.replace.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/62.before.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/62.before.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/62.before.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,64 @@
+# $Id: 62.before.t,v 1.7 2003/02/26 05:57:49 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+ use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval');
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation');
+
+my $nadds = $record->insert_fields_before($f650,$new);
+is( $nadds, 1 );
+
+my $expected =
+<<MARC_DATA;
+LDR 00755cam 22002414a 4500
+001 fol05731351
+003 IMchF
+005 20000613133448.0
+008 000107s2000 nyua 001 0 eng
+010 _a 00020737
+020 _a0471383147 (paper/cd-rom : alk. paper)
+040 _aDLC
+ _cDLC
+ _dDLC
+042 _apcc
+050 00 _aQA76.73.P22
+ _bM33 2000
+082 00 _a005.13/3
+ _221
+100 1 _aMartinsson, Tobias,
+ _d1976-
+245 10 _aActivePerl with ASP and ADO /
+ _cTobias Martinsson.
+260 _aNew York :
+ _bJohn Wiley & Sons,
+ _c2000.
+300 _axxi, 289 p. :
+ _bill. ;
+ _c23 cm. +
+ _e1 computer laser disc (4 3/4 in.)
+500 _a"Wiley Computer Publishing."
+650 0 _aWorld Wide Web.
+650 0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_before');
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/62.before.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/63.after.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/63.after.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/63.after.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,66 @@
+# $Id: 63.after.t,v 1.7 2003/02/26 05:57:49 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>8;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+ use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f650 = $record->field('650');
+isa_ok( $f650, 'MARC::Field', 'Field retrieval');
+
+my $new = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $new, 'MARC::Field', 'Field creation');
+
+my $nadds = $record->insert_fields_after($f650,$new);
+is( $nadds, 1 );
+
+my $expected =
+<<MARC_DATA;
+LDR 00755cam 22002414a 4500
+001 fol05731351
+003 IMchF
+005 20000613133448.0
+008 000107s2000 nyua 001 0 eng
+010 _a 00020737
+020 _a0471383147 (paper/cd-rom : alk. paper)
+040 _aDLC
+ _cDLC
+ _dDLC
+042 _apcc
+050 00 _aQA76.73.P22
+ _bM33 2000
+082 00 _a005.13/3
+ _221
+100 1 _aMartinsson, Tobias,
+ _d1976-
+245 10 _aActivePerl with ASP and ADO /
+ _cTobias Martinsson.
+260 _aNew York :
+ _bJohn Wiley & Sons,
+ _c2000.
+300 _axxi, 289 p. :
+ _bill. ;
+ _c23 cm. +
+ _e1 computer laser disc (4 3/4 in.)
+500 _a"Wiley Computer Publishing."
+650 0 _aPerl (Computer program language)
+650 0 _aWorld Wide Web.
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_fields_after');
+
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/63.after.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/64.create.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/64.create.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/64.create.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,35 @@
+# $Id: 64.create.t,v 1.8 2003/10/16 15:59:42 edsummers Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>7;
+
+BEGIN {
+ use_ok( 'MARC::Record');
+ use_ok( 'MARC::Field');
+}
+
+my $record = MARC::Record->new();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $f245 = MARC::Field->new('245','1','0','a','Test create.');
+isa_ok( $f245, 'MARC::Field', '245 creation');
+
+my $f650 = MARC::Field->new('650','','0','a','World Wide Web.');
+isa_ok( $f650, 'MARC::Field', '650 creation');
+
+my $nadds = $record->append_fields($f245,$f650);
+is( $nadds, 2, 'two fields appended' );
+
+$record->as_usmarc(); ## side effect is that leader offsets are calculated
+
+my $expected =
+<<MARC_DATA;
+LDR 00087 2200049 4500
+245 10 _aTest create.
+650 0 _aWorld Wide Web.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'New record matches');
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/64.create.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/66.grouped.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,61 @@
+# $Id: 66.grouped.t,v 1.3 2003/02/26 05:43:16 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>7;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+ use_ok( 'MARC::Field' );
+}
+
+my $batch = new MARC::Batch( 'MARC::File::USMARC', 't/camel.usmarc' );
+isa_ok( $batch, 'MARC::Batch', 'Batch object creation' );
+
+my $record = $batch->next();
+isa_ok( $record, 'MARC::Record', 'Record object creation' );
+
+my $new = MARC::Field->new('270','','','a','1 Whitehouse Drive, DC.');
+isa_ok( $new, 'MARC::Field', 'Field creation');
+
+my $nadds = $record->insert_grouped_field($new);
+is( $nadds, 1 );
+
+my $expected =
+<<MARC_DATA;
+LDR 00755cam 22002414a 4500
+001 fol05731351
+003 IMchF
+005 20000613133448.0
+008 000107s2000 nyua 001 0 eng
+010 _a 00020737
+020 _a0471383147 (paper/cd-rom : alk. paper)
+040 _aDLC
+ _cDLC
+ _dDLC
+042 _apcc
+050 00 _aQA76.73.P22
+ _bM33 2000
+082 00 _a005.13/3
+ _221
+100 1 _aMartinsson, Tobias,
+ _d1976-
+245 10 _aActivePerl with ASP and ADO /
+ _cTobias Martinsson.
+260 _aNew York :
+ _bJohn Wiley & Sons,
+ _c2000.
+270 _a1 Whitehouse Drive, DC.
+300 _axxi, 289 p. :
+ _bill. ;
+ _c23 cm. +
+ _e1 computer laser disc (4 3/4 in.)
+500 _a"Wiley Computer Publishing."
+650 0 _aPerl (Computer program language)
+630 00 _aActive server pages.
+630 00 _aActiveX.
+MARC_DATA
+chomp($expected);
+
+is($record->as_formatted,$expected,'insert_grouped_field');
Added: packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/66.ordered.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,37 @@
+use strict;
+use integer;
+
+use Test::More tests => 9;
+
+BEGIN {
+ use_ok( 'MARC::Record' );
+}
+
+my $r = MARC::Record->new();
+
+$r->insert_fields_ordered(
+ MARC::Field->new( '100', '', '', a => 'foo' )
+);
+
+my @fields = $r->fields();
+isa_ok( $fields[0], 'MARC::Field' );
+is( $fields[0]->tag(), '100', 'insert_fields_ordered works with empty rec' );
+
+$r->insert_fields_ordered(
+ MARC::Field->new( '110', '', '', a => 'bar' ),
+ MARC::Field->new( '105', '', '', b => 'bez' ),
+ MARC::Field->new( '008', '', '', c => 'fez' )
+);
+
+ at fields = $r->fields();
+my @tags = ();
+foreach (@fields ) {
+ isa_ok( $_, 'MARC::Field' );
+ push( @tags, $_->tag() );
+}
+
+is( scalar(@fields), 4, 'insert_fields_ordered added multiple fields' );
+is_deeply( \@tags, [ '008', '100', '105', '110' ],
+ 'insert_fields_ordered() added fields in numeric order' );
+
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/70.croak.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,58 @@
+use Test::More tests=>9;
+
+## methods should croak when called wrong so that MARC::Record users can
+## identify the location of their mistakes.
+
+BEGIN {
+ use_ok( "MARC::Record" );
+ use_ok( "MARC::Field" );
+}
+
+my $record = MARC::Record->new();
+isa_ok( $record, "MARC::Record" );
+
+my $f100 = MARC::Field->new( '100', '', '', 'a' => 'author' );
+isa_ok( $f100, "MARC::Field", "F100 ok" );
+
+my $f200 = MARC::Field->new( '245', '', '', 'b' => 'title' );
+isa_ok( $f200, "MARC::Field", "F200 ok" );
+
+INSERT_FIELDS_AFTER: {
+ eval {
+ $n = $record->insert_fields_after( $f100, 'blah' );
+ };
+
+ like( $@, qr/All arguments must be MARC::Field objects/,
+ 'insert_fields_after() croaks appropriately' );
+
+}
+
+
+INSERT_FIELDS_BEFORE: {
+ eval {
+ $record->insert_fields_before( $f100, 'blah' );
+ };
+
+ like( $@, qr/All arguments must be MARC::Field objects/,
+ 'insert_fields_before() croaks appropriately' );
+}
+
+
+INSERT_GROUPED_FIELD: {
+ eval {
+ $n = $record->insert_grouped_field( 'blah' );
+ };
+
+ like( $@, qr/Argument must be MARC::Field object/,
+ 'insert_grouped_field() croaks appropriately' );
+}
+
+
+APPEND_FIELDS: {
+ eval {
+ $record->append_fields( 'blah' );
+ };
+
+ like( $@, qr/Arguments must be MARC::Field objects/,
+ 'append_fields() croaks appropriately' );
+}
Added: packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/75.warnings.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,48 @@
+use Test::More tests=>17;
+use strict;
+
+BEGIN {
+ use_ok( 'MARC::Batch' );
+}
+
+## when strict is on, errors cause next() to return undef
+
+STRICT_ON: {
+ my $batch = MARC::Batch->new( 'USMARC', 't/badldr.usmarc' );
+ isa_ok( $batch, 'MARC::Batch' );
+
+ $batch->warnings_off(); # avoid clutter on STDERR
+ $batch->strict_on(); # the default, but might as well test
+
+ my $count = 0;
+ while ( my $r = $batch->next() ) {
+ isa_ok( $r, "MARC::Record" );
+ $count++;
+ }
+
+ my @warnings = $batch->warnings();
+ is( scalar(@warnings), 2, "warnings() w/ strict on" );
+ is( $count, 2, "next() w/ strict on" );
+
+}
+
+## when strict is off you can keep on reading past errors
+
+STRICT_OFF: {
+ my $batch = MARC::Batch->new( 'USMARC', 't/badldr.usmarc' );
+ isa_ok( $batch, 'MARC::Batch' );
+
+ $batch->warnings_off(); # avoid clutter on STDERR
+ $batch->strict_off(); # turning off default behavior
+
+ my $count = 0;
+ while ( my $r = $batch->next() ) {
+ isa_ok( $r, "MARC::Record" );
+ $count++;
+ }
+
+ my @warnings = $batch->warnings();
+ is( scalar(@warnings), 6, "warnings() w/ strict off" );
+ is( $count, 8, "next() w/ strict off" );
+
+}
Added: packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/80.alphatag.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,104 @@
+use Test::More tests => 29;
+
+use strict;
+
+BEGIN {
+ use_ok( 'MARC::Record' );
+ use_ok( 'MARC::Field' );
+ use_ok( 'MARC::File' );
+ use_ok( 'MARC::File::USMARC' );
+ use_ok( 'MARC::File::MicroLIF' );
+}
+
+## According to the MARC spec tags can have alphanumeric
+## characters in them. They are rarely seen, but they are
+## allowed...and believe it or not some people actually use them!
+## Tags must be alphanumeric, and three characters long.
+
+my $record = MARC::Record->new();
+isa_ok( $record, "MARC::Record" );
+
+my $field;
+
+## this should fail since it is four chars long
+eval {
+ $field = MARC::Field->new( '245A', '', '', 'a' => 'Test' );
+};
+ok( !defined $field );
+like($@ ,qr/Tag "245A" is not a valid tag/, 'caught invalid tag "245A"' );
+
+## this should fail since it is a four digit number
+eval {
+ $field = MARC::Field->new( '2456', '', '', 'a' => 'Test' );
+};
+ok( !defined $field );
+like($@, qr/Tag "2456" is not a valid tag/, 'caught invalid tag "2456"' );
+
+## this should work be ok
+$field = MARC::Field->new( 'RAZ', '1', '2', 'a' => 'Test' );
+isa_ok( $field, 'MARC::Field', 'field with alphanumeric tag' );
+
+is ( $field->subfield('a'), 'Test', 'subfield()' );
+
+my $n = $field->update( 'a' => '123' );
+is( $n, 1 );
+is( $field->subfield('a'), '123', 'update()' );
+
+is_deeply( $field->subfields(), [ 'a' => 123 ], 'subfields()' );
+is( $field->tag(), 'RAZ', 'tag()' );
+
+is( $field->indicator(1), '1', 'indicator(1)' );
+is( $field->indicator(2), '2', 'indicator(2)' );
+
+$field->add_subfields( 'b' => 'Tweak' );
+is( $field->subfield('b'), 'Tweak', 'add_subfields()' );
+is( $field->as_string(), '123 Tweak', 'as_string()' );
+
+my $text = "RAZ 12 _a123\n _bTweak";
+is( $field->as_formatted(), $text, 'as_formatted()' );
+
+## make sure we can add a field with an alphanumeric tag to
+## a MARC::Record object
+
+$record->append_fields( $field );
+my $new = $record->field('RAZ');
+isa_ok( $new, 'MARC::Field', 'able to grab field with alpha tag' );
+
+$new = MARC::Field->new('100', '', '', 'a' => 'Gates, Bill');
+$record->append_fields( $new );
+
+$new = MARC::Field->new('110', '', '', 'a' => 'Microsoft');
+$record->append_fields( $new );
+
+my @fields = $record->field( '1..' );
+is( scalar(@fields), 2, 'field(regex)' );
+
+## test output as USMARC
+
+my $marc = $record->as_usmarc();
+
+my $filename = "$$.usmarc";
+open(OUT,">$filename");
+print OUT $record->as_usmarc();
+close(OUT);
+
+my $file = MARC::File::USMARC->in( $filename );
+isa_ok( $file, 'MARC::File::USMARC', "Opened $filename" );
+
+my $newRec = $file->next();
+isa_ok( $newRec, 'MARC::Record' );
+
+is( $newRec->as_usmarc(), $marc, 'as_usmarc()' );
+unlink( $filename );
+
+
+## test output as MicroLIF
+
+my $micro = $record->as_formatted();
+
+$file = MARC::File::MicroLIF->in( 't/alphatag.lif' );
+isa_ok( $file, 'MARC::File::MicroLIF' );
+$newRec = $file->next();
+isa_ok( $newRec, 'MARC::Record' );
+is ($newRec->as_formatted(), $micro, 'as_formatted()' );
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/81.decode.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,147 @@
+use Test::More tests => 32;
+
+use strict;
+
+BEGIN {
+ use_ok( 'MARC::Record' );
+ use_ok( 'MARC::File::MicroLIF' );
+ use_ok( 'MARC::File::USMARC' );
+}
+
+## decode can be called in a variety of ways
+##
+## $obj->decode()
+## MARC::File::MicroLIF->decode()
+## MARC::File::MicroLIF::decode()
+##
+## $obj->decode()
+## MARC::File::USMARC->decode()
+## MARC::File::USMARC::decode()
+##
+## these tests make sure we don't break any of them
+
+## slurp up some microlif
+open(IN, 't/sample1.lif' );
+my $str = join( '', <IN> );
+close IN;
+
+## attempt to use decode() on it
+
+DECODE_MICROLIF_METHOD: {
+ my $rec = MARC::File::MicroLIF->decode( $str );
+ isa_ok( $rec, 'MARC::Record' );
+ like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+DECODE_MICROLIF_FUNCTION: {
+ my $rec = MARC::File::MicroLIF::decode( $str );
+ isa_ok( $rec, 'MARC::Record' );
+ like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+## slurp up some usmarc
+open(IN, 't/sample1.usmarc' );
+$str = join( '', <IN> );
+close IN;
+
+## attempt to use decode on it
+
+DECODE_USMARC_METHOD: {
+ my $rec = MARC::File::USMARC->decode( $str );
+ isa_ok( $rec, 'MARC::Record' );
+ like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+DECODE_USMARC_FUNCTION: {
+ my $rec = MARC::File::USMARC::decode( $str );
+ isa_ok( $rec, 'MARC::Record' );
+ like( $rec->title(), qr/all about whales/i, 'retrieved title' );
+}
+
+
+#
+# make sure that MARC decode() can handle gaps in the record
+# body and data in the body not being in directory order
+#
+my @fragments = (
+ "00214nam 22000978a 4500",
+ "001001500000",
+ "010000900015",
+ "100002000024",
+ "245001100044", # length is 11
+ "260003300059",
+ "650002400092",
+ "\x1e",
+ "control number\x1e",
+ " \x1f" . "aLCCN\x1e",
+ "1 \x1f" . "aName, Inverted.\x1e",
+ # '@@@@' here is dead space after then end of the field.
+ # The directory is set up so that the 245 field consists just
+ # of two indicators, \x1f, 'a', 'Title.', and \x1e. The four
+ # characters after the \x1e constitute an (allowed) unused gap in the
+ # record body.
+ "10\x1f" . "aTitle.\x1e@@@@",
+ "3 \x1f" . "aPlace : \x1f" . "bPublisher, \x1f" . "cYear.\x1e",
+ " 0\x1f" . "aLC subject heading.\x1e",
+ "\x1d"
+);
+
+INITIAL_FRAGMENTS: {
+ my $rec = MARC::File::USMARC->decode( join('', @fragments) );
+ my @w = $rec->warnings();
+ is( scalar @w, 0, 'should be no warnings' );
+ is( $rec->field('245')->as_usmarc(), "10\x1f" . "aTitle.\x1e", 'gap after field data should not be returned' );
+ my $the260 = $rec->field('260');
+ isa_ok( $the260, "MARC::Field" );
+ is( $the260->indicator(1), '3', 'indicators in tag after gap should be OK' );
+ is( $the260->subfield('a'), "Place : ", 'subfield a in tag after gap should be OK' );
+ is( $the260->subfield('b'), "Publisher, ", 'subfield b in tag after gap should be OK' );
+ is( $the260->subfield('c'), "Year.", 'subfield c in tag after gap should be OK' );
+}
+
+# rearrange the directory for next test
+ at fragments[1,6] = @fragments[6,1];
+ at fragments[2,5] = @fragments[5,2];
+
+SHUFFLED_FRAGMENTS: {
+ my $rec = MARC::File::USMARC->decode( join('', @fragments) );
+ isa_ok( $rec, "MARC::Record" );
+ is( $rec->field('001')->as_string(), 'control number', '001 field correct' );
+ is( $rec->field('010')->as_string(), 'LCCN', '010 field correct' );
+ is( $rec->field('100')->as_string(), 'Name, Inverted.', '100 field correct' );
+ is( $rec->field('245')->as_string(), 'Title.', '245 field correct' );
+ is( $rec->field('260')->as_string(), 'Place : Publisher, Year.', '260 field correct' );
+ is( $rec->field('650')->as_string(), 'LC subject heading.', '650 field correct' );
+}
+
+
+#
+# make sure that MARC::File::MicroLIF::decode can handle
+# fields with no subfields without causing MARC::Field
+# to croak().
+#
+
+MICROLIF_NOSUBFIELDS: {
+ # both the 040 and 041 should be discarded
+ my $str = <<EOT;
+LDR00180nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 ^
+041 _^
+245 0_aAll about whales.^
+260 _bHoliday,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20571_cR_dALL^`
+EOT
+
+ my $rec = MARC::File::MicroLIF::decode( $str );
+ isa_ok( $rec, 'MARC::Record' );
+ my @warnings = $rec->warnings();
+ is( scalar @warnings, 2, 'check for appropriate warnings count' );
+ ok( grep( /Tag 040.*discarded/, @warnings ), '040 warning present' );
+ ok( grep( /Tag 041.*discarded/, @warnings ), '041 warning present' );
+ ok( $rec->field('245'), '245 should not exist' );
+ ok( !$rec->field('040'), '040 should not exist' );
+ ok( !$rec->field('041'), '041 should not exist' );
+}
Added: packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,17 @@
+use strict;
+use Test::More tests => 4;
+use MARC::File::USMARC;
+
+my $file = MARC::File::USMARC->in( 't/baddir.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC' );
+
+my $r = $file->next();
+isa_ok( $r, 'MARC::Record' );
+
+my @warnings = $r->warnings();
+
+is( $warnings[0], 'No directory found in record 1',
+ 'got bad directory warning' );
+is( $r->title(), 'Green Eggs and Ham',
+ 'found title despite bad directory' );
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/82.baddir.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/83.indicators.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,39 @@
+use Test::More tests => 11;
+use strict;
+
+use_ok( 'MARC::Record' );
+
+my $r = MARC::Record->new();
+
+# alphabetic indicators are legal in some dialects of MARC
+
+$r->append_fields( MARC::Field->new( 245, 'z', 'Z', a => 'foo' ) );
+is( $r->field(245)->indicator(1), 'z', 'indicator 1 can be non-numeric' );
+is( $r->field(245)->indicator(2), 'Z', 'indicator 2 can be non-numeric' );
+
+# rumor had it that invalid indicators sometimes invalidated other
+# valid indicators, so these tests make sure that is not the case
+
+$r->append_fields( MARC::Field->new( 100, 'dk', 2, a=> 'foo' ) );
+is( $r->field(100)->indicator(1), ' ', 'invalid indicator squashed to space' );
+is( $r->field(100)->indicator(2), 2, 'not disturbed' );
+$r->append_fields( MARC::Field->new( 111, 2, '-didk', a=> 'foo' ) );
+is ($r->field(111)->indicator(1), 2, 'not disturbed' );
+is ($r->field(111)->indicator(2), ' ', 'invalid indicator squashed to space' );
+
+## read a file which has an invalid indicator (a hyphen) and make sure it does
+## not affect a valid indicator
+
+use_ok( 'MARC::Batch' );
+
+my $batch = MARC::Batch->new( 'USMARC', 't/badind.usmarc' );
+$batch->strict_off();
+$batch->warnings_off();
+
+$r = $batch->next();
+my @warnings = $batch->warnings();
+is( $warnings[0], 'Invalid indicator "-" forced to blank',
+ 'got expected warning message' );
+
+is( $r->field(245)->indicator(1),' ','hyphen forced to blank in indicator 1' );
+is( $r->field(245)->indicator(2),'0','indicator 2 undisturbed' );
Added: packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/85.fh.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,158 @@
+# test that we can pass filehandles to MARC::File::USMARC and MARC::Batch
+
+use Test::More tests => 206;
+use strict;
+use IO::File;
+
+use_ok( 'MARC::File::USMARC' );
+use_ok( 'MARC::File::MicroLIF' );
+use_ok( 'MARC::Batch' );
+
+# first try globs with MARC::File::USMARC
+
+USMARC_FILE_GLOB: {
+
+ open( MARCDATA, 't/camel.usmarc' );
+ my $fh = *MARCDATA;
+ my $file = MARC::File::USMARC->in( $fh );
+ isa_ok( $file, "MARC::File::USMARC" );
+
+ my $count = 0;
+ while ( my $r = $file->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 10, 'MARC::File::USMARC avec globbed file handle works' );
+
+}
+
+
+# now try IO::File objects with MARC::File::USMARC
+
+USMARC_IO_FILE: {
+
+ my $fh = IO::File->new( 't/camel.usmarc' );
+ isa_ok( $fh, "IO::File" );
+ my $file = MARC::File::USMARC->in( $fh );
+ isa_ok( $file, "MARC::File::USMARC" );
+
+ my $count = 0;
+ while ( my $r = $file->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 10, 'MARC::File::USMARC avec IO::File object works' );
+
+}
+
+# now try globs with MARC::File::MicroLIF
+
+MICROLIF_FILE_GLOB: {
+
+ open( LIFDATA, 't/sample20.lif' );
+ my $fh = *LIFDATA;
+ my $file = MARC::File::MicroLIF->in( $fh );
+ isa_ok( $file, "MARC::File::MicroLIF" );
+
+ my $count = 0;
+ while ( my $r = $file->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 20, 'MARC::File::MicroLIF avec globbed file handle works' );
+
+}
+
+# and IO::File object with MARC::File::MicroLIF
+
+MICROLIF_IO_FILE: {
+
+ my $fh = IO::File->new( 't/sample20.lif' );
+ isa_ok( $fh, "IO::File" );
+ my $file = MARC::File::MicroLIF->in( $fh );
+ isa_ok( $file, "MARC::File::MicroLIF" );
+
+ my $count = 0;
+ while ( my $r = $file->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 20, 'MARC::File::MicroLIF avec IO::File object works' );
+
+}
+
+# ok now lets check that MARC::Batch works as expected
+
+MARC_BATCH_FILEHANDLE: {
+
+ my $fh = IO::File->new( 't/camel.usmarc' );
+ isa_ok( $fh, "IO::File" );
+ my $batch = MARC::Batch->new( 'USMARC', $fh );
+ isa_ok( $batch, "MARC::Batch" );
+
+ my $count = 0;
+ while ( my $r = $batch->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 10, 'MARC::Batch avec IO::File object and USMARC' );
+
+}
+
+# now lets try two filehandles
+
+MARC_BATCH_FILEHANDLES: {
+
+ my $fh1 = IO::File->new( 't/camel.usmarc' );
+ isa_ok( $fh1, "IO::File" );
+ my $fh2 = IO::File->new( 't/camel.usmarc' );
+ isa_ok( $fh2, "IO::File" );
+ my $batch = MARC::Batch->new( 'USMARC', $fh1, $fh2 );
+ isa_ok( $batch, "MARC::Batch" );
+
+ my $count = 0;
+ while ( my $r = $batch->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 20, 'MARC::Batch avec IO::File objects and USMARC' );
+
+}
+
+# now lets try a mix of filenames, IO::File objects and globs
+
+MARC_BATCH_MIX: {
+
+ open( MARCDATA, 't/camel.usmarc' );
+ my $fh1 = *MARCDATA;
+ my $fh2 = IO::File->new( 't/camel.usmarc' );
+ isa_ok( $fh2, "IO::File" );
+ my $batch = MARC::Batch->new( 'USMARC', $fh1, $fh2, 't/camel.usmarc' );
+ isa_ok( $batch, "MARC::Batch" );
+
+ my $count = 0;
+ while ( my $r = $batch->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 30, 'MARC::Batch avec mixture of handles and names and Lif');
+
+}
+
+MICROLIF_BATCH_MIX: {
+
+ open( LIFDATA, 't/sample20.lif' );
+ my $fh1 = *LIFDATA;
+ my $fh2 = IO::File->new( 't/sample20.lif' );
+ isa_ok( $fh2, "IO::File" );
+ my $batch = MARC::Batch->new( 'MicroLIF', $fh1, $fh2, 't/sample20.lif' );
+ isa_ok( $batch, "MARC::Batch" );
+
+ my $count = 0;
+ while ( my $r = $batch->next() ) {
+ ++$count;
+ isa_ok( $r, "MARC::Record" );
+ }
+ is( $count, 60, 'MARC::Batch avec mixture of handles and names and Lif' );
+
+}
Added: packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/alphatag.lif 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,5 @@
+header alpha tag MicroLIF file
+LDR00107 2200061 4500
+RAZ12_a123_bTweak
+100 _aGates, Bill
+110 _aMicrosoft
Added: packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/baddir.usmarc 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00382nam 22001455a 4500001001200000005001800012008004100030020002200071091002200093100001500115245002300130260002300153300000900176852005100185 2000932
20020221152100.00
020221 1988 d
a0394800168c$7.99
aChild. Lit. E SEU
aSeuss, Dr.
00aGreen Eggs and Ham
bRandom Housec1988
a62p.
aCTd2/21/02fGENhE SEUl220p220000174197.99
Added: packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/badind.usmarc 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00240nam 22001092 4500008004100000040001000041245002200051260002000073300001100093900000800104952001800112
891207s19xx xxu 00010 eng d
cIMchF
-0aAll about whales.
bHoliday,c1987.
a[ ] p.
aALL
a20571cRdALL
Added: packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/badldr.usmarc 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00240nam 2200085 4500008004100000100001800041245003400059260002000093852004100113
020222n 0 und
1 aAndrews, V.C.
10aFallen hearts.hMiscellaneous
0 bMiscellaneous,
aPaperbacksbMFFhAiANDp13397000015
00232nam 2200085 4500008004100000100002000041245002900061260002000090852003600110
020222n 0 und
1 aKoontz, Dean R.
10aHideaway.hMiscellaneous
0 bMiscellaneous,
aPaperbackshKiKOOp13397000024
00345nam 2200109 4500020001500000245006800015260003500083300001100118651002400129651002500153852005700178
a0670894354
10aMaclean's peopleb: a gallery of Canadian greatshMiscellaneous
0 aTorontobPenguin/Vikingcc2001
a416 p.
aCanadax Biography.
aCanadaxBiographies.
935aAdult Non FictionbMFFhB MacliMACp13397032217
00250nam 2200085 4500020001500000245005700015260003700072300001400109852004100123
a1559600128
10aFlying leathernecksb[videorecording]hMiscellaneous
0 bTurner Home Entertainmentcc1988
a102 mins.
99.95bMFFhVID 990iFLYp13397032480
00251nam 2200085 4500008004100000100001200041245005100053260002000104852004100124
020222n 0 und
1 aCooper,
10aBlack fire : a Star Trek novel.hMiscellaneous
0 bMiscellaneous,
aPaperbacksbMFFhCiCOOp13397000054
00398nam 2200157 4500001000100000005000100001008004100002020001500043082000600058100002200064245003700086260003600123300001100159440001700170852005300187
0921n xx 00011 eng u
a0553241508
aF
1 aWoodruff, Marian.
10aKiss me, creep.bhMiscellaneous
0 a-- TorontobBantam Bookscc1984
a134 p.
aSweet Dreams
aJuvenile FictionhJ F Woo p.b.iWOOp13397000072
7
\ No newline at end of file
Added: packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Test::More;
+
+plan( tests => 5 );
+
+use_ok( 'MARC::Batch' );
+
+my $b = MARC::Batch->new( 'USMARC', 't/camel.usmarc' );
+isa_ok( $b, 'MARC::Batch' );
+
+my $r = $b->next( \&wanted );
+isa_ok( $r, 'MARC::Record' );
+
+my @fields = $r->fields();
+is( scalar( @fields ), 1, 'filter worked' );
+
+eval { $r = $b->next( 'barf' ); };
+like( $@, qr/filter function in next\(\)/, 'error message' );
+
+
+sub wanted {
+ my ( $tag, $data ) = @_;
+ if ( $tag ne '245' ) { return ( 0 ); }
+ return( 1 );
+}
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/batch-filter.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/camel.usmarc 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500
fol05731351
IMchF
20000613133448.0
000107s2000 nyua 001 0 eng
a 00020737
a0471383147 (paper/cd-rom : alk. paper)
aDLCcDLCdDLC
apcc
00aQA76.73.P22bM33 2000
00a005.13/3221
1 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 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389
fol05754809
IMchF
20000601115601.0
000203s2000 mau 001 0 eng
a 00022023
a1565926994
aDLCcDLCdDLC
apcc
00aQA76.73.P22bD47 2000
00a005.74221
1 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 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362
fol05843555
IMchF
20000525142739.0
000318s1999 cau b 001 0 eng
a 00501349
aDLCcDLCdDLC
apcc
00aQA76.73.P22bB763 1999
00a005.13/3221
1 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 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336
fol05843579
IMchF
20000525142716.0
000318s1999 caua 001 0 eng
a 00502116
a0072120002
aDLCcDLCdDLC
apcc
00aQA76.73.P22bB762 1999
00a005.13/3221
1 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 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499
fol05848297
IMchF
20000524125727.0
000518s2000 mau 001 0 eng
a 00041664
a1565924193
aDLCcDLC
apcc
00aQA76.73.P22bG84 2000
00a005.2/762221
1 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 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385
fol05865950
IMchF
20000615103017.0
000612s2000 mau 100 0 eng
a 00055759
a0596000138
aDLCcDLC
apcc
00aQA76.73.P22bP475 2000
00a005.13/3221
2 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 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324
fol05865956
IMchF
20000615102948.0
000612s2000 mau 000 0 eng
a 00055770
a1565926099
aDLCcDLC
apcc
00aQA76.73.P22bB43 2000
00a005.13/3221
1 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 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390
fol05865967
IMchF
20000615102611.0
000614s2000 mau 000 0 eng
a 00055799
a0596000278
aDLCcDLC
apcc
00aQA76.73.P22bW35 2000
00a005.13/3221
1 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 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360
fol05872355
IMchF
20000706095105.0
000315s1999 njua 001 0 eng
a 00500678
a013020868X
aDLCcDLCdDLC
apcc
00aQA76.73.P22bL69 1999
00a005.13/3221
1 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 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401
fol05882032
IMchF
20000707091904.0
000630s2000 cau 001 0 eng
a 00058174
a0764547291 (alk. paper)
aDLCcDLC
apcc
00aQA76.73.P22bF64 2000
00a005.13/3221
2 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.
\ No newline at end of file
Added: packages/libmarc-record-perl/branches/upstream/current/t/convenience.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/convenience.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/convenience.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,54 @@
+# $Id: convenience.t,v 1.4 2003/02/25 20:42:07 petdance Exp $
+
+use strict;
+use integer;
+
+use constant PERLCONF_SKIPS => 6;
+use constant CAMEL_SKIPS => 2;
+use constant XPLATFORM_SKIPS => 2;
+
+use Test::More tests=>( 2 + (5*3) + CAMEL_SKIPS + PERLCONF_SKIPS + XPLATFORM_SKIPS );
+
+BEGIN {
+ use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+my $marc;
+for ( 1..PERLCONF_SKIPS ) { # Skip to the Perl conference
+ $marc = $file->next();
+ isa_ok( $marc, 'MARC::Record', 'Got a record' );
+}
+
+is( $marc->author, 'Perl Conference 4.0 (2000 : Monterey, Calif.)' );
+is( $marc->title, 'Proceedings of the Perl Conference 4.0 : July 17-20, 2000, Monterey, California.' );
+is( $marc->title_proper, 'Proceedings of the Perl Conference 4.0 :' );
+is( $marc->edition, '1st ed.' );
+is( $marc->publication_date, '2000.' );
+
+for ( 1..CAMEL_SKIPS ) { # Skip to the camel
+ $marc = $file->next();
+ isa_ok( $marc, 'MARC::Record', 'Got a record' );
+}
+
+is( $marc->author, 'Wall, Larry.' );
+is( $marc->title, 'Programming Perl / Larry Wall, Tom Christiansen & Jon Orwant.' );
+is( $marc->title_proper, 'Programming Perl /' );
+is( $marc->edition, '3rd ed.' );
+is( $marc->publication_date, '2000.' );
+
+for ( 1..XPLATFORM_SKIPS ) { # Skip to Cross-Platform Perl
+ $marc = $file->next();
+ isa_ok( $marc, 'MARC::Record', 'Got a record' );
+}
+
+is( $marc->author, 'Foster-Johnson, Eric.' );
+is( $marc->title, 'Cross-platform Perl / Eric F. Johnson.' );
+is( $marc->title_proper, 'Cross-platform Perl /' );
+is( $marc->edition, '' );
+is( $marc->publication_date, '2000.' );
+
+$file->close;
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/convenience.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,41 @@
+# $Id: decode-filter.t,v 1.3 2003/02/26 05:52:35 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use strict;
+
+use Test::More tests => 3;
+
+BEGIN {
+ use_ok( 'MARC::Record' );
+}
+
+
+sub wanted {
+ my $tag = shift;
+ my $data = shift;
+
+ return $tag == 245 || $tag >= 600;
+}
+
+my $blob = "00397nam 22001458a 4500001001200000003000600012010001600018100001700034245006800051250001200119260004300131650003700174700002300211700001700234\x1Efol05865967\x1EIMchF\x1E \x1Fa 00055799\x1E1 \x1FaWall, Larry.\x1E10\x1FaProgramming Perl / \x1FcLarry Wall, Tom Christiansen & Jon Orwant.\x1E \x1Fa3rd ed.\x1E \x1FaCambridge, Mass. : \x1FbO'Reilly, \x1Fc2000.\x1E 0\x1FaPerl (Computer program language)\x1E1 \x1FaChristiansen, Tom.\x1E1 \x1FaOrwant, Jon.\x1E\x1D";
+
+my $marc = MARC::Record->new_from_usmarc( $blob, \&wanted );
+isa_ok( $marc, "MARC::Record" );
+
+my $expected = join( "", <DATA> );
+chomp $expected;
+
+my $generated = $marc->as_formatted;
+chomp $generated;
+
+is( $generated, $expected, 'as_formatted()' );
+
+__END__
+LDR 00397nam 22001458a 4500
+245 10 _aProgramming Perl /
+ _cLarry Wall, Tom Christiansen & Jon Orwant.
+650 0 _aPerl (Computer program language)
+700 1 _aChristiansen, Tom.
+700 1 _aOrwant, Jon.
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/decode-filter.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,32 @@
+# $Id: file-filter.t,v 1.2 2003/02/25 20:42:08 petdance Exp $
+
+use strict;
+use integer;
+
+use constant CAMEL_SKIPS => 8;
+
+use Test::More tests=>(CAMEL_SKIPS * 2) + 7;
+
+BEGIN {
+ use_ok( 'MARC::File::USMARC' );
+}
+
+my $file = MARC::File::USMARC->in( 't/camel.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+my $marc;
+for ( 1..CAMEL_SKIPS ) { # Skip to the camel
+ $marc = $file->next( sub { $_[0] == 245 } ); # Only want 245 in the record
+ isa_ok( $marc, 'MARC::Record', 'Got a record' );
+
+ is( scalar $marc->fields, 1, 'Should only have one tag' );
+}
+
+is( $marc->author, '' );
+is( $marc->title, 'Programming Perl / Larry Wall, Tom Christiansen & Jon Orwant.' );
+is( $marc->title_proper, 'Programming Perl /' );
+is( $marc->edition, '' );
+is( $marc->publication_date, '' );
+
+$file->close;
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/file-filter.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/file-header.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/file-header.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/file-header.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,30 @@
+# $Id: file-header.t,v 1.1 2003/03/12 20:15:56 moregan Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>5;
+
+BEGIN {
+ use_ok( 'MARC::File::MicroLIF' );
+}
+
+
+MISSINGHEADER: {
+ my $file = MARC::File::MicroLIF->in( 't/sample1.lif' );
+ isa_ok( $file, 'MARC::File::MicroLIF', 'got a MicroLIF file' );
+ ok( !$file->header(), 'file contains no header' );
+ $file->close();
+}
+
+MISSINGHEADER: {
+ my $file = MARC::File::MicroLIF->in( 't/sample20.lif' );
+ isa_ok( $file, 'MARC::File::MicroLIF', 'got a MicroLIF file' );
+ is(
+ $file->header(),
+ 'header 20 rec MicroLIF file ',
+ 'file header correct'
+ );
+ $file->close();
+}
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/file-header.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0a.lif 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,9 @@
+MicroLIF: x0a line end
+LDR00180nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about whales.^
+260 _bHoliday,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20571_cR_dALL^`
Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d.lif 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+MicroLIF: x0d line end
LDR00180nam 22 2 4500^
008891207s19xx xxu 00010 eng d^
040 _cIMchF^
245 0_aAll about whales.^
260 _bHoliday,_c1987.^
300 _a[ ] p.^
900 _aALL^
952 _a20571_cR_dALL^`
\ No newline at end of file
Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings-0d0a.lif 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,9 @@
+MicroLIF: x0dx0a line end
+LDR00180nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about whales.^
+260 _bHoliday,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20571_cR_dALL^`
Added: packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,40 @@
+# $Id: lineendings.t,v 1.3 2003/11/25 04:01:48 petdance Exp $
+# Test creating a MARC record for the Camel book
+#
+# Bugs, comments, suggestions welcome: marc at petdance.com
+
+use strict;
+
+use Test::More;
+use vars qw( @endings );
+
+BEGIN {
+ @endings = qw( 0a 0d 0d0a );
+ plan( tests => @endings*13 + 2 );
+ use_ok( 'MARC::Record' );
+ use_ok( 'MARC::File::MicroLIF' );
+}
+
+
+foreach my $ending ( @endings ) {
+ my $filename = "t/lineendings-$ending.lif";
+ my $file = MARC::File::MicroLIF->in( $filename );
+ isa_ok( $file, 'MARC::File::MicroLIF' );
+ is( scalar $file->warnings(), 0, 'no file warnings for $filename' );
+
+ my $record = $file->next();
+ isa_ok( $record, 'MARC::Record', 'successfully decoded' );
+ is( scalar $record->warnings(), 0, 'no record warnings' );
+
+ is( scalar $record->fields(), 7, 'checking the number of fields in the record' );
+ is( $record->leader(), '00180nam 22 2 4500', "checking $filename LDR" );
+ is( $record->field('008')->as_string(), '891207s19xx xxu 00010 eng d', "checking $filename 008" );
+ is( $record->field('040')->as_string(), 'IMchF', "checking $filename 040" );
+ is( $record->field('245')->as_string(), 'All about whales.', "checking $filename 245" );
+ is( $record->field('260')->as_string(), 'Holiday, 1987.', "checking $filename 260" );
+ is( $record->field('300')->as_string(), '[ ] p.', "checking $filename 300" );
+ is( $record->field('900')->as_string(), 'ALL', "checking $filename 900" );
+ is( $record->field('952')->as_string(), '20571 R ALL', "checking $filename 952" );
+
+ $file->close();
+}
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/lineendings.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/lint.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/lint.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/lint.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,96 @@
+
+use strict;
+use Test::More tests=>35;
+
+BEGIN { use_ok( 'MARC::File::USMARC' ); }
+BEGIN { use_ok( 'MARC::Lint' ); }
+
+
+FROM_FILE: {
+ my @expected = ( (undef) x 9, [ q{100: Indicator 1 must be 0, 1 or 3 but it's "2"} ] );
+
+ my $lint = new MARC::Lint;
+ isa_ok( $lint, 'MARC::Lint' );
+
+ my $filename = "t/camel.usmarc";
+
+ my $file = MARC::File::USMARC->in( $filename );
+ while ( my $marc = $file->next() ) {
+ isa_ok( $marc, 'MARC::Record' );
+ my $title = $marc->title;
+ $lint->check_record( $marc );
+
+ my $expected = shift @expected;
+ my @warnings = $lint->warnings;
+
+ if ( $expected ) {
+ ok( eq_array( \@warnings, $expected ), "Warnings match on $title" );
+ } else {
+ is( scalar @warnings, 0, "No warnings on $title" );
+ }
+ } # while
+
+ is( scalar @expected, 0, "All expected messages have been exhausted." );
+}
+
+
+FROM_TEXT: {
+ my $marc = MARC::Record->new();
+ isa_ok( $marc, 'MARC::Record', 'MARC record' );
+
+ $marc->leader("00000nam 22002538a 4500"); # The ????? represents meaningless digits at this point
+ my $nfields = $marc->add_fields(
+ [100, "1","4",
+ a => "Wall, Larry",
+ ],
+ [110, "1","",
+ a => "O'Reilly & Associates.",
+ ],
+ [245, "9","0",
+ a => "Programming Perl / ",
+ a => "Big Book of Perl /",
+ c => "Larry Wall, Tom Christiansen & Jon Orwant.",
+ ],
+ [250, "", "",
+ a => "3rd ed.",
+ ],
+ [250, "", "",
+ a => "3rd ed.",
+ ],
+ [260, "", "",
+ a => "Cambridge, Mass. : ",
+ b => "O'Reilly, ",
+ r => "2000.",
+ ],
+ [590, "4","",
+ a => "Personally signed by Larry.",
+ ],
+ [856, "4","3",
+ u => "http://www.perl.com/",
+ ],
+ );
+ is( $nfields, 8, "All the fields added OK" );
+
+ my @expected = (
+ q{1XX: Only one 1XX tag is allowed, but I found 2 of them.},
+ q{100: Indicator 2 must be blank but it's "4"},
+ q{245: Indicator 1 must be 0 or 1 but it's "9"},
+ q{245: Subfield _a is not repeatable.},
+ q{250: Field is not repeatable.},
+ q{260: Subfield _r is not allowed.},
+ q{856: Indicator 2 must be blank, 0, 1, 2 or 8 but it's "3"},
+ );
+
+ my $lint = new MARC::Lint;
+ isa_ok( $lint, 'MARC::Lint' );
+
+ $lint->check_record( $marc );
+ my @warnings = $lint->warnings;
+ while ( @warnings ) {
+ my $expected = shift @expected;
+ my $actual = shift @warnings;
+
+ is( $actual, $expected, "Checking expected messages" );
+ }
+ is( scalar @expected, 0, "All expected messages exhausted." );
+}
Added: packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/pod-coverage.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4 @@
+use Test::More;
+eval "use Test::Pod::Coverage 0.08";
+plan skip_all => "Test::Pod::Coverage 0.08 required for testing POD coverage" if $@;
+all_pod_coverage_ok();
Added: packages/libmarc-record-perl/branches/upstream/current/t/pod.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/pod.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/pod.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,4 @@
+use Test::More;
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok();
Added: packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample1.lif 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,8 @@
+LDR00180nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about whales.^
+260 _bHoliday,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20571_cR_dALL^`
Added: packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample1.usmarc 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+00240nam 22001092 4500008004100000040001000041245002200051260002000073300001100093900000800104952001800112
891207s19xx xxu 00010 eng d
cIMchF
0aAll about whales.
bHoliday,c1987.
a[ ] p.
aALL
a20571cRdALL
\ No newline at end of file
Added: packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample100.lif 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,1157 @@
+header 100 rec MicroLIF file
+LDR01306pam 22 5a 4500^
+003IMchF^
+00520000404110431.6^
+008940823s1996 nyua j 000 0 eng ^
+010 _a 94031110 /AC^
+020 _a0590441515 :_c$14.95^
+040 _aDLC_cDLC_dDLC_dICrlF_dIMchF-DB_dICrlF^
+043 _an-us---_an-us-ny^
+05000_aJV6450_b.M34 1996^
+08200_a304.8/73/009_221^
+1001 _aMaestro, Betsy.^
+24510_aComing to America :_bthe story of immigration /_cby Betsy Maestro ; illustrated by Susannah Ryan.^
+260 _aNew York :_bScholastic,_cc1996.^
+300 _a[40] p. :_bcol. ill. ;_c29 cm.^
+520 _aTraces the history of immigration to the United States and tells people's reasons for choosing to move to America.^
+61020_aEllis Island Immigration Station (New York, N.Y.)_xHistory_xJuvenile literature.^
+61021_aEllis Island Immigration Station (New York, N.Y.)_xHistory.^
+61027_aEllis Island Immigration Station (New York, N.Y.)_xHistory._2sears^
+650 0_aImmigrants_zUnited States_xHistory_xJuvenile literature.^
+650 1_aImmigrants.^
+650 7_aImmigrants._2sears^
+651 0_aUnited States_xEmigration and immigration_xHistory_xJuvenile literature.^
+651 1_aUnited States_xEmigration and immigration_xHistory.^
+651 7_aUnited States_xImmigration and emigration_xHistory._2sears^
+7001 _aRyan, Susannah,_eill.^
+900 _a304.8 MAE^
+9401 _a4.8_bK-3_sWilson's Children_sElem. School Library Collection_sSchool Library Journal^
+952 _a25877_cR_d304.8 MAE^`
+LDR01287pam 22 7a 4500^
+003IMchF^
+00520000321104353.2^
+008931102s1996 nyua j b 001 0 eng ^
+010 _a 93040296 /AC^
+020 _a0679873929 (pbk.)^
+020 _a0329031058^
+020 _a0679943250^
+020 _a0679887717 (pbk.)^
+040 _aDLC_cDLC_dDLC_dICrlF_dKyLxBWI_dICrlF^
+043 _an-us---^
+05000_aHQ798_b.J85 1996^
+08200_a305.23/5_221^
+1001 _aJukes, Mavis.^
+24510_aIt's a girl thing :_bhow to stay healthy, safe, and in charge /_cby Mavis Jukes ; illustrations by Debbie Tilley.^
+260 _aNew York, N.Y. :_bAlfred A. Knopf :_bdistributed by Random House,_cc1996.^
+300 _aviii, 135 p. :_bill. ;_c23 cm.^
+504 _aIncludes bibliographical references (p. 130-132) and index.^
+520 _aA guide for preteen girls discussing the physical changes associated with puberty and addressing other issues that teens face, such as drugs, drinking, sex, disease, and safety.^
+650 0_aTeenage girls_zUnited States_xJuvenile literature.^
+650 0_aPuberty_zUnited States_xJuvenile literature.^
+650 0_aSex instruction for girls_zUnited States.^
+650 1_aPuberty.^
+650 1_aSex instruction for girls.^
+650 7_aPuberty._2sears^
+650 7_aSex education._2sears^
+650 7_aAdolescence._2sears^
+7001 _aTilley, Debbie,_eill.^
+900 _a305.23 JUK^
+9401 _a7.5_b5-8_sWilson's Children_sWilson's Junior High School_sElem. School Library Collection^
+952 _a26036_cR_d305.23 JUK^`
+LDR01186pam 22 a 4500^
+003IMchF^
+00519960807153651.5^
+008920115s1993 nyua j b 000 0 eng ^
+010 _a 92003698 /AC^
+020 _a0803712928 (trade) :_c$14.99^
+020 _a0803712936 (lib. bdg.) :_c$14.89^
+040 _aDLC_cDLC_dICrlF_dIMchF-DB_dICrlF^
+043 _an-us---^
+05000_aGT4403_b.P56 1993^
+08204_a394.26_220^
+1001 _aPinkney, Andrea Davis.^
+24510_aSeven candles for Kwanzaa /_cAndrea Davis Pinkney ; pictures by Brian Pinkney.^
+2463 _a7 candles for Kwanzaa^
+250 _a1st ed.^
+260 _aNew York :_bDial Books for Young Readers,_cc1993.^
+300 _a[32] p. :_bcol. ill. ;_c24 x 29 cm.^
+504 _aIncludes bibliographical references (p. [32]).^
+520 _aDescribes the origins and practices of Kwanzaa, the seven-day festival during which people of African descent rejoice in their ancestral values.^
+650 0_aKwanzaa_xJuvenile literature.^
+650 0_aAfro-Americans_xSocial life and customs_xJuvenile literature.^
+650 1_aKwanzaa.^
+650 1_aAfro-Americans_xSocial life and customs.^
+650 7_aKwanzaa._2sears^
+650 7_aAfrican Americans_xSocial life and customs._2sears^
+7001 _aPinkney, J. Brian,_eill.^
+900 _a394.26 PIN^
+9401 _a4.9_bK-3_sWilson's Children_sElem. School Library Collection_sSchool Library Journal^
+952 _a26038_cR_d394.26 PIN^`
+LDR00971pam 22 4a 4500^
+003IMchF^
+00520000321083032.8^
+008880225s1988 flua j 001 0 eng ^
+010 _a 88004686 /AC^
+020 _a0865924627^
+040 _aDLC_cDLC_dICrlF^
+0500 _aQL638.95.L3_bP35 1989^
+08204_a597.3/3_221^
+08200_a597/.31_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aGreat white sharks /_cSarah Palmer ; illustrated by Ernest Nicol and Libby Turner.^
+260 _aVero Beach, FL :_bRourke,_cc1988.^
+300 _a24 p. :_bcol. ill. ;_c19 cm.^
+4901 _aShark discovery library^
+500 _aIncludes index.^
+520 _aA brief description of the physical characteristics, habits, and natural environment of the great white shark, considered to be the most dangerous shark of all.^
+650 0_aWhite shark_vJuvenile literature.^
+650 1_aWhite shark.^
+650 1_aSharks.^
+650 7_aWhite shark._2sears^
+650 7_aSharks._2sears^
+7001 _aHadler, Sally,_eill.^
+7001 _aNicol, Ernest,_eill.^
+8001 _aPalmer, Sarah,_d1955- _tShark discovery library.^
+900 _a597.3 PAL^
+9402 _a3.8_b3-6_sSchool Library Journal^
+952 _a1319_cR_d597.3 PAL^`
+LDR00887pam 22 4a 4500^
+003IMchF^
+00519991026155912.6^
+008880205c19891988flua j 001 0 eng ^
+010 _a 88003242 /AC^
+020 _a0865924775^
+040 _aDLC_cDLC_dICrlF^
+0500 _aQL737.C425_bP34 1989^
+08204_a599.5/22_221^
+08200_a599.5/1_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aGray whales /_cSarah Palmer ; illustrated by Sally Hadler.^
+260 _aVero Beach, Fla. :_bRourke Enterprises,_c[1989], c1988.^
+300 _a23 p. :_bcol. ill. ;_c19 x 20 cm.^
+4901 _aThe Whale discovery library^
+500 _aIncludes index.^
+520 _aDescribes gray whales, where they live, what they eat, and their family life.^
+650 0_aPacific gray whale_xJuvenile literature.^
+650 1_aPacific gray whale.^
+650 1_aWhales.^
+650 7_aPacific gray whale._2sears^
+650 7_aWhales._2sears^
+7001 _aHadler, Sally,_eill.^
+8001 _aPalmer, Sarah,_d1955-_tWhale discovery library.^
+900 _a599.5 PAL^
+9402 _a3.6_b3-6_sSchool Library Journal^
+952 _a1325_cR_d599.5 PAL^`
+LDR00914pam 22 4a 4500^
+003IMchF^
+00519991027074126.3^
+008880204s1988 flua j 001 0 eng ^
+010 _a 88003238 /AC/r89^
+020 _a0865924783^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aQL737.C424_bP35 1988^
+08204_a599.5/25_221^
+08200_a599.5/1_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aHumpback whales /_cSarah Palmer ; illustrated by Tony Gibbon.^
+260 _aVero Beach, Fla. :_bRourke Enterprises,_cc1988.^
+300 _a23 p. :_bcol. ill. ;_c19 x 20 cm.^
+4901 _aThe Whale discovery library^
+500 _aIncludes index.^
+520 _aIntroduces the physical appearance, habits, diet, and habitat of the humpback whale and threats to its existence.^
+650 0_aHumpback whale_xJuvenile literature.^
+650 1_aHumpback whale.^
+650 1_aWhales.^
+650 7_aHumpback whale._2sears^
+650 7_aWhales._2sears^
+7001 _aGibbon, Tony,_eill.^
+8001 _aPalmer, Sarah,_d1955-_tWhale discovery library.^
+900 _a599.5 PAL^
+9402 _a3.5_b3-6_sSchool Library Journal^
+952 _a1328_cR_d599.5 PAL^`
+LDR00879pam 22 4a 4500^
+003IMchF^
+00519991027074426.9^
+008880205s1988 flua j 001 0 eng ^
+010 _a 88003240 /AC^
+020 _a0865924767^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aQL737.C433_bP34 1988^
+08204_a599.5/43_221^
+08200_a599.5/3_219^
+1001 _aPalmer, Sarah,_d1955-^
+24510_aNarwhals /_cSarah Palmer ; illustrated by Sally Hadler.^
+260 _aVero Beach, Fla. :_bRourke Enterprises,_cc1988.^
+300 _a23 p. :_bcol. ill. ;_c19 cm.^
+4901 _aThe Whale discovery library^
+500 _aIncludes index.^
+520 _aIntroduces the physical appearance, habits, diet, and habitat of this toothed whale and threats to its existence.^
+650 0_aNarwhal_xJuvenile literature.^
+650 1_aNarwhal.^
+650 1_aWhales.^
+650 7_aNarwhal._2sears^
+650 7_aWhales._2sears^
+7001 _aHadler, Sally,_eill.^
+8001 _aPalmer, Sarah,_d1955-_tWhale discovery library.^
+900 _a599.5 PAL^
+9402 _a3.5_b3-6_sSchool Library Journal^
+952 _a1326_cR_d599.5 PAL^`
+LDR00804pam 22 4a 4500^
+003IMchF^
+00519991026121742.0^
+008891205s1990 flua j 001 0 eng ^
+010 _a 89070168 /AC^
+020 _a0865930422^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aQL737.C27_bS76 1990^
+08204_a599.78_221^
+08200_a599.74/446_220^
+1001 _aStone, Lynn M.^
+24510_aBears /_cLynn M. Stone.^
+260 _aVero Beach, Fla. :_bRourke Corp.,_cc1990.^
+300 _a24 p. :_bcol. ill ;_c19 cm.^
+4901 _aNorth American animal discovery library^
+500 _aIncludes index.^
+520 _aAn introduction to the physical characteristics, habits, natural environment, and future prospects of the three species of bears that live in North America.^
+650 0_aBears_xJuvenile literature.^
+650 1_aBears.^
+650 7_aBears._2sears^
+8001 _aStone, Lynn M._tNorth American animal discovery library.^
+900 _a599.74 STO^
+9402 _a2.8_b3-6^
+952 _a1308_cR_d599.74 STO^`
+LDR00978pam 22 4a 4500^
+003IMchF^
+008880815s1989 nyua j 001 0 eng ^
+010 _a 88026408 /AC^
+020 _a0671671227 :_c$14.95^
+040 _aDLC_cDLC_dICrlF^
+0500 _aQL737.C43_bM35 1989^
+0820 _a639.9/7953_219^
+1001 _aMallory, Kenneth.^
+24510_aRescue of the stranded whales /_cKenneth Mallory and Andrea Conley.^
+260 _aNew York :_bSimon and Schuster Books for Young Readers in association with the New England Aquarium,_c1989.^
+300 _a63 p. :_bcol. ill. ;_c27 cm.^
+520 _aDescribes the rescue, rehabilitation, and successful release of three young pilot whales that were stranded on a Cape Cod beach during the winter of 1986.^
+650 0_aWhales_xJuvenile literature.^
+650 0_aWildlife rescue_xJuvenile literature.^
+650 1_aWhales.^
+650 1_aWildlife rescue.^
+650 7_aWhales._2sears^
+650 7_aWildlife rescue._2sears^
+70010_aConley, Andrea.^
+71020_aNew England Aquarium Corporation.^
+900 _a639.9 MAL^
+9401 _a5.8_b3-6_sSchool Library Journal starred_sBook Links (A.L.A.)_sBooklist^
+952 _a20382_cR_d639.9 MAL^`
+LDR00815pam 22 2a 4500^
+003IMchF^
+00519970512073945.4^
+008960830s1996 nyua j 001 0 eng ^
+010 _a 96035196 /AC^
+020 _a0865056307 (RLB)^
+020 _a0865057303 (paper)^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aGV552_b.K35 1996^
+08204_a791.3_221^
+08200_a796.47_220^
+1001 _aKalman, Bobbie,_d1947-^
+24510_aKids perform circus arts /_cBobbie Kalman.^
+260 _aNew York :_bCrabtree Pub.,_cc1997.^
+300 _a32 p. :_bcol. ill. ;_c25 cm.^
+440 0_aCrabapples^
+500 _aIncludes index.^
+520 _aShows children learning and performing many of the acts that are used in a circus, including juggling, walking on a tightrope, swinging on a trapeze, and more.^
+650 0_aAcrobatics_xJuvenile literature.^
+650 0_aCircus_xJuvenile literature.^
+650 1_aCircus.^
+650 7_aCircus._2sears^
+900 _a791.3 KAL^
+9401 _a4.2_bK-3_sLibrary Talk^
+952 _a35078_cR_d791.3 KAL^`
+LDR00898nam 22 2a 4500^
+003IMchF^
+008890209s1989 enka j 001 0beng ^
+010 _a 89050205 /AC^
+020 _a0531108260 (lib. bdg.)^
+040 _aDLC_cDLC_dDLC_dICrlF^
+043 _ae-uk---^
+05000_aGV461_b.W64 1989^
+08200_a796.44/092_aB_220^
+1001 _aWood, Tim.^
+24510_aGymnastics /_cTim Wood ; photographs, Chris Fairclough.^
+260 _aLondon ;_aNew York :_bF. Watts,_cc1989.^
+300 _a32 p. :_bcol. ill. ;_c23 cm.^
+4901 _aMy sport^
+520 _aFollows gymnast Catherine Bain as she practices at her gymnastics club and participates in a championship competition.^
+60010_aBain, Catherine_xJuvenile literature.^
+60011_aBain, Catherine.^
+650 0_aGymnastics_xJuvenile literature.^
+650 0_aGymnasts_zGreat Britain_xBiography_xJuvenile literature.^
+650 1_aGymnastics.^
+650 7_aGymnastics._2sears^
+70011_aFairclough, Chris,_eill.^
+8001 _aWood, Tim._tMy sport.^
+900 _a796.44 WOO^
+9402 _a3.9_bK-3_sSchool Library Journal^
+952 _a20711_cR_d796.44 WOO^`
+LDR00751pam 22 7a 4500^
+003IMchF^
+00519900823110348.6^
+008891127s1990 nyua j 001 0 eng ^
+010 _a 89039677 /AC^
+020 _a0531140520^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aGV1114_b.W66 1990^
+08200_a796.8/152_220^
+1001 _aWood, Tim.^
+24510_aJudo /_cTim Wood ; photographs, Chris Fairclough.^
+260 _aNew York :_bF. Watts,_cc1990.^
+300 _a32 p. :_bchiefly col. ill. ;_c23 cm.^
+4901 _aMy sport^
+520 _aOutlines the training, special preparation, and techniques needed to compete successfully in judo.^
+650 0_aJudo_xJuvenile literature.^
+650 0_aJudo_xTraining_xJuvenile literature.^
+650 1_aJudo.^
+650 7_aJudo._2sears^
+70011_aFairclough, Chris,_eill.^
+8001 _aWood, Tim._tMy sport.^
+900 _a796.8 WOO^
+9401 _a4.4_bK-3_sSchool Library Journal^
+952 _a21173_cR_d796.8 WOO^`
+LDR00946cam 22 8a 4500^
+003IMchF^
+00519950911093837.1^
+008931206s1996 mnua j 000 0 eng ^
+010 _a 93048449 /AC^
+020 _a0886826845^
+040 _aDLC_cDLC_dDLC_dICrlF^
+043 _an-us-pa^
+05000_aGV848.P58_bG55 1994^
+08200_a796.962/64/0974886_220^
+1001 _aGilbert, John,_d1942-^
+24510_aPittsburgh Penguins /_cJohn Gilbert.^
+24630_aPenguins^
+260 _aMankato, Minn. :_bCreative Education,_cc1996.^
+300 _a32 p. :_bill. (some col.) ;_c25 cm.^
+440 0_aNHL today^
+520 _aPresents a history of the Pittsburgh Penguins hockey team, highlighting the games and players that have contributed to the team's success through the years.^
+61020_aPittsburgh Penguins (Hockey team)_xHistory_xJuvenile literature.^
+61021_aPittsburgh Penguins (Hockey team)_xHistory.^
+61027_aPittsburgh Penguins (Hockey team)_xHistory._2sears^
+61027_aNational Hockey League._2sears^
+650 1_aHockey_xHistory.^
+650 7_aHockey_xHistory._2sears^
+900 _a796.962 GIL^
+9401 _a6.5_b3-6^
+952 _a1353_cR_d796.962 GIL^`
+LDR00898pam 22 a 4500^
+003IMchF^
+00519900501094349.1^
+008890504s1990 njua j 000 0 eng ^
+010 _a 89034372 /AC^
+020 _a0816717354 (lib. bdg.) :_c$9.79^
+020 _a0816717362 (pbk.) :_c$2.95^
+040 _aDLC_cDLC_dDLC_dICrlF^
+043 _an-us-wi^
+05000_aTL721.6.O84_bC75 1990^
+08200_a797.5_220^
+1001 _aCrisfield, Deborah.^
+24513_aAn air show adventure /_cby Deborah Crisfield ; photography by Donald Emmerich.^
+260 _aMahwah, N.J. :_bTroll Associates,_cc1990.^
+300 _a32 p. :_bcol. ill. ;_c24 cm.^
+440 0_aLet's take a trip^
+520 _aDescribes events at the EAA Fly-in, an air show held in Oshkosh, Wisconsin, focusing on the unique aircraft on display.^
+650 0_aAir shows_zWisconsin_zOshkosh_xJuvenile literature.^
+650 1_aAir shows.^
+650 1_aAirplanes.^
+650 7_aAir shows._2sears^
+650 7_aAirplanes._2sears^
+70011_aEmmerich, Donald,_eill.^
+900 _a797.5 CRI^
+9401 _a5.3_b3-6_sSchool Library Journal^
+952 _a20779_cR_d797.5 CRI^`
+LDR00839pam 22 1a 4500^
+003IMchF^
+00519980204093521.4^
+008881013c19891963nyua j 000 1 eng ^
+010 _a 88007902 /AC^
+020 _a0689712995 :_c$4.95^
+020 _a0329035959^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aPZ8.3.B348_bAm 1989^
+08200_a811/.54_aE_219^
+1001 _aBaylor, Byrd.^
+24510_aAmigo /_cby Byrd Baylor ; illustrated by Garth Williams.^
+250 _a1st Aladdin Books ed.^
+260 _aNew York :_bAladdin Books,_c1989, c1963.^
+300 _a41 p. :_bcol. ill. ;_c23 cm.^
+520 _aDesperately wanting a pet to love, a boy decides to tame a prairie dog who has already decided to tame the boy for his own pet.^
+650 1_aPrairie dogs_xFiction.^
+650 1_aPets_xFiction.^
+650 1_aStories in rhyme.^
+650 7_aPrairie dogs_xFiction._2sears^
+650 7_aPets_xFiction._2sears^
+650 7_aStories in rhyme._2sears^
+70011_aWilliams, Garth,_eill.^
+900 _a811 BAY^
+9402 _a2.5_bK-3^
+952 _a622_cR_d811 BAY^`
+LDR00866cam 22 a 4500^
+003IMchF^
+008791101c19791978nyua j 001 0 eng ^
+010 _a 78068532 /AC/r84^
+020 _a0531091244^
+040 _aDLC_cDLC_dICrlF^
+043 _ae-gr---^
+0500 _aDF77_b.F23 1978^
+082 _a938^
+1001 _aFagg, Christopher.^
+24510_aAncient Greece /_c[Christopher Fagg ; editor, Frances M. Clapham ; illustrators, Constance Dear ... et al.].^
+260 _aNew York :_bWarwick Press,_c1979, c1978.^
+300 _a44 p. :_bcol. ill. ;_c28 cm.^
+4900 _aModern knowledge library^
+500 _aIncludes index.^
+520 _aDiscusses the civilization of the ancient Greeks who were the first to develop a democratic way of life.^
+650 7_aCivilization, Greek._2sears^
+651 0_aGreece_xCivilization_yTo 146 B.C._xJuvenile literature.^
+651 1_aGreece_xCivilization_yTo 146 B.C.^
+651 7_aGreece_xHistory._2sears^
+70010_aDear, Constance.^
+900 _a938 FAG^
+9401 _a6.6_b5-8_sSchool Library Journal^
+952 _a31798_cR_d938 FAG^`
+LDR00846cam 22 5a 4500^
+003IMchF^
+00519931020141518.6^
+008860407s1986 iluab j 001 0 eng ^
+010 _a 86009631 /AC/r93^
+020 _a0516012886^
+040 _aDLC_cDLC_dDLC_dICrlF^
+043 _aa------^
+05000_aDS10_b.G42 1986^
+08200_a950_219^
+1001 _aGeorges, D. V.^
+24510_aAsia /_cby D.V. Georges.^
+260 _aChicago :_bChildrens Press,_cc1986.^
+300 _a45 p. :_bill. (some col.), maps (some col.) ;_c23 cm.^
+4900 _aA New true book^
+500 _aIncludes index.^
+520 _aIdentifies the continent of Asia, divides it into seven regions, including the Middle East, Siberia, Far East, and Himalayas, and discusses their countries, cities, and geographical features.^
+651 0_aAsia_xDescription and travel_xJuvenile literature.^
+651 1_aAsia_xDescription and travel.^
+651 7_aAsia_xGeography._2sears^
+651 7_aAsia_xDescription._2sears^
+900 _a950 GEO^
+9402 _a3.2_bK-3^
+952 _a25031_cR_d950 GEO^`
+LDR00916pam 22 a 4500^
+003IMchF^
+00520000829122433.8^
+008910430s1992 flua j 001 0 eng ^
+010 _a 91004114 /AC^
+020 _a0866253904^
+040 _aDLC_cDLC_dDLC_dICrlF^
+043 _anp-----_an-ust--^
+05000_aE99.C85_bL63 1992^
+08204_a978.004/9745_221^
+08200_a973/.04974_220^
+1001 _aLodge, Sally,_d1953-^
+24514_aThe Comanche /_cby Sally Lodge ; illustrated by Katherine Ace.^
+260 _aVero Beach, Fla. :_bRourke Publications,_cc1992.^
+300 _a31 p. :_bill. (some col.) ;_c29 cm.^
+440 0_aNative American people^
+500 _aIncludes index.^
+520 _aExamines the history, traditional lifestyle, and current situation of the Comanche Indians.^
+650 0_aComanche Indians_xJuvenile literature.^
+650 1_aComanche Indians.^
+650 1_aIndians of North America.^
+650 7_aComanche Indians._2sears^
+650 7_aNative Americans_zUnited States._2sears^
+7001 _aAce, Katherine,_eill.^
+900 _a973 LOD^
+9401 _a6.9_b5-8_sSchool Library Journal_sBooklist^
+952 _a1263_cR_d973 LOD^`
+LDR00192nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbe Lincoln :_bthe young years.^
+260 _bTroll,_c1982.^
+300 _a[ ] p.^
+900 _aABE^
+952 _a31897_cR_dABE^`
+LDR00236nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbe Lincoln goes to Washington.^
+260 _a[Washington, D.C.] :_bNational Geographic Society,_c1996.^
+300 _a[ ] p.^
+900 _aABE^
+952 _a25846_cR_dABE^`
+LDR00199nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbigail Adams :_bdear partner.^
+260 _bChelsea House,_c1991.^
+300 _a[ ] p.^
+900 _aABI^
+952 _a25333_cR_dABI^`
+LDR00169nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbiyoyo.^
+260 _bPuffin,_c1986.^
+300 _a[ ] p.^
+900 _aABI^
+952 _a2000_cR_dABI^`
+LDR00203nam 22 2 4500^
+00520011119075709.0^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 3_aAn aboriginal family.^
+260 _bLerner,_c1985.^
+300 _a[ ] p.^
+900 _aABO^
+952 _a32051_cR_dABO^`
+LDR00202nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbracadabra kid :_ba writer's life.^
+260 _bGreenwillow,_c1996.^
+300 _a[ ] p.^
+900 _aABR^
+952 _a25847_cR_dABR^`
+LDR00183nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbraham Lincoln.^
+260 _bBridgestone,_c1998.^
+300 _a[ ] p.^
+900 _aABR^
+952 _a35259_cR_dABR^`
+LDR00178nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbraham Lincoln.^
+260 _bPebble,_c1998.^
+300 _a[ ] p.^
+900 _aABR^
+952 _a35258_cR_dABR^`
+LDR00197nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbraham Lincoln :_bfor the people.^
+260 _bChelsea,_c1991.^
+300 _a[ ] p.^
+900 _aABR^
+952 _a25334_cR_dABR^`
+LDR00237nam 22 2 4500^
+00520011119075709.0^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 4_aThe absoluetly true story - how I visted Yellow Stone P^
+260 _bAladdin,_c1994.^
+300 _a[ ] p.^
+900 _aABS^
+952 _a2207_cR_dABS^`
+LDR00178nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbsolute rulers.^
+260 _bGarret,_c1992.^
+300 _a[ ] p.^
+900 _aABS^
+952 _a35154_cR_dABS^`
+LDR00189nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAbuelitas paradise.^
+260 _a[S.l. :_bs.n.],_c1992.^
+300 _a[ ] p.^
+900 _aABU^
+952 _a25189_cR_dABU^`
+LDR00177nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAce defense men.^
+260 _bRourke,_c1994.^
+300 _a[ ] p.^
+900 _aACE^
+952 _a1223_cR_dACE^`
+LDR00181nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAcross the lines.^
+260 _bAtheneum,_c1997.^
+300 _a[ ] p.^
+900 _aACR^
+952 _a25848_cR_dACR^`
+LDR00180nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAcross the stream.^
+260 _bMulberry,_c1986.^
+300 _a[ ] p.^
+900 _aACR^
+952 _a777_cR_dACR^`
+LDR00170nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aActor.^
+260 _bCapstone,_c1998.^
+300 _a[ ] p.^
+900 _aACT^
+952 _a35392_cR_dACT^`
+LDR00182nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAddie meets Max.^
+260 _bHarper Trophy,_c1985.^
+300 _a[ ] p.^
+900 _aADD^
+952 _a41_cR_dADD^`
+LDR00179nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAddition Annie.^
+260 _bChildrens,_c1991.^
+300 _a[ ] p.^
+900 _aADD^
+952 _a2001_cR_dADD^`
+LDR00189nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAddy learns a lesson.^
+260 _bPleasant Co.,_c1993.^
+300 _a[ ] p.^
+900 _aADD^
+952 _a26006_cR_dADD^`
+LDR00187nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAddy saves the day.^
+260 _bPleasant Co.,_c1994.^
+300 _a[ ] p.^
+900 _aADD^
+952 _a25849_cR_dADD^`
+LDR00199nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAddy's surprise :_ba Christmas.^
+260 _bPleasant Co.,_c1993.^
+300 _a[ ] p.^
+900 _aADD^
+952 _a26007_cR_dADD^`
+LDR00209nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAdopted by the eagles.^
+260 _bMaxwell Macmillan International,_c1994.^
+300 _a[ ] p.^
+900 _aADO^
+952 _a25703_cR_dADO^`
+LDR00193nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAdoption is for always.^
+260 _bAlbert Whitman,_c1986.^
+300 _a[ ] p.^
+900 _aADO^
+952 _a20181_cR_dADO^`
+LDR00199nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAdventures of a 2-minute werewolf.^
+260 _bDoubleday,_c1983.^
+300 _a[ ] p.^
+900 _aADV^
+952 _a31944_cR_dADV^`
+LDR00197nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAdventures of Captain Underpants.^
+260 _bBlue Sky,_c1997.^
+300 _a[ ] p.^
+900 _aADV^
+952 _a26039_cR_dADV^`
+LDR00221nam 22 2 4500^
+00520011119075709.0^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 4_aThe adventures of High John.^
+260 _bOrchard Conqueror,_c1989.^
+300 _a[ ] p.^
+900 _aADV^
+952 _a20515_cR_dADV^`
+LDR00187nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAdventures with a string.^
+260 _bDutton,_c1965.^
+300 _a[ ] p.^
+900 _aADV^
+952 _a30147_cR_dADV^`
+LDR00187nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAdventurs of a paper cup.^
+260 _bDutton,_c1968.^
+300 _a[ ] p.^
+900 _aADV^
+952 _a30076_cR_dADV^`
+LDR00179nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAdvertising.^
+260 _bGarrett Ed.,_c1990.^
+300 _a[ ] p.^
+900 _aADV^
+952 _a35155_cR_dADV^`
+LDR00187nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAesop for children.^
+260 _bRand McNally,_c1919.^
+300 _a[ ] p.^
+900 _aAES^
+952 _a32780_cR_dAES^`
+LDR00182nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAesop's fables.^
+260 _bJunior Bks.,_c1988.^
+300 _a[ ] p.^
+900 _aAES^
+952 _a20118_cR_dAES^`
+LDR00202nam 22 2 4500^
+00520011119075709.0^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 4_aThe African rhinos.^
+260 _bMaxwell,_c1992.^
+300 _a[ ] p.^
+900 _aAFR^
+952 _a25190_cR_dAFR^`
+LDR00205nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAfter the goat man.^
+260 _bPuffin,_c1974.^
+300 _a[ ] p.^
+900 _aAFT^
+952 _a42_t1_cR_dAFT^
+952 _a31583_t2_cR_dAFT^`
+LDR00198nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAge of Aquarius; you and astrology.^
+260 _bCrowell,_c1979.^
+300 _a[ ] p.^
+900 _aAGE^
+952 _a31791_cR_dAGE^`
+LDR00197nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAids :_bhow it works in the body.^
+260 _bF. Watts,_c1992.^
+300 _a[ ] p.^
+900 _aAID^
+952 _a25191_cR_dAID^`
+LDR00175nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAir.^
+260 _bChildrens Press,_c1982.^
+300 _a[ ] p.^
+900 _aAIR^
+952 _a25020_cR_dAIR^`
+LDR00182nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAir assault teams.^
+260 _bCapstone,_c1996.^
+300 _a[ ] p.^
+900 _aAIR^
+952 _a33001_cR_dAIR^`
+LDR00179nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAircraft carriers.^
+260 _bWatts,_c1986.^
+300 _a[ ] p.^
+900 _aAIR^
+952 _a20403_cR_dAIR^`
+LDR00182nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAircraft carriers.^
+260 _bCapstone,_c1998.^
+300 _a[ ] p.^
+900 _aAIR^
+952 _a35000_cR_dAIR^`
+LDR00171nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAirliners.^
+260 _bWatts,_c1984.^
+300 _a[ ] p.^
+900 _aAIR^
+952 _a30798_cR_dAIR^`
+LDR00177nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAirplanes.^
+260 _bCopper Beech,_c1995.^
+300 _a[ ] p.^
+900 _aAIR^
+952 _a1161_cR_dAIR^`
+LDR00172nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlabama.^
+260 _bCapstone,_c1998.^
+300 _a[ ] p.^
+900 _aALA^
+952 _a35393_cR_dALA^`
+LDR00194nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlabama in words and pictures.^
+260 _bChildren,_c1980.^
+300 _a[ ] p.^
+900 _aALA^
+952 _a31850_cR_dALA^`
+LDR00181nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlarming animals.^
+260 _bRaintree,_c1994.^
+300 _a[ ] p.^
+900 _aALA^
+952 _a25509_cR_dALA^`
+LDR00171nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlaska.^
+260 _bCapstone,_c1998.^
+300 _a[ ] p.^
+900 _aALA^
+952 _a35394_cR_dALA^`
+LDR00182nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlbert Schweitzer.^
+260 _bBardett,_c[19--]^
+300 _a[ ] p.^
+900 _aALB^
+952 _a21033_cR_dALB^`
+LDR00181nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlberts ballgame.^
+260 _bAtheneum,_c1996.^
+300 _a[ ] p.^
+900 _aALB^
+952 _a25757_cR_dALB^`
+LDR00200nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlbum or rocks and minerals.^
+260 _bCheckboard Press,_c1987.^
+300 _a[ ] p.^
+900 _aALB^
+952 _a25023_cR_dALB^`
+LDR00239nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlexander and the terrible, horrible, no good very bad^
+260 _bAladdin,_c1972.^
+300 _a[ ] p.^
+900 _aALE^
+952 _a44_t1_cR_dALE^
+952 _a781_t2_cR_dALE^`
+LDR00204nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlexander who used to be rich last Sunday.^
+260 _bMacmillan,_c1988.^
+300 _a[ ] p.^
+900 _aALE^
+952 _a45_cR_dALE^`
+LDR00185nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlfonse, where are you?.^
+260 _bCrown,_c1996.^
+300 _a[ ] p.^
+900 _aALF^
+952 _a26008_cR_dALF^`
+LDR00214nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAl Gore, vice president.^
+260 _bMillbrook,_c1994.^
+300 _a[ ] p.^
+900 _aALG^
+952 _a25508_t1_cR_dALG^
+952 _a764_t2_cR_dALG^`
+LDR00173nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlgeria.^
+260 _bChildrens,_c1990.^
+300 _a[ ] p.^
+900 _aALG^
+952 _a25026_cR_dALG^`
+LDR00191nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAli Baba & the forty thieves.^
+260 _bAbrams,_c1988.^
+300 _a[ ] p.^
+900 _aALI^
+952 _a20480_cR_dALI^`
+LDR00200nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlice and the boa constrictor.^
+260 _a[S.l. :_bs.n.],_c1983.^
+300 _a[ ] p.^
+900 _aALI^
+952 _a30725_cR_dALI^`
+LDR00202nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlice Nizzy Nazzy, the witch of Santa Fe.^
+260 _bPutnam,_c1995.^
+300 _a[ ] p.^
+900 _aALI^
+952 _a2002_cR_dALI^`
+LDR00190nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAliens don't wear braces.^
+260 _bScholastic,_c1993.^
+300 _a[ ] p.^
+900 _aALI^
+952 _a2003_cR_dALI^`
+LDR00186nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAliens for breakfast.^
+260 _bRandom House,_c1988.^
+300 _a[ ] p.^
+900 _aALI^
+952 _a46_cR_dALI^`
+LDR00182nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAliens for lunch.^
+260 _bRandom House,_c1991.^
+300 _a[ ] p.^
+900 _aALI^
+952 _a47_cR_dALI^`
+LDR00179nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll aboard!.^
+260 _bGreenwillow,_c1995.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25631_cR_dALL^`
+LDR00187nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about alligators.^
+260 _bScholastic,_c1994.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25623_cR_dALL^`
+LDR00174nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about Stacey.^
+260 _bDell,_c1988.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a49_cR_dALL^`
+LDR00180nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about whales.^
+260 _bHoliday,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20571_cR_dALL^`
+LDR00183nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about where.^
+260 _bGreenwillow,_c1991.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a21379_cR_dALL^`
+LDR00218nam 22 2 4500^
+00520011119075709.0^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 4_aThe all around Cristmas.^
+260 _bRinehart & Winston,_c1982.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a30716_cR_dALL^`
+LDR00206nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll God's critters got a place in the choir.^
+260 _bDutton,_c1978.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20516_cR_dALL^`
+LDR00173nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll I see.^
+260 _bOrchard,_c1988.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20275_cR_dALL^`
+LDR00181nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll Joseph Wanted.^
+260 _bMacmillan,_c1991.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a536_cR_dALL^`
+LDR00215nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll night, all day :_ba child's first-- spirituals.^
+260 _bAtheneum,_c1991.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25851_cR_dALL^`
+LDR00208nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll of our noses are here & other tales.^
+260 _bHarper & Row,_c1985.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a32095_cR_dALL^`
+LDR00190nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll the colors of the earth.^
+260 _bMorrow,_c1994.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25510_cR_dALL^`
+LDR00184nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll-terrian bicyclaling.^
+260 _bHolt,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20911_cR_dALL^`
+LDR00170nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlligators.^
+260 _bAbdo,_c1994.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a1160_cR_dALL^`
+LDR00200nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlligators and others all year long!.^
+260 _bMaxwell,_c1993.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25402_cR_dALL^`
+LDR01079pam 22 4a 4500^
+003IMchF^
+00519900517135337.0^
+008890912r1990 maua j 000 1 eng ^
+010 _a 89013282 /AC^
+020 _a0316034134 :_c$12.95^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aPZ7.A4277_bWh 1990^
+08200_a[Fic]_220^
+1001 _aAllen, Linda.^
+24010_aParrot in the house^
+24510_aWhen grandfather's parrot inherited Kennington Court /_cby Linda Allen ; illustrated by Katinka Kew.^
+250 _a1st U.S. ed.^
+260 _aBoston :_bJoy Street Books,_c1990.^
+300 _a68 p. :_bill. ;_c22 cm.^
+500 _aPreviously published under title: A parrot in the house.^
+500 _a"First published in the U.K. in 1988 by Hodder and Stoughton Ltd."--T.p. verso.^
+520 _aAppalled that Grandfather left his inheritance to his parrot, the relatives seek to break the will; but young Miranda, who is caring for the parrot, makes a discovery that settles everything.^
+650 1_aMystery and detective stories.^
+650 1_aParrots_xFiction.^
+650 7_aMystery and detective stories._2sears^
+650 7_aParrots_xFiction._2sears^
+651 1_aEngland_xFiction.^
+651 7_aEngland_xFiction._2sears^
+70011_aKew, Katinka,_eill.^
+900 _aALL^
+952 _a21117_cR_dALL^`
+LDR00178nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlmost good-bye.^
+260 _bDutton,_c1990.^
+300 _a[ ] p.^
+900 _aALM^
+952 _a21497_cR_dALM^`
+LDR00186nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlmost starring skinnybones.^
+260 _bKnopf,_c1988.^
+300 _a[ ] p.^
+900 _aALM^
+952 _a51_cR_dALM^`
+LDR00186nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlmost the real thing.^
+260 _bBradbury,_c1991.^
+300 _a[ ] p.^
+900 _aALM^
+952 _a21369_cR_dALM^`
+LDR00185nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlong came a dog.^
+260 _bHarper & Trophy,_c1958.^
+300 _a[ ] p.^
+900 _aALO^
+952 _a52_cR_dALO^`
+LDR00176nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlphabet city.^
+260 _bViking,_c1995.^
+300 _a[ ] p.^
+900 _aALP^
+952 _a25758_cR_dALP^`
+LDR00201nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlzheimer's disease :_bsilent epidemic.^
+260 _bLerner,_c1985.^
+300 _a[ ] p.^
+900 _aALZ^
+952 _a32074_cR_dALZ^`
+LDR00191nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAmanda Pig and her big brother.^
+260 _bDial,_c1982.^
+300 _a[ ] p.^
+900 _aAMA^
+952 _a32294_cR_dAMA^`
Added: packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/sample20.lif 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,181 @@
+header 20 rec MicroLIF file
+LDR00180nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about whales.^
+260 _bHoliday,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20571_cR_dALL^`
+LDR00183nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll about where.^
+260 _bGreenwillow,_c1991.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a21379_cR_dALL^`
+LDR00218nam 22 2 4500^
+00520011119075709.0^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 4_aThe all around Cristmas.^
+260 _bRinehart & Winston,_c1982.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a30716_cR_dALL^`
+LDR00206nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll God's critters got a place in the choir.^
+260 _bDutton,_c1978.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20516_cR_dALL^`
+LDR00173nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll I see.^
+260 _bOrchard,_c1988.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20275_cR_dALL^`
+LDR00181nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll Joseph Wanted.^
+260 _bMacmillan,_c1991.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a536_cR_dALL^`
+LDR00215nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll night, all day :_ba child's first-- spirituals.^
+260 _bAtheneum,_c1991.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25851_cR_dALL^`
+LDR00208nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll of our noses are here & other tales.^
+260 _bHarper & Row,_c1985.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a32095_cR_dALL^`
+LDR00190nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll the colors of the earth.^
+260 _bMorrow,_c1994.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25510_cR_dALL^`
+LDR00184nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAll-terrian bicyclaling.^
+260 _bHolt,_c1987.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a20911_cR_dALL^`
+LDR00170nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlligators.^
+260 _bAbdo,_c1994.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a1160_cR_dALL^`
+LDR00200nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlligators and others all year long!.^
+260 _bMaxwell,_c1993.^
+300 _a[ ] p.^
+900 _aALL^
+952 _a25402_cR_dALL^`
+LDR01079pam 22 4a 4500^
+003IMchF^
+00519900517135337.0^
+008890912r1990 maua j 000 1 eng ^
+010 _a 89013282 /AC^
+020 _a0316034134 :_c$12.95^
+040 _aDLC_cDLC_dDLC_dICrlF^
+05000_aPZ7.A4277_bWh 1990^
+08200_a[Fic]_220^
+1001 _aAllen, Linda.^
+24010_aParrot in the house^
+24510_aWhen grandfather's parrot inherited Kennington Court /_cby Linda Allen ; illustrated by Katinka Kew.^
+250 _a1st U.S. ed.^
+260 _aBoston :_bJoy Street Books,_c1990.^
+300 _a68 p. :_bill. ;_c22 cm.^
+500 _aPreviously published under title: A parrot in the house.^
+500 _a"First published in the U.K. in 1988 by Hodder and Stoughton Ltd."--T.p. verso.^
+520 _aAppalled that Grandfather left his inheritance to his parrot, the relatives seek to break the will; but young Miranda, who is caring for the parrot, makes a discovery that settles everything.^
+650 1_aMystery and detective stories.^
+650 1_aParrots_xFiction.^
+650 7_aMystery and detective stories._2sears^
+650 7_aParrots_xFiction._2sears^
+651 1_aEngland_xFiction.^
+651 7_aEngland_xFiction._2sears^
+70011_aKew, Katinka,_eill.^
+900 _aALL^
+952 _a21117_cR_dALL^`
+LDR00178nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlmost good-bye.^
+260 _bDutton,_c1990.^
+300 _a[ ] p.^
+900 _aALM^
+952 _a21497_cR_dALM^`
+LDR00186nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlmost starring skinnybones.^
+260 _bKnopf,_c1988.^
+300 _a[ ] p.^
+900 _aALM^
+952 _a51_cR_dALM^`
+LDR00186nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlmost the real thing.^
+260 _bBradbury,_c1991.^
+300 _a[ ] p.^
+900 _aALM^
+952 _a21369_cR_dALM^`
+LDR00185nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlong came a dog.^
+260 _bHarper & Trophy,_c1958.^
+300 _a[ ] p.^
+900 _aALO^
+952 _a52_cR_dALO^`
+LDR00176nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlphabet city.^
+260 _bViking,_c1995.^
+300 _a[ ] p.^
+900 _aALP^
+952 _a25758_cR_dALP^`
+LDR00201nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAlzheimer's disease :_bsilent epidemic.^
+260 _bLerner,_c1985.^
+300 _a[ ] p.^
+900 _aALZ^
+952 _a32074_cR_dALZ^`
+LDR00191nam 22 2 4500^
+008891207s19xx xxu 00010 eng d^
+040 _cIMchF^
+245 0_aAmanda Pig and her big brother.^
+260 _bDial,_c1982.^
+300 _a[ ] p.^
+900 _aAMA^
+952 _a32294_cR_dAMA^`
Added: packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,33 @@
+# $Id: title_proper.t,v 1.4 2003/05/08 14:45:46 petdance Exp $
+
+use strict;
+use integer;
+
+use Test::More tests=>14;
+
+BEGIN {
+ use_ok( 'MARC::File::USMARC' );
+}
+
+my @titles = (
+ 'Current population reports. Series P-20, Population characteristics.',
+ 'Current population reports. Series P-60, Consumer income.',
+ 'Physical review. A, Atomic, molecular, and optical physics',
+ 'Physical review. B, Condensed matter',
+ 'America and the British Labour Party :',
+);
+
+my $file = MARC::File::USMARC->in( 't/title_proper.usmarc' );
+isa_ok( $file, 'MARC::File::USMARC', 'USMARC file' );
+
+while ( my $marc = $file->next() ) {
+ isa_ok( $marc, 'MARC::Record', 'Got a record' );
+
+ my $title = shift @titles;
+ is( $marc->title_proper, $title );
+}
+ok( !$MARC::File::ERROR, "Should have no error" );
+is( scalar @titles, 0, "no titles left to check" );
+
+$file->close;
+
Property changes on: packages/libmarc-record-perl/branches/upstream/current/t/title_proper.t
___________________________________________________________________
Name: svn:executable
+
Added: packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/title_proper.usmarc 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1 @@
+02179cas 2200553 a 45e0001000700000005001700007008004100024010001700065035002300082035001400105035001100119040011800130016002000248019003800268022001400306035001800320042001300338043001200351050001600363060001400379074001400393082001000407086001900417086001800436049000900454210004700463222007200510245007500582246003100657260011900688265006500807300003100872362002200903500003500925500007000960510003201030510004101062530007701103651005601180710004201236740003301278780010601311850004901417856005401466891002401520891004101544936002801585994001201613
913380
20030124101153.0
751101c19479999dcuuu1m f0 a0eng
a 52002169
a(OCoLC)ocm01768314
9ADZ9243AM
a913380
aDLCcMULdCOOdNSDdDLCdGPOdNSTdDLCdRCSdGPOdAIPdOCLdNSDdOCLdIULdHULdNSTdIULdHULdNSTdMYGdSYSdTXA
7 aC566430002DNLM
a2260037a2260038a5087003a853216
0 a0363-6836
a0755033bMULS
ansdpalc
an-us---
00aHA195b.A53
0 aW2 A B9CU
a0142-C-01
0 a312.9
0 aC 56.218:P-20/
0 aC 3.186:P-20/
aTXAM
0 aCurr. popul. rep., Ser. P-20, Popul. char.
0aCurrent population reports. Series P-20, Population characteristics
00aCurrent population reports.nSeries P-20,pPopulation characteristics.
10aPopulation characteristics
a[Washington, D.C.] :bU.S. Dept. of Commerce, Bureau of the Census :bFor sale by the Supt. of Docs., U.S. G.P.O.,
aSupt. of Docs., U.S. Govt. Print. Off., Washington, DC 20402
av. :bill., maps ;c27 cm.
1 aBegan with No. 1.
aDescription based on: No. 352.
aPrior to January 1976 issues were classified C 56.218:P-20/(nos.)
2 aPopulation indexx0032-4701
0 aAmerican statistics indexx0091-1658
aSome issues also available online via the World Wide Web, in PDF format.
0aUnited StatesxPopulationvStatisticsvPeriodicals.
1 aUnited States.bBureau of the Census.
0 aPopulation-special subjects.
05tCurrent population reports. Series P-27, Farm populationx1048-6283w(DLC)sf 87037999w(OCoLC)7226532
aAUaDLCaInUaMH-KGaMH-PAaMH-SRaMdUaPU-W
41uhttp://www.census.gov/mp/www/pub/pop/mspop01.html
03985381ano.i(year)
40986381a<324>-i<1978>-xprovisional
aNo. 404 (Nov. 1985) LIC
aE0bTXA
01858cas 2200457 a 4500001000700000005001700007008004100024010002300065019003300088022001400121035002000135035001400155035001100169040012300180042001300303043001200316049000900328050001800337060001600355069001400371074001400385082002100399086001800420210004900438222006100487245006400548246002000612260011900632265006600751300001700817362002200834500016800856500003501024510004101059530007701100500006201177650002701239650003001266710004201296856006201338
913385
20030124101154.0
790313c19489999dcuuu1m f0 a0eng
a 52002108 //r822
a01779114a07619124a11810351
0 a0730-4803
a(OCoLC)04738786
9ADZ9248AM
a913385
aDLCcCPOdNLMdMULdGPOdNSDdGPOdHULdDLCdNSTdDLCdNSTdRCSdOCLdNSDdHULdNSTdDLCdOCLdNSTdDLCdNSTdMYGdTXA
ansdpalc
an-us---
aTXAO
00aHC110.I5bA53
0 aW2 A B9CUBM
1 aC56641000
a0142-C-07
00a339.2/2/0973219
0 aC 3.186:P-60/
0 aCurr. popul. rep., Ser. P-60, Consum. income
0aCurrent population reports. Series P-60, Consumer income
00aCurrent population reports.nSeries P-60,pConsumer income.
10aConsumer income
a[Washington, D.C.?] :bU.S. Dept. of Commerce, Bureau of the Census :bFor sale by the Supt. of Docs, U.S. G.P.O.,
aSupt. of Docs., U.S. Govt. Print. Off., Washington, DC, 20402
av. ;c27 cm.
1 aBegan with No. 1.
aPrior to January 1976 issues were classified C 56.218:P-60/ during the time the Census Bureau was subordinate to the Social and Economic Statistics Administration.
aDescription based on: No. 115.
0 aAmerican statistics indexx0091-1658
aSome issues available also online via the World Wide Web, in PDF format.
aPoverty in the United States is classed under C 3.186/22:
0aIncomezUnited States.
0aConsumerszUnited States.
1 aUnited States.bBureau of the Census.
41uhttp://www.census.gov/ftp/pub/mp/www/pub/pop/mspop10.html
01866cas 2200469 a 4500001000800000005001700008008004100025006001900066007000700085010001700092022001400109035002000123035001400143035001200157040002300169042001400192049000900206082001200215130003300227210004700260222007300307245008900380246005300469246000800522246004300530260005000573310001200623500008100635506008800716516010700804530006500911538003600976500003001012650002601042650003401068650003401102655003801136710003101174776006801205780008701273856003601360
1665454
20030124102744.0
970618c199u9999mdumr1p 0 a0eng d
m d
crucnu
asn 97004211
0 a1094-1622
a(OCoLC)37142044
9AHN6270AM
a1665454
aNSDcNSDdHLSdOCL
ansdpalcd
aTXAM
10a530212
0 aPhysical review. A (Online)
0 aPhys. rev., A At. mol. opt. phy.b(Online)
0aPhysical review. A, Atomic, molecular, and optical physicsb(Online)
00aPhysical review.nA,pAtomic, molecular, and optical physicsh[electronic resource].
1 iTitle on "entry" page:aPhysical review A online
3 aPRA
30aAtomic, molecular, and optical physics
aCollege Park, MD :bAmerican Physical Society
aMonthly
aDescription based on: Vol. 55, issue 1 (Jan. 1997); title from title screen.
aAvailable to those with print subscription; requires special login ID and password.
8 aTable of contents available in HTML and PDF format; articles are Acrobat PDF only (electronic journal)
aOnline version of the print publication: Physical review. A.
aMode of access: World Wide Web.
aText (electronic journal)
0aPhysicsxPeriodicals.
0aNuclear physicsxPeriodicals.
0aPhysical opticsxPeriodicals.
7aComputer network resources.2lcsh
2 aAmerican Physical Society.
1 tPhysical review. Ax1050-2947w(DLC) 90656533w(OCoLC) 21266025
00tPhysical review. A, General physicsx0556-2791w(DLC) 75021361w(OCoLC) 1083925
7 uhttp://ojps.aip.org/prao/2http
02267cas 2200517 a 45e0001000800000005001700008006001900025007001500044008004100059010001700100035002300117035002000140035001400160035001200174040002800186022001400214042001400228082001200242049000900254050001900263130005200282210004500334222005100379245006700430246005800497246003100555246000800586246002100594260006000615310001600675362004800691500011900739500008400858500003000942506003600972516012101008530008301129538003601212650003501248710003101283776008601314785009801400856018901498856005001687994001201737
1665455
20030124102745.0
m d
cr cnu--------
970826d199u1997mdusr1p s 0 a0eng d
asn 97004477
a(OCoLC)ocm37528569
a(OCoLC)37528569
9AHN6271AM
a1665455
aNSDcNSDdEYMdOCLdIUL
0 a1095-3795
ansdpalcd
10a530212
aTXAM
14aQC176.A1bP513
0 aPhysical review.nB,pCondensed matter (Online)
0 aPhys. rev., B, Condens. matterb(Online)
0aPhysical review. B, Condensed matterb(Online)
00aPhysical review.nB,pCondensed matterh[electronic resource].
1 iTitle on journal home page:aPhysical review B online
1 iAlso known as:aPRB online
30aPRB
30aCondensed matter
aCollege Park, Md. :bAmerican Physical Society,c-1997.
aSemimonthly
1 aCeased with Vol. 56, no. 24 (15 Dec. 1997).
aDescription based on: Vol. 55, issue 1 (Jan. 1997); title from title screen of HTML file (viewed on June 9, 1998).
aDescription based on: Vol. 55, issue 1 (Jan. 1, 1997); title from title screen.
aText (electronic journal)
aAvailable by subscription only.
8 aTable of contents and abstracts available in HTML and PDF format; articles are Acrobat PDF only (electronic journal)
aOnline version of print publication including Rapid communications and Briefs.
aMode of access: World Wide Web.
0aCondensed mattervPeriodicals.
2 aAmerican Physical Society.
1 tPhysical review. B, Condensed matterx0163-1829w(DLC) 80644831w(OCoLC)4206245
00tPhysical review. B, Condensed matter and materials physicsw(DLC)sn 98034465w(OCoLC)39296657
40uhttp://library.tamu.edu/resources/ASP/track.asp?resource=Physical+Review+Online+Archive+%28PROLA%29zOnline version of articles available through Physical Review Online Archive (PROLA)
40xhttp://ojps.aip.org/journals/doc/PRBMDO-home/
aE0bTXA
01121nam 2200301 a 4500001000800000005001700008008004100025020001500066035002000081035001400101040001800115043002100133049000900154090002400163100002500187245009500212260005800307300002100365490004500386504005100431651005300482651005300535651004400588651005200632610005700684830005800741948002000799
1665456
19991130062525.0
970908s1997 enk b 001 0 eng d
a1860641067
a(OCoLC)37587441
9AHN6272AM
aDGUcDGUdTXA
ae-uk---an-us---
aTXAM
aE183.8.G7bJ65 1997
1 aJones, Peter,d1945-
10aAmerica and the British Labour Party :bthe "special relationship" at work /cPeter Jones.
aLondon ;aNew York :bTauris Academic Studies,c1997.
a252 p. ;c22 cm.
1 aLibrary of international relations ;v10
aIncludes bibliographical references and index.
0aGreat BritainxForeign relationszUnited States.
0aUnited StatesxForeign relationszGreat Britain.
0aGreat BritainxForeign relationsy1945-
0aUnited StatesxForeign relationsy20th century.
20aLabour Party (Great Britain)xHistoryy20th century.
0aLibrary of international relations (Series) ;vv. 10.
ac:cerd20021105
\ No newline at end of file
Added: packages/libmarc-record-perl/branches/upstream/current/t/utf8.t
===================================================================
--- packages/libmarc-record-perl/branches/upstream/current/t/utf8.t 2006-02-25 20:44:13 UTC (rev 2196)
+++ packages/libmarc-record-perl/branches/upstream/current/t/utf8.t 2006-02-25 20:44:36 UTC (rev 2197)
@@ -0,0 +1,61 @@
+BEGIN {
+ if ( $] < 5.008 ) {
+ print "1..0 # Skip Need perl5.8 or greater to test unicode\n";
+ exit;
+ }
+}
+
+use Test::More tests => 2;
+
+use strict;
+use MARC::Record;
+use MARC::File::USMARC;
+
+## MARC::Record is not able to read MARC data back from disk if the
+## record has Unicode (UTF-8) in it. This may be for a variety of
+## reasons: calculating leader lengths based on character rather than
+## byte length; using directory values and substr() to extract fields when
+## substr() uses character lengths rather than byte lengths; open files
+## from disk without using the ':utf8' pragma, etc.
+
+TODO: {
+
+ SKIP: {
+
+ ## only do these tests with the first stable release of perl
+ ## that can do unicode.
+
+ local $TODO = 'utf8 handling';
+
+ ## we are going to create a MARC record with a utf8 character in
+ ## it (a Hebrew Aleph), write it to disk, and then attempt to
+ ## read it back from disk as a MARC::Record.
+
+ my $aleph = chr(0x05d0);
+ my $r1 = MARC::Record->new();
+ $r1->append_fields( MARC::Field->new( 245, 0, 0, a => $aleph ) );
+
+ ## write record to disk, telling perl (as we should) that we
+ ## will be writing utf8 unicode
+
+ open( OUT, ">t/utf8.marc" );
+ binmode( OUT, ':utf8' );
+ print OUT $r1->as_usmarc();
+ close( OUT );
+
+ ## open the file back up, get the record, and see if our Aleph
+ ## is there
+
+ my $f = MARC::File::USMARC->in( 't/utf8.marc' );
+ my $r2 = $f->next();
+ my $a = $r2->field( 245 )->subfield( 'a' );
+ is( length( $a ), length( $aleph ), 'character length' );
+ is( ord( $r2->field( 245 )->subfield( 'a' ) ), ord( $aleph ),
+ 'character value' );
+
+ unlink( 't/utf8.marc' );
+
+ }
+
+}
+
More information about the Pkg-perl-cvs-commits
mailing list