仕様・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 パッケージとして提供されていました。