Appendix B — Handling MARC versions

The tool provides two levels of customization:

The different MARC versions has an identifier. This is defined in the code as an enumeration:

public enum MarcVersion {
  MARC21("MARC21", "MARC21"),
  DNB("DNB", "Deutsche Nationalbibliothek"),
  OCLC("OCLC", "OCLC"),
  GENT("GENT", "Universiteitsbibliotheek Gent"),
  SZTE("SZTE", "Szegedi Tudományegyetem"),
  FENNICA("FENNICA", "National Library of Finland")
  ;
  ...
}

When you add version specific modification, you have to use one of these values.

  1. Defining version specific indicator codes:
Indicator::putVersionSpecificCodes(MarcVersion, List<Code>);

Code is a simple object, it has two property: code and label.

example:

public class Tag024 extends DataFieldDefinition {
   ...
   ind1 = new Indicator("Type of standard number or code")
             .setCodes(...)
             .putVersionSpecificCodes(
                 MarcVersion.SZTE,
                 Arrays.asList(
                    new Code(" ", "Not specified")
                 )
             )
   ...
}
  1. Defining version specific subfields:
DataFieldDefinition::putVersionSpecificSubfields(MarcVersion, List<SubfieldDefinition>)

SubfieldDefinition contains a definition of a subfield. You can construct it with three String parameters: a code, a label and a cardinality code which denotes whether the subfield can be repeatable (“R”) or not (“NR”).

example:

public class Tag024 extends DataFieldDefinition {
   ...
   putVersionSpecificSubfields(
      MarcVersion.DNB,
      Arrays.asList(
         new SubfieldDefinition("9", "Standardnummer (mit Bindestrichen)", "NR")
      )
   );
}
  1. Marking indicator codes as obsolete:
Indicator::setHistoricalCodes(List<String>)

The list should be pairs of code and description.

public class Tag082 extends DataFieldDefinition {
   ...
   ind1 = new Indicator("Type of edition")
              .setCodes(...)
              .setHistoricalCodes(
                 " ", "No edition information recorded (BK, MU, VM, SE) [OBSOLETE]",
                 "2", "Abridged NST version (BK, MU, VM, SE) [OBSOLETE]"
              )
   ...
}
  1. Marking subfields as obsolete:
DataFieldDefinition::setHistoricalSubfields(List<String>);

The list should be pairs of code and description.

[Java} public class Tag020 extends DataFieldDefinition { ... setHistoricalSubfields( "b", "Binding information (BK, MP, MU) [OBSOLETE]" ); }

If you create new a package for the new MArc version, you should register it to several places:

  1. add a case into src/main/java/de/gwdg/metadataqa/marc/Utils.java:
case "zbtags":      version = MarcVersion.ZB;      break;
  1. add an item into enumeration at src/main/java/de/gwdg/metadataqa/marc/definition/tags/TagCategory.java:
ZB(23, "zbtags", "ZB", "Locally defined tags of the Zentralbibliothek Zürich", false),
  1. modify the expected number of data elements at src/test/java/de/gwdg/metadataqa/marc/utils/DataElementsStaticticsTest.java:
assertEquals( 215, statistics.get(DataElementType.localFields));
  1. … and a src/test/java/de/gwdg/metadataqa/marc/utils/MarcTagListerTest.java:
assertEquals( 2, (int) versionCounter2.get(MarcVersion.ZB));
assertEquals( 2, (int) versionCounter.get("zbtags"));