六版 2001/4/21
by hishida@bg.mbn.or.jp
この文書は、「電子書籍・電子書籍作成ツールEBStudio」における、JIS X4081-1996「日本語電子出版検索データ構造」の実装の詳細を解説するものです。想定している読者は、EPWING/電子ブック/JIS X4081形式辞書を用いたアプリケーションの開発者、およびJIS X4081に技術的興味を持つ方全般です。この文書は、読者がJIS X4081-1996「日本語電子出版検索データ構造」を閲覧できることを前提にしています(JIS X4081はJISハンドブック中に収録されています)。
以下ではC++風の疑似言語でデータ構造を記述しています。項目名は、JIS X4081の仕様に合わせてあります(ただし予備領域のサブメンバは除く)。
データ型 | 意味 |
---|---|
BYTE | 8bit整数 |
WORD | 16bit整数(ビッグエンディアン) |
LONG | 32bit整数(ビッグエンディアン) |
BCDn | n バイトの二進化十進数 |
なお、規格の理解の助けとするため、拙作のEBDump.exeによる市販辞書の一部ダンプ出力を掲載することがあります。
JIS X4081-1996「日本語電子出版検索データ構造」は、EPWING V1規約を本に作成された日本工業規格であり、統一した操作性で各種の出版物を検索できるように規定されたものです。
「“日本語電子出版検索データ構造”は、(EPWING)コンソーシアムの規約公開を受けて、“EPWING規約”を基本としてまとめたものである。」(同規約より)
しかしながら、具体的な実装方法については定義されていない部分が多く、JIS X4081の情報だけでは、流通しているパソコン用EPWING/電子ブック検索ビューアで検索できる電子書籍は作成できません。このため、EBStudioではJIS X4081に準拠した上で、実装依存の部分の解釈についてはEPWING/電子ブックと互換性を持たせています。具体的には次のような項目についてです。
業務用のEPWINGオーサリングツールの多くは、SGMLに代表される構造化マークアップ言語でタグ付けした文書から、EPWINGに変換する手順を取ります。SGMLのような構造化文書の利点は、章・節・段落・索引語などの文章構造を表現することができ、書籍をデータとして処理することができることです。このためメニューの自動作成や、索引の作成等が容易に行えます。また、Webなどの各種電子出版への展開や、データベースの作成など、ワンソース・マルチユースが実現します。
EBStudioも同様の考え方から、構造化文書からJIS X4081形式へ変換します。ただしSGMLは仕様が複雑で利用が難しいため、インターネットで広く普及しており簡単に作成できるHTMLを採用しています。 また、テキストからのマークアップを簡単に行うために、自動マークアップツール EBTag を提供しています。
今後はSGML/HTMLに代わってXMLが広く使用されることが予想されるため、将来的にはXML対応を進めていきたいと考えています。電子書籍用のDTDにはSGMLの時代からあるTEI、DocBook、ISO12083の他、Open eBookやJepaXなどがあります。現在EBStudioでは、暫定的にJepaXに対応していますが、将来DicXやNetEBなどの辞書系のDTDが普及したときには、対応することもありえます。
HTMLの他に、ネットで公開されている辞書データを簡単に使用するために、英辞郎形式とPDICテキスト形式に標準で対応しています。
なお、EBStudio自身にはコンテンツを編集する機能はありません。別途EBStudioがサポートする入力形式に変換するか、エディタ等を用いて編集する必要があります。
JIS X4081では、OS上のファイル名等については定義されていません。 EPWING、電子ブックのファイル構成は、次図の通りです。
\ ― | CATALOGS | |||
書籍ディレクトリ名 ― | DATA ― | HONMON | (書籍ファイル) | |
GAIJI ― | * | (外字ファイル) | ||
MOVIE ― | * |
\ ― | CATALOG | |
書籍ディレクトリ名 ― | START (書籍ファイル) |
JIS X4081
登録書籍名管理ファイル ::= 登録書籍数,予備領域1,書籍ファイル管理情報+ 書籍ファイル管理情報 ::= 予備領域2,書籍名称,書籍ディレクトリ名,書籍ファイルディレクトリ位置,書籍管理情報記録位置,予備領域3 |
登録書籍名管理ファイルは、媒体のルートディレクトリに一つだけ存在し、 媒体に記録する書籍の情報を管理します。EPWINGではCATALOGS、電子ブックではCATALOGというファイル名です。
一つの媒体には、複数の書籍を格納できます。ただし書籍ファイル管理情報は1ブロック(2048バイト)内に書き込まれるため、媒体に記録できる書籍数は、EPWINGの場合12、電子ブックの場合50に制限されます。それ以上の書籍を格納したい場合は、一つの書籍ファイルの中に合本の形で入れる必要があります
疑似コード
WORD 登録書籍数; // 媒体に記録される書籍数(最大12) struct { BYTE dummy; BYTE Version; // EPWINGバージョン番号 BYTE dummy[12]; } 予備領域1; // (14Bytes) struct { struct { BYTE 書籍の種類; // 0x00 国語辞典 // 0x10 漢和辞典 // 0x20 英和辞典 // 0x30 和英辞典 // 0x40 現代用語辞典 // 0x50 百科事典 // 0x60 一般書物 // 0x70 類語辞典 BYTE Version; // EPWINGバージョン番号 } 予備領域2; BYTE 書籍名称[80]; // JIS X0208を使用、空白は20Hで埋める BYTE 書籍ディレクトリ名[8]; // JIS X0201を使用 LONG 書籍ファイルディレクトリ位置; // 再生システムが高速に書籍ファイルの存在位置を獲得する // ために実装に依存して記録することができる。 // 省略するときは 0 WORD 書籍管理情報記録位置; // 書籍ファイルの中の書籍管理情報が記録されている位置。 // ブロック番号で記録する。通常 1 を記録 struct { BYTE 16X16外字ファイル名[8]; // 全角16ドット BYTE 24X24外字ファイル名[8]; // 全角24ドット BYTE 30X30外字ファイル名[8]; // 全角30ドット BYTE 48X48外字ファイル名[8]; // 全角48ドット BYTE 8X16外字ファイル名[8]; // 半角16ドット BYTE 12X24外字ファイル名[8]; // 半角24ドット BYTE 15X30外字ファイル名[8]; // 半角30ドット BYTE 24X48外字ファイル名[8]; // 半角48ドット BYTE dummy[4]; } 予備領域3; // 実装において定義するための領域(68bytes) } 書籍ファイル管理情報[登録書籍数]; // (164 bytes) // ブロック内の残りの領域は 0x00
EBStudioでの実装
項目 | EBStudioの設定値 |
---|---|
Version | 1 (X4081はEPWING V1のサブセットのため) |
書籍の種類 | 書籍作成時に指定 |
書籍名称 | 書籍作成時に指定 |
書籍ディレクトリ名 | 書籍作成時に指定 |
書籍ファイルディレクトリ位置 | 0 |
書籍管理情報記録位置 | 1 |
16X16外字ファイル名 | GAI16F00 |
24X24外字ファイル名 | GAI24F00 |
30X30外字ファイル名 | GAI32F00 |
48X48外字ファイル名 | GAI48F00 |
8X16外字ファイル名 | GAI16H00 |
12X24外字ファイル名 | GAI24H00 |
15X30外字ファイル名 | GAI32H00 |
24X48外字ファイル名 | GAI48H00 |
疑似コード
WORD 登録書籍数; // 媒体に記録される書籍数(最大50) BYTE 予備領域1[14]; struct { struct { BYTE 連番; // 出現順に BYTE dummy; } 予備領域2; BYTE 書籍名称[30]; // JIS X0208を使用、空白は00Hで埋める BYTE 書籍ディレクトリ名[8]; // JIS X0201を使用 } 書籍ファイル管理情報[登録書籍数]; // (40 bytes) // ブロック内の残りの領域は 0x00
JIS X4081
書籍ファイル ::= 書籍管理情報&本文データ&著作権表示データ&(インデックス|メニュー表示データ)+&(書籍定義文字パターン|検索アシスト用データ|複合検索管理情報)* 書籍ファイル ← 書籍名管理情報 書籍管理情報 ← 書籍名管理情報 書籍管理情報 ::= 書籍構成要素数,予備領域1,インデックス作成情報の取扱性,予備領域2,書籍構成要素+,表示方法の初期値情報 書籍構成要素 ::= 書籍構成要素識別子,予備領域3,先頭アドレス,領域サイズ,インデックス作成情報有効性,インデックス作成情報,予備領域4 表示方法の初期値情報 ::= 有効無効フラグ,予備領域5,一覧表表示,本文表示法,予備領域6 インデックス作成情報 ::= 片仮名,英小文字,記号,長音文字,促音文字,よう(拗)音文字,外来語用小文字、濁音,半濁音,予備領域 |
疑似コード
struct { WORD 書籍構成要素数; // この書籍ファイルに記録する書籍構成要素の個数 BYTE 予備領域1[2]; BYTE インデックス作成情報の取扱法; // 書籍構成要素全体で、インデックス作成情報が有効か否か // 00H:各書籍構成要素に記録されているインデックス作成情報による // 01H:インデックス作成情報は意味を持たない // 02H:書籍構成要素に記録されているインデックス作成情報が有効 BYTE 予備領域2[11]; struct { BYTE 書籍構成要素識別子; // JIS X4081を参照 BYTE 予備領域3; LONG 先頭アドレス; // 構成要素の先頭ブロック数(1から始まる) LONG 領域サイズ; // ブロック数 BYTE インデックス作成情報有効性; // 01H:インデックス作成情報は意味を持たない // 02H:インデックス作成情報が意味を持つ BYTE インデックス作成情報[3]; // JIS X4081を参照 BYTE 予備領域4[2]; } 書籍構成要素[書籍構成要素数]; struct { BYTE 有効無効フラグ; // 表示方法の初期値情報全体が有効か無効か // 00H:無効 01H:有効 BYTE 予備領域5[3]; BYTE 一覧表表示; // 00H:直接本文表示 01H:一覧表から選択 BYTE 本文表示法; // 00H:一致項目のみ表示 // 01H:一致項目を先頭に本文を表示 BYTE 予備領域6[10]; } 表示方法の初期値情報; // 検索結果の望ましい表示方法 // ブロック内の残りの領域は 0x00 } 書籍管理情報;
EBStudioでの実装
項目 | EBStudioの設定値 |
---|---|
インデックス作成情報の取扱法 | 00H |
インデックス作成情報有効性 | かな:02H インデックス作成情報が意味を持つ |
表記:02H インデックス作成情報が意味を持つ | |
その他:01H インデックス作成情報が意味をもたない | |
インデックス作成情報 | かな:00H 00H 00H(既定の清音化) |
表記:41H 55H 40H(英小文字→英大文字、記号を削除 、その他はそのまま) | |
表示方法の初期値情報 | 全て00H |
JIS X4081では、書籍ファイルは複数の書籍構成要素から構成されます。 書籍構成要素には、本文データ、 著作権表示データ、 メニュー表示データ、 インデックス、 書籍定義文字パターン(外字)、 複合検索管理情報などがあります。 書籍ファイルに含まれる書籍構成要素は、先頭ブロックの書籍管理情報に書かれています。
EBStudioでの実装
JIS X4081で定義されている書籍構成要素の種類は、EPWINGや電子ブックと若干相違があります。そのためEBStudioでは、EPWING検索ソフトウェアでの検索を保証するため、EPWING/電子ブックと互換性を持たせています。
EEBStudioは下記の書籍構成要素識別子を出力します。
識別子 | EBStudio | JIS X4081 |
---|---|---|
00H | 本文 | ← |
01H | メニュー | 識別子は 20H |
02H | 著作権表示データ | 識別子は 21H |
03H | 条件検索見出し | 未定義 本文に記録すると思われる。 |
04H | 前方一致かな見出し | |
05H | 前方一致表記見出し | |
06H | 後方一致かな見出し | |
0AH | クロス条件検索(複合語検索)見出し | |
07H | 後方一致表記見出し | |
70H | 後方一致かなインデックス | ← |
71H | 後方一致表記インデックス | ← |
80H | 条件検索インデックス | ← |
81H | クロス条件検索インデックス | 複合語検索インデックス |
90H | 前方一致かなインデックス | ← |
91H | 前方一致表記インデックス | ← |
D0H | モノクロ図版 | 未定義 |
D2H | カラー図版 | 未定義 |
D8H | 音声 | 未定義 |
F1H | EPWINGでは外部ファイルに記録 電子ブックではJIS X4081と同じ |
外字(16×16) |
F2H | 外字(8×16) | |
F3H | 外字(24×24) | |
F4H | 外字(16×24) | |
F5H | 外字(32×30) | |
F6H | 外字(16×30) | |
F7H | 外字(48×48) | |
F8H | 外字(24×48) | |
FFH | 複合検索管理情報 | ← |
JIS X4081
本文データ ::=(表示開始指定,項目データ+,表示終了指定)+,(メニュー表示用データ|入力候補テーブル)* 項目データ ::= 検索キー記述子,表示用データ,別記事参照*,検索キー終了記述子,表示用データ メニュー表示用データ ::= メニュー項目+ 入力候補テーブル ::= 表示開始指定,メニュー項目+,表示終了指定 メニュー項目 ::= メニュー記述子,表示用データ,メニュー終了記述子,アドレス情報 表示用データ ::=(表示制御記述子*,文字の列,表示制御終了記述子*)* 別記事参照 ::= 別項目参照記述子,矢印コード,表示用データ,別項目参照終了記述子,アドレス情報 アドレス情報 ::= ブロック番号,ブロック内オフセット |
本文データ内の記述子(JIS X4081)
値 | 記述子名 | 意味及び取扱い |
---|---|---|
1F02H | 表示開始指定 | 一連の項目データ群の最初を示す。 |
1F03H | 表示終了指定 | 一連の項目データ群の最終を示す。 |
1F04H〜1F3FH | 表示制御用割当コード | →別表 |
1F40H | 予約領域 | 過去の実装との互換で使用してはならない。 |
1F41H | 検索キー記述子 | 検索結果の項目の先頭を示す。 |
1F42H | 別項目参照記述子 | 関連項目の記録位置を示す。 |
1F43H | メニュー記述子 | メニュー項目の先頭を示す。 |
1F44H〜1F60H | 予約領域 | 各実装規約で扱う画像・音声などのデ一夕のリンク構造に用いる。 |
1F61H | 検索キー終了記述子 | 検索結果の項目の見出し末尾を示す。 |
1F62H | 別項目参照終了記述子 | 関連項目の参照記事の表題表示用の文字列の末尾を示す。 |
1F63H | メニュー終了記述子 | メニューの末尾を示す。 |
1F64H〜1F80H | 予約領域 | 各実装規約で扱う画像・音声などのデ―夕のリンク構造に用いる。 |
1F81H〜1FDFH | 予約領域 | この規格では規定しない。 |
表示制御記述子(JIS X4081)
値 | 記述子名 | 意味及び取扱い |
---|---|---|
1F04H | 半角開始指定 | 後続の文字列を半角表示する。 |
1F05H | 半角終了指定 | 半角表示する文字列の終わりを示す。 |
1F06H | 下添え字開始指定 | 後続する文字列を下添え字表示する。 |
1F07H | 下添え字終了指定 | 下添え字表示する文字列の終わりを示す。 |
1F08H | 拡張領域 | 拡張用コード。拡張方法は、附属書による。 |
1F09H | 字下げ指定 | 後続する文字列を指定数,字下げ表示する。2進化10進数(2バイト)を後続させて,その値が字下げ数を示す。 |
1F0AH | 改行 | 改行する。 |
1F0BH | 表の表示開始指定 | 後続の表の表示終了指定までを一つの表として表示制御する。 |
1F0CH | 表の表示終了指定 | 表の表示制御する文字列の終わりを示す。 |
1F0DH | 拡張領域 | 拡張用コード。拡張方法は、附属書による。 |
1F0EH | 上添え字開始指定 | 後続する文字列を上添え字表示する。 |
1F0FH | 上添え字終了指定 | 上添え字表示する文字列の終わりを示す。 |
1F10H | 分割禁止開始指定 | 後続する文字列の途中で行を折り返してはならないことを示す。 |
1F11H | 分割禁止終了指定 | 途中行折り返しを禁止する文字列の終わりを示す。 |
1F12H | 強調開始指定 | 後続する文字列を強調表示することを示す。強調表示の方法は再生システムに任せる。 |
1F13H | 強調終了指定 | 強調表示する文字列の終わりを示す。 |
1F14H〜1F1FH | 拡張領域 | 拡張用コード。拡張方法は,附属書による。 |
1FE0H | 拡張強調表示開始指定 | 強調方法の指定付きで後続する文字列を強調表示することを示す。2進化10進数(2バイト)を後続させて,その値が強調表示方法を示す。 |
1FE1H | 拡張強調表示終了指定 | 強調表示対象文字列の終わりを示す。 |
1FE2H〜1FFFH | 拡張領域 | 拡張用コード。拡張方法は,附属書による。 |
EBDump.exeの本文表示例
[ID=00:本文] start=151F(5407), blocks=3 [151F: 0]<1F02> [151F: 2]<1F09><0001><1F41><0160>あ<1F61>【亜】《国》<1F0A> [151F: 1C]<1F09><0004>7画[音]ア(中)[訓]―<1F0A> [151F: 3C]<1F04>(1)<1F05>あるものの次に位置する。<A421>亜熱帯<1F04>(あねつ たい)<1F05>・亜流<1F04>(ありゆう)<1F05><1F04> (2)<1F05>亜細亜<1F04>(ア ジア)<1F05>の略<1F04>(りやく)<1F05>。<A421>東亜<1F04>(とうあ)<1F05><1F0A> [151F: D8]<1F09><0001><1F41><0160>ああ<1F61>《国》<1F0A> [151F: EE]<1F09><0004>〈副〉あのよう(に)。「―強くては勝負<1F04>(しようぶ) <1F05>にならない・あのひとはいつも―だ」[関連]こう・そう・―・どう<1F0A> [151F:168]―言<1F04>(い)<1F05>えばこう言<1F04>(い)<1F05>う へりくつをなら べて、言いのがれたりさからったりする。<1F0A> [151F:1C4]<1F09><0001><1F41><0160>ああ<1F61>《国》<1F0A> [151F:1DA]<1F09><0004>〈感〉<1F04>(1)(:<1F05>嗚呼)感動・おどろきなどの気 持ちをあらわすことば。「―、楽しかった」<1F04> (2)<1F05>応答や承知<1F04> (しようち)<1F05>の意味をあらわすことば。「―、いいよ」[ぞんざいな言い方] <1F0A> [151F:298]<1F09><0001><1F41><0160>ああ‐いう<1F61>【ああいう】(ああ言う)《国》 <1F0A> |
EBStudioでの実装
HTML | 表示制御記述子(16進) | 意味 |
---|---|---|
<body> | 1F02 | 表示開始 |
</body> | 1F03 | 表示終了 |
<Hn > or <dt> | 1F09 0001 1F41 0160 |
字下げ(0) 検索キー開始 |
</Hn > or </dt> | 1F61 | 検索キー終了 |
<p> or <dd> | 1F09 0002 | 字下げ(1) |
</p> </dd> |
1F0A | 段落の終了(改行) |
<a href=""> | 1F42 "→" |
別項目参照 |
</a> | 1F62 page (BCD4) offset (BCD2) |
別項目参照終了 |
文字列 | JIS文字列 | 全角JIS文字列として書き込む。 文字コード範囲は2121H〜7426H。 これ以外の文字が出現した場合、「〓」を書き込む。 外字はA121H〜FE7EH。 |
全角→半角 | 1F04 | 半角開始 |
半角→全角 | 1F05 | 半角終了 |
<br> | 1F0A | 改行 |
<sub> | 1F06 | 下添字開始 |
</sub> | 1F07 | 下添字終了 |
<sup> | 1F0E | 上添字開始 |
</sup> | 1F0F | 上添字終了 |
<nobr> | 1F10 | 分割禁止開始 |
</nobr> | 1F11 | 分割禁止終了 |
<b> or <strong> | 1FE0 0003 | 拡張強調表示開始(ボールド) |
</b> or </strong> | 1FE1 | 拡張強調表示終了 |
<i> or <em> | 1FE0 0001 | 拡張強調表示開始(イタリック) ※検索ソフトウェアによっては、ボールドで表示される |
</i> or </em> | 1FE1 | 拡張強調表示終了 |
<object data="*.{avi|mpg|mpeg}">(動画) | 1F39 1000 9999 0000 0000 0000 0000 0000 0000 0000 0000 ファイル名 |
動画(mpg/avi) ファイル名はJISコードで12文字固定(大文字)。 ファイルは外部ファイルに格納。 |
</object> | 1F59 | 動画終了 |
<object data="*.wav">(音声) | 1F4A 0001 0112 page1 (BCD4) offset1 (BCD2) page2 (BCD4) offset2 (BCD2) |
PCM音声 page1/offs1は開始アドレス、 page2/offs2は終了アドレス。 データは書籍構成要素識別子=D8に格納 |
</object> | 1F6A | 音声終了 |
<img src="*.bmp" alt="名称"> | 1F44 0001 width (WORD) height (WORD) 名称 (可変長) 1F64 page (BCD4) offset (BCD2) 1F0A |
モノクロ図版(BMP) データは書籍構成要素識別子=D0に格納 |
<img src="*.bmp" alt="名称"> | 1F4D 0009 0000 0000 0000 0000 0000 page (BCD4) offset (BCD2) 名称 (可変長) 1F6D 1F0A |
カラー図版(BMP) データは書籍構成要素識別子=D2に格納 |
<img src="*.{jpg|jpeg}" alt="名称"> | 1F4D 1209 0000 0000 0000 0000 0000 page (BCD4) offset (BCD2) 名称 (可変長) 1F6D 1F0A | カラー図版(JPEG) データは書籍構成要素識別子=D2に格納 |
マルチメディアデータの詳細は、 「EPWINGのマルチメディアデータについて」をご覧ください。
JIS X4081
著作権表示データ ::= 表示用データ 表示用データ ::=(表示制御記述子*,文字の列,表示制御終了記述子*)* |
EBDump.exeのメニュー表示例
[ID=01:メニュー] start=000E(14), blocks=3 [E: 0]<1F02> [E: 2]<1F43>現代国語辞典の使い方<1F63>[E:4C]<1F0A> [E: 22]<1F43>コンサイス外来語辞典の使い方<1F63>[13:7E8]<1F0A> [E: 4A]<1F03> [E: 4C]<1F02> [E: 4E]<1F43>〔1〕見出しの範囲<1F63>[E:1D8]<1F0A> [E: 6C]<1F43>〔2〕見出しの示し方<1F63>[E:294]<1F0A> [E: 8C]<1F43>〔3〕見出しの並べ方<1F63>[E:6E6]<1F0A> [E: AC]<1F43>〔4〕常用漢字の示し方<1F63>[F:4A6]<1F0A> [E: CE]<1F43>〔5〕語の書きあらわし方<1F63>[10:26A]<1F0A> [E: F2]<1F43>〔6〕品詞・活用等の示し方<1F63>[11:A8]<1F0A> [E:118]<1F43>〔7〕外来語の原語の示し方<1F63>[11:73E]<1F0A> [E:13E]<1F43>〔8〕ことばの意味・用法などの解説<1F63>[12:1D4]<1F0A> [E:16C]<1F43>〔9〕[類][比較][対][関連]の表示<1F63>[13:38A]<1F0A> [E:1A0]<1F43>〔<1F04>10<1F05>〕[注意][派生][可能]の表示<1F63>[13:584]<1F0A> [E:1D6]<1F03> |
EBStudioでの実装
HTML | 表示制御記述子(16進) | 意味 |
---|---|---|
このメニュー階層の先頭 | 1F02 | 表示開始 |
<Hn> | 1F43 | メニュー |
</Hn> | 1F63 page (BCD4) offset (BCD2) 1F0A |
メニュー終了 階層メニューで子メニューがある場合は、 page/offsetは子メニューの先頭アドレス。 最下位の場合、本文のアドレスを指す。 |
このメニュー階層の最後 | 1F03 | 表示終了 |
JIS X4081
インデックス ::=(上位インデックス)+,最下位インデックス |
JIS X4081
上位インデックス ::= インデックス群識別,キー長,上位エントリ数(,上位エントリ)+ 上位エントリ ::= 上位エントリキー情報,下位インデックス所在ブロック番号 インデックス群識別(b7を最上位ビットとし,b0を最下位ビットとする) b7:上位インデックスか最下位インデックスかの区別 0:上位インデックスであることを示す。 1:最下位インデックスであることを示す。 b6 : 同じ階層のインデックス中で先頭か否かを示す。 0:先頭ではないことを示す。 1:先頭であることを示す。 b5 : 同じ階層のインデックス中で最終か否かを示す。 0:最終でないことを示す。 1:最終を示す。 b4 : 集団概念付きか否かを示す。 0:一般型エントリから構成されることを示す。 1:集団概念付きエントリから構成されることを示す。 b3〜b0 : 将来の拡張のための領域。この規格では使用しない。 |
インデックス群識別について
各インデックスページの1バイト目は、インデックス群識別であり、インデックスの属性を示すビットマスクです。
上位インデックスのインデックス群識別 | |
---|---|
1ブロックで収まる | 0x60:単独インデックスブロック |
2ブロック以上 | 0x40 : 同じ階層の先頭インデックスブロック |
0x00 : 同じ階層の途中のインデックスブロック | |
0x20 : 同じ階層の最終インデックスブロック |
最下位インデックス(一般型エントリ)のインデックス群識別 | |
---|---|
1ブロックで収まる | 0xE0:単独インデックスブロック |
2ブロック以上 | 0xC0 : 先頭インデックスブロック |
0x80 : 途中のインデックスブロック | |
0xA0 : 最終インデックスブロック |
最下位インデックス(集団概念付エントリ)のインデックス群識別 | |
---|---|
1ブロックで収まる | 0xF0:単独インデックスブロック |
2ブロック以上 | 0xD0 : 先頭インデックスブロック |
0x90 : 途中のインデックスブロック | |
0xB0 : 最終インデックスブロック |
EBDump.exeの上位インデックス表示例
[ID=90:前方一致かなINDEX] start=0017(23), blocks=3 block#=0018(24) ID=60 桁数=30 要素数=11 かあと[30] <blk=19(25)> きようしゆくひようけん[30] <blk=1A(26)> こうえんいらい[30] <blk=1B(27)> しやくようのもうしこみのしやせ[30] <blk=1C(28)> しようかいしよう[30] <blk=1D(29)> そうきんのれいしよう[30] <blk=1E(30)> ちんしやこうこく[30] <blk=1F(31)> にゆうかくいわい[30] <blk=20(32)> ふくしやようてんひよう[30] <blk=21(33)> みまいしよう[30] <blk=22(34)> [30] <blk=23(35)> |
疑似コード
BYTE インデックス群識別; // 0x60 単独インデックスブロック // 0x40 同じ階層の先頭インデックスブロック // 0x00 同じ階層の途中のインデックスブロック // 0x20 同じ階層の最終インデックスブロック BYTE キー長; // 00H以外:固定長を示す WORD 上位エントリ数; struct { BYTE 上位エントリキー情報[キー長]; LONG 下位インデックス所在ブロック数; } 上位エントリ[上位エントリ数];
EBStudioでの実装
JIS X4081
最下位インデックス ::= インデックス群識別,キー長,エントリ数(,集団概念付きエントリ|一般型エントリ)+ 集団概念付きエントリ ::=(基本エントリ|集団エントリ)+ 基本エントリ ::= エントリ識別,キー長,基本エントリキー情報,項目アドレス 集団エントリ ::= エントリ種別,キー長,メンバ数,集団エントリキー情報(,メンバ情報)+ メンバ情報 ::= メンバ識別,キー長,キー情報,項目アドレス 一般型エントリ::=キー長,キー情報,項目アドレス 項目アドレス ::=項目所在ブロック番号,項目所在ブロック内オフセット,候補リスト所在ブロック番号,候補リスト所在ブロック内オフセット |
最下位インデックスの形式には一般型エントリと集団概念付エントリがあります。 集団概念付エントリは、仮名検索の同音異義語や、条件検索で同じ単語が本文の複数箇所に出現する場合など、同じ検索語に複数のエントリが対応する場合に使用します。一般型エントリは、検索語に対応するエントリが一つしかない場合に使用します。
EBDump.exeの最下位インデックス表示例
block#=0019(25) ID=D0 桁数=0 要素数=85 00:あいこのあいさつ[16] [67:02][4E:02] 80:あいさつしよう[14]<1個> C0:あいさつじょう[14] [67:2EC][4E:12] 80:あいしようのてかみ[18]<1個> C0:あいじょうのてがみ[18] [67:5D8][4E:1E] 80:あくふんのちんしや[18]<1個> C0:あくぶんのちんしゃ[18] [68:71E][4E:2A] 80:あつせんいらい[14]<1個> C0:あっせんいらい[14] [69:12E][4E:36] 80:あつせんしようたく[18]<1個> C0:あっせんしょうだく[18] [6A:4E][4E:44] 80:あつせんのしやせつ[18]<1個> C0:あっせんのしゃぜつ[18] [6A:52C][4E:52] 80:あつせんほうこく[16]<1個> C0:あっせんほうこく[16] [6B:2D4][4E:62] 00:あてさき[8] [6C:2AE][4E:70] 00:あてさきのへんこう[18] [6C:3DC][4E:78] 00:あてな[6] [6C:4E2][4E:86] 00:あてなこうこく[14] [6D:2C4][4E:8E] 80:あとつけ[8]<1個> C0:あとづけ[8] [6D:470][4E:9A] 80:あとつけのはいち[16]<1個> C0:あとづけのはいち[16] [6D:6C8][4E:A2] 80:あんけえと[10]<2個> C0:あんけーと[10] [6E:328][4E:B0] C0:アンケート[10] [6E:328][4E:BC] |
疑似コード
BYTE インデックス群識別; // 0xE0 一般型エントリ・単独インデックスブロック // 0xC0 一般型エントリ・先頭インデックスブロック // 0x80 一般型エントリ・途中のインデックスブロック // 0xA0 一般型エントリ・最終インデックスブロック BYTE キー長; // 00H:可変長を示す WORD エントリ数; struct { BYTE キー長; // キー情報の長さ(バイト数) BYTE キー情報[キー長]; // 後方一致の場合逆順 BCD4 項目所在ブロック番号 BCD2 項目所在ブロック内オフセット BCD4 候補リスト所在ブロック番号 BCD2 候補リスト所在ブロック内オフセット } 一般型エントリ[エントリ数];
EBStudioでの実装
キー情報の書き込みでは次の処理を行っています。
空白 | 削除する(オプションで変更可) |
’・− | 削除する(オプションで変更可) |
英小文字 | 英大文字に変換 |
用語 | 意味 |
---|---|
基本エントリ | 同じ検索文字列に対して、複数の検索結果が存在しない場合 |
基本エントリキー情報 | 目的データの単語を示す文字列 |
集団エントリ | 同じ検索文字列に対して、複数の検索結果が存在する場合。キーの清音変換によって発生する同音異義語も含む。 |
集団エントリキー情報 | 集団エントリを代表する目的データの単語を示す文字列 しっこう(執行)、しっこう(失効)、じっこう(実行)に対して、 ”しつこう”をキー情報として記録する |
疑似コード
BYTE インデックス群識別; // 0xF0 集団概念付エントリ・単独インデックスブロック // 0xD0 集団概念付エントリ・先頭インデックスブロック // 0x90 集団概念付エントリ・途中のインデックスブロック // 0xB0 集団概念付エントリ・最終インデックスブロック BYTE キー長; // 00H:可変長 WORD エントリ数; struct { // 基本エントリ、または集団エントリのいずれかで記録される // エントリ識別に従い、基本エントリと集団エントリを判別する struct { BYTE エントリ識別; // 0x00 : 基本エントリ BYTE キー長; // 基本エントリキー情報の長さ(バイト数) BYTE 基本エントリキー情報[キー長]; // 後方一致の場合逆順 BCD4 項目所在ブロック番号 BCD2 項目所在ブロック内オフセット BCD4 候補リスト所在ブロック番号 BCD2 候補リスト所在ブロック内オフセット } 基本エントリ; or struct { BYTE エントリ識別; // 0x80 : 集団エントリ BYTE キー長; // 集団エントリキー情報の長さ(バイト数) WORD メンバ数; BYTE 集団エントリキー情報[キー長]; // 後方一致の場合逆順 // 清音化されている struct { BYTE メンバ識別; // 0xC0 BYTE キー長; // キー情報の長さ(バイト数) BYTE キー情報[キー長]; // 後方一致の場合逆順 BCD4 項目所在ブロック番号 BCD2 項目所在ブロック内オフセット BCD4 候補リスト所在ブロック番号 BCD2 候補リスト所在ブロック内オフセット } メンバ情報[メンバ数]; } 集団エントリ; } 集団概念付きエントリ[エントリ数];
EBStudioでの実装
キー情報の清音化では次の処理を行っています。
空白 | 削除する(オプションで変更可) |
’・− | 削除する(オプションで変更可) |
片仮名 | ひらがなに変換 |
長音"ー" | 直前の文字の母音に変換 |
促音"っ" | "つ"に変換 |
拗音"ゃゅょゎ" | "やゆよわ"に変換 |
小文字"ぁぃぅぇぉ" | "あいうえお"に変換 |
濁音 | 清音に変換 |
半濁音 | 清音に変換 |
清音化前と後で異なる文字列になった場合、候補文字が一つしかない場合でも、基本エントリではなく集団エントリで記録しています。
疑似コード
struct { BYTE エントリ識別; // 0x80 : 集団エントリ BYTE キー長; // 集団エントリキー情報の長さ(バイト数) WORD メンバ数; BYTE 集団エントリキー情報[キー長]; BCD4 候補リスト所在ブロック番号 // ※先頭メンバのアドレス BCD2 候補リスト所在ブロック内オフセット struct { BYTE メンバ識別; // 0xC0 BCD4 項目所在ブロック番号 BCD2 項目所在ブロック内オフセット } メンバ情報[メンバ数]; } 集団エントリ;
※条件検索の候補リスト所在ブロック番号・オフセットは、メンバ情報の先頭(メンバ情報[0])に対応します。 メンバ情報[i]に対応する見出しは、候補リスト所在ブロック番号・オフセットが指す見出しから数えて i 番目の見出しになります。
EBStudioでの実装
疑似コード
struct { BYTE エントリ識別; // 0x80 : 集団エントリ BYTE キー長; // 集団エントリキー情報の長さ(バイト数) WORD メンバ数; BYTE 集団エントリキー情報[キー長]; struct { BYTE メンバ識別; // 0xC0 BCD4 項目所在ブロック番号 BCD2 項目所在ブロック内オフセット BCD4 候補リスト所在ブロック番号 BCD2 候補リスト所在ブロック内オフセット } メンバ情報[メンバ数]; } 集団エントリ;
JIS X4081
複合検索管理情報 ::= 複合エントリ数,予備領域1(,複合エントリ)+ 複合エントリ ::= 書籍構成要素数,予備領域2,検索名称(,書籍構成要素)+ 書籍構成要素 ::= 書籍構成要素識別子,予備領域3,先頭アドレス,領域容量,予備領域4 |
疑似コード
WORD 複合エントリ数; BYTE 予備領域1[14]; struct { BYTE 書籍構成要素数; BYTE 予備領域2; BYTE 検索名称[30]; // 30バイトに満たない場合、残り00H詰め struct { BYTE 書籍構成要素識別子; // 01H 入力候補テーブル // 05H 前方一致表記形見出し(X4081では未定義) // 07H 後方一致表記形見出し(X4081では未定義) // 0DH 項目別条件検索見出し(X4081では未定義) // 71H 後方一致表記形検索インデックス // 91H 前方一致表記形検索インデックス // A1H 項目別条件検索インデックス BYTE 予備領域3; LONG 先頭アドレス; // 要素の存在するブロック番号 LONG 領域容量; // 要素のブロック数 BYTE 予備領域4[6]; // X4081では[5]? } 書籍構成要素[書籍構成要素数]; } 複合エントリ[複合エントリ数];
EBStudioでの実装
メニュー型 | 自由キーワード型 |
---|---|
01H 入力候補テーブル 05H 前方一致表記形見出し 91H 前方一致表記形検索インデックス |
0DH 項目別条件検索見出し A1H 項目別条件検索インデックス |
JIS X4081
書籍定義文字パターン ← 書籍名管理ブロック 書籍定義文字パターン ::= 制御情報,パターンブロック+ 制御情報 ::= 予備領域1,予備領域2,横ドット構成,縦ドット構成,先頭コード,登録パターン数,予備領域3 パターンブロック ::= 文字パターン+,空き領域 |
疑似コード
struct { struct { BYTE 予備領域1; BYTE 予備領域2[7]; BYTE 横ドット構成; // 8,12,16,24,32,48 BYTE 縦ドット構成; // 16,24,30,48 WORD 先頭コード; // 先頭の外字コード WORD 登録パターン数; // 記録する外字の総数 BYTE 予備領域3[2034]; } 制御情報; struct { BYTE 文字パターン[横ドット構成*縦ドット構成/8] BYTE 空き領域[1024byteブロックの残りバイト数]; } パターンブロック[登録パターン数]; } 書籍定義文字パターン;
EBStudioでの実装
「広辞苑」等のEPWINGタイトルの実装に合わせて、横ドット数は8の倍数としています。
JIS X4081 | EBStudio |
---|---|
16×16 | ← |
8×16 | ← |
24×24 | ← |
12×24 | 16×24 |
30×30 | 32×30 |
15×30 | 16×30 |
48×48 | ← |
24×48 | ← |
実験した限りでは、24ドット以上の外字に対応している検索ソフトウェアは ほとんどありません。OASYS-CDViewのみ、印刷時に24ドット以上の外字を使用します。 一般に16ドットだけあれば充分でしょう。
EBStudioの開発中に遭遇した、検索ソフトウェア固有の症状について記録しておきます。
EBStudioの出力形式を電子ブックとして作成し、8cmCD-Rに焼いて電子ブックプレーヤ用の専用ジャケットに格納すれば、SONY電子ブックプレーヤDATA DISCMANで検索できることが確認されています ( http://homepage2.nifty.com/thakata/index.htm )。その結果分かったことは:
EBStudioの出力する電子ブックはEBXA準拠です。電子ブックには海外版のEBGという規格があります。EBGのEBXAとの違いについて、確認した情報は以下の通りです。