仕様・APIドキュメント

図書館目録(MARC)の雑誌包括所蔵形の比較ロジックと、JavaScriptライブラリおよびPerlモジュールの仕様解説です。

📦 JavaScriptライブラリ (marc_diff_serialsJS)

本サイトの計算エンジンは、オープンソースのJavaScriptライブラリ maedaak/marc_diff_serialsJS を使用しています。 Node.js 環境、ブラウザ環境(ES Modules / UMD)のいずれでも動作します。

インストール

npm install marc-diff-serials

JavaScript での利用例 (Node.js / CommonJS)

const marcDiffSerials = require('marc-diff-serials');

const volsOfLibA = '3(),4-6,9,10()';
const volsOfLibB = '2-9';

// 補充可能な全巻
console.log(marcDiffSerials.fillAll(volsOfLibA, '2-11'));
// -> 2-3,7-8,10-11

// 古い巻の補充
console.log(marcDiffSerials.fillOld(volsOfLibA, '2(4-5),3-9'));
// -> 2(4-5)

// 新しい巻の補充
console.log(marcDiffSerials.fillNew(volsOfLibA, '2-9,11(3-4)'));
// -> 11(3-4)

// 途中欠号の補充
console.log(marcDiffSerials.fillMiddle(volsOfLibA, '5-11'));
// -> 7-8,10

// 自館の途中欠号
console.log(marcDiffSerials.middleLack(volsOfLibA));
// -> 3(),7-8,10()

// 2館の所蔵をマージ
console.log(marcDiffSerials.margeVols(volsOfLibA, '8-9,10(4)'));
// -> 3(),4-6,8-9,10()

ブラウザでの直接利用

<script src="js/marc-diff-serials.js"></script>
<script>
  const result = MarcDiffSerials.fillAll('3(),4-6,9,10()', '2-9');
  console.log(result); // "2-3,7-8"
</script>

📝 雑誌所蔵編集形の記法ルール

所蔵情報は次の形式を持つ文字列で表します。

形式 記述例 意味・備考
単一巻 3 第3巻を所蔵
連続巻 4-6 第4巻から第6巻まで連続して所蔵
不完全巻 3() 第3巻の所蔵はあるが、号や号の範囲は未確定・欠号あり
号範囲付き不完全巻 2(4-5) 第2巻の4号から5号のみ所蔵
複数要素 3(),4-6,9,10() カンマで区切って複数巻を指定
継続受入 4-16+ 末尾の + は自動的に正規化されて計算されます

⚠️ 現在の制限事項・セキュリティ仕様

  • 入力文字数の上限: 個別比較および一括マッチングの入力欄は、最大1000文字までに制限されます(1000文字を超える場合は先頭1000文字で処理されます)。
  • JavaScriptインジェクション対策: 入出力時に危険文字(\, ', ", //, \n, \r, \t)のサニタイズ(除去・無害化)が自動的に行われます(一括マッチングTSVは構造解析後に各セル単位でサニタイズされます)。
  • 巻号体系変更(;): 例 1980-1998;9-12 のように、途中で巻号体系が変わるデータには未対応です(エラー「処理できないデータ型式です」となります)。人手での確認が必要です。
  • 受入予定(*): * 記号には対応していません。

⚙️ 関数リファレンス

関数名 (Camel / Snake) 引数 返り値 説明
fillAll / fill_all (volsA, volsB) string 図書館Aへ図書館Bから補充できる巻(バックナンバー・欠号・新着)をまとめて返します。
fillOld / fill_old (volsA, volsB) string 図書館Aの最古巻より古い時期にあって、補充可能な巻を返します。
fillMiddle / fill_middle (volsA, volsB) string 図書館Aの途中欠号に該当する巻で、図書館Bに所蔵があるものを返します。
fillNew / fill_new (volsA, volsB) string 図書館Aの最新巻より新しい時期にあって、補充可能な巻を返します。
middleLack / middle_lack (vols) string 指定した所蔵表現に含まれる途中欠号(巻レベル)を返します。
margeVols / marge_vols (volsA, volsB) string 2館の所蔵を結合し、統合した包括所蔵表現を返します。

🐪 原作 Perl モジュール (MARC::diffSerials) について

本ツールは、東京大学「図書系職員のためのアプリケーション開発講習会」の成果物である Perl モジュール MARC::diffSerials(作成者: Akira Maeda)を、純粋なクライアントサイド JavaScript で動作するように移植・再構築したものです。

オリジナル版のPerlモジュールは CPAN スタイルの Makefile.PL および ActivePerl / Strawberry Perl 向け PPD パッケージとして提供されていました。