ISO 2709(MARC)形式の概要

- [ISO 2709](https://www.iso.org/standard/41319.html)は主に図書館界で書誌データの交換用に1960年代から長年にわたり使われてきたデータ形式。
- この形式を前提として使用するタグやその入力内容等を規定した書誌データを[MARC](https://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E5%8F%AF%E8%AA%AD%E7%9B%AE%E9%8C%B2)(マーク)という。代表的なものにアメリカ議会図書館の[MARC21](https://www.loc.gov/marc/)がある。
- ISO 2709形式のことをMARC形式ということもある。
- 国内では国立国会図書館が[NDL-Bib](https://ndl-bib.ndl.go.jp)等のサービスでISO 2709形式の書誌データのダウンロードを可能としている。
- 関連規格等: [ANSI/NISO Z39.2](https://www.niso.org/publications/ansiniso-z392-1994-r2016)、[SIST 03](https://jipsti.jst.go.jp/sist/handbook/sist03/sist03.htm)

# データ構造

```
<ファイル> ::= <レコード>+
    <レコード> ::= <レコードラベル> <ディレクトリ> <フィールド群> <レコードセパレータ>
        <レコードラベル> ::= <レコード長> <レコードステータス> <実装コード> <指示子長> <識別子長> <データの開始位置> <ユーザシステム定義> <ディレクトリマップ>
            <レコード長> ::= "\d{5}"
            <レコードステータス> ::= "."
            <実装コード> ::= ".{4}"
            <指示子長> ::= "\d"
            <識別子長> ::= "\d"
            <データの開始位置> ::= "\d{5}"
            <ユーザシステム定義> ::= ".{3}"
            <ディレクトリマップ> ::= <フィールド長の長さ> <開始位置の長さ> <実装定義の長さ> <予約>
                <フィールド長の長さ> ::= "\d"
                <開始位置の長さ> ::= "\d"
                <実装定義の長さ> ::= "\d"
                <予約> ::= "."
        <ディレクトリ> ::= <ディレクトリエントリ>+ <フィールドセパレータ>
            <ディレクトリエントリ> ::= <タグ> <フィールド長> <開始位置> <実装定義>?
                <タグ> ::= ".{3}"
                <フィールド長> ::= "\d+"
                <開始位置> ::= "\d+"
                <実装定義> ::= ".+"
        <フィールド群> ::= <レコード識別子フィールド>* <参照フィールド>* <データフィールド>*
            <レコード識別子フィールド> ::= ".+" <フィールドセパレータ>
            <参照フィールド> ::= ".+" <フィールドセパレータ>
            <データフィールド> ::= <指示子>? (<サブフィールド>+|<データ>) <フィールドセパレータ>
                <指示子> ::= ".+"
                <識別子> ::= "\x1F.+" 
                <データ> ::= ".+"
                <サブフィールド> ::= <識別子> <データ>
<フィールドセパレータ> ::= "\x1E"
<レコードセパレータ> ::= "\x1D"
```

## ファイル

- ファイルは1件以上のレコードを含む。

## レコード

- レコードは「レコードラベル」「ディレクトリ」「フィールド」から構成される。
- レコードの末尾には「レコードセパレータ」(1D)が存在する。

### レコードラベル(record label)

- レコードの先頭24バイト。
- MARC21ではリーダー(leader)という。

#### レコード長(record length)

- レコードラベルの先頭5バイト。
- 5桁数字(上位桁ゼロ埋め)。

#### レコードステータス(record status)

- レコードラベルの先頭から6バイト目。
- 設定値は実装依存。


#### 実装コード(implementation codes)

- レコードラベルの先頭から7～10バイト目。
- 設定値は実装依存。

#### 指示子長(indicator length)

- レコードラベルの先頭から11バイト目。
- フィールド内の指示子(インディケータ)の長さ。
- MARC21では「2」固定。

#### 識別子長(identifier length)

- レコードラベルの先頭から12バイト目。
- サブフィールド識別子の長さ。
- MARC21では「2」固定。

#### データの開始位置(base address of data)

- レコードラベルの先頭から13～17バイト目。
- 5桁数字(上位桁ゼロ埋め)。
- データの開始位置=レコードラベルの長さ(24バイト)+ディレクトリの長さ

#### ユーザシステム定義(positions defined by user systems)

- レコードラベルの先頭から18～20バイト目。
- 設定値は実装依存。

#### ディレクトリマップ(directory map)

- レコードラベルの先頭から21～24バイト目。
- ディレクトリエントリの各構成要素の長さ(バイト数)を定義。
- (21バイト目)フィールド長の長さ…MARC21では「4」固定。
- (22バイト目)開始位置の長さ…MARC21では「5」固定。
- (23バイト目)実装定義の長さ…MARC21では「0」固定。
- (24バイト目)予約…MARC21では「0」固定。

### ディレクトリ(directory)

- レコードラベルの直後にディレクトリが存在する。
- ディレクトリは1件以上のディレクトリエントリから構成される。
- ディレクトリの末尾には「フィールドセパレータ」(1E)が存在する。

#### ディレクトリエントリ(directory entry)

- ディレクトリエントリは「タグ」「フィールド長」「開始位置」「実装定義」から構成される。
- タグ…長さ3バイト。各フィールドのタグ(フィールド名)。
- フィールド長…長さはレコードラベルの「フィールド長の長さ」で定義されたバイト数。各フィールドのデータ長(バイト数・上位桁ゼロ埋め)。
- 開始位置…長さはレコードラベルの「開始位置の長さ」で定義されたバイト数。各フィールドの開始位置(レコード先頭からのバイト数・上位桁ゼロ埋め)。
- 実装定義…長さはレコードラベルの「実装定義の長さ」で定義されたバイト数。
- ディレクトリエントリとフィールドはそれぞれの格納順で対応する。(例)1件目のディレクトリエントリが1件目のフィールドのタグ等の情報を保持する。
- MARC21ではディレクトリエントリ1件の長さは12バイト(タグ3バイト+フィールド長4バイト+開始位置5バイト+実装定義なし)。

### フィールド群(fields)

- ディレクトリのうしろにフィールド群が存在する。
- フィールドには「レコード識別子フィールド」「参照フィールド」「データフィールド」の3種類ある。
- 各フィールドの末尾には「フィールドセパレータ」(1E)が存在する。

#### レコード識別子フィールド(record identifier field)

- タグ001のフィールド。レコードID。

#### 参照フィールド(reference fields)

- タグ002～009または00A～00Zのフィールド。
- MARC21では00で始まるタグのフィールドをコントロールフィールド(control field)という。

#### データフィールド(data fields)

- タグ010～999または0AA～ZZZのフィールド。
- データフィールドは「指示子(インディケータ)」「識別子」「データ」から構成される。
- 指示子、識別子はデータラベル内で定義されたそれぞれの長さが0のときは存在しない。
- 識別子の先頭文字は「1F」。
- データフィールド内で識別子とデータのセット(サブフィールド(subfield))を繰り返すことができる。
- MARC21では指示子、識別子とも2桁づつ。

# データ例

- 次のデータはNDL-BibからダウンロードしたMARC形式の書誌データ1件。
- レコードセパレータ、フィールドセパレータ、サブフィールド識別子はそれぞれ"[1D]"、"[1E]"、"[1F]"に置換。

```
00987cam a2200265 i 4500001001300000003000600013005001700019007000300036008004100039015001800080020001800098040003200116084001500148084001900163090001200182245010200194260004700296300001800343650002600361710004400387880010200431880007000533880005100603880006700654[1E]000003984429[1E]JTNDL[1E]20111111235959.0[1E]ta[1E]030120s2002    ja ||||g ||||f||||||jpn  [1E]  [1F]a20345531[1F]2jnb[1E]  [1F]a4-87582-583-8[1E]  [1F]aJTNDL[1F]bjpn[1F]cJTNDL[1F]encr/1987[1E]  [1F]aUL31[1F]2kktb[1E]  [1F]a014.37[1F]2njb/09[1E]  [1F]aUL31-H1[1E]00[1F]6880-01[1F]aJAPAN/MARCマニュアル :[1F]b単行・逐次刊行資料編 /[1F]c国立国会図書館 編.[1E]  [1F]a東京 :[1F]b国立国会図書館,[1F]c2002.11.[1E]  [1F]a183p ;[1F]c26cm.[1E] 7[1F]aMARC[1F]2ndlsh[1F]000616909[1E]2 [1F]6880-02[1F]a国立国会図書館[1F]000288347[1E]00[1F]6245-01/$1[1F]aJAPAN MARC マニュアル :[1F]bタンコウ チクジ カンコウ シリョウ ヘン.[1E]00[1F]6245-01/(B[1F]aJAPAN MARC manyuaru :[1F]bTanko chikuji kanko shiryo hen.[1E]2 [1F]6710-02/(B[1F]aKokuritsu Kokkai Toshokan[1F]000288347[1E]2 [1F]6710-02/$1[1F]aコクリツ コッカイ トショカン[1F]000288347[1E][1D]
```

- MARC形式のままでは人間には可読とは言えないのでもう少し見やすくする。
- 1行目にレコードラベル、2行目以降にディレクトリエントリとそれに対応するフィールドを並べて表示している。レコードセパレータは削除、フィールドセパレータは改行に置換、サブフィールド識別子は慣例的に"$"に置換。ディレクトリエントリはタグ、フィールド長、開始位置に分けて表示。

```
00987cam a2200265 i 4500
001 0013 00000 000003984429
003 0006 00013 JTNDL
005 0017 00019 20111111235959.0
007 0003 00036 ta
008 0041 00039 030120s2002    ja ||||g ||||f||||||jpn  
015 0018 00080   $a20345531$2jnb
020 0018 00098   $a4-87582-583-8
040 0032 00116   $aJTNDL$bjpn$cJTNDL$encr/1987
084 0015 00148   $aUL31$2kktb
084 0019 00163   $a014.37$2njb/09
090 0012 00182   $aUL31-H1
245 0102 00194 00$6880-01$aJAPAN/MARCマニュアル :$b単行・逐次刊行資料編 /$c国立国会図書館 編.
260 0047 00296   $a東京 :$b国立国会図書館,$c2002.11.
300 0018 00343   $a183p ;$c26cm.
650 0026 00361  7$aMARC$2ndlsh$000616909
710 0044 00387 2 $6880-02$a国立国会図書館$000288347
880 0102 00431 00$6245-01/$1$aJAPAN MARC マニュアル :$bタンコウ チクジ カンコウ シリョウ ヘン.
880 0070 00533 00$6245-01/(B$aJAPAN MARC manyuaru :$bTanko chikuji kanko shiryo hen.
880 0051 00603 2 $6710-02/(B$aKokuritsu Kokkai Toshokan$000288347
880 0067 00654 2 $6710-02/$1$aコクリツ コッカイ トショカン$000288347
```