---
name: "MARC::Schema"
section: "3pm"
platform: "linux"
package: "libmarc-schema-perl"
version: "0.16-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MARC::Schema"
---

# MARC::Schema(3pm)

Specification of the MARC21 format

## NAME

MARC::Schema - Specification of the MARC21 format

## SYNOPSIS

```
    # in Perl
    use MARC::Schema;
    my $record = {
        _id    => 'fol05865967',
        record => [
            [ 'LDR', undef, undef, '_', '00661nam  22002538a 4500' ],
            [ '001', undef, undef, '_', 'fol05865967' ],
            [ '001', undef, undef, '_', 'field is not repeatable' ],
            [   '245', '1', '0', 'a', 'Programming Perl /',
                'c', 'Larry Wall, Tom Christiansen & Jon Orwant.',
                'a', 'subfield is not repeatable',
                'x', 'unknown subfield',
            ],
            [ '999', undef, undef, '_', 'not a standard field']
        ]
    };
    # load default schema
    my $schema = MARC::Schema->new();
    # load custom schema from file
    my $schema = MARC::Schema->new({ file => share/marc-schema.json });
    # load custom schema
    my $schema = MARC::Schema->new(
        {   fields => {
                '001' => { label => 'Control Number', repetable => 0 }
            }
        }
    );
    my @check = $schema->check($record);
    # via the command line
    $ marcvalidate t/camel.mrc
    $ marcvalidate --schema marc_schema.json t/camel.mrc
    $ marcvalidate --type XML marc.xml
```

## DESCRIPTION

MARC::Schema defines a set of MARC21 fields and subfields to validate Catmandu::MARC records. A schema is given as hash reference such as:

```
    {   fields => {
            LDR => {
                positions =>
                    [ { position => '00-04', label => 'Record length' } ],
                repeatable => 0,
            },
            '001' => { label => 'Control Number', repeatable => 0 }
        }
    }
```

For a more detailed description of the (default) schema see MARC21 structure in JSON \<https://pkiraly.github.io/2018/01/28/marc21-in-json/\>.

## METHODS

### check( $record \[, %options \] )

Check whether a given "Catmandu::Importer::MARC" or "MARC::Parser::\*" \<https://metacpan.org/search?q=%22MARC%3A%3AParser%22\> record confirms to the schema and return a list of detected violations. Possible options include:

- ignore\_unknown\_fields

  Don't report fields not included in the schema.

- ignore\_unknown\_subfields

  Don't report subfields not included in the schema.

Errors are given as list of hash references with keys `"error"`, `"tag"`,  `"type"` and `"value"` of the violated field. `"error"` contains a  human-readable error message for each violated field and/or subfield.

### check\_field( $field \[, %options \] )

Check whether a MARC21 field confirms to the schema. Use same options as method `"check"`.

## AUTHOR

Johann Rolschewski \<jorol@cpan.org\>

## CONTRIBUTORS

Patrick Hochstenbach

Steve Rogerson

## COPYRIGHT

Copyright 2018- Johann Rolschewski

## LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO

Catmandu::Validator

JSON::Schema

PICA::Schema

MARC::Lint

## ACKNOWLEDGEMENT

MARC::Schema uses the MARC21 schema developed by Péter Király \<https://github.com/pkiraly\> as default. For more information see "Metadata assessment for MARC records" \<https://github.com/pkiraly/metadata-qa-marc\> and "MARC21 structure in JSON" \<https://pkiraly.github.io/2018/01/28/marc21-in-json/\>.
