以下、本発明の実施の形態を図面を参照して説明する。
(用語の定義)
まず、言葉の定義について説明しておく。
以降、説明の為、電子データを「分割境界」で単に分割したデータを「分割データ」と呼ぶことにする。例えば、図7は、電子データとしてのHTMLデータの全体を、6つの分割データに分割する場合の区切り方の一例を示している。図7からも判るように、分割されたデータ間で重なる部分もなく、また足りない部分もない。
分割データには順番があるとし、相対的に「前の分割データ」、「次の分割データ」という言い方をする。この順番は、各分割データを影響も考慮して順に処理した処理結果が、電子データ全体の処理結果に一致する時の分割データの処理順である。因みに、その処理順は、分割データの電子データ中の位置の順番に相当することが多い。
なお、電子データを分割したもの全てを分割データと呼ぶ訳ではない。ここで主に対象としている分割データは、処理結果を直接生成する素材となるデータであり、例えば、文書データの電子データの場合、テキストデータなどが対象となる。従って、電子データ中のそれ以外の部分、例えば、ヘッダ情報部分などは、処理結果を直接生成する素材とは言いがたいので、分割データの対象とならない場合もある。
「分割境界」とは、図7に示すように、電子データを2組以上の分割データに分割する境界である。分割境界は、電子データ中の位置で表現でき、例えば、バイト単位で表現する場合、電子データの先頭から何バイト目の前、あるいは、何バイト目と何バイト目の間、あるいは何バイト目の後、という形となる。位置を表す単位系としては、他にも文字数、ビット数、タグ数やそれらの組み合わせなどがある。
「部分データ」とは、「分割境界」を使って電子データから生成されるデータで、電子データの一部分のデータを含んでおり、部分データ単独で処理したときに、含まれる電子データ部分の処理結果自体には、後述するような誤りが無いデータのことである。
部分データと分割データとの関係は、2通り有る。1つ目は、部分データが、分割境界を使って電子データから生成された分割データの中から、選別された分割データに等しい場合である。その選別は、分割データの処理結果自体に誤りの表れない適切な分割境界を選択することによってなされる。2つ目は、部分データと分割データとがイコールではない場合であり、分割データの処理結果自体に誤りが無い状態を作るための補助的な情報が組み合わせられた分割データの場合である。
なお、上述した適切な分割境界を選択する処理が、本発明の影響判断ステップおよび標準内非依存境界抽出ステップにおける処理である。
部分データに含まれる電子データ部分は、電子データ中の連続した一塊のデータ部分を構成しているとは限らず、飛び飛びの場合も本発明に含まれるが、通常、連続した一塊のデータ部分の方が扱い易い。なお、部分データが飛び飛びでない場合、分割データ同様、順番を持ち、「前の部分データ」、「次の部分データ」という言い方をする。
なお、部分データは、必ずしも電子データと独立した形(例えば別ファイルなど)で存在する必要はない。電子データと分割境界の情報の組として保持していてもよい。部分データが必要な時に、電子データと分割境界の情報の組から動的に生成してもよい。例えば、分割境界データから分割境界の位置情報を得て、電子データから、その部分データの範囲に相当する部分のデータを読み込むなどの方法で、部分データを動的に生成することができる。
これにより、分割データを別途ファイルなどとして生成する必要がなく、電子データをそのままおいておけるという利点がある。
この利点が生かされる場合として、例えば、電子データは、暗号化や著作権などの問題で、ファイルを変更/追加したり、分割データに分けてファイル化したりといったことができない場合がある。また、電子データが例えばCD−ROMなどの書き込み不可のメディア上に記録されている場合がある。そのような場合でも、電子データをそのままおいておき、補助ファイルとして、分割境界データのファイルなどを別途生成することで、対応できる。
「単独で処理したときの処理結果自体には誤りが無い」の定義は、電子データの種類によって異なる。基本的には、元の電子データに含まれていないデータ(擬似データと呼ぶことにする)が、あたかも電子データに含まれていたかのような処理結果(例えば、意図しない改行、フォントサイズ等)が得られた場合、処理結果に、誤りが表れていると定義し、そのような擬似データに対応する処理結果を含まず、元の電子データが本来意図した処理結果が得られるとき、処理結果自体に誤りが無いと定義する。
例えば、HTMLデータの場合、処理結果である表示結果は、WWWブラウザの表示設定などによって異なる。この場合、改行タグによって改行がなされているかどうか、フォントタグによる文字サイズや文字色などの指定が反映されているか、など、タグによる命令結果に沿った表示結果が生成されているかどうかが、処理結果に誤りが表れていないかどうかの判断基準の一つとなる。例えば、文字サイズの表示設定が変わって全体の行数が変わっても、改行タグ位置で改行がされていれば、この場合は「処理結果自体には誤りが無い」と判断される。また、フォントタグの開始タグと終了タグの間のデータだけを処理した場合、フォントタグの指定が反映されないので、この場合は「処理結果自体には誤りが有る」と判断される。
処理結果に、誤りが表れた具体例を図19に示す。図18に示す表示結果が、誤りの無い表示結果であるとすると、図19には、「based」の後に改行が表れている。つまり、改行タグや改行コードが、元データには無いのにも拘らず、図19には、改行タグや改行コードが擬似データとして、あたかも元データに含まれていたかのような表示結果になっている。
なお、プレーンテキストの場合は、改行コードの文字によって、改行が指示される。
「処理補助データ」とは、分割データを単独で処理して分割データの意味する内容が損なわれない処理結果を得るには、前記分割データに足りない情報(を補助するデータ)である。つまり、分割データと処理補助データを合わせて部分データとなる。例えば、前の分割データから効力を引き継ぐべき情報や、後の分割データで処理されるべき情報、あるいは複数の分割データの処理結果に共通して関係する特定データ(例えば、制御コード等)などである。
より具体的には、後でさらに説明するが、HTMLデータの場合、着目している分割データの前に存在する分割データ中の開始タグで、対応する終了タグがその分割データ以降に存在する場合、その開始タグが、前の分割データから引き継ぐべき情報になるので、着目している分割データのための処理補助データに当たる。
つまり、前の分割データ中の開始タグの効力は、本来、後の分割データにも及ぶものであるが、分割の結果、後の分割データを単独で処理する際には、開始タグが読み込まれないため、その処理結果には開始タグの効力が表れないことになる。結局、分割によって、本来意図した処理結果にならない分割データが発生する。そこで、開始タグを後の分割データの処理補助データとして組み合わせることにより、後の分割データを単独で処理しても、本来の処理結果を得ることができる。
処理補助データと分割データは、組として扱われるが、必ずしも一体のデータとして記録しておく必要はなく、分散して記録しておいても良い。例えば、処理補助データだけを集めたファイルなどという形で記録しておいても良いし、電子データの末尾などに処理補助データを追加しておいても良い。
また、処理補助データと分割データは、予め作成しておくのが一般的だが、利用時に動的に生成することも可能である。
但し、分割データと処理補助データの組それぞれが共通に必要とするデータが、電子データ中に存在する場合、必要とするデータを各分割データ(あるいは処理補助データ)に複製して分配してやれば、単独で分割データの意味する内容が損なわれない処理結果を得ることもできる。しかし、それでは各分割データ(あるいは処理補助データ)のデータサイズが大きくなってしまうので、分割データ(あるいは処理補助データ)以外の共有部分を使う場合も、「部分データで処理される」とみなすこととする。
共通に必要とするデータとしては、例えば、電子データの種類やバージョン情報、著作権情報、暗号情報などの、いわゆるヘッダ情報などが例としてあげられる。
「影響」とは、ここでは、ある部分データを処理する際に、他の部分データの処理結果を参照するかどうかで、部分データの処理結果が変わることを言う。例えば、連続する部分データX,Yについて、部分データYを部分データXの処理結果を参照して処理した場合と、そうせずに、それぞれを独立して処理した場合とで、処理結果に違いが現れるとしたとき、「部分データYは、部分データXから影響を受ける」とか、「部分データXは、部分データYに影響を与える」とか、「部分データYは、分割の影響を受ける」とかのように、本発明では表現することにする。前の部分データXの処理結果に、次の部分データYの処理結果を追加する場合などに、影響が現れやすい。
影響は、部分データの区切り方や部分データの内容などによって、発生したり、発生しなかったりする。また同じ部分データであっても、処理の仕方や処理設定などによっても、発生したり、発生しなかったりする。
処理結果が影響を受ける例としては、文書データの部分データを使って、文字を行に配置する処理を行う場合、前の部分データが最後に配置した文字(説明の為、「文字A」と呼ぶ)の行に、次の部分データが最初に配置する文字(説明の為、「文字B」と呼ぶ)を追加して配置する場合などがある。追加して配置する場合、「文字A」の隣に「文字B」を配置するので、前の部分データの処理結果によって、次の部分データの処理結果が変わってくる可能性がある。
但し、前の部分データの処理結果を参照してもしなくても、結果が変わらないこともある。従って、他の部分データの処理結果を参照しなかった場合に、必ず誤りが表れるというわけではない。例えば、「文字A」が改行コードだとすると、「文字B」は次の行の行頭に必ず配置される。この場合、前の部分データの処理結果がどうであろうと、「文字B」の配置位置は常に変わらない。
なお、処理結果が影響を受けるのは、隣接する前後の部分データの処理結果だけとは限らず、離れた部分データ間でも影響する場合もある。例えば、HTMLデータの部分データを使って表示レイアウトを生成する処理を行う場合、画像に対するテキストデータ等の回り込みがある場合に起こる場合がある。画像に回り込んで文字などをレイアウトする場合、画像の分、レイアウトできる範囲が限定される。このレイアウト範囲の限定が影響に関わってくる。
この時、画像に回り込んでレイアウトされる文字などが、複数の部分データから構成されている場合、画像に回り込んで文字などをレイアウトする指示(以下、回り込み指示と呼ぶ)が含まれる部分データは、当該複数の部分データの中の最初の部分データである。従って、上記回り込み指示を含まない部分データには、部分データ中の文字列を画像に回り込ませるべきであることを知る手掛かりが無い。なお、上記回り込み指示を伴う画像のことを、以降、回り込み画像と呼ぶ。
従って、回り込み画像を含む部分データと、回り込み画像を含まない部分データとを別々に処理して、単純に繋ぎ合わせると、まだ回り込ませる余地があるのに、回り込み画像を含まない部分データについては、回り込み画像のレイアウトが終了した次の行の行頭から文字列を表示させてしまう誤りが発生しうる。これは元データが意図するレイアウトとは異なる。このようにして、離れた部分データ間でも影響が発生することがありうる。
また、処理順序が処理結果に影響を与える例として、内部で使用する値(変数の値)が、各部分データの処理で変わる場合などもある。例えば、最初の部分データの処理で、変数Cの値を1と設定し、2番目と3番目の部分データで、変数Cの値を2倍に設定するとする。1、2、3番目の部分データの順で処理した場合、3番目の部分データの処理前は、変数Cの値は2で、処理後は4となるが、1、3番目の部分データの順で処理した場合、3番目の部分データの処理前は、変数Cの値は1で、処理後は2となる。
なお、影響が有ろうと無かろうと、各部分データの単独の処理結果は常に部分データの意味する内容が損なわれない。但し、各部分データの処理結果を合わせた場合は、全体として部分データの意味する内容が損なわれている(元の電子データが本来意図していない処理結果になる)ことはありえる。
例えば先の「文字A」、「文字B」の例で言えば、文字Bを含む「次の部分データ」を単独で処理すれば、文字Bは最初の文字なので行頭に配置される。文字Bが行頭に配置された処理結果を単独で見る場合、処理結果自体に誤りは無い。
しかし、文字Aを含む「前の部分データ」の処理結果と合わせて見る場合、すなわち、「前の部分データ」の処理結果の行と、「次の部分データ」の処理結果の行とを、単純に並べて表示させる場合、そのつながり部分において分割の影響が表れ、部分データの意味する内容が損なわれている場合が出てくる。
例えば「文字A」が改行コードで無い場合、「文字A」の次の「文字B」が、突然、次の行の行頭に配置されていることになり、改行がされているように見えてしまう。しかし、文書データとしてそこに改行コードの文字は存在しないのだから、合わせた処理結果には各部分データを単独に処理した影響が表れていることになる。
なお一般に、前の順番の部分データの処理結果から、後の順番の部分データの処理結果に影響が及ぶ場合がほとんどだが、逆の場合もありえる。
「階層構造」は「木構造」とも呼ばれ、データの要素の関係を、分岐した木の形の構造として管理する状態をいう。分岐は細かくなるだけであり、分岐した先同士が関係を持ち合うことはない(持ち合う場合は「ネットワーク構造」と言う)。一般に、分岐して細かくなったデータが属する階層を「下の層」、分岐元のデータが属する階層を「上の層」と、上下関係で呼ぶことが多い。
例えば、後述するHTMLデータのタグによる入れ子構造などが階層構造に相当する。
「順序構造」は、データの要素間に上下関係は無いが、その順番に意味があるような場合の構造である。データ要素が同じでも、その順番などが変われば、別のデータとなる。例えば、HTMLデータのOLタグ中でのLIタグは箇条書きの番号表示を行うが、その番号はLIタグの出現する順番によって決まる。
なお、階層構造の各層で分岐先に順番を持たせているようなデータ構造も、階層構造に含まれるとしてもよい。また、階層構造や順序構造のデータ要素の区切りと、部分データの区切りとは必ずしも一致しなくてもよい。
「開始位置の階層構造」とは、電子データの最初から部分データの開始位置までのデータで生成される階層構造を意味する。HTMLデータの例で言えば、開始位置までに出てきたタグを繋げた文字列で表現できる。一般に、着目している部分データについて上の層の情報だけでよく、同じ層、あるいは下の層、タグに挟まれたテキストデータの情報などは省いても良いことが多い。上の層の情報だけとは、HTMLデータの例で言えば、開始位置までに出てきたタグの内、対応する終了タグの存在しない開始タグだけということになる。
例えば、図7のHTMLデータの最初のブロックデータ400を例にすると、上の層の情報とは、HTMLタグの開始タグ<HTML>を指し、下の層の情報とは、fontタグの開始タグ<font color=“red” size=“+3”>および終了タグ</font>を指す。
「終了位置の階層構造」とは、部分データの終了位置から電子データの最後までのデータで生成される階層構造を意味する。HTMLデータの例で言えば、終了位置以降に出てくるタグを繋げた文字列で表現できる。一般に、着目している部分データについて上の層の情報だけでよく、同じ層、あるいは下の層、タグに挟まれたテキストデータの情報などは省いても良いことが多い。上の層の情報だけとは、HTMLデータの例で言えば、終了位置以降に出てくるタグの内、対応する開始タグの存在しない終了タグだけということになる。
「開始位置の順序構造」や「終了位置の順序構造」に関しても、対象とするデータ範囲は階層構造と同じである。階層構造と違って上下の層は存在しないが、データ範囲に出てくる情報となる。階層構造でも、同じ層や下の層の情報まで含めた情報にすれば、順序構造の情報を含んだ形にもできる。
例えば、HTMLデータの例で言えば、複数のLIタグの層は、OLタグの層の下の層となるが、対応する終了タグが存在しても省かずに情報を生成すればよい。OLタグの層で部分データの分割境界があったとしても、後の部分データの開始位置の順序構造の情報には、前の部分データのLIタグが含まれるので、LIタグの出現する順序の情報を得ることができるようになる。
「表示レイアウト」とは、文字や画像などの「表示レイアウト要素」の集まりからなるものであり、表示手段や印刷手段などの出力手段に出力して、ユーザーが視覚的に認知することができるようにした表示レイアウト要素の配置情報である。一般に、表示レイアウトは、各表示レイアウト要素の位置や大きさ、出力する時の形態などの情報を持っている。
「表示設定」とは、例えば、表示する文字の種類や大きさ、表示レイアウトを生成する範囲(一般に表示手段の大きさに制約される)、などである。これらの設定を変えることで、生成される表示レイアウトは変わる。但し、表示レイアウトが変わっても、通常、各表示レイアウト要素の位置や大きさが変わるだけで、文書データの表現する中身(文字情報、画像情報など)が変わる訳ではない。
「最大データサイズ」は、標準データサイズ同様、予め決まっている値、あるいはユーザーなどに入力してもらう値、あるいは所定の計算方法によって得られる値などになる。通常、最大データサイズは、省リソース性や処理速度の高速性等を考慮して、部分データとして最大限許容されるデータサイズにしておく。これは処理する装置の処理能力や処理の目的などから、ユーザーなどが決める。
「依存関係」とは、どの部分データ間で処理結果に影響があるかということを示す関係である。
「依存関係データ」は、処理補助データ同様、電子データに付け加えた形にしても良いし、電子データとは独立したファイルなどの形式で記録しておいても良い。
「行」とは、ここでは、表示レイアウト要素の集まりであり、一般に、横一列あるいは縦一列に並んで配置されている表示レイアウト要素からなる。全ての表示レイアウト要素はいずれかの行に属するとするが、回り込み画像のように、複数の行に関わる表示レイアウト要素は、分割して各行に属するようにするか、行とは別に管理するようにする。
「行頭」とは、表示レイアウト要素の行への通常の配置方法で、最初に配置する位置である。一般に、横一列に配置する横行の場合は左端、縦一列に配置する縦行の場合は上端となる。なお、所望の部分データの最初の表示レイアウト要素が、回り込み画像のような特殊な配置を行う表示レイアウト要素や、行とは別管理する表示レイアウト要素の場合は、行頭から表示されるかどうかの判断対象とはせず、行に配置する次の通常の表示レイアウト要素(文字など)を判断対象とする。
(データ生成装置の構成)
図1は、本発明の実施の一形態に係るデータ生成方法を実施するデータ生成装置を示す構成図である。
すなわち、データ生成装置の要部を、電子データ取得手段1、影響判断手段2、分割境界データ生成手段3、分割データ生成手段4、処理補助データ生成手段5、依存関係データ生成手段6、標準内非依存境界抽出手段7、標準外非依存境界抽出手段8、部分データサイズ判断手段9、第1分割境界抽出手段10、第2分割境界抽出手段11、第3分割境界抽出手段12、の主要な機能ブロックに展開して示すことができる。
図2は、図1の各手段1〜12を具体的に実現する装置の構成例である。
CPU(central processing unit)70は、影響判断手段2、分割境界データ生成手段3、分割データ生成手段4、処理補助データ生成手段5、依存関係データ生成手段6、標準内非依存境界抽出手段7、標準外非依存境界抽出手段8、部分データサイズ判断手段9、第1分割境界抽出手段10、第2分割境界抽出手段11、第3分割境界抽出手段12として機能し、これら各手段2〜12の処理手順が記述されたプログラムを主記憶74、外部記憶75、通信デバイス77を介したネットワーク先などから得る。なお、CPU70は、必要なデータの読み出しや転送などのために、電子データ取得手段1としての機能も担っている。
また、CPU70は、CPU70を含めてバス79を通じ相互に接続されたディスプレイ71、マウス72、タブレット73、主記憶74、外部記憶75、ボタン76、通信デバイス77、キーボード78、スピーカ80とデータのやりとりを行いながら、処理を行う。
なお、データのやりとりは、バス79を介して行う以外にも、通信ケーブルや無線通信装置などデータを送受信できるものを介して行ってもよい。また、各手段2〜12の実現手段としては、CPUに限らず、DSP(digital signal processor)や処理手順が回路として組み込まれているロジック回路などを用いることもできる。
ディスプレイ71は、通常はグラフィックカードなどと組み合わされて実現され、グラフィックカード上にVRAM(video random access memory)を有し、VRAM上のデータを表示信号に変換して、モニターなどのディスプレイ(表示/出力媒体)に送り、ディスプレイは表示信号を画像として表示する。
ユーザーの指示を入力する手段として、マウス72、タブレット73、ボタン76、キーボード78などがあり、ユーザーの指示はバス79を介して各手段1〜12に入力される。この他にもマイクによる音声入力など、様々な入力手段が使用可能である。マウス72は、マウスの移動方向と移動距離を検出する検出機器とボタンなどからなる。タブレット73は、ペンとペン位置を検出する検出機器からなる。ボタン76は、メカニカルもしくは電子的なスイッチなどからなる。キーボード78は、ボタン(キー)の集まりからなり、押下したキーに応じた信号を送出する。
主記憶74は、通常はDRAM(dynamic random access memory)やフラッシュメモリなどのメモリデバイスで構成される。なお、CPU内部に含まれるメモリやレジスタなども一種の主記憶として解釈してもよい。
外部記憶75は、HDD(hard disk drive)やPC(personal computer) カードなどの装脱着可能な記憶手段である。あるいはCPU70とネットワークを介して有線または無線で接続された他のネットワーク機器に取り付けられた主記憶や外部記憶を外部記憶75として用いることもできる。
通信デバイス77は、ネットワークインターフェースカードなどにより実現され、無線や有線などにより接続された他のネットワーク機器とデータをやりとりする。
スピーカ80は、バス79などを介して送られて来る音声データを音声信号として解釈し、音声として出力する。出力される音声は、単波長の単純な音の場合もあるし、音楽や人間の音声など複雑な場合もある。出力する音声が予め決まっている場合、送られて来るデータは音声信号ではなく、単なるオン、オフの動作制御信号だけという場合もある。
次に、図1の各手段1〜12を各手段間のデータ授受の観点から説明する。
なお、各手段間でのデータのやりとりは、特に注釈なく「**手段から得る」、「**手段へ送る(渡す)」という表現をしている時は、主にバス79を介してデータをやりとりしているとする。その際、直接各手段間でデータのやりとりをする場合もあれば、主記憶74や外部記憶75、通信デバイス77を介したネットワーク先などを間に挟んでデータをやりとりする場合もある。
電子データ取得手段1は、例えばCPU70と主記憶74または外部記憶75などとで構成され、電子データを、主記憶74、外部記憶75または通信デバイス77を介したネットワーク先などから得る。この場合、予め用意してある電子データを読み出すことになる。
なお、電子データ取得手段1は、例えば、電子データが暗号化されていて、暗号化された電子データを、主記憶74または外部記憶75などから読み出し、復号して読み込むこともある。
得られた電子データは、影響判断手段2、分割データ生成手段4、標準内非依存境界抽出手段7、標準外非依存境界抽出手段8、および第3分割境界抽出手段12に送られる。
標準内非依存境界抽出手段7としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、電子データ取得手段1から得られる電子データの部分データの候補に関して、部分データサイズ判断手段9から得られるデータサイズに関する判断と、影響判断手段2から得られる分割の影響に関する判断とから総合的に判断して、データサイズが標準データサイズ以下の部分データに電子データを分割する1つ乃至複数の標準内非依存分割境界を求める。求められた標準内非依存分割境界は、分割境界データ生成手段3、分割データ生成手段4、第1分割境界抽出手段10に送られる。
部分データの候補の求め方は、プログラム上で固定的に決められている場合もあるし、一部の方法や判断基準として使われる値(パラメータ)などをユーザーに指示される場合もある。ユーザーからの指示は、例えばディスプレイ71上に表示された指示画面を見て、マウス72、キーボード78、ボタン76、またはタブレット73などの入力機器を使って行われる。図3は、指定最大データサイズ、指定標準データサイズをユーザーが指定するウィンドウ表示の例である。
標準外非依存境界抽出手段8としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、電子データ取得手段1から得られる電子データの部分データの候補に関して、部分データサイズ判断手段9から得られるデータサイズに関する判断と、影響判断手段2から得られる分割の影響に関する判断とから総合的に判断して、データサイズが予め定めた最大データサイズ以下の部分データに電子データを分割する1つ乃至複数の標準外非依存分割境界を求める。求められた標準外非依存分割境界は、分割境界データ生成手段3、分割データ生成手段4、および第1分割境界抽出手段10に送られる。
第1分割境界抽出手段10としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、標準内非依存境界抽出手段7から得られる標準内非依存分割境界に関して、部分データサイズ判断手段9から得られる判断から、標準データサイズに最も近いデータサイズの部分データが得られる標準内非依存分割境界を求める。求められた標準内非依存分割境界は、分割境界データ生成手段3および分割データ生成手段4に送られる。
第2分割境界抽出手段11としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、標準外非依存境界抽出手段8から得られる標準外非依存分割境界に関して、部分データサイズ判断手段9から得られる判断から、標準データサイズに最も近いデータ位置の標準外非依存分割境界を求める。求められた分割境界は、分割境界データ生成手段3および分割データ生成手段4に送られる。
第3分割境界抽出手段12としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、電子データ取得手段1から得られる電子データの部分データの候補に関して、標準内非依存境界抽出手段7でも標準外非依存境界抽出手段8でも分割境界が抽出できない場合、部分データの処理結果に分割の影響が表れることを容認するが、データサイズが最大データサイズを超えない部分データが得られる分割境界を求める。求められた分割境界は、分割境界データ生成手段3および分割データ生成手段4に送られる。
なお、標準内非依存境界抽出手段7、標準外非依存境界抽出手段8、第1分割境界抽出手段10、第2分割境界抽出手段11、および/または第3分割境界抽出手段12で分割境界を得る際、各手段7、8、10〜12のうちの一方が、各手段7、8、10〜12のうちの他方の抽出結果を見て、分割境界を抽出するかどうか判断しても良いし、他の手段の抽出結果に関わらず、各手段7、8、10〜12がそれぞれ分割境界の抽出を試みてもよい。
前者の場合、抽出された分割境界を利用する側である分割境界データ生成手段3または分割データ生成手段4では、各手段7、8、10〜12のいずれか1つから分割境界が抽出されるだけなので、それを使えばよい。後者の場合は、各手段7、8、10〜12のそれぞれから抽出される一つ以上の分割境界の内から最も優先度の高い分割境界を選べばよい。優先度は、抽出する手段によって予め決めておいてもよいし、何らかの評価関数などを使って優先度を数値化して求めてもよい。また、優先度をデータ処理速度の高速性および/または省リソース性の観点で設定することが、本発明の目的に照らして好ましい。
分割境界データ生成手段3としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、標準内非依存境界抽出手段7、標準外非依存境界抽出手段8、第1分割境界抽出手段10、第2分割境界抽出手段11、および/または第3分割境界抽出手段12から得られる分割境界データを、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などに、例えばファイルなどの形式で記録する。
生成される分割境界データは、処理補助データ生成手段5、依存関係データ生成手段6などに送られる。
なお、分割境界データ生成手段3は、分割境界データをファイルなどの形式で記録する場合、情報を取り出し易いようにヘッダ情報やデータ構造情報などを付加したり、暗号化したり、電子署名を付加したり、などの処理を行う場合もある。ヘッダ情報やデータ構造情報などについては、後で説明する。これらの処理は、分割境界データ生成手段3に限らず、分割データ生成手段4、処理補助データ生成手段5、および依存関係データ生成手段6などでも同様に行われる場合がある。
分割データ生成手段4としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、標準内非依存境界抽出手段7、標準外非依存境界抽出手段8、第1分割境界抽出手段10、第2分割境界抽出手段11、および/または第3分割境界抽出手段12から得られる分割境界で、電子データ取得手段1から得られる電子データを分割し、部分データを生成する前段階として、分割データを生成する。生成される分割データは、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などに、例えばファイルなどの形式で記録される。生成される分割データは、処理補助データ生成手段5および/または依存関係データ生成手段6などに送られる。
なお、通常、分割境界データ生成手段3と分割データ生成手段4が両方とも処理されることは少なく、後で説明する分割データの生成の形態に応じてどちらか片方だけが処理されることが多い。
処理補助データ生成手段5としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、分割データを部分データとするには足りない情報、すなわち分割データを単独で処理して分割データの意味する内容が損なわれない結果を得るのに足りない情報である処理補助データを、その着目している分割データとそれ以外の分割データとから生成する。生成される処理補助データは、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などに、例えばファイルなどの形式で記録される。
分割データは、分割データ生成手段4から直接得る形態でもよいし、電子データ取得手段1から得られる電子データと、分割境界データ生成手段3から得られる分割境界データとから間接的に得る形態でもよい。間接的に得るとは、電子データを分割境界データに基づいて、部分的に切り出して読み込むなどして、処理補助データ生成手段5内で分割データを生成する処理などを指す。
依存関係データ生成手段6としてのCPU70は、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などから読み取られるプログラムに基づき、部分データの処理結果間に依存関係のある部分データの情報である依存関係データを、部分データから生成する。部分データの取得方法に関しては、処理補助データ生成手段5が分割データを取得する方法と同様である。
生成される依存関係データは、主記憶74、外部記憶75、または通信デバイス77を介したネットワーク先などに、例えばファイルなどの形式で記録される。
なお、分割境界データ生成手段3で生成される分割境界データ、分割データ生成手段4で生成される分割データ、処理補助データ生成手段5で生成される処理補助データ、依存関係データ生成手段6で生成される依存関係データの各種データは、それぞれ別個のファイルとして生成される場合もあるし、データ同士を一緒にしたファイルとして生成される場合もある。また、分割データ以外のデータは、電子データのファイルなどに追加する形で記録することもある。
なお、CPU70は、制御手段8によって、プログラムまたはユーザー入力に従って指定される分割データおよびその表示範囲について、表示レイアウト(処理結果)を生成するレイアウト生成手段として機能することもできる。また、レイアウト生成時には、処理補助データ生成手段5から得た処理補助データを、分割データと共に使う場合もある。生成された表示レイアウトは、主記憶74または外部記憶75、あるいは通信デバイス77を介したネットワーク先の機器などに送られて保存されたり、ディスプレイ71に送られて表示されたりする。
さらに、CPU70は、各手段1〜12に必要な制御命令や指示を与え、また、必要なデータを各手段1〜12と双方向でやりとりする統括的な制御手段8として機能することもある。
さらに、CPU70は、作成した表示レイアウトをディスプレイ71などに表示するレイアウト表示手段として機能することもできる。なお、ここではディスプレイ71への表示として説明しているが、例えばプリンターへの印刷や、表示レイアウトを記録したファイルへのファイル出力などの場合もある。
(データおよびデータ構造)
次に、データやデータ構造について説明する。
図4は、元データとしての電子データの例を説明する説明図である。ここでは、表示設定によって表示レイアウトが変わる文書データの例として、HTMLデータ(正確にはXHTMLデータ)を使って説明する。枠線の中がHTMLデータであり、その左側の数字は、説明の為の行番号である。
図5は、図4のHTMLデータをWWWブラウザで、ある表示設定の時に表示させた例である。ここではWWWブラウザのウィンドウの大きさは充分大きく、図4のHTMLデータを一度に表示しきれたとする。
図6は、図5の表示設定を、基準となる文字の大きさを1.5倍、表示ウィンドウの横幅および縦幅は同じに設定して、図4のHTMLデータを表示させた例である。各文字が大きくなったので、各行の折り返し位置などが変わっているのが分かる。なお、図6では図4のHTMLデータ全てを表示しきれないので、先頭の部分だけ表示させている。スクロールバーやページめくりボタンなどを使って表示範囲を切り替えれば、表示しきれていない部分も表示させることは一般に可能である。
説明の為、HTMLデータ(正確にはXHTMLデータ)の構造について簡単に説明しておく。前述した「タグ」とは、「<」の文字に始まり、「>」の文字で終わる部分の文字列のことであり、表示設定を指示する文字列である。例えば図5の表示設定は、図4のHTMLデータ中の各種タグによって指定されている。
一般に、タグは開始タグと終了タグの組からなり、終了タグは「<」の後に「/」の文字が続く。タグはそれぞれ「タグ名」を持ち、開始タグは「<」+「タグ名」+「>」、終了タグは「</」+「タグ名」+「>」となる。
例えば、図4の最初の行は開始タグ「<HTML>」で始まり、最後の行は、終了タグ「</HTML>」で終了している。なお、本明細書では、<HTML>と</HTML>の組から成るような各タグをタグ名を使って、「HTMLタグ」などという形で呼ぶことにする。
開始タグは、表示レイアウトを詳細に設定する情報として、「属性」も持つことができる。属性は、「属性名」と「属性値」からなり、
「<タグ名 属性名1=“属性値1” 属性名2=“属性値2” 、、、、 >」
などという形式で、複数の属性を与えることができる。
開始タグと終了タグの間に挟まれた部分が、タグの効力が及ぶ対象である。タグ以外の部分は「TEXT」である。例えば、図4の2,3行目の「<font color=“red” size=“+3”>How does LCD works?</font>」の部分は、「How does LCD works?」のTEXTが、fontタグの対象となる。
具体的には、color属性がredなので、文字色が赤となり、size属性が+3なので、基準フォントサイズより3段階大きなフォントとなる。図5では、上記のTEXTが確かに大きな文字で表示されている。(なお、文字色は白黒印刷画面ではわかりにくいので、ここでは黒で示してあるが、フルカラーディスプレイ上では赤で表示されるとする)。
なお、開始タグと終了タグの間に挟むべきTEXTが存在しない場合は、開始タグと終了タグを一緒にして、「<タグ名/>」としてもよい。例えば、図4の3行目の「<br/>」(具体的な意味は後述)はこの例である。
HTMLデータのタグは、前述のように、入れ子構造を持つ、階層構造になっている。ここでは、HTMLデータは、XHTML(extensible hyper text markup language)形式あるいはXML(extensible markup language)形式に従うとして、入れ子構造以外は持てないとしておく。
例えば、AタグとBタグが、「<A><B></B></A>」となるのは入れ子構造なので、正しい階層構造になっているが、「<A><B></A></B>」は入れ子構造ではないので、不可とする。なお、タグが入れ子になっている場合、内側のタグやそのTEXTに対しても、外側のタグの効力は及ぶが、同じタグ名のタグや、同じタグ名の同じ属性名の属性値に関しては、内側のタグの方が一般に優先される。
図4の例では、最上位の階層のタグは1行目と24行目のHTMLタグであり、その下の階層は、2,3行目のfontタグ、brタグなど、多数のタグが続く。また、5行目と16行目のfontタグの下の階層には、6行目と15行目のPタグ(意味は後述)が存在する。
次に、図4に出てくるfontタグ以外の各タグの機能について簡単に説明しておく。HTMLタグは、HTML文書であることを宣言しているだけで、表示設定に対する意味はない。brタグは、表示レイアウト上で改行を行うことを意味する。なお、HTMLデータ中の改行コードは通常、無視される。Pタグは、パラグラフを意味し、開始タグで多少の垂直スペースと改行、終了タグで改行と多少の垂直スペースとして表現される。なお、WWWブラウザによってはインデント表示される場合もあるが、ここではインデントは無しとしている。
本発明では、分割境界データ、分割データ、処理補助データ、依存関係データなどのデータを生成するが、これらのデータの生成方法の説明の前に、これらのデータの利用例について簡単に説明する。
まず、利用例で使用するデータについて説明する。
図7は、図4の文書データ406から、分割の影響を考慮する前に生成された分割データ400〜405を模式的に説明する説明図である。各分割データ400〜405に区切っている折れ線は、実際には、分割境界データとして生成されたり、分割データ400〜405が個別のファイルなどとして生成されたりするのだが、ここでは分割の様子を分かりやすくする為、折れ線として示しておく。
なお、各分割データ400〜405を処理補助データを使って、それぞれ単独で処理して表示したときに、表示結果自体に誤りが無いので、各分割データ400〜405は、処理補助データを使うことで、いずれも部分データになり得る。
図8は、影響判断手段2が図7の分割データ400〜405について分割の影響を判断し、その判断結果に基づき、依存関係データ生成手段6が生成した依存関係データ140〜145のデータ構造を説明する説明図である。分割データ400〜405の各々と依存関係データ140〜145の各々とが対応する。依存関係データ140〜145は配列の形となっており、各依存関係データ140〜145にインデックス番号でアクセスできるとする。
ここでは、依存関係データとして、各分割データの処理結果が、直前の分割データの処理結果から影響を受けるかどうかの情報を記録している。情報は、「0」か「1」で記録されており、影響を受ける(影響が有る)場合は「1」、影響を受けない(影響が無い)場合は「0」で記録されている。例えば、依存関係データ142を例にすると、その内容は「1」なので、着目している分割データ402の処理結果が、直前のブロックデータ401の処理結果から影響を受けることを表す。
図9は、図7の分割データ400〜405から別の方法で生成された依存関係データ150〜155のデータ構造を説明する説明図である。分割データ400〜405の各々が、依存関係データ150〜155の各々に対応する。依存関係データ150〜155は配列の形となっており、各依存関係データにインデックス番号でアクセスできるとする。
ここでは、依存関係データとして、各分割データの処理結果が、影響を受ける最前の分割データの情報を記録している。情報は、分割データを特定する情報として記録されており、ここでは分かり易いように、「分割データ401」(依存関係データ152、153)などと、影響を受ける分割データのデータ番号を記録している。分割データを特定する情報としては、その他にも配列のインデックス番号や、分割データのメモリ上の番地や、分割データのファイル名などが考えられる。
なお、影響を受ける分割データが存在しない場合は、データは空でもいいし、自身の分割データを特定する情報を記録していてもよい。図9では、空で記録する場合もありえることを示す為に、自身の分割データのデータ番号を括弧書きで示してある(依存関係データ150、151、154、155)。
図10は、電子データ、分割境界データ、分割データ、処理補助データ、依存関係データなどを利用するデータ処理装置の外観例を示している。本体300上に表示部兼タブレット301、ページめくりボタン302、303が設けられている。また、タブレットを操作するペン304も備えられている。
ここでは、電子データとして、表示設定によって異なる表示レイアウトを生成できる文書データを使い、図10のデータ処理装置は、上記文書データ、分割境界データ、分割データ、処理補助データおよび依存関係データなどから、必要なデータを用いて表示レイアウトを生成し、表示することができるとする。
表示部兼タブレット301上には、生成された表示レイアウトが表示される。また、表示部兼タブレット301は、データ処理装置の各種設定メニューなどを表示して、タブレットを使って指やペンなどで設定を変更したりするのにも使われる。
なお、各種設定などの操作手段として、表示部兼タブレット301だけでなく、操作ボタン類などがこの他にあってもよい。ページめくりボタン302、303は、表示部兼タブレット301上に表示されている表示レイアウトの表示範囲を切り替える際などに使う。ペン304は、リンクジャンプなどの操作や各種設定などのユーザー入力など様々に利用可能である。
また、この例では示していないが、この他に、外部記憶としてメモリーカードなどのスロットや、ネットワークと通信する通信デバイス77、マウス72やキーボード78、マイクなどの入力装置、スピーカ80などの出力装置、などが付属する場合もある。
(データ生成方法の詳細)
(処理の流れ)
次に、分割データ、分割境界データ、処理補助データおよび依存関係データの生成方法について説明する。
図23は、本発明の実施の一形態に係るデータ生成方法の一例を示すフローチャート図である。
まずステップS1(以下、「ステップS」を「S」と略記する)では、電子データ取得手段1が、例えば、予め主記憶74、外部記憶75、通信デバイス77を介したネットワーク先などに用意してある電子データを読み込む。これにより、電子データ取得手段1は、電子データを取得し、連結点P10(以下、「連結点P」を「P」と略記する)を経て、S2へ処理が進む。
次にS2では、影響判断手段2、処理補助データ生成手段5、依存関係データ生成手段6、標準内非依存境界抽出手段7、標準外非依存境界抽出手段8、部分データサイズ判断手段9、第1分割境界抽出手段10、第2分割境界抽出手段11、および/または第3分割境界抽出手段12が、電子データ取得手段1から電子データを受け取り、電子データを分割データに分割する分割境界を算出して、P20を経て、S3へ処理が進む。ここでの処理の詳細は、後で図24などを使って説明する。
S3では、分割境界データ生成手段3が、依存境界抽出手段7、標準外非依存境界抽出手段8、第1分割境界抽出手段10、第2分割境界抽出手段11、および/または第3分割境界抽出手段12から得られる分割境界を使って、分割境界データを生成し、P30を経て、S4へ処理が進む。あるいは、分割データ生成手段4が、各手段7、8、10〜12から得られる分割境界を使って、分割データを生成し、P30を経て、S4へ処理が進む。
S4では、処理補助データ生成手段5が、分割データを使って、処理補助データを生成して、P40を経て、S5へ処理が進む。ここでの処理の詳細は、後で図27などを使って説明する。
S5では、依存関係データ生成手段6が、分割データを使って、依存関係データを生成して、P50を経て、処理を終える。ここでの処理の詳細は、後で図30、図31などを使って説明する。
なお、S4およびS5で使われる分割データは、上述した通り、分割データ生成手段4(S3)から直接得る場合もあるし、電子データ取得手段1(S1)から得られる電子データと、分割境界データ生成手段3(S3)から得られる分割境界データとから間接的に得る場合もある。
以上のS1からS5の処理により、分割境界データ、分割データ、処理補助データ、依存関係データなどが生成される。
(分割境界算出処理)
図24は、図23のS2の処理、すなわち電子データを分割データに分割する分割境界を算出する処理の一方法を説明するフローチャート図である。
P10を経たS2−1では、部分データサイズ判断手段9が、下記の指定最大データサイズを取得して、S2−2へ処理が進む。
S2−2では、部分データサイズ判断手段9が、下記の指定標準データサイズを取得して、S2−3へ処理が進む。
上記指定最大データサイズや指定標準データサイズは、1つあたりの分割データのサイズに関するパラメータである。すなわち、指定最大データサイズは、処理する装置の処理速度の高速化および省リソースの実現を妨げない観点で、許容される分割データの最大サイズである。また、指定標準データサイズは、分割データのサイズとして最も望ましいサイズであり、処理する装置の処理能力や処理の目的に応じて決められる。
なお、指定最大データサイズや指定標準データサイズは、プログラム上で固定的に決められている場合もあるし、一部の方法や判断基準として使われる値(パラメータ)などをユーザーに指示される場合もある。
ユーザーからの指示は、例えばディスプレイ71上に表示された指示画面を見て、マウス72、キーボード78、ボタン76、タブレット73などの入力機器を使って行われる。図3は、指定最大データサイズ、指定標準データサイズを指定するウィンドウ表示の例である。
S2−3では、カレント位置が存在するのか、すなわち電子データを全て読み込んでしまったかどうか、あるいはその後、ユーザー等から表示開始位置としてカレント位置の指定があったかどうかを判断し、存在しないと判断される場合は分割境界の算出が全て終了しているので、P20へ処理が抜け、存在すると判断される場合はS2−4へ処理が進む。なお、最初の分割境界を求める時は、カレント位置は電子データの先頭に初期化されているとする。なお、S2−3の処理は汎用的で、動作主体となる手段は特に限定されないが、ここでは関連の強い手段7〜12のいずれかとしておく。
S2−4では、初期設定処理を行い、S2−5へ処理が進む。初期設定処理として、カレント位置を新たな分割データの開始位置(新たな分割境界)に設定し、標準内非依存境界候補、標準外非依存境界候補、および標準内依存境界候補の設定のクリアが行われる。なお、分割境界位置についても、最初の分割境界位置が求まる前の段階では、電子データの先頭に初期化されるものとする。
ここでは「標準内」という言葉は、分割データの開始位置から指定標準データサイズ内の範囲を意味し、「標準外」という言葉は、((分割データの開始位置)+(指定標準データサイズ))から、((分割データの開始位置)+(指定最大データサイズ))までの範囲を意味する。
また、「非依存境界候補」は、これから求めようとする分割境界で元の電子データを分割した場合に、分割が処理結果に影響を与えない分割境界の候補を意味し、「依存境界候補」は、分割が処理結果に影響を与える分割境界の候補を意味する。
ここでは、標準内依存境界候補、標準外非依存境界候補、標準内非依存境界候補の順で望ましさが増すという判断基準にしておく。つまり、標準内で非依存境界が最も望ましい。この判断基準は、ユーザーが好みの設定にできるようにしてもよい。
カレント位置、分割境界位置、標準内非依存境界候補、標準外非依存境界候補および標準内依存境界候補は、主記憶74上などに一時的に記録しておく値である。これらは電子データ中の位置を指す。単位は、バイト数や文字数、単語数などが考えられる。
なお、分割データの開始位置は、最初は当然電子データの先頭である。また、S2−4の動作主体となる手段は、S2−3同様、ここでは関連の強い手段7〜12のいずれかとしておく。
S2−5では、部分データサイズ判断手段9が、分割データの開始位置(分割境界位置)からカレント位置までのデータサイズが、指定標準データサイズを超えるかどうか判断し、超えると判断される場合はS2−6へ処理が進み、超えないと判断される場合はP11を経てS2−11へ処理が進む。
S2−6では、影響判断手段2、標準内非依存境界抽出手段7が、分割データの開始位置からカレント位置までの間に、標準内非依存境界候補は存在するかどうか判断し、存在すると判断される場合はS2−7へ処理が進み、存在しないと判断される場合はS2−8へ処理が進む。これは、標準内非依存境界候補に、その存在を示す値が設定されているかどうかで判断できる。
S2−7では、標準内非依存境界抽出手段7が、標準内非依存境界候補を新たな分割境界に設定し、S2−3へ処理が戻る。これにより、標準内非依存境界候補が、他の境界候補より優先的に分割境界に設定される。
カレント位置が指定標準データサイズを超えたとき(S2−5)、その時点で標準内非依存境界候補が既に存在する(S2−6)のだから、指定標準データサイズ内に収まる非依存境界候補を見つけたことになり、一番望ましい状態である。新たな分割境界は、分割境界の配列に加えておく。
なお、図24のフローチャート図で説明される一連の処理では、カレント位置を進ませて、最初に見つかる標準内非依存境界候補を分割境界として設定している。仮に、カレント位置以降の場所で他の標準内非依存境界候補が見つかるとして、どちらの標準内非依存境界候補を分割境界とした方が、分割データのデータサイズが指定標準データサイズに近くなるかと言えば、当然、最初に見つかった標準内非依存境界候補となる。
すなわち、これら一連の処理全体が、第1分割境界抽出手段10であるとも言える。複数の標準内非依存境界候補を求めて、その中から分割データのデータサイズが指定標準データサイズに最も近くなる標準内非依存境界候補を分割境界として抽出しても良いが、図24の処理の方が効率が良いので、ここではそれに沿って説明している。
S2−8では、部分データサイズ判断手段9が、分割データの開始位置からカレント位置までのデータサイズが、指定最大データサイズを超えるかどうか判断し、超えると判断される場合はS2−9へ処理が進み、超えないと判断される場合はP16を経てS2−12へ処理が進む。
S2−9では、影響判断手段2、標準外非依存境界抽出手段8、第2分割境界抽出手段11、第3分割境界抽出手段12が、((分割データの開始位置)+(指定標準データサイズ))から、((分割データの開始位置)+(指定最大データサイズ))までの範囲に、標準外非依存境界候補は存在するかどうか判断し、存在すると判断される場合はS2−10へ処理が進み、存在しないと判断される場合はS2−15へ処理が進む。これは、標準外非依存境界候補に、その存在を示す値が設定されているかどうかで判断できる。
S2−10では、標準外非依存境界抽出手段8が、標準外非依存境界候補を新たな分割境界に設定し、S2−3へ処理が戻る。
(S2−8より)カレント位置が指定最大データサイズを超えたとき、(S2−9より)その時点で標準外非依存境界候補が既に存在するのだから、指定標準データサイズは超えるが、指定最大データサイズ内に収まる非依存境界候補を見つけたことになる。(S2−6より)標準内非依存境界候補が存在しないのだから、次善の策として、標準外非依存境界候補を分割境界とする。新たな分割境界は、分割境界の配列に加えておく。
なお、ここでは、最初に見つかる標準外非依存境界候補を分割境界として設定しているが、S2−7同様、仮に、カレント位置以降の場所で他の標準外非依存境界候補が見つかるとして、分割データのデータサイズが指定標準データサイズに近いのは、最初に見つかる標準外非依存境界候補となり、これら一連の処理全体が、第2分割境界抽出手段11であるとも言える。複数の標準外非依存境界候補を求めて、その中から分割データのデータサイズが指定標準データサイズに最も近くなる標準外非依存境界候補を分割境界として抽出しても良いが、図24の処理の方が効率が良いので、ここではそれに沿って説明している。
(S2−9で標準外非依存境界候補は存在しないと判断された)S2−15では、第3分割境界抽出手段12が、標準内依存境界候補を新たな分割境界に設定し、S2−3へ処理が戻る。
(S2−8より)カレント位置が指定最大データサイズを超え、(S2−9より)標準外非依存境界候補も存在しないのだから、最後の手段として、指定標準データサイズは超えるが、指定最大データサイズ内に収まる依存境界候補を新たな分割境界に設定せざるを得ない。標準内依存境界候補に基づいて設定された分割境界の位置は、通常、前の分割境界位置に指定標準データサイズを加えた位置となる。これは、この位置まで、依存境界候補しか存在していないからである。新たな分割境界は、分割境界の配列に加えておく。
(S2−5で指定標準データサイズを超えないと判断された)S2−11では、影響判断手段2、標準内非依存境界抽出手段7および第3分割境界抽出手段12が、前回のカレント位置から今回のカレント位置までの範囲で、標準内依存境界候補あるいは標準内非依存境界候補を探して、存在すれば設定し、P15を経てS2−13へ処理が進む。指定標準データサイズに満たないので、分割境界を設定するには至らず、まだ分割境界候補を探していればよい。ここでの処理の詳細は、後で図25を使って説明する。
(S2−8で指定最大データサイズを超えないと判断された)S2−12では、影響判断手段2、標準外非依存境界抽出手段8が、前回のカレント位置から今回のカレント位置までの範囲で、標準外非依存境界候補を探して、存在すれば設定し、P17を経てS2−13へ処理が進む。カレント位置は指定標準データサイズを超えたが(S2−5)、標準内非依存境界候補は存在せず(S2−6)、指定最大データサイズには満たない(S2−8)ので、分割境界を設定するには至らず、まだ標準外非依存境界候補を探していればよい。ここでの処理の詳細は、後で図26を使って説明する。
S2−13では、カレント位置を次の文字/単語/タグなどに進めて、S2−14へ処理が進む。カレント位置の進め方は、電子データの種類や分割境界候補の探し方により、様々な方法が考えられる。また、ここでの処理は、S2−11やS2−12などの分割境界候補を探す処理の効率にも関わる。
ここでは、タグと単語を単位として進めることにする。例えば、図4の電子データ406の冒頭の部分では、その単位が「<HTML>」、「<font color=“red” size=“+3”>」、「How 」、「does 」、「LCD 」、「works?」、「</font>」、「<br/>」などとなる。日本語など、単語がスペースなどで別れていない文書データの場合、タグと、単語の変わりに一定の文字数までの塊とを単位とするとよい。
なお、S2−13の動作主体となる手段は、S2−3同様、ここでは関連の強い手段7〜12のいずれかとしておく。
S2−14では、カレント位置が存在するのか、すなわち分割境界を求めるために電子データを全て読み込んでしまったかどうかを判断し、カレント位置が存在すると判断される場合はS2−5へ処理が戻り、存在しないと判断される場合はS2−9へ処理が進む。判断の処理は、S2−3と同じである。
以上のS2−1からS2−15の処理で、図23のS2の処理、すなわち電子データを分割データに分割する分割境界を算出する処理を行うことができる。
図25は、図24のS2−11の処理、すなわち前回のカレント位置から今回のカレント位置までの範囲で、標準内依存境界候補あるいは標準内非依存境界候補を探して、存在すれば設定する処理の一方法を説明するフローチャート図である。
前回のカレント位置から今回のカレント位置までの範囲に対する処理だが、ここではS2−13でタグと単語を単位としているので、カレント位置について、標準内依存境界候補になり得るか、あるいは標準内非依存境界候補になり得るかを判断すれば良い。それ以外の場合は、電子データの種類などにもよるが、例えば、上記範囲中を1文字ずつなどの単位で判断を繰り返すなどする必要がある。
P11を経たS2−11−1では、影響判断手段2が、カレント位置(場合によっては、加えてその前の位置)を分割境界とする場合、その分割境界の前後の分割データの処理結果に分割の影響が生じるかどうかを判断し、影響が生じると判断されればS2−11−2へ処理が進み、影響が生じないと判断されればS2−11−3へ処理が進む。
なおここでは、カレント位置がタグの直後ならば、そのタグの直前も「カレント位置の前の位置」として、影響が生じるかどうかの判断の対象とする。これは、Pタグのようにその前の位置で強制改行させるタグが存在するからである。カレント位置がタグの直後でないならば、カレント位置だけを判断の対象とすればよい。
影響が生じるかどうかは、電子データの種類などによって、様々なので、統一した判断方法はない。例えば、図4のHTMLデータの場合、改行されるかどうかが一つの判断基準となる。ここでは、Pタグの開始タグの前、Pタグの終了タグの後、brタグの後は、強制改行されるとして、その場所を分割境界とする場合は、影響が生じない、つまり非依存境界候補であると判断し、それ以外の位置は依存境界候補であると判断する。
例えば、「<HTML>」、「<font color=“red” size=“+3”>」、「How 」、「does 」、「LCD 」、「works?」、「</font>」、「<br/>」、「<font color=“red” size=“+3”>」、「<P>」、「Liquid」、「Crystal」の順でカレント位置が変わるとすると、影響が生じない位置は、「<br/>」の後、「<P>」の前の2個所となる。それ以外の位置は、すべて影響が生じる。
より具体的には、強制改行されない位置を分割境界に設定して、その分割境界での分割によって生成された前後の分割データから、この順に単独で表示レイアウトを生成する処理を行ったとする。この場合、後の分割データは、単独処理の結果として行頭からレイアウトされるため、前の分割データの末尾に不所望な改行という分割の影響が表れる。したがって、上記の例では、「<br/>」の後、「<P>」の前の2個所以外の位置は、依存境界候補であると判断することになる。
なお、HTMLタグは、単なる宣言の意味しかないので、ここでは無視して、分割境界の候補とはしないことにする。
(S2−11−1で影響が生じると判断された)S2−11−2では、第3分割境界抽出手段12が、カレント位置(場合によっては、加えてその前の位置)を標準内依存境界候補に設定し、P15を経て処理を抜ける。カレント位置は指定標準データサイズを超えていないので(S2−5)、標準内であり、影響を生じるので、依存境界候補となる。
(S2−11−1で影響が生じないと判断された)S2−11−3では、標準内非依存境界抽出手段7が、カレント位置(場合によっては、加えてその前の位置)を標準内非依存境界候補に設定し、P15を経て処理を抜ける。カレント位置は指定標準データサイズを超えていないので(S2−5)、標準内であり、影響を生じないので、非依存境界候補となる。
以上のS2−11−1からS2−11−3の処理で、図24のS2−11の処理、すなわち前回のカレント位置から今回のカレント位置までの範囲で、標準内依存境界候補あるいは標準内非依存境界候補を探して、存在すれば設定する処理を行うことができる。
なお、S2−11−2、S2−11−3では、標準内依存境界候補や標準内非依存境界候補が既に設定されていても、上書きして設定している。これにより、指定標準データサイズにできるだけ近い位置の標準内依存境界候補や標準内非依存境界候補を求めることができるという効果が出てくる。
図26は、図24のS2−12の処理、すなわち前回のカレント位置から今回のカレント位置までの範囲で、標準外非依存境界候補を探して、存在すれば設定する処理の一方法を説明するフローチャート図である。
P16を経たS2−12−1では、影響判断手段2が、カレント位置(場合によっては、加えてその前の位置)を分割境界とする場合、その分割境界の前後の分割データの処理結果に分割の影響が生じるかどうかを判断し、影響が生じると判断されればP17を経て処理を抜け、影響が生じないと判断されればS2−12−2へ処理が進む。ここでの判断の処理は、S2−11−1の判断の処理と同じである。
なお、影響が生じると判断される時、「標準外依存境界候補」とすることもできるが、標準外依存境界候補を分割境界として使うのなら、標準内依存境界候補を使った方が、処理の高速化および省リソースの観点で良い場合が多いので、ここでは特に「標準外依存境界候補」の設定をしていない。
S2−12−2では、標準外非依存境界抽出手段8が、カレント位置(場合によっては、加えてその前の位置)を標準外非依存境界候補に設定し、P17を経て処理を抜ける。カレント位置は指定標準データサイズを超えているので(S2−5)、標準外であり、影響を生じないので、非依存境界候補となる。
以上のS2−12−1からS2−12−2の処理で、図24のS2−12の処理、すなわち前回のカレント位置から今回のカレント位置までの範囲で、標準外非依存境界候補を探して、存在すれば設定する処理を行うことができる。
なお、S2−12−2では、標準外非依存境界候補が既に設定されている場合、上書きして設定しても良いが、上書きしないようにする方が良い。その方が、指定標準データサイズにできるだけ近い位置の標準外非依存境界候補を求めることができるという効果が出てくる。
なお、上述した処理で、カレント位置が指定標準データサイズや指定最大データサイズを超えるかどうかを判断しているが、例えば、指定標準データサイズに加えて所定量を超えない範囲という判断基準にしてもよい。これは、指定標準データサイズを所定量大きくして、それを超えないという判断基準と同じである。
また、例えば、指定標準データサイズの前後の所定量の範囲に収まるかどうかなどの判断基準などにしてもよい。これにより、分割データの大きさを揃え易くなるという利点が出てくる。つまり、分割データを利用する際に、極端に大きな分割データや極端に小さな分割データが少なくなるので、処理量が平準化されるという利点が出てくる。
(処理補助データ生成処理)
図27は、図23のS4の処理、すなわち分割データを使って、処理補助データを生成する処理の一方法を説明するフローチャート図である。各ステップでの動作主体は、全て、処理補助データ生成手段5なので、各ステップの説明では、動作主体の記述を省く。
P30を経たS4−1では、最初の分割データをカレント分割データに設定して、S4−2へ処理が進む。カレント分割データは、主記憶74や外部記憶75上などに記録しておく。
S4−2では、以下で説明するカレント開始タグリストをカレント分割データの開始タグ文字列に設定し、S4−3へ処理が進む。
図28は、カレント開始タグリストおよびカレント終了タグリストのデータ構造を説明する説明図である。カレント開始タグリストは、カレント分割データの前に存在している分割データから効力を引き継ぐべき開始タグデータ(文字列)の配列である。また、カレント開始タグリストを生成するための開始タグデータの入出力は、ファースト・イン・ラスト・アウトの形態を取るため、そのデータ構造はスタック構造である。
一方、終了タグリストは、カレント分割データにとって、効力が持続中の開始タグデータと対をなす終了タグデータ(文字列)の配列であり、カレント開始タグリストと同様に、データ構造はスタック構造である。
なお、最初は、カレント開始タグリストおよび終了タグリストはどちらも空である。
生成したカレント開始タグリストからカレント分割データの一連の開始タグデータを生成するには、カレント開始タグリストの最初の開始タグデータから最後の開始タグデータまで順番につなげて文字列を生成すればよい。カレント開始タグリストはスタック構造なので、例えば、図28に示すカレント開始タグリストの場合、一番下の最初の開始タグデータ310から、開始タグデータ311、312の順に読み込む。
例えば、カレント分割データが、図7に示す最初の分割データ400の場合、その前に分割データは存在していないので、カレント開始タグリストは空である。従って、S4−2として、空のカレント開始タグリストを、分割データ400の開始タグ文字列に設定するから、開始タグ文字列(図29の処理補助データ131)は空文字列となる。
図28の開始タグデータ310〜312は、分割データ401をカレント分割データとしてS4−2を処理する時の、カレント開始タグリストの状態を示している。このときのカレント開始タグリストは、カレント分割データが分割データ400であったときに作成されたものである。すなわち、分割データ401が分割データ400から効力を引き継ぐべき開始タグデータとして、分割データ400内に終了タグデータが存在していない開始タグデータを、処理補助データ生成手段5が選別した結果、分割データ400に関する上記カレント開始タグリストが得られる。
こうして、開始タグデータ310〜312を繋げた分割データ400に関するカレント開始タグリストを、現在のカレント分割データである分割データ401の開始タグ文字列に設定するから、開始タグ文字列(図29の処理補助データ133)は、「<HTML><font size=“+1”><P>」となる。
S4−3では、カレント分割データ中のタグで、カレント開始タグリストを更新して、S4−4へ処理が進む。そのときの更新処理は、開始タグデータの削除と追加である。追加処理としては、カレント分割データを最初から順に「パース」し、開始タグが現れたら、その開始タグから開始タグデータを生成し、生成した開始タグデータをカレント開始タグリストに追加する。なお、「パース」とは、ここではカレント分割データの文字列を読み込んで、開始タグや終了タグ、TEXTを区別することを意味する。
また、削除処理としては、上記の「パース」中に、終了タグが現れたら、カレント開始タグリスト中の最後の開始タグデータを削除する。
XHTMLデータやXMLデータは、前述のとおり階層構造を有しているので、開始タグと終了タグは必ず対応している。また、対応する開始タグと終了タグの区間が、他の対応する開始タグと終了タグの区間と部分的に重なることはなく、重なる場合は区間全体が重なる、すなわち包含関係(親子関係)しか取れないことになっている。
XHTMLデータやXMLデータは上記のような構造を持っており、また、カレント開始タグリストはスタック構造なので、パース中に現れた終了タグに対応する開始タグは、必ず最後に追加した開始タグデータとなっているはずである。
上記の削除処理、追加処理は、パース処理を進めながら、同時に行われる。
例えば、分割データ400の場合、タグだけを抜き出してみると、「<HTML>」、「<font color=“red” size=“+3”>」、「</font>」、「<br/>」、「<font size=“+1”>」、「<P>」が取り出される。
最初は、カレント開始タグリストは空である。
その状態で、まず、HTMLタグの開始タグが現れるので、「“<HTML>”」の開始タグ文字列を持つ開始タグデータ310が生成され、カレント開始タグリストに追加される。この時点のカレント開始タグリストは、開始タグデータ310だけである。
次に、fontタグの開始タグが現れるので、「“<font color=“red” size=“+3”>“」の開始タグ文字列を持つ開始タグデータ311が生成され、カレント開始タグリストに追加される。なお、図28は分割データ400を処理し終えた状態であり、削除処理が実行されているので、開始タグデータ311の内容は、ここでの説明とは変わっている。この時点のカレント開始タグリストは、開始タグデータ310、311の2つである。
次に、上記fontタグの終了タグが現れるので、カレント開始タグリストに最後に追加された開始タグデータ311が削除される。この時点のカレント開始タグリストは、開始タグデータ310だけに戻る。
次に、brタグが現れるが、これは空タグで、開始タグと終了タグが一緒になっているので、ここでは何も処理しない。追加、削除の処理を行ってもよいが、結果は同じである。この時点のカレント開始タグリストは、開始タグデータ310だけである。
次に、上記と別のfontタグの開始タグが現れるので、「“<font size=“+1”>”」の開始タグ文字列を持つ開始タグデータ311が生成され、カレント開始タグリストに追加される。この時点のカレント開始タグリストは、開始タグデータ310、311の2つである。
最後に、Pタグの開始タグが現れるので、「“<P>”」の開始タグ文字列を持つ開始タグデータ312が生成され、カレント開始タグリストに追加される。この時点のカレント開始タグリストは、開始タグデータ310、311、312の3つである。
これで、図28の開始タグデータ310〜312が生成される。
S4−4では、カレント分割データ中のタグで、カレント終了タグリストを更新して、S4−5へ処理が進む。
ここでの処理は、S4−3の処理と似ており、終了タグデータの削除と追加である。
S4−3では、終了タグが現れたら、カレント開始タグリスト中の最後の開始タグデータを削除していたが、S4−4でも同様に、終了タグが現れたら、カレント終了タグリスト中の最後の終了タグデータを削除する。
また、S4−3では、開始タグが現れたら、その開始タグを持つ開始タグデータを生成して追加していたが、S4−4でも同様に、開始タグが現れたら、その開始タグに対応する終了タグ文字列を生成し、その終了タグ文字列を持つ終了タグデータを生成して追加する。開始タグに対応する終了タグ文字列を生成する所が少し異なる。
例として、S4−3で使った分割データ400のタグを使って、説明する。
最初は、カレント終了タグリストは空である。
この状態で、まず、HTMLタグの開始タグが現れるので、対応する終了タグ文字列「“</HTML>”」を生成し、生成した終了タグ文字列を持つ終了タグデータ320が生成され、カレント終了タグリストに追加される。この時点のカレント終了タグリストは、終了タグデータ320だけである。
次に、fontタグの開始タグが現れるので、「“</font>”」の終了タグ文字列を持つ終了タグデータ321が生成され、カレント終了タグリストに追加される。この時点のカレント終了タグリストは、終了タグデータ320、321の2つである。
次に、fontタグの終了タグが現れるので、カレント終了タグリストに最後に追加された終了タグデータ321が削除される。この時点のカレント終了タグリストは、終了タグデータ320だけに戻る。
次に、brタグが現れるが、これは空タグで、開始タグと終了タグが一緒になっているので、ここでは何も処理しない。追加、削除の処理を行ってもよいが、結果は同じである。この時点のカレント終了タグリストは、終了タグデータ320だけである。
次に、上記と別のfontタグの開始タグが現れるので、「“</font>”」の終了タグ文字列を持つ終了タグデータ321が生成され、カレント終了タグリストに追加される。この時点のカレント終了タグリストは、終了タグデータ320、321の2つである。
最後に、Pタグの開始タグが現れるので、「“</P>”」の終了タグ文字列を持つ終了タグデータ312が生成され、カレント終了タグリストに追加される。この時点のカレント終了タグリストは、終了タグデータ320、321、322の3つである。
これで、図28の終了タグデータ320〜322が生成される。
なお、S4−3とS4−4の処理は、ここでは説明を分かりやすくする為に別々にパースするように説明したが、1回のパースで両方の処理を同時に行う方が処理効率が良い。
S4−5では、カレント終了タグリストをカレント分割データの終了タグ文字列に設定し、S4−6へ処理が進む。
カレント終了タグリストからカレント分割データの終了タグ文字列を生成するには、カレント終了タグリストの最後の終了タグデータから最初の終了タグデータまで順番につなげて文字列を生成すればよい。カレント終了タグリストはスタック構造なので、例えば、図28の場合、一番上の最後の終了タグデータ322から、終了タグデータ321、320の順に読み込む。
例えば、カレント分割データが最初の分割データ400の場合、カレント終了タグリストは、図28の終了タグデータ320〜322となっている。そこで、処理補助データ生成手段5が、終了タグデータ322、321、320の順に繋ぐことにより、終了タグ文字列(図29の処理補助データ132)は、「</P></font></HTML>」となる。
S4−6では、カレント分割データの次の分割データが存在するかどうか判断し、存在すると判断されればS4−7へ処理が進み、存在しないと判断されれば、P40(図23)へ処理が抜ける。
S4−7では、カレント分割データを次の分割データに設定し、S4−2へ処理が戻る。
ここで、もう少し具体例を確認しておくと、例えば、分割データ401・402は、プレーンテキストデータのみから成るので、図28に示すカレント開始タグリストに対し、分割データ401・402に基づいて追加または削除される開始タグは存在しない。従って、分割データ401・402の各処理補助データ133・135は、分割データ400から読み込まれた開始タグのみで構成されている。
分割データ401・402の各処理補助データ134・136についても、分割データ400から生成された終了タグの処理補助データ132と同一内容になっている。
一方、分割データ403の開始タグに関する処理補助データ137の場合、分割データ403からPタグの終了タグが読み込まれるので、Pタグの開始タグデータ312が削除される。また、分割データ403の終了タグに関する処理補助データ138についても、Pタグの終了タグデータ322が削除される。
以上のS4−1からS4−7の処理によって、図23のS4の処理、すなわち分割データを使って、処理補助データを生成する処理を行うことができる。
(依存関係データ生成処理〜その1)
図30は、図23のS5の処理、すなわち、各手段7、8、10〜12から得られる分割境界データを使って、依存関係データを生成する処理の一方法を説明するフローチャート図である。各ステップでの動作主体は、全て、依存関係データ生成手段6なので、各ステップの説明では、動作主体の記述を省く。
ここでは、分割データの処理結果間の影響は、表示レイアウトを作成する方向が電子データの前から後ろに向かう方向であるため、前の分割データから後の分割データの方向に影響するとしている。この方向が最も一般的であるが、もし、後の分割データから前の分割データの方向に影響する電子データの場合は、ここでの説明を逆にすればよい。また、両方向ありえる場合は、両方向とも処理するようにすればよい。
P40を経たS5A−1では、最初の分割データの依存関係を「非依存」に設定し、最初の分割データをカレント分割データに設定して、S5A−2へ進む。影響の及ぶ方向は、前から後の方向なので、最初の分割データは、その前に分割データが存在していないため、当然、影響を受けない為である。
「非依存」か「依存」かの情報は、例えば、図8のように、「0」、「1」という値で記録してもよい。
S5A−2では、カレント分割データの次の分割データが存在するかどうか判断し、存在すると判断されればS5A−3へ処理が進み、存在しないと判断されれば、P50を経て処理が抜け、本発明のデータ生成方法に関する全ての処理が終了する。
S5A−3では、カレント分割データの次の分割データを、新たなカレント分割データに設定し、S5A−4へ処理が進む。
S5A−4では、カレント分割データとその前の分割データとの分割境界は、その属性が「非依存」かどうかを判断し、「非依存」と判断されれば、S5A−5へ処理が進み、「非依存」ではない(すなわち「依存」)と判断されれば、S5A−6へ処理が進む。
「非依存」であるか、「依存」であるかの情報は、図23のS2で、分割境界を作成する際に得ることができる。具体的には、図24のS2−7で標準内非依存分割境界候補を分割境界とした場合、あるいはS2−10で標準外非依存分割境界候補を分割境界とした場合は、その分割境界の属性は「非依存」である。その一方で、S2−15で、標準内依存分割境界候補を分割境界とした場合、その分割境界の属性は「依存」である。
なお、分割境界データ等、本発明の方法によって生成される各種データのファイル保存に関しては、後述する。
S5A−5では、カレント分割データの依存関係データを「非依存」に設定して、S5A−2へ処理が戻る。
S5A−6では、カレント分割データの依存関係データを「依存」に設定して、S5A−2へ処理が戻る。
以上のS5A−1からS5A−6の処理で、図23のS5の処理、すなわち、各手段7、8、10〜12から得られる分割境界データを使って、依存関係データを生成する処理を行うことができる。
分割データ400〜405の場合、分割データ401と分割データ402の分割境界、分割データ402と分割データ403の分割境界が、改行で分割されていないので、その属性「依存」となっており、図8の処理補助データ140〜145のような結果となる。
(依存関係データ生成処理〜その2)
図31は、図23のS5の処理、すなわち、各手段7、8、10〜12から得られる分割境界データを使って、別形態の依存関係データを生成する処理の一方法を説明するフローチャート図である。上記別形態の依存関係データとは、図9に示すように、着目している分割データの処理結果が影響を受ける最前の分割データを示すデータのことである。
各ステップでの動作主体は、全て、依存関係データ生成手段6なので、各ステップの説明では、動作主体の記述を省く。また、影響の方向に関して、図30での説明同様、ここでは、前から後の分割データの方向について説明する。
P40を経たS5B−1では、最初の分割データの「最前依存分割データ」を分割データ自身に設定し、最初の分割データをカレント分割データに設定して、S5B−2へ処理が進む。最前依存分割データは、自分自身の場合は、空データとしてしまう仕様でもよいが、ここでは一応、自分自身を設定しておくとする。
S5B−2では、最初の分割データを「ターゲット分割データ」に設定して、S5B−3へ処理が進む。「ターゲット分割データ」とは、現在の最前依存分割データを意味する。
S5B−3では、カレント分割データの次の分割データが存在するかどうか判断し、存在すると判断されればS5B−4へ処理が進み、存在しないと判断されれば、P50を経て処理が抜け、全ての処理が終了する。ここでの処理は、S5A−2と同様である。
S5B−4では、カレント分割データの次の分割データを、新たなカレント分割データに設定し、S5B−5へ処理が進む。ここでの処理は、S5A−3と同様である。
S5B−5では、カレント分割データとその前の分割データとの分割境界の属性は、「非依存」かどうかを判断し、「非依存」と判断されれば、S5B−6へ処理が進み、「非依存」ではない(すなわち「依存」)と判断されれば、S5B−7へ処理が進む。ここでの処理は、S5A−4と同様である。
S5B−6では、カレント分割データをターゲット分割データに設定し、S5B−7に処理が進む。すなわち、S5B−5で、カレント分割データとその前の分割データとの分割境界が「非依存」と判断されたということは、依存関係がこの分割境界の位置でリセットされたことを意味するので、カレント分割データの最前依存分割データは自分自身になる為である。
なお、S5B−5からS5B−7へ処理が進む時、すなわち前記分割境界の属性が「依存」の時は、最前依存分割データは変わらず、カレント分割データに引き継がれることになる。
従って、S5B−7では、カレント分割データの最前依存分割データを、その時点で最前依存分割データとして特定されているターゲット分割データに設定し、S5B−3へ処理が戻る。
以上のS5B−1からS5B−7の処理で、図23のS5の処理、すなわち、各手段7、8、10〜12から得られる分割境界データを使って、別形態の依存関係データを生成する処理を行うことができる。
分割データ400〜405の場合、分割データ401と分割データ402の分割境界、分割データ402と分割データ403の分割境界が、改行で分割されていないので、属性が「依存」となっている。このため、図9の処理補助データ150〜155のように、分割データ402、403に対応する処理補助データ152・153が、それより前の分割データ401を指し、それ以外の処理補助データは、自分自身の分割データを指すという意味の値となっている。
(データ記録ファイルの形式)
次に、本発明のデータ生成方法によって生成したこれら分割データ、分割境界データ、処理補助データ、依存関係データなどを、実際にファイルなどの形式で主記憶74上や外部記憶75上などに記録する際の形式について説明する。
まず、電子データと分割データ、分割境界データなどの関係について概略を説明する。なお、分割データ、分割境界データ、処理補助データ、依存関係データなどの細かいファイル構造については、後で図を使って説明する。
既に説明したように、分割データを得るには、分割境界データを使って、電子データ(ファイル)中から必要な分割データを必要になったときに抜き出してくる方法と、算出した分割境界のデータ位置で電子データを分割して生成した分割データをファイルなどの単位で記録しておき、各ファイルから分割データを直接読み出す場合と、大きく2つの方法がある。
図32は、前者の方法で使われるファイルのデータ構造を説明する説明図である。ここでは、電子データファイル100と分割境界データ配列ファイル110との2つのファイルが作成される。分割境界データ配列ファイル110には、分割境界データ111〜117が記録されている。電子データファイル100の分割境界のデータ位置は、分割境界データ111〜117によって求められる。すなわち、分割境界データ111〜117を用いることにより、図32に示すように、電子データファイル100から、ヘッダデータ101、分割データ400〜405を任意に抜き出すことができる。
分割境界データ111は電子データファイル100中のヘッダデータ101と分割データ400との分割境界の位置を表している。分割境界データ112は電子データファイル100中の分割データ400と分割データ401との分割境界の位置を表している。同様に、分割境界データ113〜116は、それぞれ対応する分割境界の位置を表している。分割境界データ117は、分割データ405の最後の位置を表している。
なお、図32のファイル構造は、必ずこの構造でないといけないということではなく、典型的なファイル構造の一つを例としてあげているだけである。例えば、ヘッダデータ101を分割データ400の前に配置しているが、ヘッダデータが必要かどうかは、電子データの種類やその利用目的によって異なる。ヘッダデータには、電子データの種類(フォーマット)やバージョン情報、内部の各種データへのアクセス方法、著作権情報、暗号化されている場合は暗号情報などが含まれることが多い。また、分割データや分割境界データも図32のように並んで配置しないといけないという訳ではなく、間隔が空いていても、それを知る情報がヘッダデータや分割境界データなどから得られれば問題ない。
以上のようにして、分割境界データを使って、電子データファイル中から必要な分割データを得ることができる。この分割データ取得方法の場合、分割境界データさえファイルなどで作成しておけば、電子データファイルをそのまま使うことができる利点がある。例えば、図3に示すようなウィンドウを呼び出して、分割データのサイズを変更する場合でも、分割境界データを算出し直すだけでよいので、処理の高速化に都合が良い。
図33は、分割データを得る後者の方法、すなわち、各ファイルから分割データを直接読み出す方法で使われる分割データのファイルの構造を説明する説明図である。
ヘッダデータ101、分割データ400〜405は、ファイル120〜126として、それぞれファイルとして記録されている。後は、どの分割データがどのファイルに対応しているかの情報さえ得られればよい。
一般に、ファイルはファイル名で区別されることが多いので、例えば、各分割データのファイル名が得られれば良い。その場合、例えば、各分割データのファイル名は、ヘッダデータ101のファイル120などに別途記録しておくとか、ファイル名の命名規則を決めておくなどの方法が考えられる。
図34は、分割データの各ファイルのファイル名をXML形式で記録している例である。図34の「分割データリスト」部分、すなわちDividedFileListタグ以下の階層で、これらのファイル名を記録している。DividedFileListタグの下のfileタグのname属性で、ファイル名を記録している。fileタグの順番が分割データの順である。
また、図34では、各分割データのファイルのデータを、同じファイル中に「各ファイルのデータ」として記録しているが、同じファイル中に記録せず、後で説明する図40のように、独立したファイルとして記録してもよい。
以上のようにして、各ファイルから分割データを直接読み出すことができる。分割境界データを使って、一部のファイルを読むなどという処理が必要なく、処理を単純化することができる利点がある。また、分割データのサイズを変更する頻度が少ない形態では、既に記録済みの分割データを読み出すだけでよく、表示レイアウト等の処理結果を得ようとする毎に、分割データを生成する必要がないので、処理の高速化に都合が良い。
次に、分割データ、分割境界データ、処理補助データ、依存関係データなどの細かいファイル構造について説明する。
ファイルへの記録の仕方や構造は色々考えられるが、例えば、テキストデータで記述するか、バイナリデータで記述するか、という観点もある。データを8ビットからなる1バイト単位の文字コードで表現する場合、テキストデータは、一般に英数字や一部の記号などの100個前後の文字コードだけからなり、バイナリデータはそれ以外の残りの文字(表現/印刷できない制御コードなど)も含めた全256個の文字コードからなる。
テキストデータは、人間が見て理解することができ、エディタアプリケーションなどで編集することができるので、扱い易いという利点がある。但し、使える文字コードが制限されている為、同じ情報量を記述するのに、バイナリデータと比べて、データサイズが大きくなりやすいという欠点もある。逆にバイナリデータは、扱いにくいが、データサイズを小さくしやすい利点がある。
以降の説明では、同じ情報を、テキストデータとバイナリデータの両方の形式で示すことにする。
図36は、電子データをファイルに記録する際のバイナリ形式のファイル構造例を説明する説明図である。
図中の各矩形は、数字あるいは文字列のデータである。ここでは説明の為、数字だけからなる矩形は固定長の数字データ、「“」「”」で囲まれている文字列は可変長の文字列データ、「“」「”」で囲まれていない文字列は固定長の文字列データ、括弧で囲まれたデータは可変長のバイナリデータとする。
ここでは、バイナリデータのファイル構造として、「チャンク構造」を使っている。「チャンク」とは、データの塊であり、通常、そのチャンクのデータサイズや、データの種類を示す識別文字列などが先頭に記録されている。チャンクの集まりからなる構造が「チャンク構造」である。なお、以降の説明では、「Aのチャンク構造データ」を省略して、「Aチャンクデータ」あるいは「Aチャンク」と呼ぶことがある。
チャンク構造の利点として、データアクセスの高速化、データ構造の柔軟性があげられる。例えば、ある種類のデータだけを得たい場合、先頭から順にチャンクデータを調べていく。各チャンクデータの先頭部分に記載されている識別文字列を見て、目的の種類のデータならば、そのデータサイズ分を読み込めばよく、目的の種類のデータでないならば、そのデータサイズ分をスキップして読み飛ばし、次のチャンクデータを調べればよい。これにより、目的のチャンクデータへのデータアクセスが高速化される。
また、読み飛ばすチャンクデータに関しては、チャンクデータの内部構造を知っている必要はないので、ファイル構造、すなわち全てのチャンクデータの構造を全て知らないと全く処理ができないということはなく、知っているチャンクデータだけは処理できる。従って、ファイル構造の変化に対して強く、柔軟に処理することができる利点がある。
図36の電子データファイルでは、まず先頭にファイル識別文字列180がある。ここでは、「MAINDATA_V1.00」としている。ここでは、「MAINDATA」の部分は、このファイルの種類が「電子データ」であることを示し、「V1.00」は、ファイル構造のバージョンを意味するとする。なお、ここではバージョンを識別文字列に含めてしまっているが、数字データとして記録してもよい。
ファイル構造は後で変える必要が出てくることがある為、このように、ファイルの種類だけでなく、バージョン情報も入れることで、柔軟な処理がし易くなる。例えば、処理系がファイル構造を知っているバージョン番号と比較して、新しいバージョン番号を持つ電子データの時は、処理を中止したり、ユーザーに処理を続けるかどうか問い合わせたりといった処理が可能となる。
ファイル識別文字列180の後、チャンク識別文字列181から暗号情報183までが「暗号情報チャンク」(暗号情報のチャンクデータ)となっている。ここでは、チャンクデータは、最初に3文字の固定文字列からなるチャンク識別文字列181があり、次に4バイトの数字データからなるチャンクデータサイズ182、その後に各チャンクの内部データが続く。チャンクデータサイズは、ここでは、内部データのサイズを表すとする。
暗号情報チャンクの場合、チャンク識別文字列181が「ECP」、チャンクデータサイズ182が「4」、内部データである暗号情報183が固定長文字列「NONE」である。暗号情報183は固定長文字列で、文字列長は4文字なので、チャンクデータサイズ182は「4」となっている。なお、ここではデータサイズの単位として、「バイト」を使っている。
暗号情報チャンクは、ここでは以降のデータの暗号化方法などの情報を示すとする。ここでは、説明を簡単にする為、「NONE」、すなわち暗号化されないとしておく。
暗号情報チャンクの次は、ファイルリストチャンクが続く。ここでは、電子データとしてHTMLデータを使う例だが、本文のHTMLデータだけでなく、画像データや音声データなどのデータも別途必要だとする。これらのデータの場所を示す為にファイルリストチャンクを使っている。
ファイルリストチャンクの内部データでは、リスト数186がファイルリストの個数を表し、その後、各ファイルリストのデータが3つ続く。ファイルリストは、「ファイル位置データ」と「ファイル名」からなる。「ファイル名」は、各データのファイル名を指し、「ファイル位置データ」は、そのファイル名のデータの存在するデータチャンクの位置を表す。なお、ここでいう「ファイル名」は、電子データ内部で使われるいわば「内部ファイル名」である。
ここでは、3つの内部ファイル、「MAIN.HTML」、「IMAGE1.PNG」、「SOUND1.WAV」があり、それぞれ80バイト目、875バイト目、1034バイト目から始まるファイルデータチャンクに各内部ファイルのデータが記録されていることになる。
ファイルリストチャンクの後は、各内部ファイルのデータチャンクが続く。ファイルデータチャンクの内部データは、上記3つの内部ファイルのデータそのものである。
図36の電子データを処理する際は、まずファイルの種類やバージョンをファイル識別文字列180で確認し、暗号情報チャンクで、以降のデータの暗号方法などの情報を得る。そして、その暗号方法に従い、後のデータを解釈する。
次に、ファイルリストチャンクを読み込んで解釈する。例えば、ファイルリストの先頭のファイルが、主となるHTMLファイルだと決めておくとする。そして、主となるHTMLファイルのデータチャンクの位置を得て、読み込む。
読み込まれたHTMLファイルを解釈/処理して、その他の内部ファイルが必要になったら、ファイルリストから内部ファイル名が一致するファイルリストを選び、そのデータチャンクの位置を得て、読み込む。
このようにして、電子データが記述されているとする。
本発明では、電子データは既に生成されているとしているので、ここでは詳しくは説明しない。
図35は、図36の電子データをテキスト形式で表現した例である。図34とほぼ同等の構造であるが、IMAGE1.PNGやSOUND1.WAVといったバイナリ形式のデータも、MIME64方式でテキスト形式に変換している。バイナリ形式のデータをテキスト形式に変換する方法は、MIME64以外の方法でも構わない。
図37は、分割境界データ、処理補助データ、依存関係データを一つのファイルに記録する際のバイナリ形式のファイル構造例を説明する説明図である。説明の為、このファイルを「補助ファイル」と呼ぶことにする。
補助ファイルであることを示す「SUBDATA__V1.00」がファイル識別文字列160となっている。
その後、分割境界データチャンク、処理補助データチャンク、依存関係データチャンクが記録されている。
分割境界データチャンクでは、数字データとして、分割境界データ111〜117と、分割データサイズ163〜168が内部データとして記録される。ここでは、図7の分割データ400〜405の分割境界データの例を示している。分割データは6個だが、分割境界は、最初と最後の境界も含めているので7個になっている。
処理補助データチャンクでは、可変長文字列の処理補助データ131〜142が記録されている。
依存関係データチャンクでは、数字データとして、依存関係データ140〜145が記録されている。
この補助ファイルを読み込んで解釈する処理系は、これらのデータチャンク構造は事前に知っているとする。
この補助ファイルのファイル構造のデータを作成する方法について、簡単に説明する。
まず、ファイル識別文字列160は、固定長文字列なので、計算や変換などの処理を必要とせず、そのまま記録すればよい。
次に分割境界データチャンクだが、最初のチャンク識別文字列161は、これも固定長文字列なので、そのまま記録すればよい。
次のチャンクデータサイズ162は、計算して求める必要がある。分割境界データ111〜117と分割データサイズ163〜168は、それぞれ4バイトの数字データで記録されるとし、4×(7+6)=52より、チャンクデータサイズ162は「52」となる。
その後の内部データである分割境界データ111〜117と分割データサイズ163〜168は、それぞれ4バイトの数字データとして記録する。
これにより、分割境界データチャンク部分が記録される。
次に、処理補助データチャンクを記録する。最初のチャンク識別文字列169は、これも固定長文字列なので、そのまま記録すればよい。
次のチャンクデータサイズ162は、計算して求める必要がある。処理補助データ131〜142は既に決定しているので、そのデータサイズの和を求める。可変長文字列は、最後に値「0」の文字コードを付加するとする。例えば、処理補助データ131のように、文字列が空でも最低1バイトは必要となる。ここでの各可変長文字列のデータサイズの和は、「175」となるので、チャンクデータサイズ162は「175」として記録される。
その後の内部データである処理補助データ131〜142は、それぞれ可変長文字列として記録する。
次に、依存関係データチャンクを記録する。最初のチャンク識別文字列171は、これも固定長文字列なので、そのまま記録すればよい。
次のチャンクデータサイズ172は、計算して求める必要がある。依存関係データ140〜145は、それぞれ1バイトの数字データで記録されるとし、1×6=1より、チャンクデータサイズ172は「6」となる。
その後の内部データである依存関係データ140〜145は、それぞれ1バイトの数字データとして記録する。
以上の処理で、図37のファイル構造の補助ファイルを記録することができる。
図38は、図37とほぼ同じ情報を、テキスト形式で記述したファイルのファイル構造例を説明する説明図である。説明の為、このファイルも「補助ファイル」と呼ぶことにする。
ここでは、テキスト形式として、XML形式を使って記述している。1行目は、主にXML形式であることを宣言しているだけなので、ここでは詳しくは説明しない。
全体は、2行目と最後の行のSubDataタグで囲われ、補助ファイルであることを示している。バージョン情報は、version属性で示している。
分割境界データ、処理補助データ、依存関係データは、それぞれSubDataタグの下のboundariesタグ、assist_dataタグ、dependency_dataタグで記述されている。これらのタグは、情報をまとめているという意味で、上述したデータチャンクに相当すると考えればよい。
分割境界データのboundariesタグの下には、各分割境界データを表すboundaryタグが存在する。boundaryタグのpos属性によって、電子データ中の境界位置が示されている。なお、ここでは各分割データのデータサイズの情報は省略した。
処理補助データのassist_dataタグの下には、各分割データの処理補助データを表すdataタグが存在する。dataタグの下に、開始タグ文字列を表すstart_tagタグと、終了文字列を表すend_tagタグが存在する。start_tagタグとend_tagタグのTEXTが、開始タグ文字列、終了タグ文字列そのものとなる。
依存関係データのdependency_dataタグの下には、各分割データの依存関係データを表すdataタグが存在する。dataタグは、flag属性で、依存関係データの値(ここでは0か1)を保持している。
図38の形式の補助ファイルの作成の仕方については、上記のようなタグの階層のデータを順に記録していけばよいだけなので、ここでは詳しい説明は省略する。
図37のチャンクデータ構造の補助ファイルを作成する際、チャンクデータの内部データのデータサイズを計算する必要がある。しかし、図38のXML形式の補助ファイルを作成する際は、各タグの階層のデータサイズを計算する必要がないという利点がある。これは、データの切れ目は、開始タグと終了タグで識別できるからである。
チャンクデータ構造でも、XML形式でも、どちらも同じように知らないデータ構造、すなわち知らないチャンク識別文字列を持つチャンクデータや知らないタグ名のタグ、のデータについては、無視したり、処理を中断したりすることができる。但し、XML形式の方が、人間が直接理解しやすい為、知らないタグであっても、ある程度、データの内容を推測することができ、知らないデータを無視するか処理を中断するかの判断にその推測を利用したり、あるいは、推測に基づいて処理装置内部の処理方法を追加/変更したりということがしやすい利点がある。
次に、図33のように各分割データをそれぞれファイルとして記録する場合の、ファイル構造例を説明する。
まず、各分割データを、図7の分割データ400〜405のまま、それぞれファイルとして記録し、処理補助データを別ファイルから読み出して利用するのか、分割データ400〜405の各々に処理補助データも含めた形でファイルとして記録するのか、の2通り考えられる。
分割データ400〜405のまま、それぞれファイルとして記録する方法に関しては、特に説明することはない。
図39は、分割データ400〜405を処理補助データも含めた形でファイルとして記録した場合の、各ファイルの内容を示した説明図である。分割データ400〜405が、それぞれ、ファイル410〜415に対応する。
各ファイルの作成は、各分割データが効力を引き継ぐべき開始タグ文字列を記録し、次に各分割データを記録し、最後に、記録した開始タグ文字列に対応する終了タグ文字列を記録する、という手順で行われる。
例えば、分割データ401に対応するファイル411の場合、開始タグ文字列として、図29の処理補助データ133の「<HTML><font size=“+1”><P>」がまず記録され、次に分割データ401の「Liquid」から「passed 」までが記録され、最後に、処理補助データ134の「</P></font></HTML>」が記録されている。
なお、ここでは処理補助データと分割データをそのまま記録しているが、他の情報を付加して、別の形式、例えば、先に説明した図36のような形式で記録したり、あるいはXML形式で記録したりしてもよい。
図40は、1つの分割データのファイルを、XML形式で記録したファイルのファイル構造を説明する説明図である。分割データであることを示すDividedDataタグの下に、付加情報である暗号情報のencryptionタグと、分割データの中身であるcontentsタグが存在する。contentsタグのTEXT部分に、図7の分割データ400〜405のいずれかや、図39のファイル410〜415のいずれかのテキストを記述すればよい。
なお、XML形式では、TEXT部分にタグに使われる記号(例えば「<」など)を直接記述することはできないので、XML形式で決められた所定の変換(例えば、「<」から「<」)を行っており、読み出す時は逆の変換を行う。
また、同様の内容を、図40のようなテキスト形式でなく、図36のようなバイナリ形式で記録することも可能である。
(データの利用例)
以上のように生成された分割データ、処理補助データおよび依存関係データを用いて、所望の分割データに対応する部分の表示レイアウトを生成する処理を具体的に説明する。
図11は、分割境界データ、分割データ、処理補助データ、依存関係データなどのデータを利用する例として、表示レイアウトを生成し表示する処理の一例を示すフローチャート図である。なお、以下の各ステップにおける処理の主体は、全て表示レイアウト生成手段(図示せず)としてのCPU70なので、以下の説明においては、動作主体の記述を省略する。
まずステップSL1(以下、「ステップSL」を「SL」と略記する)では、処理補助データおよび依存関係データなどを取得して、SL2へ処理が進む。分割境界データを使用する場合は、分割境界データも取得する。なお、処理補助データ、依存関係データおよび分割境界データは、例えば、外部記憶75などにファイルなどとして記録されているとする。したがって、CPU70は必要なときに外部記憶75などから、必要なデータを読み出すことができる。
SL2で、プログラムまたはユーザー入力に従って指定される表示範囲、すなわち表示範囲の位置と大きさを得て、SL3へ処理が進む。ここでの処理については、後で具体例で説明する。
SL3で、表示範囲の位置が含まれる分割データを求めて、カレント分割データに設定して、SL4へ処理が進む。ここでの処理については、後で具体例で説明する。
SL4で、カレント分割データの表示レイアウトは、必要かどうかを判断し、必要と判断されれば連結点PL10(以降、「連結点PL」を「PL」と略記する)を経て、SL5へ処理が進み、必要ではないと判断されれば、そのときには後述のようにSL5以降の処理によって、表示範囲に対応する表示レイアウトが取得されているので、SL8へ処理が進む。
分割データの表示レイアウトが必要かどうかは、その分割データの表示レイアウトが、表示範囲に含まれるかどうかで判断される。各表示レイアウト要素は、位置と大きさの情報を持っているので、その位置と大きさを表示範囲の位置と大きさと比較することで、判断できる。後で説明する具体例では、図面を使って含まれるかどうかを説明するが、実際の処理では、位置や大きさの値を使って、計算して判断することになる。
SL5で、カレント分割データの表示レイアウトを、他の分割データの影響を考慮して取得して、PL20を経て、SL6へ処理が進む。ここでの処理の詳細は、後で図12、図13を使って説明する。
SL6では、カレント分割データの前の分割データは存在するかどうかを判断し、存在すればSL7へ処理が進み、存在しなければSL8へ処理が進む。
SL7では、カレント分割データを前の分割データに設定し、SL4へ処理が戻る。
なお、SL6、SL7で、「前の分割データ」でなく、どちらも「次の分割データ」とする場合もある。これは、前方向にページめくりしているのか、次方向へページめくりしているのか、など、処理の目的によってどちらにするか決めればよい。どちらにするかは、処理の具体例で説明する。
SL8では、得られた各分割データの表示レイアウト中から、表示範囲に含まれる表示レイアウトを抜き出し、表示部兼タブレット301に表示し、処理を終える。
以上のSL1からSL8の処理によって、表示範囲の表示レイアウトを生成、表示することができる。
図12は、図11のSL5の処理方法、すなわち、カレント分割データの表示レイアウトを他の分割データの影響を考慮して取得する処理方法の一例を示すフローチャート図である。
PL10を経たSL5A−1では、カレント分割データの表示レイアウトを取得して、SL5A−2へ処理が進む。
カレント分割データは、図33に基づいて説明したように、ファイル化された分割データファイルから得られる。あるいは、図32に基づいて説明したように、分割境界データを使って、電子データファイルから分割データ部分を抜き出して読み込むことでも得られる。
分割データの表示レイアウトは、既に生成したものが存在すればそれを使い、存在しなければ分割データから生成する。生成した表示レイアウトを分割データと対応付けて主記憶74上や外部記憶75上などに記録しておけばよい。
分割データから表示レイアウトを生成する際、処理補助データを利用する。例えば、図7の分割データ401に対して、タグによって指定された元の電子データ(図4)の表示結果(図5)と同じ表示結果を得るには足りない情報として、図29に示すように、分割データ401の開始タグ文字列および終了タグ文字列が、それぞれ処理補助データ133・134として用意されているとする。この場合、分割データ401を解釈する際、まず、処理補助データ133の開始タグ文字列を解釈し、次に分割データ401を解釈し、最後に処理補助データ134の終了タグ文字列を解釈する。これによって、不完全なHTMLデータである分割データ401を、分割データの意味する内容が損なわれないHTMLデータとして解釈することができるようになる。
なお、分割データから表示レイアウトを生成する方法については、本発明とは直接関係無いので、詳しい説明は省略する。
SL5A−2では、カレント分割データの直前の分割データの表示レイアウトが、指定された表示範囲にとって必要かどうかを判断し、必要と判断されればSL5A−3へ処理が進み、必要でないと判断されればPL20へ処理が抜ける。ここでの処理は、SL4の処理と同様である。
SL5A−3では、カレント分割データが、直前の分割データから影響を受けるかどうかを判断し、影響を受けると判断される場合は、SL5A−4へ処理が進み、影響を受けないと判断される場合は、PL20へ処理が抜ける。影響を受けるかどうかの判断は、図8の依存関係データ140〜145を参照すればよい。
なお、生成済みのカレント分割データが、直前の分割データの影響を受けて生成されたものである場合、PL20へ処理を抜けてもよい。直前の分割データの影響を受けて生成されたものであるかどうかを、別途記録しておくようにしておけば、このような判断ができる。この判断を行うことで、無駄な再生成を避けることができる。
SL5A−4では、カレント分割データの直前の分割データの表示レイアウトを、他の分割データの影響を考慮して取得し、SL5A−5へ処理を進める。
「カレント分割データの表示レイアウトを他の分割データの影響を考慮して取得」する処理は、SL5全体の処理に相当する。従ってここでは、カレント分割データを直前の分割データに仮に設定し、SL5の処理を再帰的に行い、SL5の再帰処理後、カレント分割データを仮設定から元の設定に設定し直せばよい。「再帰的」とは、ある処理の中で、自分自身の処理を呼び出す(行う)ことである。いわば、入れ子のような処理形態となる。
SL5A−5では、カレント分割データの表示レイアウトを、直前の分割データの表示レイアウトに続けて生成し、PL20へ処理が抜ける。
表示レイアウトに続けて生成する、とは、例えば、前の分割データの表示レイアウトが、行の途中で終わっている時に、次の分割データの最初の表示レイアウトを、途中で終わっている行に追加する形でレイアウトしていくこと、言い換えれば分割の影響を受ける複数の分割データを一続きのデータとして扱い、処理結果としての表示レイアウトを生成することである。これについては、後で具体例で説明する。
以上のSL5A−1からSL5A−5の処理で、図11のSL5の処理を行うことができるようになる。
以上のSL1からSL8の処理について、分割データ400〜405(図7)、依存関係データ140〜145(図8)を使って、以降、具体的に説明する。
図13は、図10の表示部兼タブレット301上に、文書データの先頭から1ページ分の表示レイアウトを求めた状態を説明する説明図である。図13中の枠線が表示部兼タブレット301の表示範囲を示している。この表示範囲の大きさを、以降では、「1ページ分」と表現することにする。図13では、枠線からはみ出ている表示レイアウトは、実際には表示されない。これは生成された表示レイアウトと表示されている表示レイアウト(表示範囲中の表示レイアウト)との関係を説明する為に、このような表現の仕方をしている。また、枠線の左の数字は、説明に使う行番号である。
まず、図11のSL1で、全ての分割データ400〜405について、図8の依存関係データおよび図29の処理補助データなどを取得する。
次に、SL2で、表示範囲の位置と大きさを得る。文書データの先頭から表示するので、表示範囲の位置は、電子データの最初の表示レイアウトとなる。表示範囲の大きさは1ページ分とする。
SL3で、最初の表示レイアウトが含まれる分割データは、最初の分割データなので、分割データ400をカレント分割データに設定する。
SL4で、まだ表示レイアウトは何も存在せず、分割データ400の表示レイアウトは表示範囲に含まれることは分かっているので、ここでは分割データ400は必要と判断され、SL5へ処理が進む。
SL5で、分割データ400の表示レイアウトを、影響を考慮して取得する。
そのために、まず、図12のSL5A−1で、分割データ400の表示レイアウトを取得する。表示レイアウトがまだ生成されていないので、ここで生成することになる。生成された表示レイアウトは、図13の最初の「How does LCD works?」の行と次の空行となる。
SL5A−2で、分割データ400の直前の分割データは存在しないので、PL20へ処理が抜け、SL6へ処理が進む。
SL6で、分割データ400の「次」の分割データとして、分割データ401が存在するので、SL7へ処理が進む。
ここでは、SL6とSL7の処理で、「前」の分割データではなく、「次」の分割データに関して処理することにする。これは表示範囲が「先頭から1ページ分」となっている為である。つまり、表示範囲の上端部分に文書データの最初の表示レイアウトが位置し、そこから下に1ページ分の表示レイアウトが必要になるという事なので、最初の分割データから順方向(次方向)に表示レイアウトを取得していく処理とする必要があるからである。
SL7では、「次」の分割データ、分割データ401をカレント分割データに設定し、SL4へ処理が戻る。
SL4では、分割データ401の表示レイアウトが必要かどうかを判断する。表示範囲の大きさと表示レイアウトなどから計算して判断するのだが、図13を見ても分かるとおり、上記2行では1ページ分に満たない。そこで、ここでは、生成済みの表示レイアウトは表示範囲に満たないので、分割データ401の表示レイアウトが必要と判断される。
SL5で、分割データ401の表示レイアウトを、影響を考慮して取得する。
そのために、まず、図12のSL5A−1で、分割データ401の表示レイアウトを取得する。表示レイアウトがまだ生成されていないので、ここで生成することになる。生成された表示レイアウトは、図13の3行目の「Liquid Crystal」で始まる行から6行目の「passed 」で終わる行までとなる。
SL5A−2で、分割データ401の直前の分割データ400は必要なので、SL5A−3へ処理が進む。
SL5A−3で、分割データ401が直前の分割データ400から影響を受けないことは、処理補助データ141が0であることから分かるので、PL20へ処理が抜け、SL6へ処理が進む。
SL6で、分割データ401の次の分割データは、分割データ402が存在するので、SL7へ処理が進む。
SL7では、次の分割データである分割データ402をカレント分割データに設定し、SL4へ処理が戻る。
SL4では、分割データ402の表示レイアウトが必要かどうかを判断する。図13を見ても分かるとおり、分割データ401に含まれている「passed 」で始まる行が、既に表示範囲をはみ出ているので、ここでは分割データ402は不要と判断され、SL8へ処理が進む。
SL8で図13の表示範囲の表示レイアウトが表示され、処理が終了する。
表示結果は、図13の通り、表示レイアウト結果として全く問題無い。表示範囲を表示するのに必要な分割データだけを処理することで、電子データ400全体を処理し、表示レイアウトを作成するのと比べて、図13の場合、およそ1/3程度のデータ処理量で済んでいる。また、この結果、処理に必要なメモリ量も少なくて済む。このように、分割データを使って処理することで、高速、省リソースで処理できるという利点が出てくる。
図14は、図13の状態に続いて、下に1ページ分の表示範囲の表示レイアウトを求めた状態を説明する説明図である。図14の表示レイアウトを求める処理について簡単に説明する。
図13の状態に続いて処理されるので、図13で生成された表示レイアウト、すなわち分割データ400、401の表示レイアウトは保持したままだとする。
SL2で、図13では5行目まで表示されているので、「passed 」で始まる最後の行である6行目の表示レイアウトが、表示範囲の位置となる。
依存関係データの存在が効いてくるのは、前の分割データに影響を受ける分割データを作成する際に、前の分割データのレイアウトが未作成の場合である。図14の処理では、影響を受ける前の分割データのレイアウトが作成済なので、以降の処理については、簡単に説明する。
まず、分割データ401の表示レイアウトを取得し、分割データ402の表示レイアウトを生成する。これは、分割データ401の表示レイアウトに続けて生成するので、図14の6行目の「passed 」の後に続けて、分割データ402の最初の「through the」がレイアウトされている。同様に、分割データ403の表示レイアウトが分割データ402の表示レイアウトに続けて生成される。
そして、分割データ404、405の順に表示レイアウトを生成する。生成されたレイアウトが図14の状態である。図14の6行目から14行目までが表示範囲として表示される。
以上は、順方向(下方向、次方向)にページめくりする処理についての説明だが、逆方向(上方向、前方向)に行スクロールする処理について、以降、説明する。
図15は、分割データ405の先頭から下に1ページ分の表示範囲の表示レイアウトを求めた状態を説明する説明図である。分割データの生成済みの表示レイアウトが全く無い状態で、分割データ405に対して単独の処理を行ったので、図15の状態では、分割データ405の表示レイアウトしか存在していない。図15のレイアウトを求める処理は、表示範囲の位置は異なるが、図13と同様なので、ここでは省略する。
図16は、図15の状態から、上に1行分だけ行スクロールした状態を説明する説明図である。分割データ405に加えて、分割データ404の表示レイアウト(空行1行だけ)が追加されている。
図17は、図16の状態から、さらに上に1行分だけ行スクロールした状態を説明する説明図である。分割データ404、405に加えて、分割データ403の表示レイアウト(「on」から始まる1行目から「employed.」で終わる4行目まで)が追加されている。
分割データ403は、「on」という文の途中の単語から始まっているが、表示範囲における分割データ403の表示レイアウト自体(すなわち、employed.および改行)は特に問題はなく、誤りは表れていない。すなわち、分割データ403の表示レイアウトは、表示設定を変更して、たまたま1つの文中の「on」の前で行の折り返しが行われている場合と同じであり、改行などのHTMLのタグには従っている。
図18は、図17の状態から、さらに上に5行分ほど行スクロールした状態を説明する説明図である。ここでの処理は、分割データ間の影響が関係するので、図11、図12のフローチャートに沿って少し詳しく説明する。
まず、図17の状態から、前のページへページめくりする指示が入力されることにより、図11のフローが再スタートする。ここでは、処理補助データおよび依存関係データを既に取得済みなので、SL1はスキップされ、SL2に処理が進む。
SL2で、図18の場合、表示範囲としては、分割データ405の最後の行から上に1ページ分となる。
SL3で、分割データ405をカレント分割データに設定し、SL4へ処理が進む。
その後、SL4、SL5と処理が行われ、分割データ405の生成済みの表示レイアウトが取得され、SL6へ処理が進む。
SL6で、分割データ405の「前」の分割データとして、分割データ404が存在するので、SL7で「前」の分割データ404をカレント分割データに設定し、SL4へ処理が戻る。
ここでは、SL6とSL7の処理で、「次」の分割データではなく、「前」の分割データに関して処理することにする。これは表示範囲が「ある行から上に1ページ分」となっている為である。つまり、表示範囲の下端部分に、ある行の表示レイアウトが位置し、そこから上に1ページ分の表示レイアウトが必要になるという事なので、ある分割データ(分割データ405)から逆方向(前方向)に表示レイアウトを取得していく処理とする必要がある。
このようにして、カレント分割データを1つずつ前の分割データにしながら、SL4からSL7の繰り返し処理が行われ、分割データ404の生成済みの表示レイアウトが取得される。
そして、分割データ403がカレント分割データとして、SL5で処理されようとしているとする。
SL5A−1(分割データ403)で、分割データ403の生成済みの表示レイアウトが取得され、SL5A−2(分割データ403)へ処理が進む。なお、各ステップ記号の後の括弧書きは、カレント分割データを意味する。後で再帰的処理を説明する際に、カレント分割データが何であるかを区別しやすくする為に付記しておく。
SL5A−2(分割データ403)で、直前の分割データ402が必要であると判断され、SL5A−3(分割データ403)へ処理が進む。図17の状態から5行ほど上に行スクロールするのだから、分割データ403の表示レイアウトだけでは表示範囲に足りないのは、図17から目でも確認できる。
SL5A−3(分割データ403)で、分割データ403が、分割データ402の影響を受けることが、依存関係データ143の値が1であることから分かるので、SL5A−4(分割データ403)へ進む。
SL5A−4(分割データ403)では、分割データ402を仮にカレント分割データとして、他の分割データの影響を考慮して、分割データ402の表示レイアウトを取得する。
以降は、SL5A−4(分割データ403)から再帰的に呼び出されるSL5(分割データ402)の処理である。
SL5A−1(分割データ402)で、分割データ402の表示レイアウトが取得され、SL5A−2(分割データ402)へ処理が進む。分割データ402の表示レイアウトはまだ存在しないので、ここでは、分割データ402の表示レイアウトが単独で生成される。
生成された表示レイアウトは、「through」で始まる1行目から4行目の「based 」までとなる。図18では処理が全て終わった後の状態となっているので、分割データ403の最初の「on the broadcast」が4行目で繋がっているが、この時点では生成された4行分のレイアウトは、図17の1行目の上に挿入された形として存在するとする。つまり、4行目の「based 」の後は、何も存在せず、あたかも改行されているかのような状態になっているとする。
SL5A−2(分割データ402)で、直前の分割データ401は、表示範囲に対して必要でないと判断され、PL20を経てSL5(分割データ402)の処理を抜け、SL5A−5(分割データ403)へ処理が進む(後の再帰処理の説明を参照)。分割データ402の表示レイアウトまでで表示範囲が足りるのは、図18から目でも確認できる。なお、分割データ401が不要と判断されたため、分割データ402の表示レイアウトの取得については、分割データ401からの影響の有無を考慮する必要が無い。従って、単独で生成された分割データ402の表示レイアウトが、あとでそのまま利用される
また、SL5A−1(分割データ402)で説明した通り、「based 」と「on the broadcast」は、別々の行に分かれてしまっているが、後でこの行は一緒になるはずなので、現在の表示レイアウトの大きさより1行ほど小さくなる可能性はある。従って、ここでは、表示範囲に足りるかどうかは、少し余裕を見て判断した方がよい。
SL5A−5(分割データ403)で、分割データ403の表示レイアウトが破棄された後、分割データ402の表示レイアウトに続けて、分割データ403の表示レイアウトが再生成され、PL20を経て、SL6(分割データ403)へ処理が進む。ここでは、「on the broadcast」で始まる行から「employed.」で終わる行に相当する部分の図17に示す表示レイアウトが破棄され、図18の4行目の「based 」に続けて、「on the broadcast」以降の文字が、再レイアウトされる。その結果、図18の表示レイアウトとなる。
SL6(分割データ403)で、前の分割データ402は存在するので、SL7、SL4(分割データ402)と処理が進むものの、この時点で表示範囲は既に満たされているため、分割データ402が必要ないとSL4(分割データ402)で判断される。この結果、SL8へ処理が進み、SL8で図18の表示範囲が表示され、表示処理が終了する。
以上の処理について、特にSL5での再帰処理を分かりやすくする為、処理手順をまとめると以下のようになる。
SL5A−1(分割データ403)
↓
SL5A−2(分割データ403)
↓
SL5A−3(分割データ403)
↓
SL5A−4(分割データ403)
↓(再帰処理開始)
SL5A−1(分割データ402)
↓
SL5A−2(分割データ402)
↓(再帰処理終了)
SL5A−5(分割データ403)
図18では、分割データ402は、「through」という文の途中の単語から始まっているが、分割データ402の表示レイアウト自体に特に問題はないのは、図17と同様である。分割データ402と分割データ403の間で分割されてしまっている文も、図18では、分割の影響が考慮された結果として、一続きの文として誤り無くレイアウトされている。
図17と図18を比べると、例えば図17の4行目と図18の7行目の「employed.」の行は、行末の位置が異なる。しかしどちらも、HTMLの表示結果としては問題ない。
比較として、本発明のように分割データ403のレイアウトを再度生成しなおさず、分割データ402のレイアウトを単純に、分割データ403のレイアウトの前に挿入するだけの処理を行った状態が、図19である。分割データ402の最後のレイアウトである4行目の「based 」と、分割データ403の最初のレイアウトである5行目の「on」が、本来、図18のようにつながるはずが、つながっておらず、別の行となってしまっている。図19を見ただけでは、4行目の「based 」の後に改行が入っているように見えてしまう。改行を指示するbrタグやPタグが、この場所に存在する訳ではないので、これは誤った処理結果である。
このように、分割データ間の影響を考慮して、必要最小限の分割データを処理することで、高速、省リソースで処理できるという分割データの処理の利点をできるだけ損なわずに済む。さらに、分割データの処理結果が影響し合っていても、各分割データの処理結果の繋がりが悪くならないように処理することができるという種々の効果が出てくる。
図20は、図18の状態から、さらに上に3行分ほど行スクロールした状態を説明する説明図である。
SL3で、カレント分割データを、分割データ404に設定する以外は、図18での処理の説明と途中までほぼ同様である。前述のSL5A−2(分割データ402)の後の処理が異なるので、それ以降の処理について説明する。
SL5A−2(分割データ402)で、直前の分割データ401が今回の表示範囲には必要であると判断され、SL5A−3(分割データ402)へ処理が進む。図18の状態から3行ほど上に行スクロールするのだから、分割データ402の表示レイアウトだけでは表示範囲に足りないのは、図18から目でも確認できる。
SL5A−3(分割データ402)で、分割データ402が、分割データ401の影響を受けることが、依存関係データ142の値が1であることから分かるので、SL5A−4(分割データ402)へ進む。
SL5A−4(分割データ402)では、分割データ401を仮にカレント分割データとして、他の分割データの影響を考慮して、表示レイアウトを取得する。
以降は、SL5A−4(分割データ402)から再帰的に呼び出されるSL5(分割データ401)の処理である。
SL5A−1(分割データ401)で、分割データ401の表示レイアウトが取得され、SL5A−2(分割データ401)へ処理が進む。分割データ401の表示レイアウトはまだ存在しないので、ここで生成される。
生成された表示レイアウトは、図20中の「Liquid」で始まる1行目から4行目の「passed 」までとなる。図20で、「passed 」の行が、図18の1行目の「through」の行と別の行であるのは、先に説明した図18での処理と同様である。
SL5A−2(分割データ401)で、直前の分割データ400は必要でないと判断されるので、PL20を経てSL5(分割データ401)の処理を抜け、SL5A−5(分割データ402)へ処理が進む。分割データ401の表示レイアウトまでを取得すれば表示範囲が足りるのは、図20から目でも確認できる。
SL5A−5(分割データ402)で、分割データ402の表示レイアウトが破棄された後、生成され、PL20を経てSL5(分割データ402)の処理を抜け、SL5A−5(分割データ403)へ進む。ここでは、「through」で始まる行から「based 」までに相当する部分の図18に示す分割データ402の表示レイアウトが破棄され、図20の4行目の「passed 」に続けて、「through」以降の分割データ402が、再レイアウトされる。その結果、図20の表示レイアウトとなる。
この後、分割データ402、分割データ401をカレント分割データとしてSL4〜SL7の繰り返し処理を行い、SL8へ処理が進む。なお、分割データ402の生成済み表示レイアウトは、分割データ401の影響を受けて生成されているので、SL5A−3(分割データ402)で、PL20へ処理が抜ける。この為、分割データ402が、無駄に再生成することは避けられる。
図20の表示レイアウト自体に特に問題はないのは、図17、図18と同様である。分割データ401と分割データ402の間、分割データ402と分割データ403の間で分割されてしまっている文も、図20では繋がってレイアウトされている。
このように、分割データ間の影響を考慮して遡りながら処理することで、複数の分割データが連続して影響されていても、各分割データの処理結果の繋がりが悪くならないように処理することができる効果が出てくる。
次に、図21は、図11のSL5の処理方法、すなわち、カレント分割データの表示レイアウトを他の分割データの影響を考慮して取得する処理方法の別の一例を示すフローチャート図である。
PL10を経たSL5B−1では、カレント分割データに影響を与える最前の分割データを求めて、SL5B−2へ処理が進む。最前の分割データは、図9の依存関係データ150〜155を参照すればよい。
SL5B−2では、最前の分割データから、カレント分割データまでを、一続きのデータとみなして、表示レイアウトを生成し、PL20へ処理が抜ける。なお、既に生成済みの表示レイアウトがあるのならば、生成する必要は無い。
以上のSL5B−1からSL5B−2の処理で、図11のSL5の処理を行うことができるようになる。
図21のフローチャートの処理を使って、分割データ400〜405および依存関係データ150〜155を利用した具体例を説明する。
図17と同じ状態と表示範囲、すなわち、図16の状態から、さらに上に1行分だけ行スクロールした状態の表示範囲を求めるとする。この時、最終的に求められる表示レイアウトの状態を説明するのが、図22である。
SL5B−1(分割データ403)で、分割データ403に影響を与える最前の分割データは、依存関係データ153より、分割データ401であることが分かる。
なお、図8の形式の依存関係データでも、影響を与える最前の分割データを求めることは可能である。対応する依存関係データから前方向に遡り、最初に0になる依存関係データを発見したら、その依存関係データに対応する分割データが、影響を与える最前の分割データとなる。
SL5B−2(分割データ403)で、分割データ401、402、403の順で表示レイアウトを生成する。但し、分割データ402、403は、前の分割データの表示レイアウトに続ける形で生成する。
以上のSL5B−1からSL5B−2の処理で、図22の表示レイアウトが得られる。図22の表示レイアウト自体に特に問題はない。
ここで、図12のフローチャートの手法と図21のフローチャートの手法との違いについて説明する。
図12のフローチャートの手法を使った図17、図18、図20には、表示範囲の位置を上に変化させた時に表示レイアウトの変化が発生してしまっている。例えば、図17の1行目の最初の「on」は、図18では4行目の3単語目になっている。また、図18の1行目の最初の「through」は、図20では4行目の2単語目になっている。このような変化は、読む者にとって、今まで読んでいた行中の個所が少し変わってしまう結果になるので、文章が追いにくく、使いづらい。
一方、図21のフローチャートの手法を使うと、図22の状態から表示範囲の位置を上に変化させても、表示レイアウトは変化しない。常に図5と同じ表示レイアウトのままである。
二つの手法の差は、表示範囲内の分割データに影響を与える分割データのチェック対象を、表示範囲に一部でも含まれる分割データに限るか、表示範囲に関係なく、着目している分割データから影響が及ぶ最前の分割データまでの全ての分割データとするか、の違いである。
前者の手法は、表示範囲外の分割データの表示レイアウトを生成しないので、表示範囲の表示レイアウトを初めて生成する際のデータ処理量を抑えることができる利点がある。但し、表示範囲を変えると、表示レイアウトが変わってしまう場合がある点と、表示範囲を変えると、生成済みの表示レイアウトを破棄して再度生成し直すという無駄な処理が発生する場合がある点の2つの欠点もある。
逆に、後者の手法は、表示範囲外であっても表示レイアウトを生成するので、表示範囲の表示レイアウトを初めて生成する際のデータ処理量が増えてしまう場合がある欠点がある。但し、表示範囲を変えても、表示レイアウトが変わらない点と、表示範囲を変えても、生成済みの表示レイアウトを破棄して再度生成し直すという無駄な処理が発生しない点の2つの利点もある。
どちらの手法を使うかは、高速性や省リソース性を重視するか、表示が変わらないことを重視するか、など、動作環境や目的を考慮して、選択すればよい。
以上、分割データ、分割境界データ、処理補助データ、依存関係データの利用例について説明した。
最後に、上記で述べた方法については、ここで述べた組み合わせだけに限らず、あらゆる組み合わせが可能である。
なお、本発明で生成するデータと、例えばMPEG形式のデータなどとの処理方法の違いについて、説明しておく。
本発明では、「単独で処理しても、それ自体の処理結果には誤りが無い分割データ」を対象としている。説明の為、上記のように定義した分割データを、以降、「ブロックデータ」と呼ぶことにする。
既に説明したMPEGのGOPは、電子データが複数に分割されたデータであり、単体で処理可能なデータなので、本発明で言う「ブロックデータ」に相当する。しかし、MPEGのGOPの処理結果である復元された画像フレームは、常に同じ結果となる。
また、前のGOPの復元結果によって、後のGOPの復元結果が影響されることはない。このため、複数のGOPの復元結果を得るには、単純に前のGOPの復元結果と、次のGOPの復元結果をつなぎ合わせればよい。
これに対し、本発明で例として挙げているHTMLデータは、WWWブラウザの表示設定によって、表示結果が変わることを前提に設計された言語仕様であり、表示設定が変わっても、表示結果の与える論理的意味(例えば、強制改行や画像に対する文字の回り込みなど)が変わらなければ、どのような表示を行っても分割データの意味する内容が損なわれないとされる。
また、HTMLデータのブロックデータの場合、前のブロックデータの処理結果が、次のブロックデータの処理結果に論理的な意味で影響を与えることがある。例えば、改行タグ以外の所で、元の電子データをブロックデータに分割した場合などである。従って、単純に前のブロックデータの処理結果に、次のブロックデータの処理結果をつなぎ合わせるだけでは、全体として論理的意味が変わってしまうことがあり、分割データの意味する内容が損なわれていることがある(図19参照)。
つまり、ブロックデータを扱う際、データのもつ特質に合わせて、本発明で説明した利用例のように処理方法を変えてやる必要がある。本発明では、特にブロックデータ間の処理結果の影響に着目し、分割データの意味する内容が損なわれない処理結果を得やすいデータを生成するようにしている。
また、MPEGのGOPは、HTMLデータのタグによる階層構造のような構造は持っておらず、それらの構造に関する補助情報などを使わなくても処理できるというのも異なる点である。
なお、GOPでなく、GOP中の差分画像をブロックデータとして考えれば、前後のブロックデータに影響を受けるように見えるが、差分画像だけでは画像フレームを復元できず、「単独で処理可能」ではないので、ブロックデータではない。基準画像や関連する差分画像を補助情報として付加すれば、ブロックデータとみなすことは不可能ではないが、それらの補助情報をつけたものは、結局、GOPと同じになってしまう。常に同じ結果であるなど、GOPとの違いに関して説明した理由がそのままあてはまるので、やはり、本発明が対象するブロックデータとは異なる。
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク,ハードディスク,光ディスク,光磁気ディスク,磁気テープ,不揮発性のメモリカード,等を用いることができる。
また、上記プログラムコードは、通信ネットワークのような伝送媒体を介して、他のコンピュータシステムから端末の記憶部へダウンロードされるものであってもよい。
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードを格納することになる。
なお、本発明に係るデータ生成方法を、電子データを複数の分割データに分割する分割境界に関して、分割データを単独で処理して正しい処理結果を得るには、前記分割データに足りない情報である処理補助データを、前記分割データと他の分割データとから生成する処理補助データ生成ステップと、分割データと処理補助データの組を単独で処理しても正しい処理結果が得られ、かつ、分割データのデータサイズが指定最大データサイズを超えない、という条件を満たす分割境界を求め、また前記条件を満たしつつ、分割境界の前の分割データの処理結果が、分割境界の後の分割データの処理結果に影響を与えない分割境界が存在するのならばその分割境界を優先して求める分割境界算出ステップと、分割境界算出ステップから得られる分割境界で電子データを分割して、分割データを生成する分割データ生成ステップと、を有するように構成してもよい。