(57)【要約】  第１のデータ構造を、続いて修正される第１のデータ構造のバージョンの第２のデータ構造で一致させる方法である。始めに、変更が成された第１のデータ構造の各ノードを第２のデータ構造の対応するノードにアクセスする（ステップ２７０１）。アクセスされたノードの各々について、第２のデータ構造の対応するノードに成された変更が第１のデータ構造と不一致を生じるか否かについて判定が成される（ステップ２７０３）。第２のデータ構造の対応するノードに成された変更が第１のデータ構造と不一致ではない場合、変更を第１のデータ構造のアクセスされたノードに行う（ステップ２７０５）。
2007521534.tif 000002
【特許請求の範囲】
【請求項１】
第１のデータ構造を、続いて修正される前記第１のデータ構造のバージョンの第２のデータ構造で一致させる方法であって、
変更が成された前記第１のデータ構造の各ノードを前記第２のデータ構造の対応するノードにアクセスすること、および
前記アクセスされたノードの各々について、
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と不一致を生じるか否かを判定し、
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と不一致ではない場合、前記第１のデータ構造の前記アクセスされたノードに変更を行うことを特徴とする方法。
【請求項２】
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と不一致を生じると判定すること、および
前記不一致が必須型の不一致か任意型の不一致かを判定すること
をさらに含むことを特徴とする請求項１記載の方法。
【請求項３】
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と任意の不一致を生じると判定すること、および
前記第１のデータ構造の前記アクセスされたノードに変更を行うこと
をさらに含むことを特徴とする請求項２記載の方法。
【請求項４】
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と任意の不一致を生じると判定すること、
前記任煮の不一致により、前記第２のデータ構造の対応するノードに成された変更を前記アクセスされたノードに成すことが可能か否かを判定すること、および
前記任意の不一致により、前記第２のデータ構造の対応するノードに成された変更を前記アクセスされたノードに成すことが可能である場合、前記アクセスされたノードに変更を行うこと
をさらに含むことを特徴とする請求項２記載の方法。
【請求項５】
前記第２のデータ構造への変更のログを利用して、前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と不一致が生じるか否かを判定することを特徴とする請求項１記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子インクの処理に関する。本発明の各種態様は、特に、電子インクのレイアウト分析、分類、および認識を含む電子インクの分析に適用することができる。本発明の追加的な態様は、例えば電子インク文書にリッチで柔軟性のある注釈を提供する際に、レイアウトが分析され、分類され、認識された電子インクを使用することに関する。
【背景技術】
【０００２】
社会においてコンピュータの役割が拡大したため、コンピュータにデータを入力するための様々な技術が開発されている。データをサブミットする特に有用な技術の１つは、手書きを利用するものである。スタイラスあるいは他の物でデジタイザに書いて「電子インク」を生成することにより、コンピュータユーザは、キーボードに伴う機器の大きさと不便とを回避することができる。手書き入力は例えば、往診中の医師、建築現場の建築家、小包を配達する配達人、倉庫内を移動する倉庫作業者や、キーボードの使用が厄介あるいは不便な状況で利便に使用することができる。多くの状況では手書き入力はキーボードよりも利便であるが、電子インクで書かれたテキストは、通例、大半のソフトウェアアプリケーションでは直接操作することができない。代わりに、電子インクで書かれたテキストは分析してＡＳＣＩＩ文字など別の形態に変換しなければならない。この分析には、電子インクの単語を構成する個々の電子インクストローク間の各種の関係に基づいて文字を認識する手書き認識プロセスが含まれる。
【０００３】
手書き認識アルゴリズムは近年飛躍的に向上したが、電子インクがある角度で書かれた場合には精度が下がる場合がある。同様に、２つの単語が互いと密接して書かれた場合など、別個のインクストロークグループを容易に区別できない場合、多くの認識アルゴリズムは電子インクを正確に認識することができない。一部の認識アルゴリズムは、実際には描画のつもりで描かれた場合に電子インクを誤ってテキストと認識することもある。例えば、ユーザは、タイプ入力されたテキストに下線を引く、ハイライト表示する、円で囲む、あるいはテキストの一部に線を引いて消す等の電子インクを書くことにより、タイプ入力されたテキストに注釈をつけることができる。このような場合、手書き認識アルゴリズムは、こうした注釈のストロークをダッシュ、数字のゼロ、あるいは「Ｏ」の文字として誤って認識する可能性がある。
【０００４】
多くの認識アルゴリズムの精度は、手書き認識アルゴリズムを使用する前に電子インクを「構文解析する」（例えばレイアウトを分析する、かつ／または「分類する」）ことによって大幅に向上させることができる。分類プロセスでは、通例、電子インクストロークが描画の一部（すなわち描画インクストローク）であるか、手書きテキストの一部（すなわちテキストインクストローク）であるかを判定する。他のストロークタイプを識別する分類アルゴリズムも可能である。レイアウト分析プロセスでは通例、電子インクストロークを、単語、行、段落などの有意の関連付けにグループ化する。したがってレイアウト分析と分類のプロセスを使用して、電子インクの集合中のどのストロークが１つの単語に属するか、電子インクのどの単語が電子インクで書かれたテキストの一行に関連付けられるか、および電子インクで書かれたテキストのどの行が１つの段落に関連付けられるかを識別することができる。
【０００５】
インクのレイアウト分析と分類は電子インクの認識を劇的に向上させることができるが、多くのソフトウェアアプリケーション開発者は、電子インクを認識する前に行われるこうした作業の重要性に気づいていない。最近まで、レイアウトと分析のアルゴリズムは、既存のソフトウェアアプリケーションで容易に利用することができなかった。例えば、マイクロソフト（登録商標）社のＷｉｎｄｏｗｓ（登録商標）ＸＰ  Ｔａｂｌｅｔ  ＰＣ  Ｅｄｉｔｉｏｎ  Ｖｅｒｓｉｏｎ  ２００２オペレーティングシステムは、通例は、電子インクを記憶し、表示し、操作するためのマイクロソフト（登録商標）Ｗｉｎｄｏｗｓ（登録商標）Ｊｏｕｒｎａｌソフトウェアアプリケーションと併せて販売されていた。マイクロソフト（登録商標）Ｗｉｎｄｏｗｓ（登録商標）Ｊｏｕｒｎａｌソフトウェアアプリケーションは内部パーサを用いるが、最近までこのパーサは、オペレーティングシステムによって実行される他のソフトウェアアプリケーションからはアクセスすることができなかった。
【０００６】
現在ではＷｉｎｄｏｗｓ（登録商標）Ｊｏｕｒｎａｌソフトウェアアプリケーションが備える構文解析プロセスに他のソフトウェアアプリケーションから独立してアクセスすることができるが、このパーサの使用はあまり知られておらず、また、このパーサは、ユーザが手書き入力の入力を要求する可能性がある多くのソフトウェアアプリケーションで容易に用いることができない。さらに、ソフトウェアアプリケーション開発者が所望のソフトウェアアプリケーションで専用に使用するためのパーサを作成した（この作成自体困難で、時間を要するプロセスと考えられる）としても、構文解析プロセスの実行には相当時間がかかる可能性がある。例えば、比較的高速のマイクロプロセッサを用いてパーサがわずか数個の電子インクストロークを構文解析するのに、数秒あるいは数分間を要する可能性がある。構文解析処理が完了するまでソフトウェアアプリケーションが動作を停止しなければならない場合、そのソフトウェアアプリケーションは速度が遅くなり大半のユーザによる実際的な使用には向かなくなる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、例えば電子インクのレイアウトの分析、分類、および／または認識を行うために各種のソフトウェアアプリケーションによって用いることが可能な電子インクの処理技術が必要とされる。さらに、この技術を用いるソフトウェアアプリケーションがインク処理の結果を無効にすることなく新しい電子インクを受け付けることを可能にしながら、電子インクを処理することが可能な電子インク処理技術が必要とされる。
【課題を解決するための手段】
【０００８】
本発明の各種実施例は、各種のソフトウェアアプリケーションが電子インクを処理するために使用できる電子インクの処理技術を有利に提供する。さらに、この電子インクの処理技術では、この技術を実施するソフトウェアアプリケーションの動作に対して非同期に電子インクを処理することができ、そのためソフトウェアアプリケーションの動作を停止する、または著しく遅らせることなく電子インクを処理することができる。ソフトウェアアプリケーションは、以前の電子インク入力を処理している間に新しい電子インク入力の受付けを継続することさえ可能である。
【０００９】
本発明の各種実施例では、ファイルまたは文書中の要素を相互の要素に対する空間的位置に基づいて記述することができる。例えば、電子インクストロークとタイプ入力されたテキストの両方を同じ空間座標系に即して記述することができる。文書を管理するソフトウェアアプリケーションは、文書の要素を記述する空間情報を使用して、文書の要素間の関係を記述するデータ構造を保持することができる。詳細には、ソフトウェアアプリケーションは、各種の文書要素のクラスを記述するとともに各種の文書要素間の関連付けを定義するデータ構造を保持することができる。この関連付けは、例えば電子インクストロークデータまたはその集合を電子文書中の他の要素（単語、行、段落、描画、表のセルなど）にリンクするために使用される情報として定義することができる。
【００１０】
空間的位置に基づいてファイルまたは文書のデータ構造中の文書要素を記述することにより、各種のファイルタイプの文書要素が、それらファイルタイプの文書要素を識別し、操作するための共通の手法を用いることができる。より詳細には、各種のソフトウェアアプリケーションは、各自の空間的位置に基づいて文書中の文書要素を記述し、その空間的位置の参照付け（ｒｅｆｅｒｅｎｃｉｎｇ）を用いて共通の電子インク分析メソッドを使用することができる。さらに、各ソフトウェアアプリケーションは、分析すべき特定の文書領域を指定することにより、分析プロセスを文書内の所望の要素だけに限定することができる。
【００１１】
本発明の各種実施例により文書中に入力された新しい電子インクを分析するために、文書を管理するソフトウェアアプリケーションは、分析対象の新しいインクを含むように文書に関連付けられたデータ構造を変更する。ソフトウェアアプリケーションは次いでそのデータ構造（またはデータ構造の関連部分）をインク分析ツールに提供し、インク分析ツールは、データ構造の一部またはすべてを分析のためにコピーする（そして、アプリケーションプログラムが有する文書のデータ構造とは別個のそのデータのコピーに対して処理を行う）。インク分析ツールはそのコピーを構文解析プロセス（例えばレイアウト分析プロセスおよび／または分類プロセス）などの分析プロセスに渡す。ソフトウェアアプリケーションは、インク分析プロセスが行われている間に、新しい電子インク入力および／または他のデータの受け取りを含む通常の動作を再開することができる。新しい電子インクを受け取る以外に「他のデータ」をアプリケーションプログラムによって受け取ることができ、このデータは、例えば既存のインク、テキスト、画像、グラフィック、表、フローチャート、図などのサイズ、位置、または内容を変更するデータ；追加的なテキスト、画像、グラフィック、表、フローチャート、図などを追加するデータ；既存のテキスト、画像、グラフィック、表、フローチャート、図などを削除するデータ等である。すべての所望の分析プロセスが完了すると分析結果がインク分析ツールに返される。
【００１２】
このように、本発明によるシステムおよび方法の各種実施例は、インク分析プロセスを用いるソフトウェアアプリケーションの動作と非同期にインク分析プロセスを実行することができる。この非同期の動作により、ユーザは、分析プロセスによって遅延を生じることなくソフトウェアアプリケーションを使用し続けることができる。さらに、非同期の動作により、複数の分析プロセスを同時に実行することができる。
【００１３】
分析結果を受け取るのに応答して、インク分析ツールは、ソフトウェアアプリケーションから現在のバージョンの電子文書のデータ構造（分析プロセスが実行されていた間に入力された新しいデータおよび／または変更されたデータを含む可能性がある）を入手し、分析結果を現在のバージョンのデータ構造と一致させる。本発明の各種実施例では、分析結果を現在のバージョンのデータ構造と一致させることにより、ソフトウェアアプリケーションが使用しているデータに非同期にアクセスするための「ロッキング（ｌｏｃｋｉｎｇ）」などのより複雑な手法を回避することができる。代わりに、複雑な内部ロッキングを提供する必要なく、どのソフトウェアアプリケーションからも一致を要求することができる。
【００１４】
分析結果を現在のバージョンのデータ構造と一致させると、インク分析ツールは、一致させた分析結果のコピーを手書き認識プロセスなどの別の分析プロセスに提供することができる。この段階でも、ソフトウェアアプリケーションは、第２のインク分析プロセスが行われている間に、新しい電子インク入力および／または他のデータの受け取りを含む通常の動作を再開することができる。すべての所望の第２の分析プロセスが完了すると、第２の分析プロセスの結果がインク分析ツールに返される。インク分析ツールは次いで、ソフトウェアアプリケーションから現在のバージョンのデータ構造（この場合も新しいデータおよび／または変更されたデータを含む可能性がある）を入手し、第２の分析結果を現在のバージョンのデータ構造と一致させる。インク分析ツールは次いで、一致させた第２の分析プロセスの結果を用いてデータ構造を更新する。無論、本発明から逸脱することなく任意数のインク分析手順および／または段階を使用することができる。
【００１５】
上述の各種インク分析プロセスと、電子インクデータを電子文書の他の構成要素（ｆｅａｔｕｒｅ）に関連付ける、またはリンクする空間情報の使用は、リッチで柔軟性があり、自然なインク注釈を電子文書に提供するためにも使用することができる。例えば、本発明の諸態様を使用して、注釈が付された基礎となる文書要素に行われた変更に基づいて動的に移動する、かつ／またはその他の形で変化する電子インク注釈を提供することができる。ユーザは通例、例えば円で囲む、下線を引く、ハイライト表示する、または線を引いて単語を削除する、余白中にメモを書く、余白にある注釈に矢印またはその他の指示記号を描くなど様々な形で文書に注釈を付す。さらに、ユーザは、例えばテキスト、表計算、描画、スライドショー、表、図、グラフ、フローチャートなどの各種の異なる文書タイプに対して注釈を付す。
【００１６】
電子文書中に電子インクの注釈を円滑に組み込むには、基礎となる電子文書が何らかの理由で変化した時に注釈が正しく反応することが必要となる。例えばユーザが電子文書中の単語を（注釈として）円で囲み、その単語より前の文書中のいずれかの場所にテキストを追加した場合には、円で囲まれた単語が移動する可能性がある。この例では、円の注釈が移動し、単語と共にある状態を保たなければならない。別の例として、ユーザが円で囲まれた単語に文字を追加するか、文字を削除した場合、あるいはその単語の大きさを何らかの形で変更した場合には、円の注釈は、単語の新しい大きさに対応するように拡張または縮小しなければならない。基礎となる電子文書が何らかの理由でその構成要素（段落、ピクチャ、列など）の位置を構成要素相互および／またはページに対してリフロー（ｒｅｆｌｏｗ）および／または更新した時には、電子インクの注釈も位置を変え、基礎となるテキストまたは他の情報に対して正しい位置を保つことが好ましい。注釈が基礎となる電子文書テキストに対してこのような形で反応しないと、注釈を付した後にそのままの電子文書を編集または共有することが非実用的になり、紙へのプリントアウトが依然として注釈を付す最も容易で有用な方式となってしまう。
【００１７】
注釈をどのように適切に変更するかの判断は、注釈と電子文書とに関連する各種の要因によって決まる。例えば、リフローの状況で注釈を適切に変更することは、例えばコンピューティングシステム（例えばパーサ）の（ａ）電子インクを注釈と識別する能力、（ｂ）電子インク注釈のタイプを識別する能力、（ｃ）電子インクと基礎となる電子文書中の特定の要素との関係を識別する能力、に依存する可能性がある。この種の情報の一部またはすべてをユーザに問い合わせることも可能であるが、そのようなシステムは、紙に注釈を付すよりもはるかに煩瑣なユーザ体験を提供することになる。したがって、本発明の各種態様によれば、上記の情報は、（１）電子インク自体、および（２）電子インクに対する文書中の各種要素の空間的位置を含む基礎となる文書の内容、から推定することができる。
【００１８】
インク注釈の意味の判定は複雑で困難である可能性があるので、ユーザが文書に注釈を付すことを望む可能性がある各アプリケーションプログラムが注釈識別ロジックを個々に実装することを期待するのは非常に非実際的である。各アプリケーションプログラムが容易に組み込むことができる、この注釈機能を支援する再使用可能なコンポーネントを提供することが好ましい。例えば、ペン方式のコンピューティングシステムのオペレーティングシステムが電子インクを収集し、レンダリングするコンポーネントを備えるのと同様に、オペレーティングシステムが、関連するインクを処理する際にかなり容易に円滑に動作できる、インク注釈の意味を判定するコンポーネント（「注釈パーサ」とも呼ぶ）を提供することが好ましい。
【００１９】
ただし、基礎となる電子文書の内容を識別することは、「スマートな」注釈機能を提供する際に多大な困難を呈する。例えば、各種の異なるアプリケーションプログラムは、大きく異なる方式で文書を記憶し、管理し、リフローしている。本発明は、可能なインク注釈と各種の異なるタイプの電子文書との関係を判定できる再使用可能な注釈パーサを提供する。詳細には、本発明の一部の態様によれば、アプリケーションプログラムにコールバックして解析対象のインクに関連する関連情報（例えばインク注釈に対応する空間範囲にある電子文書に関連する情報。インク注釈に「コンテクスト」を提供する）を提供する機構が注釈パーサに提供される。この機構は、文書を利用する任意のアプリケーションに組み込むことを実際的にできるほど容易であり、非常に大きな文書（ページなどの部分ごとに処理することができる）を扱える効率性がある。
【００２０】
本発明の各種実施例によるインク処理技術は、このように、各種のソフトウェアアプリケーションがインク分析ツールを通じて電子インクに複数の処理を行うことを可能にする。さらに、これらの技術を使用するソフトウェアアプリケーションは、分析プロセス中に、分析プロセスの結果を不要に無効にすることなく、新しい電子インク入力の受け取りを含む通常の動作を続けることができる。
【発明を実施するための最良の形態】
【００２１】
本発明の上記および他の目的、特徴、利点は、添付の図面と共に述べる以下の詳細な説明から容易に明らかになり、完全に理解されるであろう。
【００２２】
用語  
本明細書では以下の用語を使用するが、特に断らない限り、または文脈から明らかである場合を除いて、用語は以下に述べる意味とする。
【００２３】
「レンダリングする」または「レンダリングされた」または「レンダリング」−情報（テキスト、グラフィック、および／または電子インクを含む）を画面に表示する、印刷する、あるいは何らかの他の方式で出力する方式を決定するプロセス。
【００２４】
「コンピュータ可読媒体」−コンピュータシステム上でユーザからアクセスすることができる任意の利用可能媒体。これに限定しないが、例として、「コンピュータ可読媒体」はコンピュータ記憶媒体と通信媒体とを含むことができる。「コンピュータ記憶媒体」は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなどの情報を記憶する任意の方法または技術として実装された揮発性および不揮発性、取り外し可能および取り外し不能の媒体を含む。「コンピュータ記憶媒体」には、これらに限定しないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは、所望の情報を記憶するのに使用することができ、コンピュータからのアクセスが可能な任意の他の媒体が含まれる。「通信媒体」は通例、コンピュータ可読命令、データ構造、プログラムモジュール、あるいはその他のデータを、搬送波または他のトランスポート機構などの変調データ信号として実施し、任意の情報伝達媒体を含む。用語「変調データ信号」とは、信号中に情報を符号化する形でその特性の１つまたは複数を設定または変化させた信号を意味する。これに限定しないが、例として、通信媒体には、有線ネットワークや直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、およびその他の無線媒体などの無線媒体が含まれる。上記の媒体の組合せも「コンピュータ可読媒体」の範囲に含めるべきである。
【００２５】
概要  
本発明の各種実施例によれば、文書（または他のタイプのファイル）中の要素のプロパティは、その文書中でのその要素の空間的位置に関連する情報を含むことができる。したがって、電子インクのストロークとタイプ入力テキストとの両方を、文書に対応する同じ空間座標系に即して、かつ／または文書中の他の要素との空間的関係または他の関係に即して記述することができる。さらに、文書中で関連性のある要素は、単にそれらの要素を含む文書の空間的領域を識別するか、かつ／またはそれらの要素をリンクすることによって識別することができる。
【００２６】
ソフトウェアアプリケーションは、この各種の文書要素間の空間的関係を使用して、文書の要素間の他の関係を記述するデータ構造を作成し、保持することができる。例えば、ソフトウェアアプリケーションは、文書中の各種の要素にクラスを定義するデータツリーなどのデータ構造を保持することができる。したがって、そのデータ構造中のノードは、１つまたは複数のインクストロークを含んだ手書きの単語または描画に対応し、そのノードに記憶されたデータがさらにページ上でのその単語の位置を示すことができる。単語ノードには、インクストロークおよび／または電子インク単語との関連で通例記憶される任意の他の適切なデータまたは従来のデータも記憶することができる。
【００２７】
このタイプのデータ構造は、文書の要素（個々のインクストロークやタイプ入力テキストの文字）を、単語、単語からなる行、文、段落などの有意のグループの形に関連付けることもできる。したがって、ソフトウェアアプリケーションが手書き電子インクからなる１段落を記述する文書ツリー構造を保持する場合、そのデータ構造の葉ノードは電子インクの個々のストロークに関連するデータを含むことができ、１つまたは複数のストロークは、その段落中の単語（例えばパーサおよび／またはレコグナイザによって判定された単語）に対応する単語ノードとしてそのデータ構造中でともに関連付けることができる。ツリー構造は、次いで単語ノードを段落中の行に対応する行ノードに関連付けることができる。各行ノードはさらに、段落に対応するノードに関連付けることができる。ソフトウェアアプリケーションは、さらに、電子インクストロークおよび／または何らかの他の電子インクのグループ化に対応するノードを、画像などの非インクの文書要素、インク描画、タイプ入力された文字、単語、行、段落などに対応する別のノードに関連付けるツリーまたは他のデータ構造を保持することができる。したがって、これらのデータ構造を使用して、関連付けられた電子インクストローク間の関係を定義すること、手書きテキストを形成する電子インクストロークを非インク文書要素に注釈を付す電子インクストロークと区別すること、かつ／または電子インクストロークを他の文書要素にリンクすることができる。
【００２８】
下記で詳細に述べるように、これらのデータ構造は、本発明の各種実施例による文書中の電子インクを分析するインク分析ツールと共に使用することができる。本発明の各種の実施例によれば、ソフトウェアアプリケーションは、まず文書のデータ構造を作成することにより文書中の電子インクの分析を得ることができる。このデータ構造は、（存在する場合には）すでに分析された文書要素間の関係を記述し、したがって、新しい電子インクが分析されるコンテクストを提供する。このデータ構造あるいは「分析コンテクストオブジェクト」は、まだ分析されていない新しい電子インクも含む。すなわち、分析コンテクストオブジェクトは、他の文書要素との関係がまだ確立されていない電子インクも含む。本発明の一部の実施例では、ソフトウェアアプリケーションは、分析コンテクストオブジェクトを自身で作成する。ただし、本発明の他の実施例では、ソフトウェアアプリケーションは、インク分析ツールまたは別のツールを使用して分析コンテクストオブジェクトを作成する。
【００２９】
ソフトウェアアプリケーションがインク分析ツールに分析コンテクストオブジェクトを提供する（あるいはインク分析ツールが分析コンテクストオブジェクトを作成する）と、インク分析ツールは、まだ分析されていない電子インクを含む分析コンテクストオブジェクトの少なくとも一部分に関連する情報のコピーを作成するか、またはその情報を取り出す。分析コンテクストオブジェクトの所望の部分に関連する情報のコピーを作成するか、その情報を受け取ることにより、インク分析ツールは、ソフトウェアアプリケーションによって保持される分析コンテクストオブジェクトを変更することなく後に分析することができるデータ構造を作成する。すなわち、このコピーは、ソフトウェアアプリケーションで使用される実際の電子文書から独立しており、したがって、以下では「文書に依存しない」分析コンテクストオブジェクトと称することができる。
【００３０】
インク分析ツールが文書に依存しない分析コンテクストオブジェクトを作成すると、インク分析ツールは、この文書に依存しない分析コンテクストオブジェクトを１つまたは複数の分析プロセスに提供する。例えば、文書中の未分析の電子インクに手書き認識を行う場合、インク分析ツールは、文書に依存しない分析コンテクストオブジェクトを分類および／またはレイアウト分析のプロセスに提供して、（必要であるか、要求される場合は）インクをテキストストロークと描画ストロークに分類し、未分析の電子インクテキストストロークを、インクレイアウトに基づく関連付けられたグループ化にグループ化することができる。分類および／またはレイアウト分析プロセスが文書に依存しない分析コンテクストオブジェクトを分析する間、ソフトウェアアプリケーションは通常の動作を継続することができる。詳細には、ソフトウェアアプリケーションは、そのアプリケーションプログラムによって保持されている電子文書への新たな電子インク入力および／または任意の他のデータの受け取りを続けることができる。
【００３１】
構文解析プロセスなどの分析プロセスが文書に依存しない分析コンテクストオブジェクトの分析を完了すると、そのプロセスは分析結果をインク分析ツールに返す。より詳細には、構文解析プロセス（特に上述の分類およびレイアウト分析のプロセスを含むことができる）は、まだ分析されていなかった電子インクの新しい関係を示す変更後バージョンの文書に依存しない分析コンテクストオブジェクトを返す。ただし、ソフトウェアアプリケーションは上述の構文解析の動作中に新しい電子インク入力および／またはその文書に対する他のデータを自由に受け付けることができるので、文書の分析コンテクストオブジェクトの現在のバージョン（すなわちアプリケーションによって保持されているバージョン）は、インク分析ツールに最初に提供された文書に依存しない分析コンテクストオブジェクトと、構文解析プロセスから得られる構文解析結果との両方と異なる可能性がある。
【００３２】
したがって、本発明の一部の実施例では、インク分析ツールは、ソフトウェアアプリケーションから現在のバージョンの分析コンテクストオブジェクトを入手し、構文解析の結果を現在のバージョンの分析コンテクストオブジェクトと一致させることができる。この一致プロセスで、インク分析ツールは、現在のバージョンの分析コンテクストオブジェクトを更新して構文解析プロセスの結果を反映させる。そしてインク分析ツールは、現在の分析コンテクストオブジェクトの一致後のデータを認識のために手書き認識プロセスに渡す。ただし、本発明の他の実施例では、インク分析ツールは一致プロセスを省略し、代わりに構文解析結果を直接手書き認識プロセスに渡してもよい。
【００３３】
構文解析結果を現在のバージョンの分析コンテクストオブジェクトと一致させると、ソフトウェアアプリケーションは、再び通常の動作に戻り、新しい電子インク入力および／または文書に関連する他のデータの受け取りを続けることができる。一方、認識プロセスは、現在の分析コンテクストオブジェクトの一致させたデータ（あるいは構文解析結果）を分析する。一致させたデータ（または構文解析結果）の分析を終えると、認識プロセスは、認識結果をインク分析ツールに返す。この場合も、ソフトウェアアプリケーションは、認識プロセスの動作中にその文書に対する新しい電子インク入力および／または他のデータを受け取っている可能性があるので、インク分析ツールは、ソフトウェアアプリケーションから現在のバージョンの分析コンテクストオブジェクトを取得する。インク分析ツールは次いで、認識プロセスの結果と現在のバージョンの分析コンテクストオブジェクトを一致させて、認識結果を用いて現在のバージョンの分析コンテクストオブジェクトを更新する。
【００３４】
例示的動作環境  
図１に、本発明の各種態様の実施に使用することができる汎用デジタルコンピューティング環境の略図を示す。図１で、コンピュータ１００は、処理装置１１０、システムメモリ１２０、およびシステムメモリ１２０を含む各種のシステム構成要素を処理装置１１０に結合するシステムバス１３０を含む。システムバス１３０は、各種のバスアーキテクチャの任意のものを使用したメモリバスまたはメモリコントローラ、ペリフェラルバス、およびローカルバスを含む数タイプのバス構造のいずれでもよい。システムメモリ１２０は、読み取り専用メモリ（ＲＯＭ）１４０およびランダムアクセスメモリ（ＲＡＭ）１５０を含むことができる。
【００３５】
起動時などにコンピュータ１００内の要素間の情報転送を助ける基本ルーチンを含むＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１６０は、ＲＯＭ１４０に記憶される。コンピュータ１００は、ハードディスク（図示せず）の読み書きを行うハードディスクドライブ１７０、取り外し可能の磁気ディスク１９０の読み書きを行う磁気ディスクドライブ１８０、およびＣＤ−ＲＯＭや他の光学媒体などの取り外し可能の光ディスク１９２の読み書きを行う光ディスクドライブ１９１も含むことができる。ハードディスクドライブ１７０、磁気ディスクドライブ１８０、および光ディスクドライブ１９１は、それぞれハードディスクドライブインターフェース１９２、磁気ディスクドライブインターフェース１９３、および光ディスクドライブインターフェース１９４によってシステムバス１３０に接続される。これらのドライブおよびそれに関連付けられたコンピュータ可読媒体は、パーソナルコンピュータ１００のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性の記憶を提供する。当業者には、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）など、コンピュータからのアクセスが可能なデータを記憶できる他のタイプのコンピュータ可読媒体もこの例示的動作環境で使用できることが理解されよう。
【００３６】
ハードディスクドライブ１７０、磁気ディスク１９０、光ディスク１９２、ＲＯＭ１４０、またはＲＡＭ１５０には複数のプログラムモジュールを記憶することができ、このプログラムモジュールには、オペレーティングシステム１９５、１つまたは複数のアプリケーションプログラム１９６、他のプログラムモジュール１９７、およびプログラムデータ１９８が含まれる。ユーザは、キーボード１０１やポインティングデバイス１０２（マウスなど）などの入力装置を通じてコンピュータ１００にコマンドと情報を入力することができる。他の入力装置（図示せず）としては、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどが可能である。これらおよびその他の入力装置は、システムバス１３０に結合されたシリアルポートインターフェース１０６を通じて処理装置１１０に接続することが多いが、パラレルポート、ゲームポート、あるいはユニバーサルシリアルバス（ＵＳＢ）などの他のインターフェースで接続してもよい。さらに、これらの装置は、適切なインターフェース（図示せず）を介して直接システムバス１３０に結合してもよい。
【００３７】
モニタ１０７または他のタイプの表示装置もビデオアダプタ１０８などのインターフェースを介してシステムバス１３０に接続することができる。モニタ１０７に加えて、パーソナルコンピュータは通例、スピーカやプリンタなどの他の周辺出力装置（図示せず）を含む。一例では、フリーハンド入力をデジタル形式で取り込むためにペンデジタイザ１６５とそれに付随するペンまたはスタイラス１６６が提供される。図１にはペンデジタイザ１６５とシリアルポートインターフェース１０６間の接続を示しているが、実際には、ペンデジタイザ１６５は、直接処理装置１１０に結合しても、当技術分野で知られるようにパラレルポートや他のインターフェースおよびシステムバス１３０を介するなど任意の適切な方式で処理装置１１０に結合してもよい。さらに、図１ではデジタイザ１６５はモニタ１０７と分離しているが、デジタイザ１６５の使用可能な入力範囲は、モニタ１０７の表示範囲と共通の範囲（ｃｏ−ｅｘｔｅｎｓｉｖｅ）であってよい。さらに、デジタイザ１６５はモニタ１０７中に組み込むか、または、モニタ１０７の上に重なるか、その他の形でモニタ１０７に付加された別個のデバイスとして存在してもよい。
【００３８】
コンピュータ１００は、リモートコンピュータ１０９などの１つまたは複数のリモートコンピュータとの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ１０９は、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、あるいはその他の一般的なネットワークノードでよく、図を簡潔にするために図１にはメモリ記憶装置１１１だけを図示するが、通例はコンピュータ１００との関連で上述した要素の多くまたはすべてを含む。図１に示す論理接続には、ローカルエリアネットワーク（ＬＡＮ）１１２とワイドエリアネットワーク（ＷＡＮ）１１３が含まれる。このようなネットワーキング環境は、有線接続と無線接続の両方を使用したオフィス、企業内のコンピュータネットワーク、イントラネット、インターネットに一般的に見られる。
【００３９】
ＬＡＮネットワーキング環境で使用する場合、コンピュータ１００は、ネットワークインターフェースあるいはアダプタ１１４を通じてローカルエリアネットワーク１１２に接続される。ＷＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ１００は通例、インターネットなどのワイドエリアネットワーク１１３を通じて通信リンクを確立するためのモデム１１５または他の手段を含む。モデム１１５は、コンピュータ１００の内部にあっても外部にあってもよく、シリアルポートインターフェース１０６を介してシステムバス１３０に接続することができる。ネットワーク環境では、パーソナルコンピュータ１００との関連で図示したプログラムモジュール、またはその一部は、遠隔のメモリ記憶装置に記憶することができる。
【００４０】
図のネットワーク接続は例であり、コンピュータ間に通信リンクを確立する他の技術を使用できることは理解されよう。ＴＣＰ／ＩＰ、イーサネット（登録商標）、ＦＴＰ、ＨＴＴＰ、ＵＤＰなど各種のよく知られたプロトコルの存在が想定され、このシステムはユーザ−サーバ構成で動作させてユーザがウェブベースサーバからウェブページを取り出せるようにすることができる。各種の従来のウェブブラウザを使用して、ウェブページのデータを表示し、操作することができる。
【００４１】
図１の環境は例示的な環境を示すが、他のコンピューティング環境を使用してもよいことが理解されよう。例えば、本発明の１つまたは複数の例では、図１に示し、上述した各種の態様のすべてより少ない態様を有する環境を使用することができ、それらの態様は、当業者には自明の各種の組合せまたはサブコンビネーションで現れることが可能である。
【００４２】
図２に、本発明の各種態様により使用できるペン方式のパーソナルコンピュータ（ＰＣ）システム２０１を示す。図１のシステムの特徴、サブシステム、および機能のいずれかまたはすべてを図２のコンピュータに含めることができる。ペン方式のパーソナルコンピュータシステム２０１は、大型ディスプレイ面２０２、例えば液晶ディスプレイ（ＬＣＤ）画面などのデジタル化フラットパネルディスプレイを含み、この画面に複数のウィンドウ２０３が表示される。ユーザは、スタイラス２０４を使用して、デジタル化表示領域で選択する、ハイライト表示する、そして書くことができる。適切なデジタル化ディスプレイパネルの例には、Ｍｕｔｏｈ社（現在はＦｉｎｅＰｏｉｎｔ  Ｉｎｎｏｖａｔｉｏｎｓ社）やＷａｃｏｍ  Ｔｅｃｈｎｏｌｏｇｙ社から入手可能なペンデジタイザなどの電磁式のペンデジタイザが含まれる。例えば光学デジタイザなどの他タイプのペンデジタイザ、およびタッチセンシティブ式のデジタイザも使用することができる。ペン方式のパーソナルコンピュータシステム２０１は、データ操作、テキストの入力、および表計算、ワードプロセッシングプログラムなどの作成、編集、変更といった従来のコンピュータアプリケーションタスクを実行するためにスタイラス２０４を使用して行われるジェスチャを解釈する。
【００４３】
スタイラス２０４は、その機能を補強するためにボタンや他の機能を装備することができる。一例では、スタイラス２０４は「ペンシル」あるいは「ペン」として実施することができ、その場合は、一端が物を書く部分を構成し、もう一端が「消しゴム」の端部を構成し、「消しゴム」側の端部をディスプレイ上で動かすと、消去すべきディスプレイ上の電子インク部分が指示される。マウス、トラックボール、キーボードなど他のタイプの入力装置も使用することができる。また、タッチセンシティブまたは近接センシティブ式のディスプレイではユーザ自身の指を使用して表示画像の一部分を選択または指示してもよい。したがって、本発明で使用する用語「ユーザ入力装置」は、広い定義を持ち、よく知られる入力装置の多くの変形例を包含するものとする。
【００４４】
各種の実施例で、このシステムは、インクを取り込み、操作し、記憶するためにアプリケーションプログラムが使用することができるＣＯＭ（コンポーネントオブジェクトモデル）サービスのセットであるインクプラットフォームを提供する。インクプラットフォームは、拡張可能マークアップ言語（ＸＭＬ）のような言語を含むマークアップ言語も含むことができる。さらに、このシステムは、ＤＣＯＭを別の実装として使用することができる。マイクロソフト社のＷｉｎ３２プログラミングモデルおよび．Ｎｅｔプログラミングモデルを含むさらなる実装を使用してもよい。これらのプラットフォームは、市販されており、当技術分野で知られている。
【００４５】
フル性能のペン方式のコンピューティングシステムすなわち「タブレットＰＣ」（コンバーチブルタイプのラップトップあるいは「スレート（ｓｌａｔｅ）」タイプのタブレットＰＣ）と共に使用するのに加えて、本発明の態様は、電子インクであるデータを受け付け、かつ／または電子ペンまたはスタイラスの入力を受け付ける他タイプのペン方式のコンピューティングシステムおよび／または他のデバイスと併せて使用することができ、そのようなデバイスとしては、ハンドヘルド型またはパームトップ型のコンピューティングシステム、携帯情報端末、ポケットパーソナルコンピュータ、携帯電話およびセルラ電話、ページャ、およびその他の通信機器、腕時計、電気器具、および印刷された情報またはグラフィカルな情報をユーザに提示するか、かつ／または電子ペンあるいはスタイラスを使用した入力を可能にするモニタまたは他の表示装置および／またはデジタイザを含むか、あるいは、別のデバイスによって収集された電子インクを処理することが可能な他のデバイスまたはシステム（例えばタブレットＰＣが収集した電子インクを処理することが可能な従来型のデスクトップコンピュータ）が挙げられる。
【００４６】
次いで本発明について残りの図との関係で説明するが、それらの図には、本発明を説明する助けとなる本発明の各種の実施例と情報を示している。この詳細な説明に含まれる特定の図と情報は、本発明を限定するものと解釈すべきでない。
【００４７】
空間的文書ビューの抽象化  
上述のように、本発明の特定の態様は、概略的には、電子文書に電子インクを使用したよりリッチで多用途な注釈を提供するためのシステムおよび方法に関する。以下で本発明の各種の態様と実施例をより詳細に説明する。
【００４８】
Ａ．本発明の概要  
図３に、本発明の少なくとも一部の実施例によるシステムおよび方法の動作を概略的に示す。具体的には、図３に示すように、ユーザは、例えば電子文書３００に電子インクを追加することにより何らかの形で電子文書３００（図３の文書「Ａ」）と対話することができる。図の例では、電子文書３００は、電子テキストすなわちタイプ入力テキスト３０２（図の例の「Ｓａｍｐｌｅ  Ｔｅｘｔ」）とインク描画３０４（図の例の家の絵）を含んでいる。無論、電子文書３００は、電子テキスト、電子インク（描画またはテキスト）、画像、グラフ、表、図、他のグラフィックまたは電子情報、および／またはそれらの組合せなど、任意のデータまたは情報を本発明から逸脱せずに含むことができる。この例では、元の電子文書３００（本出願では「基本の文書」あるいは「基本の部分」とも称する）は、電子的なタイプ入力テキスト（電子テキスト）３０２と電子的なインク描画３０４とを含むものと想定する。ユーザはこの例の文書Ａ３００を見直して、文書３００に電子インクによる注釈を含めることにする。具体的には、図の例で、この注釈は、電子的なタイプ入力テキスト３０２の一部分３０８を囲む円（注釈）３０６を含む。
【００４９】
この例では、ユーザが注釈を入力すると、アプリケーションプログラムは、パーサ３１０を呼び出し、新しく入力された電子インクデータの構文解析を要求する（上述のように「構文解析」には、例えば各種のインクタイプ（例えば描画、テキスト、フローチャート、音楽など）への電子インクの分類、および／またはインクのレイアウト分析（インクストローク間の空間的および位置的な関係の確定と、適切なグループ化）と、その他の分析プロセスが含まれる）。具体的には、アプリケーションプログラムは、入力された電子インクデータ（この例の注釈３０６に相当する）を未分類のインクデータとしてパーサ３１０に送る。これを図３では入力の矢印３１２で表す。
【００５０】
任意選択で、これと同時か、この前後の時に、アプリケーションプログラムは、基礎となる電子文書３００に関連するデータの一部またはすべてをパーサ３１０に送ることができる。このデータは、例えば、電子テキスト３０２、インク描画３０４などの位置等、電子文書３００中の情報の空間的レイアウトに関連するデータを含むことができる。また、アプリケーションプログラムは、文書中のデータの階層構造を表すデータを送ることができる。この階層構造については下記でより詳細に説明する。別の代替法として、これも下記でより詳細に説明するように、パーサ３１０は、アプリケーションプログラムにコールバックして、新しい未分類のインクに関連付けられた空間範囲にある電子文書３００に関連する情報（この例では、タイプ入力テキストを表すデータと、注釈３０６の空間的に近くに位置する情報）など、電子文書３００に関連する特定のデータを要求することができる。このパーサ３１０へのデータ入力を図３の入力矢印（電子文書データ）３１４で表す。言うまでもなく、本発明から逸脱することなく、未分類のインクとすでに分析されているデータの両方を同時にパーサに送る、かつ／またはパーサが入手できるようにしてもよい。
【００５１】
パーサ３１０は、入力された電子文書データ３１４と入力された未分類のインクデータ３１２とを受け取り、その情報を使用して新しい電子インクデータをあるインクタイプに分類する。インクは、本発明から逸脱せずに様々なインクタイプに分類することができ、可能なインクタイプの各種例は下記でより詳細に説明する。この例では、本発明の本例によるパーサ３１０は、基礎となる電子文書３００に含まれる入力インクである注釈３０６と電子テキスト３０２とに基づいて、入力インクである注釈３０６を注釈と判定および分類し、より具体的には、特定のタイプ入力テキストをその中に含む囲み注釈（例えば円）に対応するインク描画と判定し、分類する。言うまでもなく、ハイライトの注釈、「ポイント起点（ｐｏｉｎｔｓ  ｔｏ）」注釈、「被ポイント（ｐｏｉｎｔｓ  ｆｒｏｍ）」注釈、固定型注釈（例えば他の注釈をポイントせず、他の注釈からポイントされない注釈）、水平方向の包括、垂直方向の包括などの他の注釈タイプも可能であり、様々な例を下記でより詳細に説明する。
【００５２】
解析すると、注釈３０６に関連付けられたデータを、電子文書３００に関連付けられた「文書ツリー」の階層データ構造（あるいは任意の他の適切な、または所望のデータ構造）中に組み込むことができ、そのデータ構造（またはアプリケーションプログラムによって保持される既存のデータ構造を変更する命令）を図３の矢印３１６で示すようにアプリケーションプログラムに送り返すことができる。必要な場合は、本発明から逸脱せずに、この他のデータをパーサ３１０からアプリケーションプログラムに返すことができる。例えば、パーサ３１０の動作が１つまたは複数のレコグナイザモジュール、コンポーネント、および／またはプログラムの呼び出しを含む場合は、図３に示すように、認識分析プロセス（手書きレコグナイザまたは他のレコグナイザなど）の結果に関連付けられたデータをアプリケーションプログラムに返してもよい。
【００５３】
図４に、本発明の一部の実施例で使用される各種機能の実施４００の一例を示す。図のように、電子文書（図３の文書Ａ３００など）がアプリケーションプログラム４００ａによってデータ構造あるいは文書モデル４０２として生成され、記憶され、かつ／または保持される。このデータ構造４０２は、本発明から逸脱せずに、階層的なデータ構造であっても、任意の他の所望のまたは適切なデータ構造であってもよい。アプリケーションプログラム４００ａは「分析コンテクスト」オブジェクト４０４を含み、このオブジェクト４０４は、ミラーコピー、選択的コピー、またはデータ構造４０２に関連する他の関連情報を含んでいる（例えば、分析コンテクストオブジェクト４０４は、分析コンテクストオブジェクト４０４についてのクエリがネイティブの文書モード構造に対するクエリに変換される「変換」レイヤとすることができる。このようにして、本発明の態様による構文解析技術を各種の異なるネイティブアプリケーションプログラムで使用するために変換することができる）。「プラットフォーム」４００ｂすなわちこの例示的実施４００のオペレーティングシステム側は、「インクアナライザ」メソッド４０６を含み、このメソッド４０６がアプリケーションプログラム４００ａによって呼び出される。アプリケーションプログラム４００ａは、インクアナライザメソッド４０６を呼び出し、メソッド４０６に分析コンテクストオブジェクト４０４への参照を渡す。インクアナライザメソッド４０６は、パーサ４０８（この例ではこれもプラットフォーム４００ｂの一部）を呼び出し、パーサ４０８は、先に概説したように入力データのレイアウトを分類し、分析する。本発明による例示的実施の動作については、下記の「インクの分析」の項でより詳細に説明する。パーサ４０８が分析と処理とを完了すると、プラットフォーム４００ｂは、図４の矢印４１０で大まかに示すようにアプリケーションプログラム４００ａにデータを送り返して、文書モデル４０２および／または分析コンテクストオブジェクト４０４が、パーサの処理と結果に基づいて各自のデータ構造を再構築できるようにする。
【００５４】
図５に、本発明の少なくとも一部の実施例で、例えば「分析コンテクスト」オブジェクト４０４の一部として、文書モデル４０２として、またはパーサ４０８によって生成および／または出力されるデータ構造として電子文書データを記憶するために使用できるデータ構造の一例を示す。具体的には、図５には例示的な電子文書５００を示す。分析コンテクストオブジェクト５０２として記憶されるか、構文解析を受けると、このデータ構造は、異なるグループ化すなわち「ノード」に分類または配置された各種の文書要素を含むことができる。例えば、図５に示すように、電子文書５００は、３つの電子テキスト段落５０４、５０６、および５０８、１つの電子インク描画５１０、１つの電子インク注釈５１２を含む。図５では、電子文書５００の例示的な分析コンテクストデータ構造５０２を最上位要素のリストとして示す。具体的には、ノード要素５０４（ａ）は電子文書５００の段落５０４に対応し、ノード要素５０６（ａ）は電子文書５００の段落５０６に対応し、ノード要素５０８（ａ）は電子文書５００の段落５０８に対応し、ノード要素５１０（ａ）は電子文書５００のインク描画５１０に対応し、ノード要素５１２（ａ）は電子文書５００のインク注釈５１２に対応する。下記でより詳細に説明するように、このデータ構造には、図５に示す最上位ノード５０４ａ、５０６ａ、５０８ａ、５１０ａ、および５１２ａの親ノードおよび／または子ノードとして追加的なノードを（例えば階層的配置で）記憶することができる。
【００５５】
Ｂ．コンテクストノードおよび階層データ構造  
図６Ａ〜６Ｉに、本発明の一部の実施例による、分析コンテクストオブジェクトなどの電子文書データを構築、分析、および構文解析する際に使用できるコンテクストノードとデータ構造の各種の例を示す。図６Ａには、未分類の電子インクデータ（例えば、まだ構文解析を受けていない、ユーザによって新たに入力されたインク）を記憶するために使用できる例示的データ構造６００を示す。この例示的データ構造６００は、ルートノード６０２（アプリケーションプログラム中の電子文書全体、文書の特定のページ、あるいはアプリケーションプログラムが使用するグループ化など適切あるいは所望のデータのグループ化に対応することができる）を含む。ルートノード６０２は、ページ番号、前のページまたは次のページへのポインタ、余白の位置または大きさなど任意の適切あるいは所望のデータを含むことができる。各ルートノード６０２は、任意数の未分類のインクノード６０４を子ノードとして含むことができ、各未分類のインクノード６０４はさらに任意数の個々のストロークノード６０６を含むことができる（階層構造中の最後のノード（この例ではストロークノード６０６）を本明細書では「葉ノード」とも呼ぶことがある）。（各種図面中の文字「ｎ」は、ゼロを含む任意の数を表すことができる。）データ構造６００の各種ノードは、そのノードに対応する任意の所望または適切なデータを含むことができる。例えば、ストロークノード６０６は、デジタイザの点、または電子インクストロークを識別する他のデータ、ストロークの位置または方向のデータ、ストロークの色データ、ストロークの圧力データ、ストローク入力のタイミングデータ、ストロークＩＤデータを表すデータ、および／または電子インクを受け取ることが可能なシステムおよび方法でストローク情報を記憶する際に使用されるその他の従来のデータまたは有用なデータを含むことができる。同様に、未分類インクノード６０４は、そのノード中に含まれるすべてのストロークの境界（ｂｏｕｎｄｉｎｇ）ボックスサイズ、境界ボックスの位置、入力のタイミング情報、インクの幾何学的情報（例えば凸包（ｃｏｎｖｅｘ  ｈｕｌｌ）の情報）を表すデータ、および／またはノード中に含まれる未分類のインクストロークに関連する他の従来データまたは有用なデータなど、インクまたはノードに関連付けられた任意の所望または適切なデータを含んでよい。あるいは、必要な場合は、ストロークデータは一般に、文書ツリー中の別個のノードとして保存するのではなく、別のノード（例えば単語ノード、表ノードなど）のプロパティとして保存してもよい。
【００５６】
未分類のインクがクラシファイア、レイアウトアナライザ、レコグナイザ、および／または別の構文解析システムに送られると、インクの少なくとも一部分を共に関連付けるか、かつ／または各種の異なるタイプに分類することができ、インクに関連付けられたデータ構造は、そのインクが分類された各種の関連付けとタイプに対応するように変更することができる。図６Ｂに、インクテキストとして分類された電子インクの例示的なデータ構造６１０を示す。当技術分野で知られ、使用されている従来のパーサを含む構文解析技術を使用して、入力された電子インクのストローク（例えばペンダウンイベントから時間的にその後に生じるペンアップイベントの間に収集された、あるいは何らかの他の方式で収集された電子インクデータ）を構文解析し、階層的に記憶することができ、関連する個々のインクストロークは共にまとめてインク単語として記憶することができ、線状に配置されたインク単語は共にまとめてインク行として記憶することができ、関連するインク行は共にまとめてインク段落として記憶することができ、関連する段落は電子文書として（個々のページ部分として、文書全体として、あるいは任意の適切なルートのグループ化で）記憶することができる。このように構文解析され、記憶された電子インクデータに対応する図６Ｂに示す例示的な階層データ構造６１０は、ルートノード６１２を含むことができ、ルートノード６１２は、電子文書全体、ページ、またはアプリケーションプログラムが使用する別のグループ化に対応することができる。各ルートノード６１２は、段落または電子インクストロークの同様のグループ化に対応する任意数のノード６１４を含むことができる。段落ノード６１４は任意数の個々の行ノード６１６を含むことができ、行ノード６１６は任意数の個々のインク単語ノード６１８を含むことができ、単語ノード６１８はさらに、入力された電子インクデータの個々のストロークに対応する任意数の個々のストロークノード６２０を含むことができる。任意選択で、先に指摘したように、ストロークデータは、必要な場合は関連付けられた単語ノードの「プロパティ」として記憶することができる。各種のノード６１２、６１４、６１６、６１８、および６２０は、上述の空間的方向または位置づけのデータおよび／または他の同様データのような、そのノードに含まれる各種の個々のストロークまたはストロークの集合に関連する適切なデータを記憶することができる。
【００５７】
本発明から逸脱せずに、入力電子インクストロークに対応する他のデータタイプおよびデータ構造構成が可能である。例えば、分類、レイアウト分析、またはレコグナイザ技術により、入力された電子インクがインク描画を形成していることを判定することができる。図３に、数個の別個のインクストロークを含む例示的なインク描画３０４を示す。図６Ｃおよび６Ｄに、インク描画に関連すると判定された電子インクデータをグループ化し、記憶するために使用できる階層データ構造の例を示す。図６Ｃに示すように、データ構造６３０は、ルートノード６３２を含む（ノード６３２は、上記のように電子文書全体、電子ページ、あるいは何らかの他のデータのグループ化に対応することができる）。各ルートノード６３２は、任意数の個々のインク描画ノード６３６を含むことができ（例えば、個別の描画ごとに、例えば描画の幅、描画の高さ、描画の位置、境界ボックスのサイズなどに関連するデータを記憶する個々のノードがある）、各インク描画ノード６３６は、任意数の個々のインクストロークノード６３８（描画を構成する個々のインクストロークに対応する）を含むことができる。任意選択で、インクストロークデータは、そのデータに対応するインク描画ノード（または他のノード）の「プロパティ」として記憶してもよい。
【００５８】
図６Ｄに、１つまたは複数のインク描画を含む電子文書の代替のデータ構造６３０ａを示す。この例では、電子文書またはページまたはその他のデータのグループ化（ルートノード６３２ａで表す）は、電子インク描画の１つまたは複数のグループ（ノード６３４ａで表す）を含むことができ、それら描画のデータは共に関連付けられ、図６Ｃとの関連で説明した階層的な形で記憶される。（例えば、電子文書全体（ルートノード６３２ａで表す）は、数個の個別のページ（それぞれグループノード６３４ａで表す）を含むことができ、各個々のページは、１つまたは複数の個別のインク描画（それぞれインク描画ノード６３６ａで表す）を含むことができ、各個別のインク描画は、１つまたは複数の個別のインクストローク（それぞれストロークノード６３８ａで表されるか、またはインク描画ノードのプロパティにある）を含むことができる。）。グループとインク描画とはどちらも同じルートノードまたは任意のグループノードの子であってよいことに留意されたい。また、必要な場合は、グループノードが追加的なグループノードを含んでもよい。言うまでもなく、本発明から逸脱することなく、電子インク描画を記憶するためのさらに他の適切なデータ構造を使用することができる。
【００５９】
ただし、階層データ構造は、入力された電子インクデータに使用することに限定されない。（例えばキーボードから）入力されたタイプ入力テキストも、各種のグループとして関連付け、階層データ構造で記憶することができる。図６Ｅに、そのようなデータ構造６４０の一例を示す。このデータ構造６４０は、ルートノード６４２（上述のルートノードと同様）を含むことができる。各ルートノード６４２は、任意数のテキスト段落ノード６４４（テキストの段落に対応する）を含むことができ、各段落ノード６４４は、任意数のテキスト行ノード６４６（あるいはテキスト文ノード）を含むことができ、各行ノード６４６はさらに任意数の個々のテキスト単語ノード６４８を含むことができる。必要な場合は、本発明から逸脱することなく、テキスト単語をさらに個々のテキスト文字ノードに区分することができ、さらに、個々の文字構成要素ノード（例えば各文字のベースライン、セリフ（ｓｅｒｉｆ）、アゼンダ（ａｓｃｅｎｄｅｒ）、ディゼンダ（ｄｅｓｃｅｎｄｅｒ）等の構成要素に関連する）に区分することができる。各種のノードは、段落、行、または単語の空間的位置、内容、サイズなど、ページの余白、余白の大きさあるいは位置、ページ数など、テキストに関連する適切なデータを含むことができる。
【００６０】
図６Ａ〜６Ｅとの関連で上述した各種のデータ構造は、電子インクデータだけ、または電子的なタイプ入力テキストデータだけを排他的に含むデータ構造の例である。本発明から逸脱せずに、構文解析技術を使用して単一のデータ構造中にあるそれら異なるデータタイプを分析、組合せ、関連付け、およびグループ化することができる。図６Ｆに、電子文書またはその一部（ルートノード６５２で表す）が１つまたは複数の個々の段落（段落ノード６５４で表す）と１つまたは複数の個々の行（行ノード６５６で表す）を含む例示的データ構造６５０を示す。行は、可能性としては、タイプ入力されたテキスト（テキスト単語ノード６５８で表す）と電子インクテキスト（インク単語ノード６６０とインクストロークノード６６２で表す）との両方を含む可能性がある。各個々の段落ノード、行ノード、および単語ノード（タイプ入力テキストとインク単語の両方）は、その段落、行、および単語の内容に応じて、独立した該当データを含む。これに加えて、またはこの代わりに、本発明から逸脱することなく、個々の単語がさらにインク文字とタイプ入力文字との両方を含んでもよい。
【００６１】
本発明から逸脱することなく、電子文書のデータ構造（階層データ構造を含む）にはこの他の電子データも含めることができる。例えば、図６Ｇのデータ構造６６４に示すように、電子文書のデータ構造には画像データ（デジタル写真、グラフィック情報など）を含めることができる。この例に示すように、データ構造６６４は、１つまたは複数の個々のデータのグループ化（グループノード６６８で表す）を含んでいる電子文書またはその一部（ルートノード６６６で表す）を含む。この例の各データのグループ化はさらに、図６Ｅおよび６Ｆに関連して上記で概説したように、電子画像（画像ノード６７０で表す）とタイプ入力テキスト（段落ノード６７２、行ノード６７４、およびテキスト単語ノード６７６で表す）とを含むことができる。言うまでもなく、図６Ｇに示すようなデータ構造は、本発明から逸脱することなく、電子インクデータ（例えば図６Ａから６Ｄに示すようなデータ構造）、あるいはその他の所望のデータタイプも含むことができる。
【００６２】
図６Ｈに、本発明の少なくとも一部の実施例で使用できる別の可能なデータ構造６８０の一例を示す。具体的には、図６Ｈのデータ構造６８０は、１つまたは複数のリスト（リストノード６８４によって表す）を含んでいる電子文書またはその一部分（ルートノード６８２で表す）に対応する。電子文書中のリストは、任意数の個々のリスト項目（リスト項目ノード６８６で表す）を含むことができ、各リスト項目は、各種の幅広いタイプの電子情報を含むことができる。例えば、あるリスト項目は、任意選択でリストの中黒（ｂｕｌｌｅｔ）を含むことができ、リストの中黒は、タイプ入力された中黒または電子インクの中黒からなることができる（１つまたは複数の対応するインクストロークノード６９０を含むインク中黒ノード６８８を図６Ｈの例に示す）。また、各リスト項目は、任意で、１つまたは複数の電子インク段落（ノードチェーン６９２で表す）、１つまたは複数のインク描画（ノードチェーン６９４で表す）、および／または１つまたは複数のタイプ入力段落（ノードチェーン６９６で表す）を含むことができる。これに加えて（またはこの代わりに）、各リスト項目は、任意選択で、１つまたは複数の画像（画像ノード６９８で表す）および／または、図６Ｄおよび６Ｇとの関係で上述したグループ化などの１つまたは複数のデータのグループ化（グループノードチェーン７００で表す）を含んでもよい。各種のノードおよび／またはノードチェーン６９２、６９４、６９６、６９８、７００は、図６Ａから６Ｇに示す例示的データ構造とそれらデータ構造のサブセットおよび／またはグループ化に概ね対応することができるので、これ以上の説明は省略する。必要な場合は、少なくとも一部の事例では、個々のリスト項目ノード６８６がそれ自体で、図６Ｈに示すようなデータ構造のリストを含んでもよい。
【００６３】
図６Ｉに、本発明の少なくとも一部の実施例で使用することが可能な別の例示的データ構造７１０を示す。この例示的データ構造７１０は、表として分析され、共に関連付けられ、グループ化され、記憶された電子データに対応する。この図の例では、各電子文書またはその一部（ルートノード７１２で表す）は、１つまたは複数の表（表ノード７１４で表す）を含むことができる。この例の表は、１つまたは複数の情報の行（行ノード７１６で表す）からなることができ、すべての行は、１つまたは複数の個々のセル（セルノード７１８で表す）からなることができる。個々のセルは、例えば上述の各種のデータ構造などの１つまたは複数のデータ構造を含むことができる。図の例では、個々の表セルは、可能性としては任意数の画像（画像ノード７２０で表す）、任意数のタイプ入力テキスト段落（ノードチェーン７２２で表す）、任意数のグループ化（ノードチェーン７２４で表す）、任意数のインク描画（ノードチェーン７２６で表す）、任意数の追加的な表（ノードチェーン７２８で表す）、および任意数のリスト（ノードチェーン７３０で表す）を含むものと図示している。言うまでもなく、本発明から逸脱することなく、上述の各種の特定のデータ構造および／または上述のようなデータ構造の組合せおよびサブセットなど、任意の他の適切なあるいは所望のデータ構造を表に含めてよい。
【００６４】
各種の異なるノードには、上述の各種タイプのデータを含む任意の適切なまたは所望のデータを記憶することができる。注釈に関連するデータの処理で使用するために、本発明の少なくとも一部の実施例では、各種のノードが任意で電子文書中のノードの空間的位置、方向、または場所に関連するデータを記憶すると有用である場合がある。これは、空間情報が電子文書のデータ構造中の他のノードに関連するか、またはリンクするからである。
【００６５】
また、本発明から逸脱することなく、他のタイプのパーサ、クラシファイア、および／またはレコグナイザ、およびデータタイプを使用することができる。例えば、本発明から逸脱することなく、レコグナイザを使用して、電気記号または電子記号（例えば抵抗、電圧源、コンデンサなど）、音楽記号、数学記号、フローチャートの要素、円グラフの要素などを分析、認識、グループ化、および／または関連付けることができる。
【００６６】
図６Ａから６Ｉに示すデータ構造は、本発明の態様で使用することが可能な各種のデータ構造の例に過ぎない。当業者には、使用する特定のデータ構造は、本発明から逸脱せずに幅広く異なってよいことが理解されよう。例えば、本発明から逸脱することなく、異なるレイアウトのグループ化を表す異なるノードを使用することができ、追加的なノードタイプを追加することができ、あるいはここで説明するノードタイプの一部を省略することができる（例えば表のデータ構造で行ノードの代わりに列ノードを使用してよい）。また、上記の説明は、ページ上で文字が左から右、そして上から下に読まれる言語とテキストの表現に使用するために最適化されている。本発明から逸脱することなく、他の言語および文字の配置に使用するために設計され、それらに対応するデータ構造、例えば、右から左、上から下、下から上、およびそれらの組合せで読まれる、かつ／または書かれる言語に対応するデータ構造を使用することができる。また、必要な場合は（特にアジアの言語など一部の言語の場合）、ストロークを適切に文字としてグループ化し、次いで上述した中間的な「単語ノード」を使用せずに文字を行にグループ化することができる。別の代替例として、行ノードの使用を省略し、単語ノードを段落および／またはその他の所望のグループ化に共にグループ化することができる。例えば特定の言語の特徴に対応するための上記およびその他のデータ構造の変形例を、本発明から逸脱することなく使用することができる。
【００６７】
Ｃ．本発明の態様の注釈への適用  
上述のコンテクストノードおよび階層データ構造の使用を含む本発明の諸態様を使用して、電子文書中に「スマートな」電子インク注釈を提供することができる。上述のように、ペン方式のコンピューティングシステムの望ましく有用な使用法の１つは、電子文書に注釈を付すことである。ただし、特に有用かつ効果的になるように、基礎となる文書の各種要素に関連付けられた特性が何らの理由（例えば余白の変更、表示サイズの変更、フォントの変更、情報の追加、情報の削除など）で変化した場合に、注釈が、基礎となる文書中の注釈が付された要素への変更に基づいて正確に位置および／または他の特徴を変えることができるように、ペン方式のコンピューティングシステムで文書に電子インクで付される注釈は、十分な柔軟性がなければならない。これは、例えば、注釈に関連付けられた少なくとも１つのコンテクストノードを、基礎文書に関連付けられた１つまたは複数のコンテクストノードにリンクすることによって実現することができる。少なくとも一部の事例では、１つまたは複数の文書要素の空間的属性、位置、および／または場所に関連するデータなど、基礎となる文書に関連付けられ、基礎となる文書と関連して記憶されたデータおよび／または特徴を使用して、注釈の場所、外観、および／またはその他の特性をコントロールすることができる。
【００６８】
図７Ａおよび７Ｂに、電子インクを介して電子文書に適用することが可能な注釈の一例を示す。図７Ａに示すように、電子文書７５０は、文「Ｔｏｄａｙ  ｔｈｅ  ｓｋｙ  ｉｓ  ｇｒｅｅｎ．」を含んでいる。ペン方式のコンピューティングシステムのユーザは、電子インクを使用して単語「ｇｒｅｅｎ」に下線を引く（この下線の注釈を参照符号７５２で示す）ことによりこの文書７５０に注釈を付している。図７Ｂに、この混成電子文書７５０に対応する例示的な階層データ構造７６０を示す（電子文書７５０全体をルートノード７６２によりデータ構造７６０中に表す）。完全に構文解析されると、データ構造７６０は、文書構造全体を示す複数のコンテクストノードを含む。具体的には、電子文書７５０中のタイプ入力テキストに関連する情報が分析され、共に関連付けられて、電子文書７５０が１つの段落（段落ノード７６４）を含み、その段落が行（行ノード７６６）を含み、その行に５つの単語（単語「Ｔｏｄａｙ」、「ｔｈｅ」、「ｓｋｙ」、「ｉｓ」、「ｇｒｅｅｎ」それぞれに１つのテキスト単語ノード７６８ａ〜７６８ｅがある）が含まれることを示す。また、パーサは、注釈７５２に関連するデータが電子文書７５０中に存在することに気づき、そのデータを電子インク描画（インク描画ノード７７０）として分類する。また、パーサは、基礎文書７５０中におけるタイプ入力テキストに対するインク描画ストロークの場所と位置に基づいて注釈を「下線」の注釈として認識および分類し、下線ノード７７２を生成する。また、パーサは、下線の注釈の実際のインクストロークに対応するすべてのストロークデータを１つまたは複数のストローク葉ノード７７４に格納する（オプションで、ストロークデータを、下線ノード７７２または他の適当なノードのプロパティとして記憶してもよい）。
【００６９】
また、単語「ｇｒｅｅｎ」が（例えば何らかの理由で単語が移動する場合など）電子文書７５０中のどこに現れても電子インクの下線ストローク７５２をこの１つの単語「ｇｒｅｅｎ」と共に維持するために、この例のデータ構造中７６０に、図７Ｂに矢印７７６で表すように下線ノード７７２（例えばこのリンク例の「起点」コンテクストノード）が単語「ｇｒｅｅｎ」のテキスト単語ノード７６８ｅ（この例の「宛先コンテクスト」ノード）にリンクされていることを表すデータを保存し、また、矢印７７８で示すようにテキスト単語ノード７６８ｅが下線ノード７７２からリンクされていることを表すデータを保存する。このリンクにより、下線ノード７７２がテキスト単語ノード７６８ｅに「固定」される（例えば「固定」タイプのリンク）。したがって、テキスト単語ノード７６８ｅに記憶されたデータが何らかの理由で、単語「ｇｒｅｅｎ」の位置が電子文書中で変化したことを示す場合、リンク７７６および７７８により、アプリケーションプログラムは、可能な場合は、下線注釈のレンダリングを変化後の電子文書中のテキスト単語ノード７６８ｅの場所および／または空間的位置に移動すべきことを検出することができる。別の例として、テキスト単語ノード７６８ｅに記憶された「境界ボックス」データ、単語の幅のデータ、または他のデータが、何らかの理由による単語のサイズまたは位置の変化（例えばフォントサイズの変更、文字の追加、文字の削除、文字の変更などによる）を示す場合、アプリケーションプログラムは、可能である場合は、レンダリングされた下線のサイズを修正し（例えば延長するか、切り詰める）て、テキスト単語ノード７６８ｅによって表されるテキスト単語に関連付けられた新しいサイズに対応させることができる。適用可能な場合、本発明の少なくとも一部の実施例によるシステムおよび方法は、注釈を付された文書要素が基礎となる文書の変更により複数の行に現れた（例えば単語の追加やハイフネーションなどによる）場合には、複数の行に現れるように注釈のストロークを分割することができる。また、本発明から逸脱せずに、ノード間の適切なリンク構成、またはリンクを表す適切なデータを使用することができる。
【００７０】
図８Ａおよび８Ｂに別の注釈例を示す。この例では、図８Ａに示すように、電子文書８００はこの場合も文「Ｔｏｄａｙ  ｔｈｅ  ｓｋｙ  ｉｓ  ｇｒｅｅｎ．」を含むが、この例では、ペン方式のコンピューティングシステムのユーザは、電子インクを使用して単語「ｇｒｅｅｎ」に線を引いて取り消す（この削除を参照符号８０２で示す）ことによって文書８００に注釈を付している。図８Ｂに、完全に構文解析された後のこの混成電子文書８００に対応する例示的階層データ構造８１０を示す（図８Ｂの大部分の具体的なコンテクストノードは図７Ｂのコンテクストノードに対応するので、図７Ｂと同じ参照符号を図８Ｂで用い、重複する説明は省略する）。この例では、パーサは、電子文書８００中に注釈８０２に関連するデータが存在することに気づき、そのデータを電子インク描画（インク描画ノード８１２）に分類する。また、電子文書８００中の基礎となるタイプ入力テキストの内容に対するインク描画ストロークの場所と位置（例えば線による削除がテキスト単語上に水平方向にわたっていること）に基づいて、パーサは、この注釈を「削除」の注釈として認識および分類し、削除ノード８１４を生成する。また、パーサは、削除注釈の実際のインクストロークに対応するすべてのストロークデータを１つまたは複数のストローク葉ノード８１６（あるいは、削除ノード８１４または別の適切なノードのプロパティ）に記憶する。
【００７１】
図７Ａおよび７Ｂとの関係で説明した下線の注釈の場合と同様に、削除の注釈は、単語「ｇｒｅｅｎ」が何らかの理由で移動した場合でも、この単独の単語「ｇｒｅｅｎ」と共に保持することができる。この場合も、このような保持は、例えば図８Ｂの矢印８１８で示すように削除ノード８１４（この例の「起点」コンテクストノード）が単語「ｇｒｅｅｎ」のテキスト単語ノード７６８ｅ（この例の「宛先」コンテクストノード）にリンクされていることを示すデータをデータ構造８１０中に保存し、また、矢印８２０で示すようにテキスト単語ノード７６８ｅが削除ノード８１４からリンクされていることを示すデータをデータ構造に保存することによって実現することができる。この例のリンクタイプは、削除ノード８１４をテキスト単語ノード７６８ｅに固定する「横方向にわたる」リンクタイプである。したがって、テキスト単語ノード７６８ｅに記憶されたデータが何らかの理由で、単語「ｇｒｅｅｎ」（またはテキスト単語ノード７６８ｅに関連付けられた他の単語）の位置および／またはサイズが電子文書８００中で変化したと示す場合、リンク８１８および８２０により、アプリケーションプログラムは、可能である場合は変化後の電子文書中のテキスト単語ノード７６８ｅに記憶された単語の場所、空間的位置、および／またはサイズに合わせて削除のレンダリングを調整するか、かつ／または（可能な場合）そのサイズを変更すべきことを検出することができる。ここでも、本発明から逸脱することなく、ノード間の適切なリンク構成、またはリンクを表す適切なデータを使用することができる。
【００７２】
図９Ａおよび９Ｂに注釈タイプの別の例を示し、さらに２つ以上のテキスト単語との関連付けまたは注釈のリンクを説明している。図９Ａおよび９Ｂに示す例でも電子文書９００は文「Ｔｏｄａｙ  ｔｈｅ  ｓｋｙ  ｉｓ  ｇｒｅｅｎ．」を含むが、この例では、ペン方式のコンピューティングシステムのユーザは、電子インクを使用して単語「ｉｓ  ｇｒｅｅｎ」を円で囲む（この円あるいは「囲み」タイプの注釈を図９Ａでは参照符号９０２で示す）ことにより電子文書９００に注釈を付している。図９Ｂは、完全に構文解析された後のこの混成電子文書９００に対応する例示的な階層データ構造９１０を示す（図９Ｂの大部分の具体的なコンテクストノードは図７Ｂにあるコンテクストノードに対応するので、図７Ｂと同じ参照符号を図９Ｂで使用し、重複する説明は省略する）。この例でも、パーサは、注釈９０２に関連するデータが電子文書９００中に存在することに気づき、このデータを電子インク描画（インク描画ノード９１２）として分類する。また、電子文書９００中の基礎となるタイプ入力テキストの内容に対するインク描画ストロークの場所と位置に基づいて、パーサは、この注釈を「囲み」注釈として認識および分類し、データ構造９１０中にインク囲みノード９１４を生成する。また、パーサは、囲み注釈の実際のインクストロークに対応するすべてのストロークデータを１つまたは複数のストローク葉ノード９１６に（あるいはインク囲みノードまたは他の適切なノードのプロパティとして）記憶する。
【００７３】
図７Ａ〜８Ｂとの関係で説明した下線および削除の注釈の場合と同様に、囲み注釈も単語「ｉｓ  ｇｒｅｅｎ」が何らかの理由で移動した場合でも単語「ｉｓ  ｇｒｅｅｎ」と共に保持することができる。この場合も、このような保持は、例えば、図９Ｂで矢印９１８ａおよび９１８ｂで表すようにインク囲みノード９１４（この例の「起点」コンテクストノード）が単語「ｉｓ  ｇｒｅｅｎ」のテキスト単語ノード７６８ｄおよび７６８ｅ（この例の「宛先」コンテクストノード）それぞれにリンクされていることを示すデータをデータ構造９１０中に保存することによって実現することができる。また、図９Ｂの矢印９２０ａおよび９２０ｂで表すように、テキスト単語ノード７６８ｄおよび７６８ｅが囲みノード９１４からリンクされていることを示すデータをデータ構造９１０に保存することができる。このリンクは、「包含」タイプのリンクである。したがって、テキスト単語ノード７６８ｄおよび７６８ｅに記憶されているデータが何らかの理由で、単語「ｉｓ  ｇｒｅｅｎ」（またはそれらのコンテクストノードに関連付けられた他の単語）の位置および／またはサイズが電子文書９００中で変化したと示す場合、リンク９１８ａ、９１８ｂ、９２０ａ、および９２０ｂにより、アプリケーションプログラムは、可能な場合には、変化後の電子文書中のコンテクストノード７６８ｄおよび７６８ｅに記憶された単語の場所、空間的位置、および／またはサイズに合わせて、囲み注釈のレンダリングおよび／またはそのサイズを調整すべきことを検出することができる。また、ユーザが単語「ｉｓ」と「ｇｒｅｅｎ」との間に単語を追加した場合、あるいは何らかの形で単語または文字が削除または変更された場合、アプリケーションプログラムは、囲み注釈のサイズおよび／または位置を変更してそれらの変化に対応することができる。ここでも、本発明から逸脱せずに、他のリンク構成またはリンクを表すデータを記憶することができる。
【００７４】
図１０Ａおよび１０Ｂに、よく使用される別のタイプの注釈、具体的には「余白コメント」タイプの注釈を示す。この例では、図１０Ａに示すように、ユーザは、「ｉｔ'ｓ  ｎｏｔ  ｇｒｅｅｎ！」という電子インクの余白コメント１００２で文「Ｔｏｄａｙ  ｔｈｅ  ｓｋｙ  ｉｓ  ｇｒｅｅｎ．」を含む電子文書１０００に注釈を付している。特に、この例では、図１０Ｂに示すように、タイプ入力テキストに関連付けられたデータ構造１０１０は、このテキストが電子文書１０００中で２行にわたって（図７Ａ、８Ａ、９Ａのように一行ではなく）存在するために変化している。したがって、データ構造１０１０は、２つの行ノード１０１２および１０１４を有し、第１の行ノード１０１２は、テキスト単語ノード７６８ａおよび７６８ｂ（単語「Ｔｏｄａｙ」と「ｔｈｅ」に関連付けられている）を含み、第２の行ノード１０１４は、テキスト単語ノード７６８ｃ、７６８ｄ、および７６８ｅ（単語「ｓｋｙ」、「ｉｓ」、「ｇｒｅｅｎ」に関連付けられている）を含む。
【００７５】
この混成電子文書１０００を完全に構文解析すると、パーサは、注釈１００２が電子インクテキストを含んでいることを認識し、この注釈を（電子文書１０００の余白内に位置することから）「余白コメント」タイプの注釈に分類する。したがって、パーサは、余白コメントのための適切な余白コメントノード１０１６を生成する。この余白コメント１００２は電子インクテキストしか含んでいないので、パーサはさらに、この電子インクの階層構造に関連付けられた段落ノード１０１８、２つの行ノード１０２０および１０２２、適切なインク単語ノード１０２４、１０２６、１０２８、およびストロークノード１０３０、１０３２、および１０３４を生成する（先に述べたように、任意で、あるいはこれに代えて、インクストロークデータはインク単語ノードのプロパティとして記憶してもよく、かつ／またはデータ構造１０１０から行ノードを省略してもよい）。
【００７６】
図１０Ａおよび１０Ｂの例には上記と異なるリンク関係を示す。具体的には、この例では、ページの余白と基礎となる文書の内容とに対する余白コメント１００２の場所と方向とに基づいて、パーサは、図１０Ｂの矢印１０３６で表すように、余白コメント１００２に関連付けられた段落ノード１０１８（この例の「起点」コンテクストノード）が、タイプ入力テキストに関連付けられた段落ノード７６４（この例の「宛先」コンテクストノード）にリンクされていることを示すデータをデータ構造１０１０に保存する。また、パーサは、矢印１０３８で示すように、タイプ入力テキストに関連付けられた段落ノード７６４が余白コメント１００２の段落ノード１０１８によってリンクされていることを示すデータをデータ構造１０１０に保存する。これは、インク段落がテキスト段落に固定された「固定」タイプのリンク構成である。このようにして、電子文書１０００中でタイプ入力された段落がどこに移動しても、また任意で、段落に追加的な行および／または単語が追加される、かつ／または段落から行および／または単語が削除される、かつ／または段落内または電子文書１０００内でその他の変更が行われた場合でも、アプリケーションプログラムは、リンク１０３６および１０３８により、可能である場合はリンクされたタイプ入力段落に隣接する余白中に留まるように余白コメント１００２を移動すべきことを検出することができる。言うまでもなく、本発明から逸脱せずに、この他のリンク構成またはリンクに関連付けられたデータを記憶することができる。例えば、余白コメントノード１０１６を、第１のテキスト単語ノード７６８ａなど、タイプ入力段落の１つまたは複数の個々のテキスト単語ノードにリンクすることができる。
【００７７】
図１１Ａおよび１１Ｂに、本発明の少なくとも一部の実施例によるシステムおよび方法で認識することが可能な注釈のやや複雑な例を示す。図の例では、電子文書１１００はこの場合もフレーズ「Ｔｏｄａｙ  ｔｈｅ  ｓｋｙ  ｉｓ  ｇｒｅｅｎ．」を含むが、ユーザは、異なる注釈タイプの組合せを使用して電子文書１１００に注釈を付している。具体的には、ユーザは、単語「ｇｒｅｅｎ」を囲む囲みタイプの注釈１１０２、電子インクの単語「Ｂｌｕｅ！」を含む余白コメントタイプの注釈１１０４、および、囲みタイプの注釈１１０２から余白コメント注釈１１０４に向かう連結タイプの注釈１１０６（例えばこの例の矢印）を描いている。
【００７８】
基礎となる文書、タイプ入力された文書テキスト、および文書の余白に対するこれら各種の注釈タイプの相対的な位置と空間的方向のために、本発明の少なくとも一部の実施例によるパーサシステムは、これら各種の注釈タイプ、それら注釈の内容、注釈タイプ相互の関係および注釈タイプと電子文書のタイプ入力テキストとの関係を上記で概説したように認識する。パーサによって生成される電子文書１１００の例示的な階層データ構造１１１０を図１１Ｂに示す。タイプ入力テキストの階層構造は図７Ｂと同じなので、図１１Ｂのこの構造でも図７Ｂと同じ参照符号を用い、詳細な説明は省略する。また、図１１Ｂに示すようにインク囲みタイプの注釈１１０２のノードチェーン１１１２は図９Ｂのノードチェーンと同様であり、余白コメントタイプの注釈１１０４のノードチェーン１１１４は図１０Ｂのノードチェーンと同様である。そのため、これらのノードチェーンの詳細な説明はここに含めない。
【００７９】
基礎テキストの該当部分および空間的位置と共に注釈の空間的位置を維持するために、注釈ノード間の各種リンクおよび適切なテキストノードとの各種リンクがパーサによって提供され、データ構造１１１０に記憶される。図の例では、図１１Ｂの矢印１１１８で表すように、インク囲みノード１１１６（この例の「起点」コンテクストノード）は、その囲みに含まれる単語のテキスト単語ノード７６８ｅ（この例では単語「ｇｒｅｅｎ」に対応する「宛先」ノード）にリンクされている。同様に、図１１Ｂの矢印１１２０で表すようにテキスト単語ノード７６８ｅがインク囲みノード１１１６からリンクされていることを示すデータがデータ構造１１１０に記憶される。これは「囲み」タイプのリンク構成である。
【００８０】
上述のように、本発明のこの例によるパーサはさらに、電子文書１１００が、インク連結に対応する連結注釈１１０６（すなわちこの例の囲み注釈１１０２と余白コメント注釈１１０４を結ぶ矢印）を含んでいることを認識する。この連結注釈１１０６は、データ構造１１１０中にインク描画（インク描画ノード１１２２で表す）として記憶され、インク描画ノードは注釈タイプを表すノード（この例のインク連結ノード１１２４）を含み、インク連結ノード１２２４はさらに、連結を構成するストロークを表すデータを（ストロークノード１１２６中か、またはインク連結ノード１１２４（または他の適切なノード）に関連付けられたプロパティ中に）含む。さらに、インク連結ノード１１２４（この例の「宛先」ノード）がインク囲みノード１１１６（この例の「起点」ノード）からポイントされていることを示す情報がデータ構造１１１０中に記憶される。このリンク（「被ポイント」タイプのリンク）を図１１Ｂでは矢印１１２８で表す。また、データ構造１１１０はさらに、インク連結ノード１１２４（この例の「起点」コンテクストノード）がインク単語ノード１１３２（この例の「宛先」コンテクストノード）にリンクされていることを示すデータを含む。このリンク（「ポイント起点」タイプのリンク）を図１１Ｂの矢印１１３４で表す。あるいは、本発明から逸脱せずに、インク連結ノード１１２４は、ノードチェーン１１１４のインク行ノード、インク段落ノード、あるいは余白コメントノードのいずれか１つとリンクしてもよい。上述の特定のリンクでは、図１１Ａに示すように、データ構造１１１０は、連結注釈１１０６が囲み注釈１１０２からポイントしており、インク単語をポイントしていることを示す。これらの各種リンクにより、アプリケーションプログラムは、基礎となる文書と各種の注釈コンポーネントとの関連付けを検出することができる。したがって、可能な場合、アプリケーションプログラムは、基礎となる文書中の移動に正しく対応するように注釈要素を移動することができる。本発明から逸脱せずに、適切なリンク構成またはリンクに関連付けられたデータを使用することができる。
【００８１】
図１２Ａおよび１２Ｂに、一般的に使用される注釈要素の別の例を示す。この例でも図１２Ａに示すように電子文書１２００は文「Ｔｏｄａｙ  ｔｈｅ  ｓｋｙ  ｉｓ  ｇｒｅｅｎ．」を含むが、この例では、ペン方式のコンピューティングシステムのユーザは、電子インクを使用して文の最初の単語の近くに星印あるいはアステリスク（この注釈を参照符号１２０２で示す）を配置することにより文書１２００に注釈を付している。図１２Ｂに、完全に構文解析された後のこの混成電子文書１２００に対応する階層データ構造１２１０の例を示す（図１２Ｂの大部分のコンテクストノードは図７Ｂのコンテクストノードに対応するので図１２Ｂでは図７Ｂと同じ参照符号を使用し、重複する説明は省く）。この例では、パーサは、注釈に関連する電子インクデータの存在に気づき、そのデータをインク描画（インク描画ノード１２１２）として分類する。また、インクストロークの形状と、基礎文書である電子文書１２００の内容に対する注釈１２０２のストロークの場所と位置（例えばタイプ入力テキストの行の横）に基づいて、パーサは、この注釈を「アステリスク」、「中黒」、または固定タイプの注釈と認識し、アステリスクノード１２１４を生成する。また、パーサは、アステリスクの実際のインクストロークに対応するすべてのストロークデータを、１つまたは複数のストローク葉ノード１２１６またはアステリスクノード（または何らかの他のノード）のプロパティ中に記憶する。
【００８２】
この例では、アステリスクタイプの注釈１２０２は、タイプ入力テキストが何らかの理由で移動した場合にタイプ入力テキストの行が電子文書１２００のどこに現れてもこの行全体と共に保持することができる。これは、例えば、図１２Ｂの矢印１２１８で表すようにアステリスクノード１２１４（この例の「起点」コンテクストノード）がテキスト行ノード７６６（この例の「宛先」ノード）にリンクされていることを示すデータをデータ構造１２１０に保存し、また、矢印１２２０で表すようにテキスト行ノード７６６がアステリスクノード１２１４によってリンクされていることを示すデータを保存することによって実現することができる。したがって、テキスト行ノード７６６に記憶されたデータが何らかの理由で、その行の位置または場所が電子文書１２００中で変化したことを示す場合、リンク１２１８および１２２０により、アプリケーションプログラムは、それが可能である場合にはアステリスクのレンダリングを変化後の電子文書中でテキスト行ノード７６６に関連付けられたデータのレンダリングに対応する場所および／または空間的位置に合わせて調整すべきことを検出することができる。あるいは、必要な場合は、本発明から逸脱せずに、パーサは、アステリスクノード１２１４（またはアステリスク注釈に関連付けられた他の適当なノード）を段落ノード７６４または個々の単語ノードの１つ（例えば単語ノード７６８ａ）に結び付けてもよい。また、必要な場合は、インク描画ノード１２１２を、テキスト行ノード７６６（またはこの例でタイプ入力テキストに対応する他の適当なノード）に固定された起点ノードとしてもよい。本発明から逸脱せずに、この他の適切なリンク構成またはリンクを表すデータを使用することができる。
【００８３】
図１３Ａおよび１３Ｂに、「フローチャート」タイプのリンクされた注釈を示す。この例では、電子文書１３００はフローチャートを含み、このフローチャートは、任意でより大きな電子文書全体中の注釈の一部分として含めることができる。図１３Ａに示すように、この注釈あるいはフローチャートは、第１の囲み注釈１３０４の中に取り囲まれた、あるいは囲まれた第１のインク項目１３０２（この例の文字「Ａ」）と、第２の囲み注釈１３０８で取り囲まれた、あるいは囲まれた第２のインク項目１３０６を含んでいる。また、連結注釈１３１０（この例の矢印）が、第１の囲み注釈１３０４から第２の囲み注釈１３０８に延びている。ただし、文書要素間の関係は、リンク以外の代替の形で表せることを理解されたい。例えば、これらの関係は、例えば関連付けられた文書要素を含む囲みノードを使用することによりデータツリー自体の構造中に表すことができる。
【００８４】
図１３Ｂに、完全に構文解析された後の図１３Ａの電子文書１３００のフローチャート注釈に関連付けることが可能な例示的データ構造１３２０を示す。この例示的データ構造１３２０では、電子文書１３００のすべてまたは一部に対応することが可能なルートノード１３２２が、フローチャートタイプ注釈に含まれるノードの親ノードとして提供される。この特定の注釈構造に関連する第１のコンテクストノードは、囲み注釈１３０４に対応するインク描画ノード１３２４である。インク囲みノード１３２６がインク描画ノード１３２４の子ノードとして提供され、囲み注釈１３０４に関連付けられた特定のストロークが葉ノード１３２８に記憶されるか、または囲みノード１３２６（または他のノード）のプロパティとして記憶される。
【００８５】
図１３Ａとの関連で述べたように、この注釈はさらに、文字「Ａ」１３０２に対応する電子インクテキストを含んでいる。上述の他の電子インクテキストと同じく、このインクテキストに関連付けられた電子インクは階層データ構造１３２０中に段落ノード１３３０として記憶され、段落ノード１３３０は行ノード１３３２を含み、行ノード１３３２はインク単語ノード１３３４を含み、インク単語ノード１３３４は任意でインクテキスト注釈中の個々のストロークに対応する１つまたは複数の葉ノード１３３６か、またはストロークデータを含むプロパティを含む。データ構造１３２０中に記憶された情報は、図１３Ｂの矢印１３３８で表すように囲み注釈１３０４のインク囲みノード１３２６（「起点」ノード）が、文字「Ａ」の段落ノード１３３０（「宛先」コンテクストノード）にリンクされていることを示す。あるいは、必要な場合は、インク単語ノード１３３４または行ノード１３３２が宛先ノードの役割を果たしてもよい。また、データ構造１３２０に記憶された情報は、図１３Ｂの矢印１３４０で表すように段落ノード１３３０がインク囲みノード１３２６からリンクされていることも示す。この例の注釈の囲み注釈１３０８および文字「Ｂ」１３０６のデータ構造は、同じ概略的なリンク構造を含めて囲み注釈１３０４および文字「Ａ」１３０２と同じ概略的構造を共有するので、文字「Ｂ」１３０６とそれに関連付けられた囲み注釈１３０８のデータ構造１３２０中の各種ノードには、文字「Ａ」とその囲みに関連付けられた参照符号と同じ参照符号を用いるが、図１３Ｂの囲み注釈１３０８とインク項目１３０６の参照符号の後には文字「ｂ」をつけている。言うまでもなく、本発明から逸脱することなく、各種の階層的構成およびリンク構造またはリンクデータは上記で具体的に述べたものと異なってよい。
【００８６】
この注釈はさらに、データ構造１３２０中でインク描画ノード１３４２によって表す連結注釈１３１０も含む。図１１Ｂとの関連で上述したように、インク連結注釈を表すインク描画のデータ構造はさらにインク連結ノード１３４４を含むことができ、インク連結ノード１３４４はさらに、連結注釈１３１０を構成する特定のストロークに関連付けられたデータを含む１つまたは複数のプロパティまたは葉ノード１３４６を含むことができる。この例の注釈データ構造を完全なものにするために、連結注釈１３１０（起点ノード）に関連付けられたデータを、２つの囲み注釈１３０４および１３０８（宛先ノード）に関連付けられたデータにリンクする。具体的には、図１３Ｂの例に示すように、インク囲みノード１３２６が「ポイント起点型」の注釈タイプとしてインク連結ノード１３４４にリンクされている（矢印１３４８で表す）ことを示す情報をデータ構造１３２０中に記憶する。また、インク連結ノード１３４４が、「被ポイント型」の注釈タイプとしてインク囲みノード１３２６ｂにリンクされている（矢印１３５２で表す）ことを示す情報をデータ構造１３２０中に記憶する。このように、図１３Ａに示すように、リンクに関連して記憶されたデータが、連結注釈１３１０が囲み注釈１３０４から囲み注釈１３０８をポイントしていることを示す。したがって、これら各種リンクの存在により、電子文書１３００中で注釈の一部分の移動があると注釈の他の部分がそれに従うことができ、それにより、電子文書１３００が何らかの形で変化した場合でも注釈を元の状態に保つことができる。言うまでもなく、本発明から逸脱することなく、上述のようにこの構造全体を何らかの基礎文書要素にリンクしてもよい。
【００８７】
同様に、注釈には、例えば「これらを入れ替える（ｓｗｉｔｃｈ  ｔｈｅｓｅ！）」のような書かれたコメントを伴う連結で接続された２つの囲み型の注釈が伴うことがある。２つの囲み型の注釈の間に単語が挿入された場合など注釈の一部分が移動される場合、その部分は、その注釈のもう一方の部分とは別個に移動する必要がある場合がある。電子インク注釈を表すコンテクストノードと非インク内容を表すノード間のリンクをソフトウェアアプリケーションが使用して、注釈を構成する部分を再配置し、そして配置動作が完了するとそれらを再び共に結び付けることができる。
【００８８】
図１４Ａおよび１４Ｂに、フローチャートタイプの注釈またはインク構造を有する電子文書１４００の別の例を示す。この例では、文字「Ａ」１４０２の電子インク注釈は、文字「Ｂ」１４０４および「Ｃ」１４０６の電子インク注釈に接続され、文字「Ａ」と「Ｂ」、「Ａ」と「Ｃ」の間にそれぞれ電子インク連結１４０８と１４１０がある。
【００８９】
構文解析後の電子文書１４００の例示的データ構造１４２０を図１４Ｂに示す。電子文書の全体またはその一部分に関連するデータは、親ルートノード１４２２に記憶することができる。電子インク単語「Ａ」、「Ｂ」、および「Ｃ」に対応するデータは、先の数個の図で使用された構造と同じ段落ノード（１４２４ａ、１４２６ｂ、１４２４ｃ）、行ノード（１４２６ａ、１４２６ｂ、１４２６ｃ）、インク単語ノード（１４２８ａ、１４２８ｂ、１４２８ｃ）、およびストロークノード（１４３０ａ、１４３０ｂ、１４３０ｃ）の構造を有する。これらのノードの反復的な説明は省略する。同様に、インク連結は、上記の図１１Ｂおよび１３Ｂで使用した構造と同じインク描画ノード（１４３２ａ、１４３２ｂ）、インク囲みノード（１４３４ａ、１４３４ｂ）、およびストロークノード（１４３６ａ、１４３６ｂ）の構造を有するので、反復となる説明は省略する。言うまでもなく、上述の可能な変形例を含むこれら特定のデータ構造の変形を本発明から逸脱することなく使用することができる。
【００９０】
この例の注釈のデータ構造を完全なものにするために、インク連結注釈１４０８に関連付けられたデータを、連結が結ぶ２つの文字「Ａ」１４０２および文字「Ｂ」１４０４に関連付けられたデータにリンクし、インク連結注釈１４１０に関連付けられたデータを、連結が結ぶ２つの文字「Ａ」１４０２および文字「Ｃ」１４０６に関連付けられたデータにリンクする。具体的には、図１４Ｂの例に示すように、データ構造１４２０中に、インク描画ノード１４３２ａ（「起点」ノード）がインク単語ノード１４２８ａおよび１４２８ｂを「ポイント」する（それぞれ矢印１４３８と１４４０で表す）ことを示す情報を記憶する。同様に、インク描画ノード１４３２ｂ（「起点」ノード）がインク単語ノード１４２８ａおよび１４２８ｃを「ポイント」する（それぞれ矢印１４４２および１４４４で表す）ことを示す情報をデータ構造１４２０中に記憶する。インク単語ノード１４２８ａ、１４２８ｂ、１４２８ｃが「宛先」ノードとして機能する。これら各種リンクがあるために、電子文書１４００中で注釈の一部分が移動するとその移動に注釈の他の部分が従うことができ、それにより、電子文書１４００が何らかの形で変化した場合でも注釈を元の状態に、あるいはリンクされた状態に保つことができる。また、この注釈は、本発明から逸脱せずに、タイプ入力テキスト、描画、画像など電子文書中の１つまたは複数の他の要素にリンクすることもできる。
【００９１】
図１５Ａから１５Ｃに、電子文書１５００の例と、複数の行および列を有する表の形態の電子インク注釈を含むデータ構造の例を示す。具体的には、図１５Ａの例に示すように、電子文書１５００は、２つの行および２つの列（合計４つのセルを構成する）を有する表１５０２を含み、この表の各セルは、電子インクの境界線によって構成され、電子インクテキスト入力を含んでいる。
【００９２】
完全に構文解析した後の図１５Ａに示す電子インク表１５０２の例示的データ構造１５１０を図１５Ｂに示す。この例では、データ構造１５１０はルートノード１５１２を含み、このルートノード１５１２は、電子文書１５００のすべてまたは一部分に対応することができる。ルートノード１５１２の下には、表に関連する関連データが表ノード１５１４に記憶される。このノードは、例えば表の大きさ、表の位置、行の数、列の数、境界ボックスのサイズなどを示すデータを含むことができる。表ノード１５１４の下には、表の行ごとに個別の行ノードが提供される（この例では図１５Ｂに示すように２つの行ノード１５１６および１５１８が提供される）。この例示的データ構造の各行ノードはさらに１つまたは複数のセルノードを含む（この例では、行ノード１５１６は２つのセルノード１５２０および１５２２を含み、行ノード１５１８は２つのセルノード１５２４および１５２６を含む）。この例の各セルは電子インクテキストデータを含んでいるので、この例示的な階層データ構造１５１０の残りの部分は、上記で既に詳細に説明した段落ノード、行ノード、インク単語ノード、およびストロークノードを有する。言うまでもなく、本発明から逸脱することなく、表のセルは、電子インクデータに加えて、かつ／または電子インクデータの代わりに、例えばタイプ入力テキストのデータおよび／または図６Ｉとの関係で先に詳述した各種のデータタイプを含む、１つまたは複数の他タイプのデータを含んでもよい。別の代替例として、行ノード１５１６および１５１８に代えて、データ構造は列ノードを含むことができ、列ノードが図１５Ｂに示すようにセルノード、段落ノードなどを含んでもよい。実際の表を構成するインクストロークは、例えば表ノード１５１４の一部として（例えばそのノードに関連付けられたプロパティとして）、表ノード１５１４の下位ノードである（ｄｅｐｅｎｄ  ｆｒｏｍ）インク描画ノードとして（関連付けられたストロークが表ノード１５１４の下に記憶される）、かつ／またはデータ構造１５１０中の他の適切な位置に記憶することができる。
【００９３】
表１５０２を含む電子文書１５００の代替の例示的データ構造１５３０を図１５Ｃに示す。この例では、ルートノード１５１２、表ノード１５１４、行ノード１５１６および１５１８、セルノード１５２０、１５２２、１５２４、および１５２６は、図１５Ｂと同じである。ただし、各種のセルノード１５２０、１５２２、１５２４、および１５２６の下にある子ノードとして電子インクテキストデータを含めるのではなく、電子インクテキストデータ（あるいはその他の適切な、あるいは所望のデータ構造）の段落ノード１５２８ａ、１５２８ｂ、１５２８ｃ、１５２８ｄは、それぞれ図１５Ｃの矢印１５３０ａ、１５３０ｂ、１５３０ｃ、１５３０ｄで表すように、各自のセルノード１５２０、１５２２、１５２４、および１５２６にリンクされる。この例のセルノードは、そのセルに含まれるインク単語に対する囲みタイプの「起点」ノードとして機能することができ、インク段落、行、または単語のノードが「宛先」コンテクストノードとして機能する。これら各種のリンクにより、電子文書１５００中で表注釈の一部分が移動すると注釈の他の部分がその移動に従うことができ、それにより、電子文書１５００が何らかの形で変化した場合でも表の注釈を元の状態、またはリンクされた状態に保つことができる。この表は、基礎となる電子文書に基づいて存在する何らかの他のノードにリンクすることもできる。ここでも、代替法として、本発明から逸脱することなく、行ノード１５１６および１５１８を、各種のセルノードを含む列ノードに代えることができる。また、実際の表を構成するインクストロークは、例えば表ノード１５１４の一部として（例えば表ノードに関連付けられたプロパティとして）、表ノード１５１４の下位ノードであるインク描画ノードとして（関連付けられたストロークが表ノードの下に記憶される）、および／またはデータ構造１５１０中の他の適切な場所など、本発明から逸脱することなく任意の場所に記憶してよい。
【００９４】
言うまでもなく、上述した各種の例示的な注釈タイプに関連する各種の図は、可能な注釈タイプ、注釈の使用法、注釈中に含めることができる情報の例を示すに過ぎない。当業者は、本発明から逸脱せずに多くの修正または変更を行えることを理解されよう。例えば、注釈は、本発明から逸脱せずに、多くの異なる組合せまたは順列で各種タイプのデータ（電子インクテキスト、描画、画像、タイプ入力テキスト、画像など）を含むことができる。
【００９５】
また、上記の各種のデータ構造との関連で各種のリンク方式を記載した。このリンク方式または手法は、各種のデータノードを共にリンクすることが可能な方式の例に過ぎない。本発明から逸脱せずに、適切なリンク構成またはリンクに関連付けられたデータを記憶することができる。例えば、各ノードを個々の識別子（グローバル一意識別子あるいはＧＵＩＤ）で表し、ＧＵＩＤの対（または３つ以上）を用いてリンクを表すことが可能である場合がある。別の代替法として、上記の一部の例との関連で述べた二重のリンク構成の代わりに、単一のリンクを使用してノードをリンクすることも可能である。別の可能な代替法として、必要あるいは望ましい場合は、ノードをそのノード自体にリンクしてもよい（自己リンク。例えば起点ノードと宛先ノードが同一ノードである場合など）。当業者は、本発明から逸脱せずに、各種のデータセットを互いにリンクまたは関連付ける任意の適切な方式を使用できることを理解されよう。
【００９６】
リンクの分析  
本発明の例による電子文書中の電子インクを分析する各種の例示的技術について次いで説明する。詳細には、図１６Ａ〜１６Ｅに、本発明の各種例による文書を分析するステップを示す流れ図を示す。そして図１７〜２６に、この分析プロセス中に用いられる各種コンポーネント間の関係を示す。
【００９７】
次いで図１７を参照すると、ソフトウェアアプリケーション１７０１を示している。ソフトウェアアプリケーション１７０１は文書１７０３を保持しており、この文書１７０３は、電子インクデータ１７０５と、タイプ入力文字または画像などの非インクデータ１７０７との両方を含むことができる。上記で詳述したように、電子インクデータ１７０５と非インクデータ１７０７両方のプロパティをツリーなどの階層データ構造によって記述することができる。電子インクの分析を開始するために、ステップ１６０１で、ソフトウェアアプリケーション１７０１は、図１７で分析コンテクストオブジェクト１７０９として識別されるそのようなデータ構造を生成する。
【００９８】
図１８に、分析コンテクストオブジェクト１７０９に含めることが可能なタイプの例示的ツリー１８０１を示す。ツリー１８０１は、ルートノード１８０３と段落ノード１８０５を含む。段落ノード１８０５は、例えばすでに以前の分析プロセスで識別されている可能性のある電子インクテキストの１段落に対応する。段落ノード１８０５は、２つの行ノード１８０７および１８０９に接続され、行ノード１８０７および１８０９は電子インクテキストの段落中の２行を表す。行ノード１８０７は、２つの単語ノード１８１１および１８１３に関連付けられる。各単語ノード１８１１および１８１３は、行ノード１８０７によって表される電子インクテキストの行にある単語に対応する。単語ノード１８１１は、インクストロークデータ１８１５とインクストロークデータ１８１７を含んでいる。したがって、ストロークデータ１８１５および１８１７は、単語ノード１８１１で表される単語を構成するテキスト電子インクストロークに対応する。同様に、単語ノード１８１３はインクストロークデータ１８１９およびインクストロークデータ１８２１を含み、これらのデータは、単語ノード１８１３で表される単語を構成するテキスト電子インクストロークに対応する。ツリー１８０１は、ルートノード１８０３だけに関連付けられたストロークデータ１８２３〜１８２７も含む。このインクデータ１８２３〜１８２７は、まだ分類されていないか、別のインクストロークまたは他の文書要素に関連付けられていない新しいインクストロークを表す。
【００９９】
このように、個々のストロークノードにストロークを記憶するのではなく、各種ノードが、そのノードに関連付けられたストロークに対応するデータを記憶する、関連付けられた「ストローク」プロパティを有することができる。例えば、（ａ）未分類のコンテクストノードが、分析する必要のある１つまたは複数のストロークを有する１つまたは複数の「ストローク」プロパティを含む、（ｂ）インク単語ノードが、あるインク単語を構成する１つまたは複数のストロークを含む１つまたは複数の「ストローク」プロパティを含む、（ｃ）描画ノードが、ある描画を構成する１つまたは複数のストロークを含む１つまたは複数の「ストローク」プロパティを含む、そして（ｄ）中黒ノードが、あるリスト項目中の中黒を構成する１つまたは複数のストロークを含む１つまたは複数の「ストローク」プロパティを含む、ことが可能である。言うまでもなく、本発明の代替の実施では、例えば単語ノードまたは描画ノードにインクストロークを関連付けるのではなく、個別のストロークノードをデータツリー中で使用して電子インクの個々のストロークを表すことができる。
【０１００】
図１８に示すツリー１８０１は、すでに単語、行、および段落に編成されたインクストロークを含むが、ツリー１８０１は、分類されていない、あるいは別のインクストロークまたは文書要素に関連付けられていない新しいインクストロークだけを含んでもよいことを理解されたい。例えば、ユーザが最初に文書１７０３に電子インクを入力する際、その最初のインクストロークはまだ分析されていない。ツリー１８０１は典型例に過ぎず、本発明の各種態様を容易に理解できるように過度に簡略化していることも理解されたい。例えば、行ノードは通例複数の単語ノードに関連付けられ、各単語ノードは、数個のインクストロークのストロークデータを含むことができる。ツリー１８０１はインクに関連するデータのみを含んでいるが、分析コンテクストオブジェクト１７０９は、上述のように、画像やタイプ入力されたテキストなどの非インク文書要素を表すノードを含むことができることにも留意されたい。
【０１０１】
次いで図１７に戻ると、本発明の一部の例では、ソフトウェアアプリケーション１７０１は独自の分析コンテクストオブジェクト１７０９を作成し、保持する。こうしたソフトウェアアプリケーション１７０１の場合、ソフトウェアアプリケーション１７０１は単に分析コンテクストオブジェクト１７０９への参照を提供することができる。ただし、こうしたソフトウェアアプリケーション１７０１の場合、アプリケーション１７０１は、分析オブジェクトを作成し、データを取り込み（ｐｏｐｕｌａｔｅ）、保持するのに必要な機構を含まなくてはならない。しかし、ソフトウェア開発者によっては、アプリケーション１７０１にこの機構をわざわざ備えることを望まない場合もある。
【０１０２】
ただし、このため本発明の他の例では、ソフトウェアアプリケーション１７０１は、分析コンテクストオブジェクト１７０９を作成する別のオブジェクトをインスタンス化することができる。例えば、ソフトウェアアプリケーション１７０１は、インク分析ツールあるいは他のオブジェクトを使用して、分析コンテクストオブジェクト１７０９を作成および／または保持することができる。例えば、ソフトウェアアプリケーション１７０１は、未分析のインクデータを識別し、インク分析ツールに提供することができる。そして、ソフトウェアアプリケーション１７０１からの命令に応じて、インク分析ツールは、文書１７０３の全体、あるいはソフトウェアアプリケーション１７０１によって識別された未分析のインクを含む文書の特定の１つの（または複数の）領域だけを表す分析コンテクストオブジェクト１７０９を作成することができる。一部のソフトウェアアプリケーション１７０１では、ソフトウェアアプリケーション１７０１は、その後、自身で、またはインク分析ツールまたは別のオブジェクトによって提供されるサービスを使用して、分析コンテクストオブジェクト１７０９を保持し、更新することができる。さらに他のソフトウェアアプリケーション１７０１では、ソフトウェアアプリケーション１７０１は、分析コンテクストオブジェクト１７０９を保持しなくともよく、代わりに必要な時に分析ツールまたは他のオブジェクトに新しい分析文書オブジェクト１７０９を作成させることができる。
【０１０３】
通例、分析コンテクストオブジェクト１７０９は、文書１７０３全体の文書要素についての情報を含む。ただし、本発明の一部の実施例では、分析コンテクストオブジェクト１７０９は、文書１７０３の一部分のみの文書要素についての情報を含む場合もある。すなわち、分析コンテクストオブジェクト１７０９は、新しい、すなわち「ｄｉｒｔｙ」なインクまたは他のデータを含む文書の空間的範囲にある文書要素のみを表すことができる。電子インクを含む、ある文書範囲にあるすべての文書要素がすでに分析されている場合、そのすでに分析された文書要素は、分析コンテクストオブジェクト１７０９に含めてはならない。別の代替法として、アプリケーションプログラムは、ページごと、または電子文書１７０３全体に関連する他のデータのサブセットごとに個別の分析コンテクストオブジェクト１７０９を保持することもできる。
【０１０４】
ソフトウェアアプリケーション１７０１が分析コンテクストオブジェクト１７０９を作成すると、ステップ１６０３で、図１９に示すようにインク分析ツール１９０１が分析コンテクストオブジェクト１７０９の少なくとも一部をコピーする。より詳細には、分析コンテクストオブジェクト１７０９が上記のように新しいインクおよび／または他のデータを含む領域に限定されない場合は、ソフトウェアアプリケーション１７０１が、分析すべき新しいインクおよび／または他のデータを含む文書１７０３の領域を指示する。ソフトウェアアプリケーション１７０１は次いでインク分析ツール１９０１を起動して、指示された文書１７０３の領域に対応する分析コンテクストオブジェクト１７０９の部分をコピーさせる。（無論、分析コンテクストオブジェクト１７０９が新しいインクを含む領域の記述にすでに限定されている場合は、インク分析ツール１９０１は分析コンテクストオブジェクト１７０９全体をコピーしてよい。）
【０１０５】
ソフトウェアアプリケーション１７０１には、まだ分析されていないインクは分かるが、その電子文書１７０３のどの部分（例えばすでに分析済みのインク、文書構造中の基礎となるデータなど）が新しいインクに影響するか（および、したがってどの部分をインク分析ツール１９０１に与えるべきか）は分からない場合がある。したがって、本発明の少なくとも一部の実施例では、ソフトウェアアプリケーション１７０１は、分析コンテクストオブジェクト１７０９を通じてインク分析ツールが電子文書１７０３の多数の部分を入手できるようにする。ソフトウェアアプリケーション１７０１は、分析コンテクストオブジェクト１７０９を通じて実際にソフトウェアアプリケーション１７０１から必要とする情報の判定はインク分析ツール１９０１に任せる。
【０１０６】
新しいデータを分析するための呼び出しに応答して、インク分析ツール１９０１は、必要な場合は、ソフトウェアアプリケーション１７０１が指示した領域中の新しいインクおよび／または他のデータを分析するのに必要な情報を分析コンテクストオブジェクト１７０９から得るために、分析コンテクストオブジェクト１７０９に対して各種のコールバックを行う。例えば、インク分析ツール１９０１は、新しいインクおよび／または他のデータに加えて、すでに分析されている指示領域中のインクおよび／または他のデータに関する情報、または指示領域中の非インク文書要素に関する情報を分析コンテクストオブジェクト１７０９に問い合わせることができる。「指示領域」は、本発明の少なくとも一部の実施例では、分析すべき新しいインクまたは他のデータを含む範囲にある空間的範囲および／またはその範囲に近い空間的範囲にあるデータに相当する。
【０１０７】
すでに分析されたインクと非インク文書要素、特に新しく入力された分析対象データの近くに位置する要素は、未分析のインクまたは他のデータの分析を向上させるコンテクストを提供することができる。インク分析ツール１９０１が分析コンテクストオブジェクト１７０９から所望の情報を得ると、インク分析ツール１９０１は、得た情報で文書に依存しない分析コンテクストオブジェクト１９０３を作成する。したがって、文書に依存しない分析コンテクストオブジェクト１９０３は、分析コンテクストオブジェクト１７０９に含まれる情報の少なくともサブセットを含むが、文書１７０３からは独立している。上述のクエリを利用する空間的抽象化法におけるこの「コールバック」手法の使用により、大きな文書の場合でもインク分析ツール１９０１が必要なデータを効率的に入手し、分析することが可能になる。ただし、アプリケーション１７０１は、要求された時に単に内容を分析ツールに公開しないことにより、文書に依存しない分析コンテクストオブジェクト１９０３の内容をなお制限することができることに留意されたい。
【０１０８】
また、インク分析ツール１９０１が文書に依存しない分析コンテクストオブジェクト１９０３を作成している間、ソフトウェアアプリケーション１７０１は、分析コンテクストオブジェクト１７０９を変更すべきでない（また、アプリケーションプログラム中の他のスレッドおよび／または他のプログラムにこの期間中に分析コンテクストオブジェクト１７０９を変更させることもできない）ことにも留意されたい。すなわち、ソフトウェアアプリケーション１７０１は、この期間中には文書１７０３に新しいデータを入力すべきでなく、また他のスレッドおよび／またはアプリケーションプログラムにもデータの入力を許可してはならない。ただし、文書に依存しない分析コンテクストオブジェクト１９０３を作成するプロセスは比較的高速であり、通例は、ソフトウェアアプリケーション１７０１の動作に大きな影響は与えない。ただし、必要な場合は、文書１７０３にデータを入力しようとする試みをキャッシュしておき、文書に依存しない分析コンテクストオブジェクト１９０３が作成された後にシステムに入力することができる。
【０１０９】
文書に依存しない分析コンテクストオブジェクト１９０３が作成されると、分析コンテクストオブジェクト１７０９ではなく文書に依存しない分析コンテクストオブジェクト１９０３に対して続く未分析インクおよび／または他のデータのすべての分析を行い、ソフトウェアアプリケーション１７０１は、未分析のインクおよび／または他データの分析によって遅延を生じる、あるいは停止することなく、通常の動作を継続することができる。ソフトウェアアプリケーション１７０１は、文書に依存しない分析コンテクストオブジェクト１９０３の未分析インクの分析に支障をきたすことなく、文書１７０３（および分析コンテクストオブジェクト１７０９）に新しい電子インクデータ１７０５を入力することさえできる。
【０１１０】
したがって、文書に依存しない分析コンテクストオブジェクト１９０３が作成されると、ステップ１６０５で、インク分析ツール１９０１は、文書に依存しない分析コンテクストオブジェクト１９０３のインクを分析するための別個の分析スレッドを作成する。そのため、ステップ１６０７で、ソフトウェアアプリケーション１７０１は、メインの処理スレッドの制御を再開することができ、通常の動作を継続することができる。次いでステップ１６０９で、インク分析ツール１９０１は、文書に依存しない分析コンテクストオブジェクト１９０３を分析のために第１の分析プロセスに提供する。例えば、図２０に示すように、インク分析ツール１９０１は、分析スレッドを用いた構文解析のために文書に依存しない分析コンテクストオブジェクト１９０３を構文解析プロセス２００１に渡すことができる。構文解析プロセスは、追加的に、本発明から逸脱することなく１つまたは複数の分類プロセスを含むことが可能である（例えば、インクおよび／または他のデータを、インクテキスト、インク描画、表、図、グラフィック、画像、音楽、数学、特殊化された記号を含む図（例えば抵抗、コンデンサなどを含む電気図など）などの各種のタイプに分類する）。本発明の一部の実施例では、インク分析ツール１９０１は、文書に依存しない分析コンテクストオブジェクト１９０３のコピーを作成できることに留意されたい。下記でより詳細に説明するように、文書に依存しない分析コンテクストオブジェクト１９０３の元の形態のコピーを使用して、分析プロセスの分析結果を文書１７０３の現在の状態と一致させることができる。
【０１１１】
第１の分析プロセスは、文書に依存しない分析コンテクストオブジェクト１９０３中のインクおよび／または他のデータを分析すると、分析結果をインク分析ツール１９０１に返し、分析ツール１９０１は、ステップ１６１１でその分析結果をソフトウェアアプリケーション１７０１に通知する。例えば、図２１に示すように第１の分析プロセスが構文解析プロセス２００１である場合、構文解析プロセスは、構文解析の結果２１０１をインク分析ツール１９０１に返し、分析ツール１９０１は構文解析の結果（分析結果）２１０１への参照を（例えばイベントを発生させることにより）ソフトウェアアプリケーション１７０１に渡すことができる。
【０１１２】
下記でより詳細に説明するように、本発明の一部の実施例では、構文解析の結果２１０１は、分析プロセスに最初に与えられる文書に依存しない分析コンテクストオブジェクト１９０３であってよいが、第１の分析プロセスで生成された新しい情報（この例では構文解析結果など）を含むように変更されている。ただし、本発明のさらに他の実施例では、構文解析の結果２１０１は、文書に依存しない分析コンテクストオブジェクト１９０３の変更されたコピーであってもよい。第１の分析プロセスで生成された新しい情報を文書に依存しない分析コンテクストオブジェクト１９０３のコピーに含めることにより、元の文書に依存しない分析コンテクストオブジェクト１９０３は、例えば上記の一致および／または他の分析プロセスで使用するために保持しておくことができる。
【０１１３】
図２２に、構文解析プロセス２００１などの構文解析プロセスで、構文解析動作で生成されたレイアウト変更を示すようにデータツリー１８０１を変更する仕組みを表す例を示す。この図で分かるように、構文解析プロセス２００１は、ストロークデータ１８２３によって表される未分析のインクストロークが、単語ノード１８１３で表される単語の一部であると判定している。したがって、構文解析プロセスは、ルートノード１８０３とのストロークデータ１８２３の関連付けを解除し、代わりに単語ノード１８１３と関連付けている。
【０１１４】
また、構文解析プロセスは、未分類のストロークデータ１８２５および１８２７によって表されるインクストロークが、まだ識別されていない行ノード１８０９によって表される行にある新しい単語の一部であることも判定している。したがって、構文解析プロセス２００１は、新しい単語ノード２２０１を作成し、その単語ノード２２０１を行ノード１８０９に関連付けている。構文解析プロセス２００１は次いで、ストロークデータ１８２５および１８２７を新しい単語ノード２２０１に関連付けている。このように、構文解析の結果２１０１は、まだ分析されていないインクストロークと構文解析プロセス２００１で識別された他のインクストローク（あるいは他の文書要素）との関係を記述する。また、構文解析の結果２１０１は、構文解析プロセス２００１で判定された関係の変化を示すだけでなく、構文解析プロセス２００１で判定された分類情報も含むことができる。例えば、インクストロークデータ１８２３〜１８２７の各インスタンスは、各自に対応するインクストロークを描画のインクストロークではなくテキストインクストロークに分類するように変更することができる。本発明の少なくとも一部の実施例では、必要な場合、構文解析の結果２１０１は、文書に依存しない分析コンテクストオブジェクト１９０３中に表すことができる。
【０１１５】
上述したように、ソフトウェアアプリケーション１７０１は、第１の分析プロセスが文書に依存しない分析コンテクストオブジェクト１９０３を分析している間に、新しい電子インクデータ１７０５および新しい非インクデータ１７０１の両方を含む新しいデータを文書１７０３に入力することができる。そのため、第１の分析プロセスの結果は、もはや文書１７０３の現在の状態には適用できない可能性がある。例えば、構文解析プロセスがあるインクストロークがある単語に関連付けられていると判定する間に、ユーザが、そのインクストロークを文書１７０３からすべて（関連付けられた単語あるいはそれ以上の要素全体とともに）削除してしまっている可能性がある。したがって、ステップ１６１３で、構文解析の結果（分析結果）２１０１を文書１７０３の現在の状態と一致させなければならない。一致プロセスの一例を図２３に概略的に示し、下記でより詳細に説明する。
【０１１６】
本発明の一部の例では、ソフトウェアアプリケーション１７０１は、手動で分析結果２１０１を文書１７０３の現在の状態と一致させることができる。すなわち、ソフトウェアアプリケーション１７０１は、分析結果２１０１を調べて、どの結果が現在文書１７０３中にある文書要素に関連するかを判定することができる。ただし、本発明の他の実施例では、インク分析ツール１９０１が、分析結果２１０１を現在の分析コンテクストオブジェクト１７０９と一致させる一致機能を提供することができる（すなわち分析コンテクストオブジェクト１７０９が文書１７０３の現在のステータスを反映する。）下記でより詳細に説明するように、本発明の各種実施例の一致機能は、第１の分析プロセスによる分析結果２１０１と、文書１７０３の現在の状態に対応する分析コンテクストオブジェクト１７０９との矛盾あるいは「不一致」を識別する。次いでインク分析ツール１９０１は、ステップ１６１５で分析結果に基づいて分析コンテクストオブジェクト１７０９を更新し、ステップ１６１７で分析コンテクストオブジェクト１７０９の一致済みの分析結果から、新しい文書に依存しない分析コンテクストオブジェクト１９０３を作成する。
【０１１７】
インク分析ツール１９０１が分析結果２１０１を現在の分析コンテクストオブジェクト１７０９と一致させる間、ソフトウェアアプリケーション１７０１は分析コンテクストオブジェクト１７０９を変更してはならない（そして、アプリケーションプログラム中の他のスレッドおよび／または他のアプリケーションプログラムが分析コンテクストオブジェクト１７０９を変更することを許可してはならない）ことに留意されたい。すなわち、ソフトウェアアプリケーション１７０１は、一致が完了するまで、文書１７０３に新しいデータを入力すべきでなく、かつ／または他のスレッドおよび／またはアプリケーションプログラムが文書１７０３に新しいデータを入力できるようにしてはならない。最初に文書に依存しない分析コンテクストオブジェクト１９０３を作成するプロセスと同様に、一致プロセスは比較的高速であり、通例は、ソフトウェアアプリケーション１７０１の動作に大きな影響を与えない。ただし、必要な場合は、試みられたユーザ入力をキャッシュしておき、一致プロセスが完了した後に入力することができる。
【０１１８】
インク分析ツール１９０１は、分析結果２１０１を文書１７０３の現在の状態に対応する分析コンテクストオブジェクト１７０９と一致させると、任意で、一致後の結果をさらなる分析のために第２の分析プロセスに提供することができる。例えば図２４に示すように、インク分析ツール１９０１は、一致させた構文解析結果２４０１を認識（例えばテキスト、音楽、数学的情報、あるいはその他特殊化されたデータタイプの手書き認識）のためにインク認識プロセス２００３に提供することができる。詳細には、インク分析ツール１９０１は、ステップ１６１９でこの場合も第２の分析プロセスを行うための別個の分析スレッドを作成する。インク分析ツール１９０１が第２の分析プロセスを実行するためのこの別個のスレッドを作成するので、ソフトウェアアプリケーション１７０１は、ステップ１６２１でこの場合も通常の動作を再開することができ、新しい電子インクデータ１７０５を含む新しい入力データを受け付けることさえできる。
【０１１９】
次いでステップ１６２３で、インク分析ツール１９０１は、第１の分析プロセスによる一致させた構文解析結果２４０１を第２の分析プロセスに提供する。第２の分析プロセスが開始すると、ソフトウェアアプリケーション１７０１は、新しい未分析インクに対して第１の分析プロセスの別の実行を開始することができる。このように、複数の分析プロセスを同時に実行することができるので、第２の分析プロセスが第１の分析プロセスの結果を処理している間に、ソフトウェアアプリケーション１７０１は、第１の分析プロセスを再度開始して次の分析結果のセットを準備することができる。
【０１２０】
有利には、分析プロセスを並行して実行することにより、ソフトウェアアプリケーション１７０１の動作を向上させることができる。例えば、構文解析プロセスは通例は認識分析プロセスに比べて高速であり、構文解析の結果を使用して、認識分析の結果を用いずに正しい選択の振る舞いとスペース挿入の振る舞いとを実施することができる。このように、異なる分析プロセスを並行して実行することができるので、文書１７０３に追加された新しいインクは、認識分析プロセスがそれより前のインクデータの処理を終えるのを待たずに、正しく選択されるか、あるいはスペース挿入されることができる。さらに、本発明の各種の実施例では、非同期のインク分析を実現して、アプリケーション開発者とパーサおよびレコグナイザのアルゴリズム開発者からマルチスレッド化の問題を扱わずに済むようにし、保守性を向上し、両分野の開発プロセスを簡略化し、アプリケーションに変更を加えることなく分析プロセス間の対話を変更できるようにする。
【０１２１】
上記のように、インク分析ツール１９０１は、分析結果２１０１の関連部分を含むように更新された分析文書オブジェクト１７０３から新しい文書に依存しない分析コンテクストオブジェクト１９０３を作成することにより、一致させた分析結果を提供することができる。ただし、本発明の他の実施例では、インク分析ツール１９０１は、単に、分析結果２１０１を用いて元の文書に依存しない分析コンテクストオブジェクト１９０３を更新して、文書１７０３の現在の状態を反映させることもできる。さらには、インク分析ツール１９０１は単に、さらに分析すべき関連インクデータを第２の分析プロセスにするだけでもよい。
【０１２２】
このように、本発明の各種の実施例では、後続の分析プロセスの前に以前の分析プロセスの結果を文書１７０３の現在の状態と一致させる。ただし、本発明の一部の実施例ではこの中間的な一致ステップは省略してもよいことを理解されたい。より詳細には、本発明の一部の実施例では、前に行われた分析プロセスの結果を、文書１７０３の現在の状態と一致させずに直接後続の分析プロセスに提供してもよい。例えば、インクレイアウトのアナライザプロセスとは別にインククラシファイアプロセスが提供される場合は、手書きテキストとして分類されたインクを、中間的な一致ステップを行わずにインクレイアウトアナライザプロセスに提供してよい。
【０１２３】
どちらの構成でも、第２の分析プロセス２００３が第１の分析プロセスによる一致させた構文解析結果２４０１の分析を完了すると、図２５に示すように、第２の分析プロセス２００３は、認識結果２５０１をインク分析ツール１９０１に返す。次いでインク分析ツール１９０１は、ステップ１６２５で第２の分析の結果である結果２５０１をソフトウェアアプリケーション１７０１に通知する。
【０１２４】
先に述べたように、ソフトウェアアプリケーション１７０１は、第２の分析プロセスで第１の分析プロセスの一致された構文解析結果２４０１を分析している間に、新しい電子インクデータ１７０５を含む新しいデータを文書１７０３に入力することができる。したがって、第２の分析プロセスの結果である結果２５０１は、もはや文書１７０３の現在の状態に適用できない可能性がある。したがって、ステップ１６２７で第２の分析プロセス２００３の結果２５０１も文書１７０３の現在の状態と一致させなければならない。一致プロセスの一例を図２６に概説し、下記でより詳細に説明する。
【０１２５】
ここでも、本発明の一部の実施例では、ソフトウェアアプリケーション１７０１は、手動で第２の分析の結果２５０１を文書１７０３の現在の状態と一致させることができる。あるいは、本発明の他の実施例では、インク分析ツール１９０１が、分析結果２１０１を現在の分析コンテクストオブジェクト１７０９と一致させる一致機能を提供することができる。この一致機能は、第２の分析の結果２５０１と、文書１７０３の現在の状態に対応する分析コンテクストオブジェクト１７０９との間の矛盾あるいは「不一致」を識別し、インク分析ツール１９０１は次いでステップ１６２９で分析結果に基づいて分析コンテクストオブジェクト１７０９を更新する。このプロセスは、必要に応じて繰り返して、新しいインク入力、または分析プロセス中に変更されたインクを分析することができる。
【０１２６】
上述の説明から、本発明の各種実施例によるインク分析技術は、ソフトウェアアプリケーション１７０１と非同期に電子インクを分析することを可能にし、ソフトウェアアプリケーション１７０１が、分析プロセス中に新しい電子インクを含む入力データの受付を継続できるようにすることが明らかであろう。上記の説明では２つのみの分析プロセスを記載したが、任意数の分析プロセスを並行して同時に実行できることに留意されたい。例えば、本発明の各種実施では、第１の構文解析プロセス、第２の構文解析プロセス、および認識プロセスを用いることができる。このようにして、各分析プロセスが完了するとその結果を次の分析プロセスに渡すことができ、新しく入力されたインクに対して第１の分析プロセスを同時に並行して再度実行することができる。
【０１２７】
さらに、本発明の各種の実施例では、１つまたは複数の分析プロセスを順次実行することができる。例えば、一部のソフトウェアアプリケーションでは、ユーザが、英語か日本語などインクストロークまたはインクストロークの集合に対して特定の言語を指定できる場合がある。この言語の指定は、分析コンテクストオブジェクト１７０９および文書に依存しない分析コンテクストオブジェクト１９０３に含めることができる。インク分析ツール１９０１は、言語の指定に基づいて、第１の言語に指定された電子インクを第１の言語に特化した認識プロセスに送り、次いで、第２の言語に指定された電子インクをその第２の言語に特化した別の認識プロセスに送ることができる。これと同様に、他の特定のタイプとして分類および／または指定された入力データを、音楽専用のレコグナイザ、あるいは電気記号、数学記号、フローチャートの要素、グラフィックの要素専用のレコグナイザなど、他の特殊化されたレコグナイザに送ることができる。
【０１２８】
さらに、分析プロセスはソフトウェアアプリケーション１７０１の一部である必要がないので、任意の所望の分析プロセスを使用してソフトウェアアプリケーション１７０１中で電子インクを分析することができる。例えば、ソフトウェアアプリケーション開発者は、ソフトウェアアプリケーション１７０１に予想される電子インク入力を分析するのに特に適した構文解析プロセスまたは認識プロセスを開発し、採用することができる。
【０１２９】
これらの技術のさらに他の変形例を本発明の各種実施で用いることができる。例えば、状況によっては、ソフトウェアアプリケーション１７０１が、文書１７０３中の各種の文書要素間の関係を反映する内部文書ツリーを保持することが望ましくない場合がある。代わりに、ソフトウェアアプリケーション１７０１は、電子インク入力に関する単純な状態情報だけを用いるようにすることができる。そうしたソフトウェアアプリケーション１７０１の場合、ソフトウェアアプリケーション１７０１は、文書１７０３全体の現在の状態を反映する分析コンテクストオブジェクト１７０９の作成を省略することができる。代わりに、ソフトウェアアプリケーション１７０１は、ソフトウェアアプリケーション１７０１が分析を要求する特定のインク入力に関連する情報だけを含む、目的に固有の分析コンテクストオブジェクト１７０９を作成することができる。目的に固有の分析コンテクストオブジェクト１７０９を用いることにより、ソフトウェアアプリケーション１７０１は、文書１７０３の状態に対応する内部データ構造を保持する複雑性を回避し、一方で、なお所望の分析プロセスを用いて文書中のインクを分析することができる。
【０１３０】
また、上述の説明では非同期の電子インク分析について述べたが、本発明の各種の実施例では、インク分析ツール１９０１がインクを同期して分析できるようにしてもよいことに留意されたい。例えば、本発明の一部の実施では、ソフトウェアアプリケーション１７０１がインク分析ツール１９０１に電子インクの分析を直ちに同期して行うように指示できるようにすることが可能である。さらに、同期した分析は、文書１７０３の特定の領域内だけにも、または文書１７０３全体のインクに行うこともできる。
【０１３１】
インク分析ツール  
上述のように、インク分析ツール１９０１は、各種の機能を実行して電子インクの処理を容易にする。例えば、本発明の各種実施によれば、インク分析ツール１９０１は、分析すべきインクデータを含む文書１７０３の１つまたは複数の領域を指示する情報をソフトウェアアプリケーション１７０１から受け取り、ソフトウェアアプリケーション１７０１に問い合わせてそれらの領域に関する情報を取得し、その情報に基づいて文書に依存しない分析コンテクストオブジェクト１９０３を構築する。インク分析ツール１９０１は、さらに、文書に依存しない分析コンテクストオブジェクト１９０３を分析のために１つまたは複数の分析プロセスに提供し、次いで分析プロセスの結果を文書１７０３の現在の状態と一致させる。これら各種のプロセスは、本発明から逸脱せずに、個別のスレッド（上記）を使用して、スレッドプールを介して、別個のプロセスとして、クラスタの個別のマシンを介して、あるいは、他の適切または所望の方式で行うことができる。
【０１３２】
本発明の別の実施例によれば、各種のソフトウェアオブジェクトおよびツールを用いてインク分析ツール１９０１を実施し、上記の機能を実行することができる。ただし、本発明の一部の実施例では、インク分析ツール１９０１は、アプリケーションプログラミングインターフェース（ＡＰＩ）として実施される。より詳細には、本発明の一部の実施例によれば、インク分析ツール１９０１は、文書１７０３中のインクを分析するために必要に応じてソフトウェアアプリケーション１７０１から呼び出すことができる、ソフトウェアオブジェクトルーチンと関連情報との群として実施することができる。
【０１３３】
当業者には理解されるように、アプリケーションプログラミングインターフェースは、ソフトウェアオブジェクトに属するカテゴリあるいは「クラス」に編成することができる。「オブジェクト」とは、記憶することが可能な状態値と実行可能な振る舞いの集合である。より詳細には、オブジェクトは、そのオブジェクトに関連付けるか、そのオブジェクトによって取り出すことができる、「フィールド」および「プロパティ」と称される各種タイプの状態値を保持することができる。それらのプロパティは、外部のソフトウェアアプリケーションまたは別のソフトウェアオブジェクトに対しては、読み取り専用（用語「｛ｇｅｔ；｝」の使用によって識別される）、書き込み専用（用語「｛ｓｅｔ；｝」の使用によって識別される）、または読み取りと書き込みの両方を可能（「｛ｇｅｔ；ｓｅｔ｝」として識別される）とすることができる。オブジェクトは、多くの場合はソフトウェアアプリケーションまたは別のオブジェクトからの要求あるいは「呼び出し」に応じてタスクあるいは「メソッド」を実行することもできる。このように、アプリケーションプログラミングインターフェースは、別のソフトウェアアプリケーションから指示されて要求に応じて特定のタスクを実行するか、特定の情報を提供することができる各種のオブジェクトを含むことができる。
【０１３４】
本発明の各種の実施例は、ソフトウェアアプリケーション１７０１が所望の分析プロセスを完了するのに必要な最小限の量の情報だけを提供すればよいように実施できることに留意されたい。この理由により、下記で詳細に説明するプロパティの一部は、読み取り専用（すなわち「｛ｇｅｔ；｝」）または書き込み専用（すなわち「｛ｓｅｔ；｝」）のみとして述べるが、本発明の各種の代替の実施では読み取りと書き込みの両方を可能とすることができる。例えば、電子インクを分析するために分析プロセスで使用される「ヒント」を定義するプロパティは、ソフトウェアアプリケーション１７０１がヒントを使用しないことになっている状況では読み取り専用のプロパティとして識別することができる。これにより、インクアナライザによって作成されたオブジェクトがこのプロパティを少なくとも読み取り、このプロパティの値がヌルのデフォルト値である（すなわちソフトウェアアプリケーション１７０１が「ヒント」を必要としない）と判定することが可能になる。ただし、ソフトウェアアプリケーション１７０１がインク分析のためにヒントを用いることを要求する場合は、このプロパティは、読み取りおよび書き込みの両方が可能となって、ソフトウェアアプリケーション１７０１が所望のヒントを指定するためにこのプロパティの値をヌル値から変更できるようにする。
【０１３５】
本発明の各種の実施例によれば、インク分析ツール１９０１の実装を実施するＡＰＩ（以下インク分析ＡＰＩと称する）は、２つのコアクラスを含むことができる。第１のクラスは「分析コンテクスト」クラスと称し、第２のクラスは「インクアナライザ」クラスである。「分析コンテクスト」クラスのコンポーネントは、分析コンテクストオブジェクト１７０９を作成するために使用される。したがって、ソフトウェアアプリケーション１７０１が独自の分析コンテクストオブジェクト１７０９を作成し維持する本発明の各種実施では、このクラスのコンポーネントの１つまたは複数をインク分析ツールから省略することができる。代わりに、これらコンポーネントの１つまたは複数をソフトウェアアプリケーション１７０１自体によって実施することができる。
【０１３６】
そして「インクアナライザ」クラスのコンポーネントを使用して、文書に依存しない分析コンテクストオブジェクト１９０３を分析プロセスに提供するオブジェクトを作成および使用し、分析結果が生成された時にその事を判定し、分析結果を文書１７０３の現在の状態と一致させる。本発明の各種実施例によるインク分析ＡＰＩに含めることが可能なこれらおよびその他のクラスについて下記で詳細に述べる。
【０１３７】
まず分析コンテクストクラスを見ると、このクラスをソフトウェアアプリケーション１７０１によって実施して、ソフトウェアアプリケーション１７０１の内部文書ツリーに対する代理（ｐｒｏｘｙ）ビューとして機能する分析コンテクストオブジェクト１７０９を作成する。あるいは、先に述べたように、アプリケーションが独自の分析コンテクストオブジェクトを実施する場合は、このクラスの１つまたは複数のコンポーネントをインク分析ツール１９０１から省略することができる。上述のように、分析コンテクストオブジェクト１７０９はすべての未分析インクデータを含んでおり、分析コンテクストオブジェクト１７０９を使用して分析すべき未分析インクデータを識別する。分析コンテクストオブジェクト１７０９は、すでに分析されたインクについての情報も含む。このすでに分析されたインクを使用して現在まだ分析されていないインクをどのように分析すべきかを判断することができ、また未分析インクを分析する過程でこの分析済みのインク自体を変更してもよい。さらに分析コンテクストオブジェクト１７０９は、文書１７０３の非インク内容についての情報を含み、この情報を使用して非インク情報に対する注釈として正しくインクを分類する。
【０１３８】
本発明の各種実施例によれば、分析コンテクストクラスは、ソフトウェアアプリケーション１７０１から呼び出されると分析コンテクストオブジェクト１７０９を作成するコンストラクタを含む。このクラスは、「Ｄｉｒｔｙ  Ｒｅｇｉｏｎ｛ｇｅｔ；｝」と称するプロパティなど、分析コンテクストオブジェクト１７０９の各種のプロパティも含むことができる。Ｄｉｒｔｙ  Ｒｅｇｉｏｎプロパティは、未分析のインクデータを含む文書の部分（およびしたがって分析コンテクストオブジェクト１７０９の部分）を定義する。本発明の各種の実施例では、Ｄｉｒｔｙ  Ｒｅｇｉｏｎは互いに素の範囲を定義することができる。Ｄｉｒｔｙ  Ｒｅｇｉｏｎは、下記でより詳細に説明するＡｎａｌｙｓｉｓＲｅｇｉｏｎとして指定されるが、単に文書中の長方形範囲の集合であってもよい。Ｄｉｒｔｙ  Ｒｅｇｉｏｎが空の場合は分析が行われない。このクラスはさらに、「Ｍａｒｇｉｎｓ｛ｇｅｔ；｝」と称する分析コンテクストオブジェクト１７０９のプロパティを含むことができ、このプロパティは、余白と見なす文書１７０３中のページ範囲を宣言する。例えばレイアウトを分析し、電子インクの分類を判定する分析プロセスがこのプロパティを使用して、非インク内容に注釈を付す電子インク（例えば余白内のインク）の分類を判定する助けとすることができる。
【０１３９】
さらには、分析コンテクストクラスは、分析コンテクストオブジェクト１７０９中の最上位ノードすなわちルートコンテクストノードを識別する「Ｒｏｏｔｎｏｄｅ｛ｇｅｔ；｝」と称するプロパティを含むことができる。上記でより詳細に説明したように、このルートコンテクストノードは、子コンテクストノードとして、所与の分析コンテクストオブジェクト１７０９のすべての他のコンテクストノードオブジェクトを含む。本発明の各種の実施例では、ルートコンテクストノードはコンテクストノードタイプ「Ｒｏｏｔ」でなければならないことに留意されたい。また、ソフトウェアアプリケーション１７０１が独自の分析コンテクストオブジェクト１７０９を実施する本発明の実施例では、分析コンテクストオブジェクト１７０９は、他のコンテクストノードをルートコンテクストノードの兄弟ノードとして有することができるが、インクアナライザクラスのコンポーネントは、ルートコンテクストノードに含まれるコンテクストノードを考慮するように限定できることにも留意されたい。
【０１４０】
分析コンテクストクラスは、さらに、ソフトウェアアプリケーション１７０１によって設定された分析ヒントオブジェクトの配列を返すプロパティ「Ａｎａｌｙｓｉｓ  Ｈｉｎｔｓ｛ｇｅｔ；｝」を含むことができる。下記でより詳細に述べるように、この分析ヒントオブジェクトは、分析プロセスを支援する任意タイプの情報を含むことができる。この情報には、例えば擬似事実（ｆａｃｔｏｉｄ）、ガイド、または単語リストを含めることができる。また、この情報は、分析に使用する言語を設定する情報、未分析のインクを手書きテキストのみあるいは描画のみに指定する情報、あるいはインクをリスト、表、形状、流れ図、連結、囲みなどと識別する情報等、構文解析プロセスに任意の種の誘導を提供する情報も含むことができる。
【０１４１】
これらのプロパティに加えて、分析コンテクストクラスは、例えばソフトウェアアプリケーション１７０１によって呼び出して分析コンテクストオブジェクト１７０９にタスクを実行させることができる各種メソッドを含むこともできる。例えば、分析コンテクストクラスは、「ＦｉｎｄＮｏｄｅ（Ｇｕｉｄ  ｉｄ）」と称するメソッドを含むことができる。分析コンテクストオブジェクト１７０９中の各ノードはグローバル一意識別子（あるいはＧＵＩＤ）を持ち、このメソッドは、呼び出し中で指定されたノードを、分析コンテクストオブジェクト１７０９中のどこからでも見つける。この探索メソッドは、多くの時間が重視される動作から呼び出される可能性があるので、可能な限り効率的に実施すべきである。
【０１４２】
分析コンテクストクラスと同様に、インクアナライザクラスも、ソフトウェアアプリケーション１７０１がこのクラスのインスタンス（すなわちインクアナライザオブジェクト）を作成することを可能にするパブリックコンストラクタを各種プロパティとともに定義する。例えば、インクアナライザクラスは、分析プロセスの結果が返される処理スレッドを定義する「Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｅｘｔ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティを含むことができる。このプロパティにより、結果を別のオブジェクトと同期することができる。例えば、このプロパティがメインフォームに設定されると、パーサの結果はアプリケーションのメインスレッドで発生する。インクアナライザクラスは、分析プロセスで使用することが可能な各種の条件（ｃｒｉｔｅｒｉａ）を指定するプロパティ「ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ｛ｇｅｔ；ｓｅｔ；｝」も含むことができる。この条件には、例えば、テキスト認識を可能にすること、表の使用を可能にすること、リストの使用を可能にすること、注釈の使用を可能にすること、および連結および囲みの使用を可能にすること等が挙げられる。
【０１４３】
インクアナライザクラスは各種のメソッドを含む。例えば、このクラスは、「ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ａｎａｌｙｚｅ（）」と称するメソッドを含むことができる。このメソッドは、同期された分析プロセスを開始する。このメソッドに、文書１７０３の現在の状態を記述し、文書１７０３中のどのインクを分析する必要があるかを指示する文書要素のデータが渡される。本発明の一部の実施では、文書要素データは、上記のように分析コンテクストオブジェクト１７０９として（すなわちＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ａｎａｌｙｚｅ（Ａｎａｌｙｓｉｓ  Ｃｏｎｔｅｘｔ））提供することができる。あるいは、個々のインクストロークを、そのストロークへの参照を使用する（すなわちＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ａｎａｌｙｚｅ（Ｓｔｒｏｋｅｓ））か、インクアナライザオブジェクトのプロパティとして参照する（例えばＩｎｋＡｎａｌｙｚｅｒ．Ｓｔｒｏｋｅｓ｛ｇｅｔ；ｓｅｔ｝）ことによりＡｎａｌｙｚｅメソッドにプロパティを渡さずに、分析プロセスに渡すことができる。
【０１４４】
分析プロセスが完了すると、このメソッドは、分析プロセスの結果を含むように変更された文書に依存しない分析コンテクストオブジェクトへの参照を返す。このメソッドは、結果が計算された文書中の範囲を記述するＡｎａｌｙｓｉｓＲｅｇｉｏｎ値（下記で詳細に説明する）も返す。
【０１４５】
インクアナライザクラスは、「ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  ＡｎａＩｙｚｅ（ＡｎａｌｙｓｉｓＣｏｎｔｅｘｔ、ｗａｉｔＲｅｇｉｏｎ）」と称するメソッドも含むことができる。このメソッドは、上述の同期のＡｎａｌｙｓｉｓ  Ｒｅｇｉｏｎ  Ａｎａｌｙｚｅ（）メソッドと同じであるが、指定されたｗａｉｔＲｅｇｉｏｎ範囲の中で結果が必要とされる場合にのみインクを分析させる。より詳細には、このメソッドを呼び出すと、文書１７０３の分析コンテクストオブジェクト１７０９と、分析プロセスが同期して分析すべき分析コンテクストオブジェクト１７０９の領域（これを「ｗａｉｔＲｅｇｉｏｎ」と称する）が識別される。本発明の各種の実施例では、分析プロセスがｗａｉｔＲｅｇｉｏｎの分析を完了するために分析コンテクストオブジェクト１７０９のすべての他の領域中の内容を分析する必要がなければ、それらすべての他の領域は無視される。上述のように、このメソッドと共に渡される分析コンテクストオブジェクト１７０９は、分析を必要とする文書１７０３の範囲を記述する「ＤｉｒｔｙＲｅｇｉｏｎ」と称するプロパティを含んでいる。ソフトウェアアプリケーション１７０１は、特定のｗａｉｔＲｅｇｉｏｎを指定することにより、文書１７０３中のすべてのインクデータを分析させるのではなく、対象とする特定の一領域についてより迅速に分析結果を得ることができる。
【０１４６】
これらのＡｎａｌｙｚｅメソッドのいずれかが呼び出されると、すべての利用可能な分析プロセスが実行される。また、これらのＡｎａｌｙｚｅメソッドは同期呼び出しなので、これらのメソッドが完了した時に一致プロセスを実行する必要がなく、またこれらのメソッドが完了した時にイベントが発生しない。
【０１４７】
インクアナライザクラスは、「ＢａｃｋｇｒｏｕｎｄＡｎａｌｙｚｅ（ＡｎａｌｙｓｉｓＣｏｎｔｅｘｔ）」と称するメソッドも含むことができる。このメソッドは、指定された分析動作を開始するが、別個のバックグラウンド分析スレッドでその動作を開始する。したがって、このメソッドは、実際の分析動作がバックグラウンドで完了するとほぼ即時にメインの処理スレッドにコントロールを返す。詳細には、このメソッドは、分析プロセスが正常に開始された場合には「真」の値を返す。この場合も、このメソッドに渡されるＡｎａｌｙｓｉｓＣｏｎｔｅｘｔ値が文書１７０３の分析コンテクストオブジェクト１７０９を識別し、分析する必要がある文書１７０３中のインクを指示する。バックグラウンドスレッドで分析動作が完了すると、Ｒｅｓｕｌｔｓイベントを発生させて、ソフトウェアアプリケーション１７１０が結果にアクセスできるようにする。このイベントは、結果と、結果が返された時に文書１７０３の現在の状態に対応する分析コンテクストオブジェクト１７０９にその結果を組み込むために使用される一致メソッドとを含んでいる。
【０１４８】
これら３つのＡｎａｌｙｚｅメソッドはそれぞれ、「Ａｎａｌｙｓｉｓ  Ｒｅｇｉｏｎ」クラスのメソッド「Ｃｌｏｎｅ」を呼び出すことに留意されたい。このメソッドについては下記で詳細に説明する。これらのＡｎａｌｙｚｅメソッドは、「Ｃｌｏｎｅ」メソッドを使用して、後に分析プロセスで分析結果を示すように変更される、文書に依存しない分析コンテクストオブジェクトを作成する。
【０１４９】
インクアナライザクラスは、「Ｒｅｃｏｎｃｉｌｅ（ＡｎａｌｙｓｉｓＣｏｎｔｅｘｔ  ｃｕｒｒｅｎｔ、ＡｎａｌｙｓｉｓＲｅｓｕｌｔｓＥｖｅｎｔＡｒｇｓ  ｒｅｓｕｌｔＡｒｇｓ）」と称するメソッドも含むことができ、このメソッドは、ＢａｃｋｇｒｏｕｎｄＡｎａｌｙｚｅ（ＡｎａｌｙｓｉｓＣｏｎｔｅｘｔ）メソッドを呼び出すことによって生じた結果イベントを受け取った後にソフトウェアアプリケーション１７０１が呼び出す。Ｒｅｃｏｎｃｉｌｅメソッドは、文書に依存しない分析コンテクストオブジェクトに含まれる分析結果を、ソフトウェアアプリケーション１７０１によって保持されている分析コンテクストオブジェクト１７０９の現在のバージョンと比較する。このメソッドは、分析コンテクストオブジェクト１７０９の現在のバージョンに追加または削除する必要があるノードを識別し、また、認識結果、位置、そのノードに関連付けられたインクストローク、あるいは分析動作の結果に関連付けられた任意の他のデータ等、既存ノードのプロパティのいずれかが変化しているかどうかを識別する。このメソッドはまた、その識別された変化を現在のバージョンの分析コンテクストオブジェクト１７０９に書き込む。このメソッドは、行コンテクストノードにおける単語コンテクストノードの順序など、コンテクストノードの順序の順序付けに影響される。
【０１５０】
分析結果（すなわちプロパティＡｎａｌｙｓｉｓＲｅｓｕｌｔｓＥｖｅｎｔＡｒｇｓの値）は、パブリックの結果構造とプライベートの結果構造とを含んでいるのでこのメソッドと共に返される。パブリックな構造は、ソフトウェアアプリケーション１７０１が一致段階で生じる変化を事前に確認できるようにするために返される。プライベートな構造は、ソフトウェアアプリケーション１７０１が一致プロセスの前に分析結果を変更できないようにするために含められる。
【０１５１】
インクアナライザクラスは、「Ｒｅｃｏｇｎｉｚｅｒｓ  ＲｅｃｏｇｎｉｚｅｒｓＰｒｉｏｒｉｔｙ（）」および「ＳｅｔＨｉｇｈｅｓｔＰｒｉｏｒｉｔｙＲｅｃｏｇｎｉｚｅｒ（ｒｅｃｏｇｎｉｚｅｒ）」と称するメソッドも含むことができる。インクを認識する必要がある場合は、言語と能力に応じて適切なレコグナイザが使用される。したがって、Ｒｅｃｏｇｎｉｚｅｒｓ  ＲｅｃｏｇｎｉｚｅｒｓＰｒｉｏｒｉｔｙ（）メソッドは、Ｉｎｋ  Ａｎａｌｙｚｅｒオブジェクトによって評価される順序で認識プロセスを返す。この順序は、利用可能な認識プロセスに応じてシステムごとに決定されるが、Ｉｎｋ  Ａｎａｌｙｚｅｒオブジェクトに対してＳｅｔＨｉｇｈｅｓｔＰｒｉｏｒｉｔｙＲｅｃｏｇｎｉｚｅｒ（ｒｅｃｏｇｎｉｚｅｒ）を呼び出すことにより、ソフトウェアアプリケーション１７０１ごとに無効にすることができる。ＩｎｋＡｎａｌｙｚｅｒは、適切なレコグナイザが見つかるまでこの順序付けられたリストを列挙する。ＳｅｔＨｉｇｈｅｓｔＰｒｉｏｒｉｔｙＲｅｃｏｇｎｉｚｅｒ（ｒｅｃｏｇｎｉｚｅｒ）メソッドは、認識プロセスの優先順位を生成（ｒａｉｓｅ）する。特定の認識プロセスの優先順位を生成することにより、現在の認識動作の能力と必要とされる言語に一致する場合にはその認識プロセスが使用される。基本的に、ＳｅｔＨｉｇｈｅｓｔＰｒｉｏｒｉｔｙＲｅｃｏｇｎｉｚｅｒ（ｒｅｃｏｇｎｉｚｅｒ）は、指定された認識プロセスをＲｅｃｏｇｎｉｚｅｒｓＰｒｉｏｒｉｔｙメソッドから返されるリストの一番上にプッシュする。
【０１５２】
インクアナライザクラスは、分析コンテクストオブジェクトをパラメータとして使用することができる「ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ａｂｏｒｔ（）」と称するメソッドも含むことができる。このメソッドは、フォアグラウンドまたはバックグラウンドの分析動作を早く終了させることができる。このメソッドは、中断される前に分析されていた範囲を記述する分析領域を返す。したがって、ソフトウェアアプリケーション１７０１が後の時間に分析動作を継続するつもりである場合は、その領域を、文書１７０３の現在の状態に対応する分析コンテクストオブジェクト１７０９のＤｉｒｔｙＲｅｇｉｏｎに併合することができる。さらに、インクアナライザクラスは、実際的である限り頻繁にＩｎｋＡｎａｌｙｚｅｒオブジェクトに対して発生する「ＡｎａｌｙｓｉｓＲｅｓｕｌｔｓＥｖｅｎｔＨａｎｄｌｅｒ」と称するイベントを含むことができる。より詳細には、このイベントは、分析プロセスと分析プロセスの間に少なくとも５秒に一回発生することができる。このイベントを使用して、進行中の非同期の分析プロセス（群）のステータスについての更新をアプリケーション１７０１に提供することができる。
【０１５３】
インク分析ＡＰＩは、分析コンテクストクラスおよびインクアナライザクラス以外のクラスも含むことができる。例えば、本発明の各種実施例によるインク分析ＡＰＩは、コンテクストノードクラスを含むことができる。このクラスは、「ＣｏｎｔｅｘｔＮｏｄｅＴｙｐｅ  Ｔｙｐｅ｛ｇｅｔ；｝」と称するプロパティなど、分析コンテクストオブジェクト１７０９および文書に依存しない分析コンテクストオブジェクトを構成するコンテクストノードに関連する各種のコンポーネントを含むことができる。当業者には理解されるように、各コンテクストノードにはタイプがあり、各タイプが遵守しなければならない特定の規則セットがある。この規則には、例えば、許可される子コンテクストノードのタイプ、ストロークを直接コンテクストノードに関連付けてよいか否か、あるいはその子コンテクストノードを介してのみ関連付けてよいか否かについての規則が含まれる。
【０１５４】
可能なコンテクストノードのタイプは、ＣｏｎｔｅｘｔＮｏｄｅＴｙｐｅｓの列挙中で定義することができ、例えば（これらに限定しないが）次のようなタイプが可能である。それは、非テキストデータに注釈を付すインクデータを表すＩｎｋＡｎｎｏｔａｔｉｏｎノード、描画を形成するインクデータを表すＩｎｋＤｒａｗｉｎｇノード、単語を形成するインクデータを表すＩｎｋＷｏｒｄノード、テキストの行を形成する単語に対応する１つまたは複数のＩｎｋＷｏｒｄノードおよび／またはＴｅｘｔＷｏｒｄノードを含むＬｉｎｅノード、段落ノード、画像ノード、あるいはリスト中にあることが予想される同様のノードを含むことが可能なＬｉｓｔＩｔｅｍノード、および、それぞれがリスト中の項目を記述する１つまたは複数のＬｉｓｔＩｔｅｍノードを含むＬｉｓｔノードである。また、可能なノードタイプには非インクの描画画像を表すＮｏｎＩｎｋＤｒａｗｉｎｇノード、ＣｏｎｔｅｘｔＮｏｄｅＴｙｐｅの列挙の他の値に包含されないデータを表すＯｂｊｅｃｔノード、段落を形成する行に対応する１つまたは複数のＬｉｎｅノードを含むＰａｒａｇｒａｐｈノード、ピクチャ画像を表すＰｉｃｔｕｒｅまたはＩｍａｇｅノード、分析コンテクストオブジェクト中の最上位ノードの役割を果たすＲｏｏｔノード、表を構成する項目を表すノードを含むＴａｂｌｅノード、テキストボックスを表すＴｅｘｔＢｏｘノード、ＴｅｘｔＷｏｒｄノード、および、まだ分類されていないインクデータに対応するＵｎｃｌａｓｓｉｆｉｅｄＩｎｋノード、も含むことができる。可能なノードタイプには、他ノードのグループに対応するＧｒｏｕｐノード、中黒項目についてのＩｎｋＢｕｌｌｅｔノード、表の行に提示される文書要素についてのＲｏｗノード、および表のセル中に提示される文書要素についてのＣｅｌｌノードも含めることができる。
【０１５５】
コンテクストノードクラスは、現在のコンテクストノードのグローバル一意識別子である「ＧＵＩＤ  Ｉｄ｛ｇｅｔ；｝」と称するプロパティも含むことができる。必要なコンテクストノードにアクセスできるようにするために、単一の分析コンテクストオブジェクト中の各コンテクストノードは、必ず一意の識別子を持たなければならない。このクラスは、関連するコンテクストノードが実際に位置する文書空間中の場所を識別する「ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ｌｏｃａｔｉｏｎ｛ｇｅｔ；｝」と称するプロパティも含むことができる。先に述べたように、ＡｎａｌｙｓｉｓＲｅｇｉｏｎは、１つまたは複数の可能性としては互いに素の長方形のような構造を共にグループ化する２次元構造である。このクラスは、関連するコンテクストノードに関連付けられたインクストロークを識別する「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ  Ｓｔｒｏｋｅｓ｛ｇｅｔ；｝」と称するプロパティも含むことができる。本発明の各種の実施例では、葉コンテクストノード（単語、描画、中黒ノードなど）だけがストロークを持つことがインク分析ＡＰＩによって許可される。ソフトウェアアプリケーション１７０１は、このプロパティを使用して、葉ノードレベルにあるストロークをすべての祖先コンテクストノードから参照付ける（例えば、ルートノードが、関連する分析コンテクストオブジェクト中のすべてのストロークへのストローク参照を含む）。
【０１５６】
さらに、このクラスは、関連するコンテクストノードを含んでいる親コンテクストノードを識別する「ＣｏｎｔｅｘｔＮｏｄｅ  ＰａｒｅｎｔＮｏｄｅ｛ｇｅｔ；｝」と称するプロパティを含むことができる。本発明の各種の実施例では、コンテクストノードは必ず親コンテクストノードの子ノードとなるように作成され、ルートコンテクストノードが分析コンテクストオブジェクトの静的メンバになる。このクラスは、関連するコンテクストノードの直接の子であるすべてのコンテクストノードを識別するプロパティ「ＣｏｎｔｅｘｔＮｏｄｅ［］  ＳｕｂＮｏｄｅｓ｛ｇｅｔ；｝」も含むことができる。すなわち、このプロパティは、分析コンテクストオブジェクト中で１レベル下の子コンテクストノードだけを識別する。例えば、段落コンテクストノードの場合のこのプロパティの値は、その段落ノードに含まれる行コンテクストノードのみを識別し、それらの行コンテクストノードの子である単語コンテクストノードは識別しない。
【０１５７】
このクラスは、「ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ  ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ｛ｇｅｔ；｝」と称するプロパティも含むことができ、ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔは２つ以上の言語の２つ以上のテキスト行を表すことができるので、このプロパティは、関連する認識分析プロセスによって計算された認識結果を提供する。Ｒｅｃｏｇｎｉｔｉｏｎ  Ｒｅｓｕｌｔは、認識分析プロセスによって設定され、ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクトを作成するために使用されるＲｅｃｏｇｎｉｔｉｏｎＤａｔａプロパティ（下記でより詳細に説明する）がデータの重複を回避するためにコンテクストノードツリーの１レベルでしか設定できなくとも、文書に依存しない分析コンテクストオブジェクト中のすべてのコンテクストノードに利用することができる。ノードにＲｅｃｏｇｎｉｔｉｏｎＤａｔａが関連付けられていない場合、そのノードは、そのすべての下位ノードの認識結果を併合するか、または自分の親から認識結果を抽出する。このクラスは、ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ値の永続的な形態である「Ｓｔｒｅａｍ  ＲｅｃｏｇｎｉｔｉｏｎＤａｔａ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティも含むことができる。ここでも、認識分析プロセスが、関連するコンテクストノードに対して設定されるＳｔｒｅａｍ  ＲｅｃｏｇｎｉｔｉｏｎＤａｔａ値を生成する。次いで、その値に基づいてＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクトが構築される。
【０１５８】
Ｃｏｎｔｅｘｔ  Ｎｏｄｅクラスはさらに、ＣｏｎｔｅｘｔＬｉｎｋオブジェクトの配列を提供する「ＣｏｎｔｅｘｔＬｉｎｋ［］  Ｌｉｎｋｓ｛ｇｅｔ；｝」と称するプロパティを含むことができる。ＣｏｎｔｅｘｔＬｉｎｋオブジェクトは、２つのコンテクストノード間の代替の関係を記述する。通例、コンテクストノードは他のコンテクストノードと親子関係を有するが、ＣｏｎｔｅｘｔＬｉｎｋはコンテクストノード間の代替の関係を可能にする。ＣｏｎｔｅｘｔＬｉｎｋは例えば、２つのコンテクストノードの接続、あるコンテクストノードの別のコンテクストノードへの固定、別のコンテクストノードによるコンテクストノードの包含、あるいはソフトウェアアプリケーション１７０１が定義する所望タイプのリンクを可能にすることができる。下記でより詳細に説明するように、ＡｄｄＬｉｎｋメソッドを呼び出すことによりこの配列にＣｏｎｔｅｘｔＬｉｎｋを追加することができる。同様に、ＤｅｌｅｔｅＬｉｎｋメソッドを呼び出すことによりこの配列からＣｏｎｔｅｘｔＬｉｎｋを削除することができる。これも下記でより詳細に説明する。
【０１５９】
Ｃｏｎｔｅｘｔ  Ｎｏｄｅクラスは、さらに、プロパティ「ＩｓＣｏｎｔａｉｎｅｒ｛ｇｅｔ；｝」と「ＩｓＩｎｋＬｅａｆ｛ｇｅｔ；｝」とを含むことができる。プロパティＩｓＣｏｎｔａｉｎｅｒ｛ｇｅｔ；｝は、関連するコンテクストノードが葉コンテクストノードでない場合（すなわち関連するコンテクストノードが子コンテクストノードを含み、したがって囲みコンテクストノードと見なされる場合）に「真」の値をとり、その他の場合は「偽」の値をとる。ＩｓＩｎｋＬｅａｆ｛ｇｅｔ；｝プロパティは、現在のコンテクストノードが囲みコンテクストノードでない場合に「真」の値をとり、その他の場合は「偽」の値をとる。すなわち、現在のコンテクストノードが子コンテクストノードを含まない場合、そのノードは葉コンテクストノードと見なされる。また、本発明の各種の実施例では、ＩｎｋＬｅａｆコンテクストノードは、ストロークデータへの参照を含むものとされるのに対して、囲みコンテクストノードにはこの制約がないことにも留意されたい。囲みコンテクストノードは、ソフトウェアアプリケーション１７０１の指示に応じて、ストロークデータを参照することも、しないこともある。
【０１６０】
Ｃｏｎｔｅｘｔ  Ｎｏｄｅクラスは、プロパティ「Ｒｅｃｔ  ＲｏｔａｔｅｄＢｏｕｎｄｉｎｇＢｏｘ｛ｇｅｔ；ｓｅｔ；｝」も含むことができる。このプロパティの値は、レイアウトおよび分類の分析プロセスで計算される。関連するコンテクストノードに関連付けられたインクデータがある角度で書かれている場合でも、コンテクストノードの境界はなお水平方向に位置合わせされる。しかし、ＲｏｔａｔｅｄＢｏｕｎｄｉｎｇＢｏｘプロパティの値は、関連するコンテクストノードに関連付けられたインクデータが書かれた角度に合わせて調整される。さらに、このクラスは、関連するコンテクストノードの値を変更することが許可されているかどうかどうかをＩｎｋＡｎａｌｙｚｅｒに通知するプロパティ「ＲｅＣｌａｓｓｉｆｉａｂｌｅ｛ｇｅｔ；｝」を含むことができる。
【０１６１】
これらのプロパティに加えて、Ｃｏｎｔｅｘｔ  Ｎｏｄｅクラスは、各種のメソッドも含むことができる。例えば、このクラスは、「ＣｏｎｔｅｘｔＮｏｄｅ  ＣｒｅａｔｅＳｕｂＮｏｄｅ（ＣｏｎｔｅｘｔＮｏｄｅＴｙｐｅ  ｔｙｐｅ）」と称するメソッドを含むことができる。このメソッドは、特定のタイプの子コンテクストノードを作成することを可能にする。本発明の各種の実施例では、このメソッドは、有効な子タイプの関連コンテクストノードの作成だけを許可し、それにより形式が正しくないデータ構造が作成されないようにする。例えば、このメソッドは、行コンテクストノードがＩｎｋＷｏｒｄおよびＴｅｘｔＷｏｒｄの子コンテクストノードを作成することだけを許可することができる。このクラスは、関連する分析コンテクストオブジェクトから参照される子コンテクストノードを削除する「ｖｏｉｄ  ＤｅｌｅｔｅＳｕｂＮｏｄｅ（ＣｏｎｔｅｘｔＮｏｄｅ  ｎｏｄｅ）」と称するメソッドも含むことができる。ただし、本発明の各種の実施例では、参照されるコンテクストノードがさらにストロークすなわち子コンテクストノードを含む場合は、このメソッドは失敗することに留意されたい。また、参照コンテクストノードが関連するコンテクストノードの直接の子でない場合もこのメソッドは失敗する。ソフトウェアアプリケーション１７０１が独自の分析コンテクストオブジェクト１７０９を実施し、このメソッドを使用する場合、このメソッドは、空でないコンテクストノードまたは、関連するコンテクストノードの直接の子でないコンテクストノードを削除しないことにより、分析コンテクストオブジェクト１７０９中に形式が正しくないデータ構造が生成されないようにすることに留意されたい。
【０１６２】
さらに、このクラスは、指定される領域内に位置するコンテクストノードの配列を返すメソッド「ＣｏｎｔｅｘｔＮｏｄｅ［］  ＨｉｔＴｅｓｔＳｕｂＮｏｄｅｓ（ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  ｒｅｇｉｏｎ）」を含むことができる。ただし、すべての子孫が返されるのではなく、その要素の直接の子ノードだけが返されることに留意されたい。この領域は、先に説明したように１つまたは複数の長方形の集合などであるＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトで定義される。本発明の各種の実施例によれば、あるコンテクストノードの位置の一部が指定領域と重なる場合は、そのコンテクストノードが配列で返される。このメソッドは、例えば文書に依存しない分析コンテクストオブジェクトを作成し、分析結果を文書１７０３の現在の状態に対応する分析コンテクストオブジェクトと一致させるために用いられる。したがって、このメソッドは頻繁に呼び出され、ＩｎｋＡｎａｌｙｚｅｒオブジェクトによる反復的な高速アクセスのために最適化すべきである。
【０１６３】
Ｃｏｎｔｅｘｔ  Ｎｏｄｅクラスは、「ＭｏｖｅＳｔｒｏｋｅ（Ｓｔｒｏｋｅ  ｓｔｒｏｋｅ、ＣｏｎｔｅｘｔＮｏｄｅ  ｄｅｓｔｉｎａｔｉｏｎ）」と称するメソッドも含むことができる。このメソッドは、ストロークの関連付けをある葉コンテクストノードから別の葉コンテクストノードに移動する。本発明の各種の実施例では、このメソッドは、葉コンテクストノード間でのみ使用される。このクラスは、兄弟コンテクストノードに対して関連するコンテクストノードの順序を変える「ＭｏｖｅＳｕｂＮｏｄｅＴｏＰｏｓｉｔｉｏｎ（ｉｎｔ  ＯｌｄＩｎｄｅｘ、ｉｎｔ  ＮｅｗＩｎｄｅｘ）」と称するメソッドも含むことができる。例えば、文書１７０３がある行に例えば単語１、単語２、および単語３の３つの単語を有する場合、その単語の順序は、親コンテクストノードから返される下位ノードの配列によって暗示される。このメソッドはその順序を変えることができ、単語１のコンテクストノードを位置１から位置３に移動することにより、関連する親コンテクストノードに対して単語１がその行で最後の単語であることが指示される。
【０１６４】
さらに、このクラスは、現在のコンテクストノードに新しいＣｏｎｔｅｘｔＬｉｎｋオブジェクトを追加する「ＡｄｄＬｉｎｋ（ＣｏｎｔｅｘｔＬｉｎｋ  ｌｉｎｋ）」と称するメソッドを含むことができる。本発明の各種実施例で、関連するコンテクストノードに関連付けられたＣｏｎｔｅｘｔＬｉｎｋの配列へのＣｏｎｔｅｘｔＬｉｎｋの追加が成功するように、ＣｏｎｔｅｘｔＬｉｎｋオブジェクトは、関連するコンテクストノードへの参照を含まなくてはならない。このクラスは、「ＤｅｌｅｔｅＬｉｎｋ（ＣｏｎｔｅｘｔＬｉｎｋ  ｌｉｎｋ）」と称するメソッドも含むことができる。このメソッドは、関連するコンテクストノードのＣｏｎｔｅｘｔＬｉｎｋの配列から、指定されたＣｏｎｔｅｘｔＬｉｎｋオブジェクトを削除あるいは除去する。本発明の各種実施例では、このメソッド呼び出しは、関連するコンテクストノードに関連付けられたＣｏｎｔｅｘｔＬｉｎｋの配列中にＣｏｎｔｅｘｔＬｉｎｋが存在しない場合でも、常に成功して完了することに留意されたい。
【０１６５】
インク分析ＡＰＩはＡｎａｌｙｓｉｓ  Ｈｉｎｔクラスも含むことができる。上述のクラスの多くと同様に、Ａｎａｌｙｓｉｓ  Ｈｉｎｔクラスは、Ａｎａｌｙｓｉｓ  Ｈｉｎｔオブジェクトを空の状態に初期化する「ＡｎａｌｙｓｉｓＨｉｎｔ（）」と称するコンストラクタを含むことができる。このクラスは、「ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ｌｏｃａｔｉｏｎ｛ｇｅｔ；｝」と称するプロパティなどいくつかのプロパティを含むこともできる。ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ｌｏｃａｔｉｏｎ｛ｇｅｔ；｝プロパティは、ＡｎａｌｙｓｉｓＨｉｎｔを適用することが可能な文書１７０３中の場所を（ＡｎａｌｙｓｉｓＲｅｇｉｏｎとして）指定する。例えば、文書１７０３が、タイトル部分がページの一番上にある自由形式のメモである場合、アプリケーション１７０１は、タイトル領域に対してＡｎａｌｙｓｉｓＨｉｎｔを設定して、インクの水平線がその領域に予想されることを示すことができる。このＡｎａｌｙｓｉｓ  Ｈｉｎｔは、分析プロセスの精度を高める一助となる。
【０１６６】
このクラスは、ＡｎａｌｙｓｉｓＨｉｎｔを適用することが可能な文書１７０３中の場所に使用する特定の「擬似事実」を指定する「ｓｔｒｉｎｇ  Ｆａｃｔｏｉｄ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティも含むことができる。当業者には知られるように、擬似事実は、予想されるインクデータの使用法（例えば通常のテキスト、数字、郵便番号、ファイル名、ウェブのＵＲＬなどとしての使用）について認識プロセスにヒントを与える。このクラスは、「ＲｅｃｏｇｎｉｚｅｒＧｕｉｄｅ  Ｇｕｉｄｅ｛ｇｅｔ；ｓｅｔ；｝」および「ＯｖｅｒｒｉｄｅＬａｎｇｕａｇｅＩｄ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティも含むことができる。ＲｅｃｏｇｎｉｚｅｒＧｕｉｄｅ  Ｇｕｉｄｅ｛ｇｅｔ；ｓｅｔ；｝プロパティは、ＡｎａｌｙｓｉｓＨｉｎｔを適用することが可能な文書１７０３中の場所に適用すべき書き込みガイドを指定する。書き込みガイドは、例えば、ユーザが行または文字をどこに書くかをユーザに指定し、レコグナイザ分析プロセスに通知することにより、レコグナイザ分析プロセスの精度を高める助けとなることができる。ＯｖｅｒｒｉｄｅＬａｎｇｕａｇｅＩｄ｛ｇｅｔ；ｓｅｔ；｝プロパティは、ＡｎａｌｙｓｉｓＨｉｎｔを適用することが可能な文書１７０３に対して言語のヒントを指定する。Ｌａｎｇｕａｇｅ  Ｈｉｎｔを設定することにより、ＩｎｋＡｎａｌｙｚｅｒオブジェクトは、コンテクストノードに指定された言語の代わりに指定された言語を使用する。
【０１６７】
このクラスは、認識しようとするインク行より前に書かれた、あるいはタイプされたテキストを指定する「ＰｒｅｆｉｘＴｅｘｔ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティも含むことができる。このクラスはさらに、ＡｎａｌｙｓｉｓＨｉｎｔを適用することが可能な文書１７０３中の場所で認識プロセスが遵守すべき特定のタイプのモードを指定する「ＲｅｃｏｇｎｉｔｉｏｎＭｏｄｅｓ  ＲｅｃｏｇｎｉｔｉｏｎＦｌａｇｓ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティを含むことができる。さらに、このクラスは、認識しようとするインク行の後に書かれた、またはタイプされたテキストを指定する「ＳｕｆｆｉｘＴｅｘｔ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティと、認識分析プロセスが使用すべき特定の単語のセットを指定する「ＷｏｒｄＬｉｓｔ  ＷｏｒｄＬｉｓｔ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティを含むことができる。単語のリストは、医療用フォームに書かれることが予測される医学用語のリストなど、ユーザが実際に入力データを書き終わる前に予想される認識結果が分かる場合に使用することができる。
【０１６８】
さらにこのクラスは、「ＷｏｒｄＭｏｄｅ｛ｇｅｔ；ｓｅｔ｝」と称するプロパティを含むことができる。この値が「真」である場合、分析プロセスは、分析領域全体に対して単一の単語を返すように自身を偏らせる。このクラスは、「Ｃｏｅｒｃｅ｛ｇｅｔ；ｓｅｔ｝」と称するプロパティも含むことができ、このプロパティは、「真」である場合には、分析プロセスが関連するヒント中で設定された擬似事実または単語リスト値に結果を制約することを強制する。このクラスは、「ＡｌｌｏｗＰａｒｔｉａｌＤｉｃｔｉｏｎａｒｙＴｅｒｍｓ｛ｇｅｔ；ｓｅｔ｝」と称するプロパティも含むことができる。このプロパティが「真」である場合、認識分析プロセスは、自身の認識ディクショナリから一部の単語を返すことを許される。
【０１６９】
本発明の各種実施例によれば、インク分析ＡＰＩはさらにＡｎａｌｙｓｉｓ  Ｒｅｇｉｏｎクラスを含むことができる。このクラスは例えば、ＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトを構築する複数のコンストラクタを含むことができる。例えば、このクラスは、任意の領域を有するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトを構築する第１のコンストラクタと、２次元の長方形についてのパラメータに基づいてＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトを構築する第２のコンストラクタと、４つの空間座標に基づいてＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトを構築する第３のコンストラクタを含むことができる。デフォルトのコンストラクタは例えば空の領域を作成する。このクラスはいくつかのプロパティも含むことができる。このクラスは例えば、ＡｎａｌｙｓｉｓＲｅｇｉｏｎの境界となる長方形を取り出す「Ｒｅｃｔａｎｇｌｅ  Ｂｏｕｎｄｓ｛ｇｅｔ；｝」と称するプロパティ、関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトが空の内部を有するかどうかを示す「ＩｓＥｍｐｔｙ｛ｇｅｔ；｝」と称するプロパティ、および関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎが無限に設定されているか否かを示す「ＩｓＩｎｆｉｎｉｔｅ｛ｇｅｔ；｝」と称するプロパティを含むことができる。
【０１７０】
このクラスは、関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトのクローンを作成する「ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  Ｃｌｏｎｅ（）」と称するメソッドなど、いくつかのメソッドも含むことができる。このクラスは、指定されたＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクト（ｏｔｈｅｒＲｅｇｉｏｎと称する）が関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトと同一であるかどうかをテストする「Ｅｑｕａｌｓ（ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  ｏｔｈｅｒＲｅｇｉｏｎ）」と称するメソッドも含むことができる。このメソッドは、指定されるＡｎａｌｙｓｉｓ  Ｒｅｇｉｏｎオブジェクトの内部が関連するＡｎａｌｙｓｉｓ  Ｒｅｇｉｏｎオブジェクトの内部と同一である場合は「真」の値を返し、その他の場合は「偽」の値を返す。
【０１７１】
このクラスはさらに、指定される分析領域に合わせて関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトを縮小する（ｃｒｏｐ  ｄｏｗｎ）「Ｉｎｔｅｒｓｅｃｔ（ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  ｒｅｇｉｏｎＴｏＩｎｔｅｒｓｅｃｔ）」メソッドも含むことができる。したがって、このメソッドの結果得られるＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトは、指定された分析領域と重複するか、または交差した範囲だけを含む。このクラスは、指定される長方形に合わせて関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎを縮小する「Ｉｎｔｅｒｓｅｃｔ（Ｒｅｃｔａｎｇｌｅ  ｒｅｃｔａｎｇｌｅ）」と称するメソッドも含むことができる。この場合も、結果得られるＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトは、指定された長方形と重複したか、交差した範囲のみを含む。このクラスは、関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトの内部を空に初期化する「ＭａｋｅＥｍｐｔｙ（）」と称するメソッドと、関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎによって占められる範囲を無限に設定する「ＭａｋｅＩｎｆｉｎｉｔｅ（）」と称するメソッドも含むことができる。このクラスはさらに、関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトに合体する、または加えるＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトを指定する「Ｕｎｉｏｎ（ＡｎａｌｙｓｉｓＲｅｇｉｏｎ  ｒｅｇｉｏｎＴｏＵｎｉｏｎ）」と称するメソッドや、指定される長方形を関連するＡｎａｌｙｓｉｓ  Ｒｅｇｉｏｎオブジェクトと合体する「Ｕｎｉｏｎ（Ｒｅｃｔａｎｇｌｅ  ｒｅｃｔａｎｇｌｅ）」と称するメソッドなど、異なった形で定義された範囲を合体または分離するための各種メソッドを含むことができる。Ｕｎｉｏｎ（Ｒｅｃｔａｎｇｌｅ  ｒｅｃｔａｎｇｌｅ）メソッドでは、関連するＡｎａｌｙｓｉｓＲｅｇｉｏｎオブジェクトの座標空間によって長方形を指定することができる。言うまでもなく、このクラスは、所望の範囲の定義に基づいて、範囲を組み合わせる、または別の範囲からある範囲を抽出する多数の他のメソッドを含むことができる。
【０１７２】
インク分析ＡＰＩは、Ｒｅｃｏｇｎｉｔｉｏｎ  Ｒｅｓｕｌｔクラスも備えることができる。先に述べたクラスの多くと同様に、Ｒｅｃｏｇｎｉｔｉｏｎ  Ｒｅｓｕｌｔクラスも１つまたは複数のコンストラクタを含むことができる。例えば、このクラスは、所与の認識ラティス（ｌａｔｔｉｃｅ）からＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔｓオブジェクトを構築する「ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ（Ｓｔｒｅａｍ  ｌａｔｔｉｃｅ）」と称するコンストラクタを含むことができる。本発明の各種実施例で、認識ラティスは、認識プロセスの結果をシリアル化した形態である。このメソッドは、例えば、関連するＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクトの構築に使用されるバイト配列として認識ラティスを指定することができる。このクラスは、所与のコンテクストノードからＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔｓオブジェクトを構築する「ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ（ＣｏｎｔｅｘｔＮｏｄｅ  ｎｏｄｅ）」と称するコンストラクタも含むことができる。また、「ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ（ｓｔｒｉｎｇ  Ｔｅｘｔ、ｉｎｔ  ＳｔｒｏｋｅＣｏｕｎｔ）」と称するコンストラクタも含むことができ、このコンストラクタは、指定されたテキスト値からＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔｓオブジェクトを構築し、そのオブジェクトは、指定された数のストロークに関連付けられ、認識プロセスで実際の手書きインクデータに対応する代替の認識値が得られなかった場合に補正のために使用することができる。さらに、このクラスは、２つの既存のＲｅｃｏｇｎｉｔｉｏｎ  Ｒｅｓｕｌｔｓオブジェクトを共に併合することによりＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔｓオブジェクトを構築する「ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ（ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ  ｌｅｆｔＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ、ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ  ｒｉｇｈｔＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ）」と称するコンストラクタを含むことができる。
【０１７３】
Ｒｅｃｏｇｎｉｔｉｏｎ  Ｒｅｓｕｌｔクラスは、単一のインクオブジェクトに含まれるストロークの集合を表すストローク索引の配列を提供する「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ  ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ｛ｇｅｔ；｝」と称するプロパティや、認識結果の最良の選択肢を提供する「ＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅ  ＴｏｐＡｌｔｅｒｎａｔｅ｛ｇｅｔ；｝」と称するプロパティなど、１つまたは複数のプロパティも含むことができる。このクラスは、認識分析プロセスによる現在の結果の最上位の選択肢を選択することの信頼度（例えば強い、中程度、弱いなど）を提供する「ＲｅｃｏｇｎｉｔｉｏｎＣｏｎｆｉｄｅｎｃｅ  ＲｅｃｏｇｎｉｔｉｏｎＣｏｎｆｉｄｅｎｃｅ｛ｇｅｔ；｝」と称するプロパティと、認識分析プロセスから得られた分析結果の最良の結果のストリングを返す「ｓｔｒｉｎｇ  ＴｏｐＳｔｒｉｎｇ｛ｇｅｔ；｝」と称するプロパティも含むことができる。
【０１７４】
Ｒｅｃｏｇｎｉｔｉｏｎ  Ｒｅｓｕｌｔｓクラスは、認識分析プロセスから得られた分析結果の最良の結果ストリング中の選択からの選択肢の集合を指定する（この場合各選択肢は１つのみのインクセグメントに対応する）「ｐｕｂｌｉｃ  ＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅＣｏｌｌｅｃｔｉｏｎ  ＧｅｔＡｌｔｅｒｎａｔｅＣｏｌｌｅｃｔｉｏｎＦｒｏｍＳｅｌｅｃｔｉｏｎ（ｓｅｌｅｃｔｉｏｎＳｔａｒｔ、ｓｅｌｅｃｔｉｏｎＬｅｎｇｔｈ、ｍａｘｉｍｕｍＡｌｔｅｒｎａｔｅｓ）」と称するメソッドなど、複数のメソッドも含むことができる。このメソッドの入力パラメータとしては、例えば、選択肢の集合が返されるテキスト選択の開始部を指定する値、選択肢の集合が返されるテキスト選択の長さを指定する値、および返される選択肢の最大数を指定する値などが可能である。このメソッドは、認識結果の最良の結果のストリング中の選択からＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅＣｏｌｌｅｃｔｉｏｎの選択肢の集合を返すことができる。
【０１７５】
Ｒｅｃｏｇｎｉｔｉｏｎ  Ｒｅｓｕｌｔｓクラスはさらに、「ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ  Ｍｅｒｇｅ（ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ  ｌｅｆｔ、ｓｔｒｉｎｇ  ｓｅｐａｒａｔｏｒ、ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ  ｒｉｇｈｔ）」と称するメソッドを含むことができる。このメソッドを使用して、単一のストリングから新しいＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクト（平坦なラティスになる）を作成する、既存のＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクトの開始部または最後に単一のストリングを付加する、あるいは２つの既存のＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクト間に単一のストリングを連結することができる。このクラスは、既知の選択肢を用いて認識結果を変更するように指示する「ＭｏｄｉｆｙＴｏｐＡｌｔｅｒｎａｔｅ（ＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅ  ａｌｔｅｒｎａｔｅ）」と称するメソッドも含むことができる。本発明の一部の実施形態では、デフォルトでは、認識分析プロセスの結果の中で最良の結果のストリングが、最上位の選択肢に対応する。ただし、このメソッドを使用して、認識分析プロセスの結果中で最上位の選択肢以外の選択肢を使用するように指定することができる。新しい最上位の選択肢を使用した結果、以前の区分とは異なる区分になる場合、ＭｏｄｉｆｙＴｏｐＡｌｔｅｒｎａｔｅメソッドはその変更を反映するように自動的にコンテクストノードを更新する。認識結果を変更するために使用できる選択肢を取り出すために、このメソッドは、下記で詳細に説明するＧｅｔＡｌｔｅｒｎａｔｅｓＦｒｏｍＳｅｌｅｃｔｉｏｎメソッドを呼び出すことに留意されたい。このクラスは、関連するＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔｓオブジェクトを認識ラティスの形で永続的に保持する「Ｓｔｒｅａｍ  Ｓａｖｅ（）」と称するメソッドも備えることができる。認識ラティスは、認識プロセスの結果を表すために使用されるシリアル化されたフォーマットである。
【０１７６】
インク分析ＡＰＩは、Ａｎａｌｙｓｉｓ  Ｏｐｔｉｏｎｓの列挙型も有することができる。この型は、分析プロセスで利用可能なすべてのオプションを使用可能にする「ｃｏｎｓｔ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  Ｄｅｆａｕｌｔ」と称するフィールドなど、分析プロセスでインクデータを分析する方式を指定する１つまたは複数のフィールドを含むことができる。このフィールドは、例えば、テキスト認識、表の使用、リストの使用、注釈の使用、連結および囲みの使用、および中間結果の使用を可能にすることができる。この型は、注釈の検出を使用可能および使用不可にする「ｃｏｎｓｔ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  ＥｎａｂｌｅＡｎｎｏｔａｔｉｏｎｓ」と称するフィールド、連結および囲みの検出を可能および不可にする「ｃｏｎｓｔ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  ＥｎａｂｌｅＣｏｎｎｅｃｔｏｒｓＡｎｄＣｏｎｔａｉｎｅｒｓ」と称するフィールド、および、連続して行われる異なるプロセスの使用間に（例えば構文解析プロセスとその後に行われる認識プロセスとの間）ソフトウェアアプリケーション１７０１に分析結果を返すことを可能および不可にする「ｃｏｎｓｔ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  ＥｎａｂｌｅＩｎｔｅｒｍｅｄｉａｔｅＲｅｓｕＩｔｓ」と称するフィールドも含むことができる。この型は、リストの検出を可能および不可にする「ｃｏｎｓｔ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  ＥｎａｂｌｅＬｉｓｔｓ」と称するフィールドと、表の検出を可能および不可にする「ｃｏｎｓｔ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  ＥｎａｂｌｅＴａｂｌｅｓ」と称するフィールドも備えることができる。この列挙型はさらに、テキスト認識分析プロセスを可能および不可にする「ｃｏｎｓｔ  ＡｎａｌｙｓｉｓＯｐｔｉｏｎｓ  ＥｎａｂｌｅＴｅｘｔＲｅｃｏｇｎｉｔｉｏｎ」と称するフィールドを含むことができる。ただし、追加的な分析プロセス（または同一の分析プロセスの異なるバージョン）を利用できる場合、この型は、それに応じて追加的なＡｎａｌｙｓｉｓＯｐｔｉｏｎｓを含むことができることに留意されたい。
【０１７７】
さらに、インク分析ＡＰＩは、ＡｎａｌｙｓｉｓＲｅｓｕｌｔｓＥｖｅｎｔＡｒｇｓクラスを含むことができる。このクラスは、分析結果を含み、ＡｎａｌｙｓｉｓＲｅｓｕｌｔｓイベントが発生した時にソフトウェアアプリケーション１７０１に返されるデータ構造を作成する「ｐｕｂｌｉｃ  ＡｎａｌｙｓｉｓＲｅｓｕｌｔｓＥｖｅｎｔＡｒｇｓ（）」と称するコンストラクタを備えることができる。このクラスは、分析プロセスを実行したＩｎｋＡｎａｌｙｚｅｒオブジェクトを識別する「ＩｎｋＡｎａｌｙｚｅｒ  ＩｎｋＡｎａｌｙｚｅｒ｛ｇｅｔ；｝」と称するプロパティも含むことができる。
【０１７８】
このＡＰＩは、幾何学的な線を表す「Ｌｉｎｅ」オブジェクトの使用を認識する一部のタイプのオペレーティングシステムで有用である可能性があるＬｉｎｅクラスも備えることができる。このクラスは、Ｌｉｎｅオブジェクトを作成する「ｐｕｂｌｉｃ  Ｌｉｎｅ（Ｐｏｉｎｔ  ｂｅｇｉｎＰｏｉｎｔ、Ｐｏｉｎｔ  ｅｎｄＰｏｉｎｔ）」と称するコンストラクタなどのコンストラクタを含むことができる。このクラスは、線オブジェクトの始点を表す「ｐｕｂｌｉｃ  Ｐｏｉｎｔ  ＢｅｇｉｎＰｏｉｎｔ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティや、線オブジェクトの終点を表す「ｐｕｂｌｉｃ  Ｐｏｉｎｔ  ＥｎｄＰｏｉｎｔ｛ｇｅｔ；ｓｅｔ；｝」と称するプロパティなどの各種のプロパティも含むことができる。
【０１７９】
上記のクラスに加え、インク分析ＡＰＩは、Ｒｅｃｏｇｎｉｔｉｏｎ  Ａｌｔｅｒｎａｔｅクラスも含むことができる。このクラスは、レコグナイザのディクショナリと比較される、インクセグメントに可能な単語の一致を表す要素を含むことができる。例えば、このクラスは、単一の線（線は２つの点として表現される）上に存在するＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅオブジェクトのアセンダ線を提供する「Ｌｉｎｅ  Ａｓｃｅｎｄｅｒ｛ｇｅｔ；｝」と称するプロパティ、単一の線上に存在するＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅオブジェクトのベースラインを提供する「ｐｕｂｌｉｃ  Ｌｉｎｅ  Ｂａｓｅｌｉｎｅ｛ｇｅｔ；｝」と称するプロパティ、および単一の線上に存在するＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅオブジェクトのデセンダ線を提供する「Ｌｉｎｅ  Ｄｅｓｃｅｎｄｅｒ｛ｇｅｔ；｝」と称するプロパティを含むことができる。このクラスは、現在のＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅオブジェクトに対するＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔｓオブジェクトを提供する「ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔ  Ｅｘｔｒａｃｔ｛ｇｅｔ；｝」と称するプロパティも含むことができる。このプロパティは、例えば、ある単語を含む行のＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクトからその単語のＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔオブジェクトを抽出するために使用することができる。
【０１８０】
このクラスは、単一の線上に存在するＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅオブジェクトの中線を提供する「Ｌｉｎｅ  Ｍｉｄｌｉｎｅ｛ｇｅｔ；｝」と称するプロパティ、あるインクオブジェクトに含まれるストロークの集合を提供する（すなわちＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔに関連付けられたストロークを表すＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎを提供する）「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ  Ｓｔｒｏｋｅｓ｛ｇｅｔ；｝」と称するプロパティ、および、１つまたは複数のオブジェクトに含まれ、ＲｅｃｏｇｎｉｔｉｏｎＲｅｓｕｌｔに関連付けられたストロークを表すストロークの集合を提供する「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ［］  ＳｔｒｏｋｅｓＡｒｒａｙ｛ｇｅｔ；｝」と称するプロパティも含むことができる。このクラスは、認識分析プロセスがＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅオブジェクトまたはジェスチャの認識の際に判定した信頼度（例えば強い、中程度、弱いなど）を提供する「ＲｅｃｏｇｎｉｔｉｏｎＣｏｎｆｉｄｅｎｃｅ  ＲｅｃｏｇｎｉｔｉｏｎＣｏｎｆｄｅｎｃｅ｛ｇｅｔ；｝」と称するプロパティも含むことができる。行でないノードについては、関連するコンテクストノードの子の最も低いＲｅｃｏｇｎｉｔｉｏｎＣｏｎｆｉｄｅｎｃｅが返される。このクラスは、選択肢の結果ストリングを指定する「ｓｔｒｉｎｇ  ＲｅｃｏｇｎｉｚｅｄＳｔｒｉｎｇ｛ｇｅｔ；｝」と称するプロパティも含むことができる。したがって、単語コンテクストノードより上にあるコンテクストノードについては、このメソッドによって結果ストリングが共に連結される。例えば、行ノードは、その行ノードのすべての子ノードすなわち単語ノードの結果を含んだ結果ストリングを含む。そして、段落ノードは、当該段落ノードのすべての子ノードすなわち行ノードの結果を含んだ結果ストリングを含む。
【０１８１】
Ｒｅｃｏｇｎｉｔｉｏｎ  Ａｌｔｅｒｎａｔｅクラスは、例えば、知られているテキスト範囲に対応する各インクオブジェクトからＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎを指定する「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ[]  ＧｅｔＳｔｒｏｋｅｓＡｒｒａｙＦｒｏｍＴｅｘｔＲａｎｇｅ（ｉｎｔ  ｓｅｌｅｃｔｉｏｎｓｔａｒｔ、ｉｎｔ  ｓｅｌｅｃｔｉｏｎｌｅｎｇｔｈ）」と称するメソッドなど、１つまたは複数のメソッドも含むことができる。このクラスは、既知のストロークの入力集合を含み、レコグナイザが選択肢を提供することができるストロークの最小の集合を指定する「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ[]  ＧｅｔＳｔｒｏｋｅｓＦｒｏｍＳｔｒｏｋｅｓＡｒｒａｙＲａｎｇｅｓ（ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ［］  ｓｔｒｏｋｅｓＡｒｒａｙ）」と称するメソッドも含むことができる。より詳細には、ストロークは、その集合に対応するストローク索引の配列をそれぞれが含むインクオブジェクトの配列によって返される。このメソッドによって返されるインクストロークの集合は、入力集合と一致するか、あるいは、入力集合が、すべての入力ストロークを含む最小の認識結果の一部としか一致しない場合は入力集合より大きい可能性があることに留意されたい。このクラスはさらに、知られるストロークの入力集合を含み、レコグナイザが選択肢を提供することができるストロークの最小の集合を指定する「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ  ＧｅｔＳｔｒｏｋｅｓＦｒｏｍＳｔｒｏｋｅｓＲａｎｇｅｓ（ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ  ｓｔｒｏｋｅｓ）」と称するメソッド、および、既知のテキスト範囲に対応するＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎを指定する「ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ  ＧｅｔＳｔｒｏｋｅｓＦｒｏｍＴｅｘｔＲａｎｇｅ（ｉｎｔ  ｓｅｌｅｃｔｉｏｎｓｔａｒｔ、ｉｎｔ  ｓｅｌｅｃｔｉｏｎｌｅｎｇｔｈ）」と称するメソッドを含むことができる。
【０１８２】
このクラスはさらに、既知のストロークセットを含む選択肢をレコグナイザが返すことが可能な認識されたテキストの最小範囲を指定する「ｖｏｉｄ  ＧｅｔＴｅｘｔＲａｎｇｅＦｒｏｍＳｔｒｏｋｅｓ（ｒｅｆ  ｉｎｔ  ｓｅｌｅｃｔｉｏｎｓｔａｒｔ、ｒｅｆ  ｉｎｔ  ｓｅｌｅｃｔｉｏｎｅｎｄ、ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ  ｓｔｒｏｋｅｓ）」と称するメソッド、および、既知のストロークセットを含む選択肢をレコグナイザが返すことが可能な認識されたテキストの最小範囲を指定する「ｖｏｉｄ  ＧｅｔＴｅｘｔＲａｎｇｅＦｒｏｍＳｔｒｏｋｅｓＡｒｒａｙ（ｒｅｆ  ｉｎｔ  ｓｅｌｅｃｔｉｏｎｓｔａｒｔ、ｒｅｆ  ｉｎｔ  ｓｅｌｅｃｔｉｏｎｅｎｄ、ＳｔｒｏｋｅＣｏｌｌｅｃｔｉｏｎ［］  ｓｔｒｏｋｅｓａｒｒａｙ）」と称するメソッドも含むことができる。このクラスは「ＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅＣｏｌｌｅｃｔｉｏｎ  ＳｐｌｉｔＷｉｔｈＣｏｎｓｔａｎｔＰｒｏｐｅｒｔｙＶａｌｕｅ（ＧＵＩＤ  ｐｒｏｐｅｒｔｙＴｙｐｅ）」と称するメソッドも備えることができ、このメソッドは、当該メソッドが呼び出される対象の選択肢を分割した選択肢の集合を返す。この集合中の各選択肢は、このメソッドに渡されるプロパティのプロパティ値が同じである隣接する認識セグメントを含んでいる。このメソッドを使用して、例えば、認識結果の信頼度の境界（強い、中程度、弱い）、行の境界、あるいはセグメントの境界で元の選択肢を分割した選択肢を得ることができる。このクラスはさらに、選択肢に対するレコグナイザの信頼度など、選択肢の既知のプロパティの値を指定する「ｂｙｔｅ［］  ＧｅｔＰｒｏｐｅｒｔｙＶａｌｕｅ（ＧＵＩＤ  ｐｒｏｐｅｒｔｙＴｙｐｅ）」と称するメソッドを含むことができる。ただし、すべての認識分析プロセスがすべてのプロパティタイプの値を提供する訳ではない。したがって、このメソッドは、関連する認識分析プロセスによってサポートされるタイプについてのデータを提供する。
【０１８３】
インク分析ＡＰＩは、Ｒｅｃｏｇｎｉｔｉｏｎ  Ａｌｔｅｒｎａｔｅ  Ｃｏｌｌｅｃｔｉｏｎクラスも含むことができる。上記のクラスの多くと同様に、このクラスもＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅＣｏｌｌｅｃｔｉｏｎオブジェクトを作成するための「ＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅＣｏｌｌｅｃｔｉｏｎ（）」と称するコンストラクタを含むことができる。このクラスは複数のプロパティも含むことができ、これには、選択肢となる認識値の集合に含まれるオブジェクトまたは集合の数を提供する「Ｃｏｕｎｔ｛ｇｅｔ；｝」と称するプロパティ、選択肢となる認識値の集合へのアクセスがソフトウェアアプリケーション１７０１と同期されている（すなわち「スレッドセーフ」である）かどうかを示す値を提供する「ＩｓＳｙｎｃｈｒｏｎｉｚｅｄ｛ｇｅｔ；｝」と称するプロパティ、および、選択肢となる認識値の集合へのアクセスを同期するために使用できるオブジェクトを提供する「ＳｙｎｃＲｏｏｔ｛ｇｅｔ；｝」と称するプロパティがある。
【０１８４】
このクラスは、選択肢となる認識値の現在の集合のすべての要素を、指定された１次元配列の指定された宛先となる配列の添え字にコピーする「ｖｉｒｔｕａｌ  ｖｏｉｄ  ＣｏｐｙＴｏ（Ａｒｒａｙ  ａｒｒａｙ、ｉｎｔ  ｉｎｄｅｘ）」と称するメソッド、および、呼び出し元が各コンストラクトを使用して選択肢となる認識値の集合中の各ＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅを列挙することを可能にするＩＥｎｕｍｅｒａｂｌｅの標準的な実装である「ＩＥｎｕｍｅｒａｔｏｒ  ＩＥｎｕｍｅｒａｂｌｅ．ＧｅｔＥｎｕｍｅｒａｔｏｒ（）」と称するメソッドなど、１つまたは複数のメソッドも含むことができる。このクラスは、認識の代替値の集合中のすべてのオブジェクトを含むＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｒｎａｔｅＣｏｌｌｅｃｔｉｏｎＥｎｕｍｅｒａｔｏｒを返す「ＲｅｃｏｇｎｉｔｉｏｎＡｌｔｅｍａｔｅＣｏｌｌｅｃｔｉｏｎＥｎｕｍｅｒａｔｏｒ  ＧｅｔＥｎｕｍｅｒａｔｏｒ  ()」と称するメソッドも含むことができる。このメソッドを使用して、例えば認識の代替値の集合中の各オブジェクトを取り出すことができる。
【０１８５】
インク分析ＡＰＩは、さらに、Ｒｅｃｏｇｎｉｔｉｏｎ  Ｃｏｎｆｉｄｅｎｃｅの列挙と  Ｒｅｃｏｇｎｉｔｉｏｎ  Ｍｏｄｅの列挙を含むことができ、これらはそれぞれ認識分析プロセスに関連する１つまたは複数のフィールドを含むことができる。例えば、Ｒｅｃｏｇｎｉｔｉｏｎ  Ｃｏｎｆｉｄｅｎｃｅクラスは、提供された選択肢となる認識値のリストに正しい結果があることを認識分析プロセスが確信していることを示す「Ｉｎｔｅｒｍｅｄｉａｔｅ」と称するフィールド、提供される選択肢となる認識値のリスト中に結果があることを認識分析が確信していないことを示す「Ｐｏｏｒ」と称するフィールド、および、選択肢となる認識値の中の最良の選択肢が正しいことを認識分析プロセスが確信していることを示す「Ｓｔｒｏｎｇ」と称するフィールドなどの複数のフィールドを含むことができる。
【０１８６】
同様に、Ｒｅｃｏｇｎｉｔｉｏｎ  Ｍｏｄｅクラスは、認識分析プロセスがどのように電子インクデータを解釈し、したがって認識結果ストリングを決定するかを指定するフィールドを含むことができる。例えば、このクラスは、認識分析プロセスがそのコンテクストに指定された擬似事実に基づいて認識結果を強制することを指定する「Ｃｏｅｒｃｅ」フィールド、認識分析プロセスが電子インクデータを単一行として扱うことを指定する「Ｌｉｎｅ」フィールドを含むことができる。このクラスは、認識分析プロセスが認識モードを適用しないことを指定する「Ｎｏｎｅ」と称するフィールド、認識分析プロセスが、単一の行または文字を形成するものとして電子インクデータを扱うことを指定する「Ｓｅｇｍｅｎｔ」と称するフィールドも含むことができる。さらに、このクラスは、複数のセグメント化を使用不可にする「ＴｏｐＩｎｋＢｒｅａｋｓＯｎｌｙ」と称するフィールドを含むことができる。
【０１８７】
さらに、インク分析ＡＰＩは、２つのコンテクストノードを共にリンクする方式を定義するＣｏｎｔｅｘｔ  Ｌｉｎｋクラスを含むことができる。ＣｏｎｔｅｘｔＬｉｎｋオブジェクトはそれ自体で、リンクされる２つのコンテクストノード、リンクの方向、およびリンクのタイプを表す。このクラスは、別のコンテクストノードからリンクされる起点コンテクストノードを指定する「ＣｏｎｔｅｘｔＮｏｄｅ  ＳｏｕｒｃｅＮｏｄｅ｛ｇｅｔ；｝」と称するプロパティ、起点コンテクストノードと宛先コンテクストノード間に存在するリンク関係のタイプを指定する「ＣｏｎｔｅｘｔＬｉｎｋＴｙｐｅ  ＬｉｎｋＴｙｐｅ｛ｇｅｔ；｝」と称するプロパティ、および、カスタムのリンクが使用されていることを示す「ＣｕｓｔｏｍＬｉｎｋＴｙｐｅ｛ｇｅｔ；｝」と称するプロパティを含むことができる。カスタムのリンクが使用される状況は、アプリケーションがインクアナライザＡＰＩのリンクシステムを使用して、ＡＰＩが認識できないアプリケーション固有のリンクを表すことを決定した場合に生じる。
【０１８８】
このクラスは、別のコンテクストノードからリンクされる宛先コンテクストノードを指定する「ＣｏｎｔｅｘｔＮｏｄｅ  ＤｅｓｔｉｎａｔｉｏｎＮｏｄｅ｛ｇｅｔ；｝」と称するプロパティも含むことができる。このクラスには２つのコンストラクタを利用できる可能性があり、そのコンストラクタは既存の起点コンテクストノードと宛先コンテクストノードの間の関係を生成する。
【０１８９】
このクラスは、２つのコンテクストノードが共有する関係のタイプを定義する「ＣｏｎｔｅｘｔＬｉｎｋＴｙｐｅ  ｅｎｕｍ」と称する列挙も含むことができる。これら各種のリンクタイプには、例えば１つのノードがもう一方のノードに固定されていることを記述する「ＡｎｃｈｏｒｓＴｏ」タイプがある。両ノードは、構文解析の状況に応じてＳｏｕｒｃｅＮｏｄｅまたはＤｅｓｔｉｎａｔｉｏｎＮｏｄｅプロパティを使用することができる。リンクタイプには、１つのノードがもう一方のノードを含んでいることを記述する「Ｃｏｎｔａｉｎｓ」タイプもある。この関係では、囲みノードをＳｏｕｒｃｅＮｏｄｅとして参照し、包含される側のノードをＤｅｓｔｉｎａｔｉｏｎＮｏｄｅとして参照することができる。リンクタイプにはさらに、１つのノードが別のノードをポイントしていることを記述する「ＰｏｉｎｔｓＴｏ」タイプが含まれる。この関係の場合、ポイントを行う側のノードをＳｏｕｒｃｅＮｏｄｅとして参照し、ポイントされる側のノードをＤｅｓｔｉｎａｔｉｏｎＮｏｄｅとして参照することができる。さらに、リンクタイプには、あるノードがもう一方のノードからポイントしていることを記述する「ＰｏｉｎｔｓＦｒｏｍ」タイプもある。この関係では、もう一方のノードからポイントしているノードをＳｏｕｒｃｅＮｏｄｅとして参照し、ポイントの起点となるノードをＤｅｓｔｉｎａｔｉｏｎＮｏｄｅとして参照することができる。
【０１９０】
インクタイプはさらに、あるノードが別のノードの水平方向の長さにわたることを記述する「ＳｐａｎｓＨｏｒｉｚｏｎｔａｌｌｙ」タイプ、および、あるノードが別のノードの垂直方向の長さにわたることを記述する「ＳｐａｎｓＶｅｒｔｉｃａｌｌｙ」タイプを含むことができる。これらのタイプでは、通常は最後に書かれた、もう一方のノードを範囲として含む（文字の上に線を引いて消す、下線を引く、余白バー）ノードをＳｏｕｒｃｅＮｏｄｅとして参照することができ、一方、範囲として包含される側のノードをＤｅｓｔｉｎａｔｉｏｎＮｏｄｅとして参照することができる。リンクタイプには、カスタムのリンクタイプが使用されていることを記述する「Ｃｕｓｔｏｍ」タイプも含まれる。この値が使用される時、ＣｏｎｔｅｘｔＬｉｎｋオブジェクトの「ＣｕｓｔｏｍＬｉｎｋＴｙｐｅ」プロパティは、そのリンクの目的についてより多くの詳細を提供することができる。
【０１９１】
したがって、インクアナライザＡＰＩは、上記で詳しく述べたように文書中の電子インクを非同期に分析し、その後分析プロセスの結果を文書の現在の状態と一致させるための各種の機能とサービスとを提供する。さらに、上記の各種クラスは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）動作環境、ＭｉｃｒｏｓｏｆｔＣＯＭ動作環境、Ｕｎｉｘ（登録商標）またはＬｉｎｕｘ動作環境、あるいはその他の適切なコンピュータ動作環境など各種のオペレーティングシステムおよび環境に適用できることを理解されたい。さらに、本発明の各種の実施によるアプリケーションプログラミングインターフェースは、上記のクラスコンポーネントの１つまたは複数を省略しても、所望のサービスまたは機能を提供する追加的コンポーネントを含んでもよいことを理解されたい。
【０１９２】
一致（ｒｅｃｏｎｃｉｌｉａｔｉｏｎ）
上記で詳細に述べたように、本発明の各種の実施例では、文書１７０３中の未分析の電子インクがバックグラウンドの分析プロセスによって分析されている間にソフトウェアアプリケーション１７０１が動作を継続することができる。このため、ソフトウェアアプリケーション１７０１は、分析プロセスの結果と矛盾するいくつかの形で文書１７０３を変更する可能性がある。例えば、ソフトウェアアプリケーション１７０１は、文書１７０３に新しい電子インクデータ１７０５を入力する、あるいは文書１７０３から既存の電子インクデータ１７０５を削除する可能性がある。さらに、ソフトウェアアプリケーション１７０１は、既存の電子インクデータ１７０５の位置を移動する、あるいは既存の電子インクデータ１７０５のプロパティを変更するなどにより、既存の電子インクデータ１７０５を編集する場合がある。さらには、ソフトウェアアプリケーション１７０１は、既存の電子インクデータ１７０５に影響を与える形で非インク文書要素１７０７を追加、削除、あるいは変更する可能性がある。例えば、ソフトウェアアプリケーション１７０１は、電子インクデータ１７０５で注釈が付されたタイプ入力テキストを削除する可能性がある。
【０１９３】
ソフトウェアアプリケーション１７０１は、追加的に既存の電子インクデータ１７０５を「ピンで固定（ｐｉｎ）」して、分析プロセスがそのデータを変更できないようにすることができる。例えば、ユーザがインクストロークグループについてのレイアウトまたは分類を手動で指定する場合、ソフトウェアアプリケーション１７０１は、構文解析プロセスで生成される結果に関係なく、それらのインクストロークをその特定のレイアウトに保つ、またはその分類で保つことを指示することができる。同様に、ユーザは、認識プロセスで生成される結果に関係なく、インクストロークのグループに対して特定の認識結果を指定することができる。
【０１９４】
本発明の各種の実施により、各種タイプのピンを用いることができる。例えば、インク分析ツール１９０１は、ソフトウェアアプリケーション１７０１がインクを「強固に」ピンで固定できるようにすることができる。この構成では、ピンで固定されたノードより下の葉ノードにはインクストロークを追加することができず、ピンで固定されたノードより下の葉ノードからはストロークを除去することができず、子ノードの追加または除去が許されず、ピンで固定されたノードより下のノードの親ノードの変更が許可されない。これに代えて、あるいはこれに加えて、インク分析ツール１９０１は、新しい（ｌａｔｅ）ストロークによる「強固な」ピン固定も可能にすることができ、この場合は、指定された条件下で新しいストロークを追加することができ、ピンで固定されたノードより下の葉ノードからストロークを除去することが禁止され、子ノードの追加または除去が禁止され、ピンで固定されたノードより下のノードの親ノードの変更が許されない。さらに、インク分析ツール１９０１は、ソフトウェアアプリケーション１７０１が上記に代えて、あるいは上記に加えて、インクを「緩く」ピン固定できるようにすることができる。この構成では、ピンで固定されたノードより下の葉ノードからストロークを除去することができず、ストロークを追加するための指定された規則があり（この規則により新しいストロークを追加することができる）、そして子ノードのグループ化の変更、追加、および除去が許される。ピンは除去することができ、ピンが除去されると、それまで固定されていたノードとその子ノードは「ダーティ」、すなわち再分析の必要があるとみなすことができることに留意されたい。
【０１９５】
さらに、本発明の各種の例によるインク処理では、上記で詳細に説明した複数の分析プロセスを用いることができる。したがって、後続の第２の分析プロセスが実行されている間に、以前に行われた分析プロセスの結果により電子インクデータ１７０５が変更される可能性がある。そのため、分析プロセスの結果を文書１７０３の現在の状態と一致させて、文書１７０３の現在の状態に有効な結果のみを文書１７０３の分析コンテクストオブジェクト１７０９に適用しなければならない。すなわち、現在の分析コンテクストオブジェクト１７０９（および場合によっては分析プロセスの結果）を変更して、分析プロセスの結果と文書１７０３の現在の状態との間の不一致あるいは「矛盾」を取り除く。
【０１９６】
一致プロセスの結果が有効になるように、文書１７０３の状態は一致プロセス中には変化すべきでないことに留意されたい。そのため、一致プロセスは、ソフトウェアアプリケーション１７０１が実行されている主要スレッドを用いて実行することができ、一致プロセスの実行によりソフトウェアアプリケーション１７０１の動作が一時的に停止する可能性がある。あるいは、データ構造のロッキングなどの他の技術を用いて、文書１７０３の状態が一致プロセス中に変わらないようにしてもよい。したがって、ユーザがソフトウェアアプリケーション１７０１の動作に不満を感じないように、一致プロセスは可能な限り迅速に行うことが望ましい。一致プロセスの別の考慮事項は、別個のバックグラウンドの分析スレッドで実行される分析プロセスの動作に対する影響である。現在の分析コンテクストオブジェクト１７０９（すなわち文書１７０３の現在の状態を反映している分析コンテクストオブジェクト１７０９）と分析結果との不一致があまりにも広く定義された場合、大量の電子インクが不必要に再分析されることになる。言うまでもなく、本発明から逸脱せずに、一致を行う際に文書の整合性を保護する他の方式を使用することができる。
【０１９７】
本発明の各種実施例では、分析プロセスと一致プロセスは、一致プロセスの効率と利便性を向上するために以下の規定の１つまたは複数に従うことができる。第１に、分析プロセスは、文書に依存しない分析コンテクストオブジェクト１９０３中の文書要素に対応するノードを可能な限り再使用することができる。すなわち、不一致は、文書要素に新しく、関連のないノードを作成することで回避すべきではない。また、一致プロセスは、ソフトウェアアプリケーション１７０１によって指定される「ピンによる固定」を尊重すべきである。分析プロセスは通常はソフトウェアアプリケーション１７０１によるピンの指定に準拠するが、ソフトウェアアプリケーション１７０１は、分析プロセスの実行中に電子インクデータ１７０５を固定する可能性がある。さらに、一致プロセスは、一致プロセスが完了した後に現在の分析コンテクストオブジェクト１７０９中に空のノードが残らないことを確実にすべきである。ただし、本発明の代替の実施により、これらの規定の１つまたは複数を省いてもよく、従わなくともよいことに留意されたい。例えば、本発明の一部の実施では、分析コンテクストオブジェクト１７０９が空のノードを含むことができるようにする場合がある。
【０１９８】
これらの規定に加えて、一致プロセスは通例、分析コンテクストオブジェクト１７０９によって指示されるインターフェース規則に準拠しなければならない。例えば、本発明の一部の実施では、分析コンテクストオブジェクト１７０９は、子ノードがない場合を除いては文書要素のノードを削除できないようにすることができる。
【０１９９】
先に指摘したように、分析プロセスが開始される前に行われた分析コンテクストオブジェクト１７０９への変更と何らかの形で矛盾する変更を分析プロセスが文書に依存しない分析コンテクストオブジェクト１９０３に行った場合に不一致が生じる。不一致は、必須型の不一致と任意型の不一致との２タイプに分けることができる。
【０２００】
必須型の不一致は、分析プロセスによって文書に依存しない分析コンテクストオブジェクト１９０３に行われた変更を、文書１７０３の現在の状態に対応する分析コンテクストオブジェクト１７０９に適用できない時に生じる。必須型の不一致は、例えば、ソフトウェアアプリケーション１７０１が分析コンテクストオブジェクト１７０９中のあるノードを「ピン」あるいは固定し、分析プロセスが、文書に依存しない分析コンテクストオブジェクト１９０３中のそれに対応するノードを変更したときに生じる。必須型の不一致は、分析プロセスが文書に依存しない分析コンテクストオブジェクト１９０３中のノードに何らかの種の変更を加えたが、ソフトウェアアプリケーション１７０１が分析コンテクストオブジェクト１７０９からそのノードに対応するノードを削除した時、および、分析プロセスが文書に依存しない分析コンテクストオブジェクト１９０３中の対応するノードを削除しているのに、ソフトウェアアプリケーション１７０１が分析コンテクストオブジェクト１７０９中の対応ノードにストロークあるいは子ノードを追加した時にも生じる。さらに、必須型の不一致は、分析プロセスが文書に依存しない分析コンテクストオブジェクト１９０３中の対応するノードの順序を変更するか、そのノードへのリンクを作成しているのに、ソフトウェアアプリケーション１７０１が分析コンテクストオブジェクト１７０９中のノードを削除した場合にも生じる。
【０２０１】
任意型の不一致は、ソフトウェアアプリケーション１７０１が、文書に依存しない分析コンテクストオブジェクト１９０３中で分析プロセスによって変更された値に関連する分析コンテクストオブジェクト１７０９中の値を変更したが、分析コンテクストオブジェクト１７０９のインターフェースのピンの制約、要素再使用の制約、および継承の制約により、分析プロセスによって行われた変更を分析コンテクストオブジェクト１７０９に適用することがなお可能な場合に生じる。任意型の不一致は、変更として分析コンテクストオブジェクト１７０９になお適用することができ、あるいは回避することができる。さらに、一致プロセスが、単に一部タイプの任意型の不一致を一切無視してもよい。
【０２０２】
任意型の不一致の明瞭な一例は、分析コンテクストオブジェクト１７０９と文書に依存しない分析コンテクストオブジェクト１９０３両方の元々のノードに、インクストロークＡおよびＢに対応する子ノードＡおよびＢがある場合に生じる。その後、ソフトウェアアプリケーション１７０１が、インクストロークＣについての第３の子Ｃノードを分析コンテクストオブジェクト１７０９に加える可能性があり、一方、分析プロセスは、インクストロークＤに対応する第３の子ノードＤを文書に依存しない分析コンテクストオブジェクト１９０３に追加する。本発明の各種の実施形態では、一致プロセスは、分析結果に基づいて分析コンテクストオブジェクト１７０９中の親ノードに子ノードＤを追加することができる。この分析コンテクストオブジェクト１７０９中の親ノードに対する変更は禁止されないが、この変更により、なおソフトウェアアプリケーション１７０１が望まない形で親ノードの特性が変化する。例えば、親ノードに関連付けられたインクがその後分析済みとみなされる可能性があり、インクストロークのグループへのインクＣの影響を考慮する再分析を受けない可能性がある。さらに、親ノードについての認識結果が間違った子ノードすなわちストロークを参照するようになっている可能性があり、これも再度補正されることがない。
【０２０３】
このため、本発明の各種実施例では、分析プロセスの結果に基づいて分析コンテクストオブジェクト１７０９を更新する際に任意型の不一致についての変更を適用しない。この基準には、任意型の不一致に基づく変化を識別し、阻止するための追加的な処理が必要になるが、この基準は実施が比較的容易であり、維持しやすい。言うまでもなく、本発明のさらに他の実施例では、他の基準に従って任意型の不一致に対応する変更を実施することができる。より詳細には、そうした代替の実施例では、分析コンテクストオブジェクト１７０９中に論理的に矛盾する永続的な関係を生成しない、任意型の不一致による変更を実施することができる。
【０２０４】
また、不一致は、１つの不一致が別の不一致を生じさせる可能性があるという点で推移的な影響を有する可能性があることにも留意されたい。例えば、分析プロセスは、ある行にノードＬを作成し、次いでノードＬの子ノードとしてある単語にノードＷを作成することができる。ノードＬの作成が何らかの種の不一致のために分析コンテクストオブジェクト１７０９に適用されなかった場合、ノードＷの作成は必須型の不一致になる。
【０２０５】
本発明の各種実施例は、分析プロセスの結果を文書１７０３の現在の状態と一致させるためにログを利用した方式を用いることができる。このログを用いる方式では、文書に依存しない分析コンテクストオブジェクト１９０３は、分析プロセスによって行われた文書に依存しない分析コンテクストオブジェクト１９０３に対する変更のログを含む。このログは、例えば変更レコードのリストの形態とすることができる。各変更のレコードは、行われた変更のタイプ（例えば文書に依存しない分析コンテクストオブジェクト１９０３を変更するために呼び出されたメソッドを識別することによる）、変更が行われた文書要素（例えばメソッドが呼び出された文書に依存しない分析コンテクストオブジェクト１９０３中のノードを識別することによる）、およびそのメソッド呼び出しの引数を再作成するのに必要な情報を含むことができる。有利には、文書に依存しない分析コンテクストオブジェクト１９０３はインク分析ツール１９０１および分析プロセスによって実装されるので、変更ログはソフトウェアアプリケーション１７０１からは見えないようにすることができる（ただし、必要な場合は代法としてログをアプリケーション１７０１に公開してよい）。
【０２０６】
変更ログの方式を使用して一致プロセスを実行するために、インク分析ツール１９０１は、各変更のレコードを変更の時間順に調べる。すなわち、インク分析ツール１９０１は、文書に依存しない分析コンテクストオブジェクト１９０３に行われた１つ１つの変更を識別する。変更ごとに、インク分析ツール１９０１は、図２７に示すプロセスを実施することができる。初めにステップ２７０１で、インク分析ツール１９０１は、変更を適用するために必要とされる現在の分析コンテクストオブジェクト１７０９中の対応ノードへのアクセスを試みる。この取り出しのステップは、ソフトウェアアプリケーション１７０１が分析コンテクストオブジェクト１７０９から必要なノードの１つまたは複数を削除しており、その結果必須型の不一致が発生している場合には失敗する可能性があることに留意されたい。
【０２０７】
次いで、ステップ２７０３で、インク分析ツール１９０１は、その変更により必須型または任意型の不一致が生じるかどうかを判定する。この判定を行う手順については下記でより詳細に説明する。ステップ２７０５で、インク分析ツール１９０１は、変更を行うか、またはその変更により一致プロセスの基準で禁止されている必須型または任意型の不一致が生じる場合は変更を禁止する。例えば、変更により、一致プロセスの基準で禁止されている必須型の不一致または任意型の不一致が生じる場合、インク分析ツール１９０１は、変更を行おうとしていた文書１７０３の対応領域を表す分析コンテクストオブジェクト１７０９のノードへの変更を阻止することができる。一方、変更が適用される場合は、インク分析ツール１９０１は、適切なメソッドを呼び出して分析コンテクストオブジェクト１７０９中の必要なノードに所望の変更を行うことができる。
【０２０８】
分析プロセスが分析コンテクストオブジェクト１７０９に新しい要素ノードを追加したが、その新しいノードにストロークノードを移動できない場合は、分析プロセスも、ストロークノードが新しいノードに無事に移動されたと考えてその要素ノードの削除を試みていない。したがって、現在の分析コンテクストオブジェクト１７０９中の空のノードに対応する要素ノードが、文書に依存しない分析コンテクストオブジェクト１９０３に生じることになる。したがって、分析コンテクストオブジェクト１７０９のすべての変更が処理されると、ステップ２７０７でインク分析ツール１９０１は文書に依存しない分析コンテクストオブジェクト１９０３を確認して、文書に依存しない分析コンテクストオブジェクト１９０３中のノードに対応する分析コンテクストオブジェクト１７０９中の「空の」ノードを削除する。この空のノードを削除するステップは任意であり、本発明から逸脱せずに省略してよい。
【０２０９】
文書に依存しない分析コンテクストオブジェクト１９０３は空のノードを含んではならず、一致プロセスは、文書に依存しない分析コンテクストオブジェクト１９０３に空のノードが作成されないようにすべきことに留意されたい。また、このステップでは、例外として、分析コンテクストオブジェクト１７０９のルートノードは空であっても削除を試みないことにも留意されたい。最後にステップ２７０９で、インク分析ツール１９０１は、文書に依存しない分析コンテクストオブジェクト１９０３の分析結果と現在の分析コンテクストオブジェクト１７０９との不一致をソフトウェアアプリケーション１７０１に対して識別し、それによりソフトウェアアプリケーション１７０１は、その不一致の影響を受ける文書１７０３の領域を続く分析プロセスの際に含めることができる。
【０２１０】
次いで上記のステップ２７０３の不一致の検出に戻り、文書に依存しない分析コンテクストオブジェクト１９０３の変化に対応する分析コンテクストオブジェクト１７０９中のすべてのノードがアクセスされると、分析コンテクストオブジェクト１７０９中の各ノードに生じる可能性があるすべての他の必須型の不一致を静的に検出することができる（あるいはノードごとに必須型の不一致がないことを検出することができる）。より詳細には、必須型の不一致は、分析コンテクストオブジェクト１７０９のインターフェースによって指定された規則に基づいて検出することができる。
【０２１１】
ただし、任意型の不一致は、通例は、文書１７０３に関する追加的な状態情報を用いないと識別することができない。これは、任意型の不一致による変更は、分析コンテクストオブジェクト１７０９のインターフェースによって命令されず、代わりに、ソフトウェアアプリケーション１７０１が行った変更と分析プロセスが行った変更の両方が分析コンテクストオブジェクト１７０９中の同じノードに影響を与えている時には、分析プロセスによって行われた変更に優先される、ソフトウェアアプリケーション１７０１が行った変更についての任意の選択に基づくためである。これらの不一致は、代わりに、現在の分析コンテクストオブジェクト１７０９と文書に依存しない分析コンテクストオブジェクト１９０３の元のバージョンとを比較して、分析コンテクストオブジェクト１７０９中のどのノードがソフトウェアアプリケーション１７０１によって変更されているかを判定することによって検出することもできる。
【０２１２】
一致の基準は、例えば、ソフトウェアアプリケーション１７０１による親ノードへの子ストロークノードの追加または削除は、その親ノードにとって任意型の不一致であると定義することができる。そのような変更が生じているかどうかを判定するために、インク分析ツール１９０１は、現在の分析コンテクストオブジェクト１７０９中のノードの下位にある子ストロークノードを調べ、その番号とＧｕｉｄ（または他の一意の識別子）を、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３中の対応ノードの下位にある子ストロークノードと比較することができる。子ストロークノードがそれらの点（および所望の他の点）で一致する場合、インク分析ツール１９０１は、分析プロセスによって行われた変更を分析コンテクストオブジェクト１７０９中の親ノードに適用することができる。
【０２１３】
引き続きこの例で、ログ項目中の次の変更は、文書に依存しない分析コンテクストオブジェクト１９０３中で親ノードの下位になるように移動される別のストロークノードからなる可能性がある。この変更による必須型の不一致がない場合、インク分析ツール１９０１は、対応する変更を分析コンテクストオブジェクト１７０９に行うことを許可される。ただし、インク分析ツール１９０１は、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３を調べて任意型の不一致が存在するかどうかを判定する際に、現在の分析コンテクストオブジェクト１７０９中の親ノードが、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３の親ノードよりも１つ多い従属ストロークノードを有すると判断し、任意型の不一致が存在すると誤って判断してしまう（すなわち自身が行った変更に基づいて不一致が存在すると判断する）。
【０２１４】
したがって、ログを利用する一致プロセスでは、現在の分析コンテクストオブジェクト１７０９と元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３との比較による一致によって行われた以前の変更を除外しなければならない。本発明の各種実施例では、この除外は、変更リストの項目を調べる前に、現在の分析コンテクストオブジェクト１７０９のすべてのノードとそれに対応する元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３のノードとを比較し、一致しないノードのリストを保持することによって行うことができる。
【０２１５】
これに代えて、あるいはこれに加えて、本発明の各種実施例では、対応する要素を取り出す際には必ず使用される、分析結果を含む文書に依存しない分析コンテクストオブジェクト中の要素に対応する現在の分析コンテクストオブジェクト１７０９の要素のキャッシュを保持することができる。予備的なパスはないが、このキャッシュは、対応する要素に任意型の不一致がないと最初に判定された時にデータが取り込まれる。任意で、このキャッシュは、結果中のどの要素に任意型の不一致があったかを常に把握することもできる。この方式は、変更ログが短い場合には任意型の不一致を見つけるパス方式よりも性能が良好であるが、分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３が多数のノードを含んでいる場合には性能が落ちる場合もある。それは、また、他の方式と同様に複雑ではない。
【０２１６】
キャッシュ中の要素の親コンテクストノードもキャッシュすべきことに留意されたい。より詳細には、子コンテクストノードへの変更は、その親コンテクストノードのプロパティの変更と見なされる。したがって、キャッシュに格納されたコンテクストノードの親コンテクストノードも、この時点で、ソフトウェアアプリケーション１７０１によって行われた変更があるかどうか評価する必要がある。キャッシュ内の各コンテクストノードの親ノードのキャッシュは、ルートノードを過ぎるまで、または変更が検出されるまで、ツリーの上位まで繰り返す必要がある（例えば親ノードから、祖父母ノード、會祖父母ノードへ）。ただし、多くの状況では、ツリーは通常非常に深くなることはないので、この繰り返しは数ノードに過ぎない。
【０２１７】
また、本発明の各種実施例では、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３は任意型の不一致の検出だけに使用されることにも留意されたい。本発明の実施例で任意型の不一致の検出が不要である場合は、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３と対応する要素のキャッシュをともに省いてよい。この「ログを利用する」方式は、下記の「比較による」方式に比べて維持が容易である可能性がある。これは、この方式は、分析プロセスによって行われた変更を判定するのに必要とする検索がより少なく、文書に依存しない分析コンテクストオブジェクト１９０３に対する動作（「ノードの削除」や「ノードの作成」など）が別々に処理され、したがって新しいタイプの動作が他の動作に影響を与える傾向がないためである。
【０２１８】
分析結果を文書１７０３の現在の状態と一致させる「ログを利用する」手法に代えて、本発明の各種実施例では、一致のために「比較に基づく」方式を採用することができる。比較に基づく方式の最も大きな特徴は、文書に依存しない分析コンテクストオブジェクト１９０３に行われた変更のログを保持せず、そのため、分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３と、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３とを比較することによる以外は、分析プロセスが行ったことについての情報を収集しない点である。したがって、この方式では、任意型の不一致についての判断に関係なく、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３が常に必要とされる。
【０２１９】
この方式を使用して、インク分析ツール１９０１はまずストロークマップを作成する。すなわち、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３中のすべてのインク葉ノードについて、現在の分析コンテクストオブジェクト１７０９に対応するノードがあれば、その葉ノードをハッシュテーブル（またはその他の適切なデータ構造）に加える。したがって、このハッシュテーブルは、元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３のストロークのＧＵＩＤ（または他の一意のノード識別子）を、現在の分析コンテクストオブジェクト１７０９の葉ノードへの参照にマッピングする。
【０２２０】
次いで、インク分析ツール１９０１は、ソフトウェアアプリケーション１７０１が分析コンテクストオブジェクト１７０９で変更したすべてのノードを識別する。これは、上記で詳述した任意型の不一致を判定する手法を用いて行うことができる。元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３中のノードごとに、現在の分析コンテクストオブジェクト１７０９に対応するノードがあり、そのノードが元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３のノードと何らかの形で著しく異なる場合、インク分析ツール１９０１は、そのノードがアプリケーションによって変更されており、不一致となる可能性があると判断する。そのようなノードへの参照は、分析コンテクストオブジェクト１７０９に追加すべきではない分析結果ノードに対応する第１のリスト（以下でこのリストをｒｅｓｕｌｔｓＮｏｄｅｓＮｏｔＴｏＡｄｄリストと称する）と、任意型の不一致を生じるノードの第２のリストに保存する。
【０２２１】
元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３中のノードごとに、インク分析ツール１９０１は、分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３と現在の分析コンテクストオブジェクト１７０９との両方の対応ノードを調べる（ｌｏｏｋｕｐ）。分析コンテクストオブジェクト１７０９の各ノードについて、インク分析ツール１９０１は、ソフトウェアアプリケーション１７０１がそのノードを削除したかどうかを判定する。そのようなノードは元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３には存在するが、分析コンテクストオブジェクト１７０９に対応するノードがない。分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３中の対応するノードが存在すれば、そのノードをｒｅｓｕｌｔｓＮｏｄｅｓＮｏｔＴｏＡｄｄリストに追加する。
【０２２２】
次いで、インク分析ツール１９０１は、分析プロセスが文書に依存しない分析コンテクストオブジェクト１９０３からそのノードを削除しているかどうかを判定する。この削除は、現在の分析コンテクストオブジェクト１７０９に対応するノードがあり、変化していないが、分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３に対応するノードがない時に検出される。分析プロセスによって削除されたノードは、削除ノードのリストに保存することができる。そのようなノードは、現在の分析コンテクストオブジェクト１７０９には追加しないが、分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３に対応するノードがないのでｒｅｓｕｌｔｓＮｏｄｅｓＮｏｔＴｏＡｄｄリストには入れない。
【０２２３】
ソフトウェアアプリケーション１７０１がノードを削除も変更もしておらず、分析プロセスがノードを削除していない場合、インク分析ツール１９０１は、分析プロセスがノードを変更しているかどうかを判定することができる。ソフトウェアアプリケーション１７０１によって行われた変更を検出する際に使用する上述と同じ手法を使用して、分析プロセスによって行われた変更を検出することができる。分析プロセスによって変更されたノードは、ｒｅｓｕｌｔｓＮｏｄｅｓＮｏｔＴｏＡｄｄリストに加え、分析コンテクストオブジェクト１７０９中のノードで適切なメソッドを呼び出すことにより伝播させる。ソフトウェアアプリケーション１７０１も分析プロセスもノードを変更または削除していない場合、そのノードには何も行われていないことになり、インク分析ツール１９０１は、そのノードをｒｅｓｕｌｔｓＮｏｄｅｓＮｏｔＴｏＡｄｄリストに追加する。これは、そのノードが結果を含む文書に依存しない分析コンテクストオブジェクト１９０３に存在し、分析コンテクストオブジェクト１７０９に追加すべきでないからである。
【０２２４】
次いで、分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３中の各ノードについて、そのノードがｒｅｓｕｌｔｓＮｏｄｅｓＮｏｔＴｏＡｄｄリストにない場合は、インク分析ツール１９０１は、分析コンテクストオブジェクト１７０９中に対応するノードを作成することにより、分析プロセスによるそのノードへの変更を伝播させることができる。分析結果中のノードのトラバースは、親ノードが子ノードより先に作成されることが保証されるように、上から下への先行順のトラバースを使用して行うことができる。
【０２２５】
分析コンテクストオブジェクト１７０９に新しい葉ノードを作成する際、分析結果に含まれる、そのノードに関連付けられたすべてのインクストロークも分析コンテクストオブジェクト１７０９中の他のノードからその新しいノードに移動することができる。そして、上述のストロークマップを使用して、ストロークを移動するための起点要素を識別することができる。起点要素が存在しない場合（必須型の不一致が生じる）、または起点要素がこれも上述した任意型の不一致リストに含まれる場合、インクストロークは移動しない。分析コンテクストオブジェクト１７０９に対する不要な呼び出しを省くために、このインク分析ツール１９０１は、不一致がないストローク起点ノードが少なくとも１つない場合は、子コンテクストノードを作成するメソッドの呼び出しを回避することができる。これと同じストローク起点のチェックは非インクの葉ノードにも行われ、例えば行を構成する単語の少なくとも１つが少なくとも１つの移動が成功したストロークを含まない場合には、その行のノードを作成しない。
【０２２６】
そのため、新しく作成されたノードには認識ラティスなどの他の情報も適用される。認識ラティスは、特定のストロークを移動することができず、適用された（すなわち阻止されない）任意型の不一致が生じ、その結果一時的に論理的な矛盾が生じた場合でもなお適用される。ただし、失敗したストローク移動は、変更が阻止される文書領域に対応する分析コンテクストオブジェクト１７０９の部分の指定に反映され、ソフトウェアアプリケーション１７０１は阻止された領域を再度分析するように指示されるので、この矛盾は一時的なものである。
【０２２７】
分析コンテクストオブジェクト１７０９から削除すべきノードごとに、インク分析ツール１９０１は、リストチェックして、分析コンテクストオブジェクト１７０９に対するすべての他の編集および追加が行われたその状況でそのノードを実際に削除できるかどうかを調べる。削除すべきであり、実際にすべての子ノードとストロークとがないノードは、分析コンテクストオブジェクト１７０９から削除する。そのようなノードを削除すると、他の残りの子を持つ祖先があるまですべての祖先ノード（ルートノードまで。ただしルートノードは含まない）を順に削除する。
【０２２８】
最終的に、インク分析ツール１９０１は、分析結果を含む文書に依存しない分析コンテクストオブジェクト１９０３と分析コンテクストオブジェクト１７０９との間でノードの順序付けのグローバルな比較を行って、分析プロセスによる分析コンテクストオブジェクト１７０９の変更を検出し、伝播させる。ただし、この比較では元のバージョンの文書に依存しない分析コンテクストオブジェクト１９０３を無視するので、ソフトウェアアプリケーション１７０１によって行われた順序付けの変更を検出する方法はないことに留意されたい。次いで、分析コンテクストオブジェクト１７０９に対応するノードがある分析結果中の各囲みノードについて、その囲みノードの子の順序づけを比較する。両方の囲みノードが全く同じ子のセットを有する場合は、分析結果中の子ノードと同じＧＵＩＤ（または他のタイプの識別子）を持たないノードが分析コンテクストオブジェクト１７０９中の囲みリストの同じ位置に見つかるまで、分析結果中の囲みの子のリストをループすることにより、分析結果中の順序付けを分析コンテクストオブジェクト１７０９に伝播する。そのような不一致が見つかると、分析コンテクストオブジェクト１７０９中の子リストのさらに下の方でそれに対応するノードを見つけなくてはならない。インク分析ツール１９０１は次いで、そのノードを求めて分析コンテクストオブジェクト１７０９の子リストの残る部分を検索し、子ノードを移動するメソッドを呼び出して、分析コンテクストオブジェクト１７０９中でのそのノードの順序を修正する。インク分析ツール１９０１はその後、分析結果中のノードのループを続ける。
【０２２９】
言うまでもなく、分析リストまたはソフトウェアアプリケーション１７０１のいずれかがどちらかのリストのノードを削除している、またはリストにノードを挿入している可能性があるので、リストが全く同じであるという前提は成立しない。「子リストマッパ」オブジェクトを使用して、共通して保持されている要素のみを含む「切り詰めた（ｐｒｕｎｅｄ）」リストを提示することにより前提が成立した場合をシミュレートする。次いで、上述の手順をマッピングされた子リストに行い、移動を、実際の索引とリストマッパオブジェクトによる呼び出しに変換する。
【０２３０】
このように、上述の本発明の各種実施例による一致技術により、分析プロセスの開始以降に文書の内容が変化している場合でも、分析プロセスの結果を文書中の現在の文書要素に適用することができる。これらの一致技術はしたがって、文書をホストするソフトウェアアプリケーションの動作と非同期に文書中の電子インクを分析することを可能にする。さらにこれらの一致技術は、既存の独自に開発されたロッキングまたは他の同期ストラテジを用いる既存のマルチスレッドソフトウェアアプリケーションを含む、各種のソフトウェアアプリケーションによって有利に用いることができる。
【０２３１】
イベント駆動型システム  
上述のように、本発明の各種の実施例は、文書に依存しない分析コンテクストオブジェクトをコピーすることにより文書の状態の「スナップショット」を作成し、次いで文書に依存しない分析コンテクストオブジェクトを非同期に分析し、その間、文書をホストするソフトウェアアプリケーションは動作を継続する。あるいは、本発明の各種実施例は、非同期のインク分析を行うための文書に依存しない分析コンテクストオブジェクトを使用せずに済ませることもできる。代わりに、そうした本発明の実施例では、密閉された（ｓｅａｌｅｄ）コンポーネントを使用して文書のすべてのインクと意味データとを記憶することができる。より詳細には、こうした本発明の実施例では、ストロークの追加、削除、または変更などのインクイベントと、単語へのストロークのグループ化、意味ノードの追加、またはテキスト認識結果とストロークとの関連付けなどの構造イベント、という文書に行うことが可能な２タイプの変更を認識する。どのイベントも、そのイベントを外部のリスナに対して完全に記述するのに必要なすべてのデータを含んでいる。例えば、「ストローク追加」のイベントはすべてのストロークデータを含む。これらの「リッチな」イベントでは、リスナは、イベントを受け取った順序で適用することにより、インクオブジェクトの正確な複製を保持することができる。
【０２３２】
図２８に、本発明の各種実施例による、この構成を用いる方式の一例を示す。この図で分かるように、アプリケーション２８０１はインク分析ツール２８０３を用いる。インク分析ツール２８０３は、アプリケーション２８０１のインクデータ２８０５と文書構造２８０７（例えばツリー構造）を保持する。アプリケーションは、イベントキュー２８０９、パーサプロセス２８１１、および認識プロセス２８１７も用いる。パーサプロセス２８１１は、インクデータ２８０５のクローン２８１３と文書構造２８０７のクローン２８１５を保持する。同様に、認識プロセス２８１７は、インクデータ２８０５のクローン２８１９と文書構造２８０７のクローン２８２１を保持する。
【０２３３】
アプリケーション２８０１は、インクデータを生成すると、メソッド２８２３を介してそのインクデータをインク分析ツール２８０３に提供する。それに応答して、インク分析ツール２８０３は、インクデータの変化に対応するイベントを生成し、すべてのイベントにタグを付加し、指定されたタグを有するイベントをリッスンするコンポーネントとして１つまたは複数の所望の分析プロセスを定義する。例えば、インクへのユーザによるすべての変更はタグ「ＵｓｅｒＣｈａｎｇｅ」で印をつけることができ、このタグを有するイベント２８２５は、変更に応答して同期してイベントキュー２８０９に送られる。その後のいずれかの時点で、パーサプロセス２８１１および認識プロセス２８１７は、イベントキュー２８０９からタグのついたイベントを取り出す。
【０２３４】
第１の分析プロセス（例えばパーサプロセス２８１１）は、インク分析ツール２８０３によって発行されるすべてのイベントをリッスンし、タグＵｓｅｒＣｈａｎｇｅを有するイベントに応答する。第１の分析プロセスは、次いで、そのイベントによって指定される変更を自身が有するインクデータクローン２８１３と文書構造クローン２８１５との内部コピーに適用し、イベント中に記述されるデータを分析し、その変更によって生じるタグイベント２８２７を作成して、タグ「ＰａｒｓｅｒｌＣｈａｎｇｅ」を付す。そのイベント２８２７は、インク分析ツール２８０３によって中継されてイベントキュー２８０９に戻される。したがって、第２の分析プロセス（例えば手書きの認識プロセス２８１７）は、Ｐａｒｓｅｒｌ  Ｃｈａｎｇｅタグを有するイベントをリッスンする。応答して、第２の分析プロセスは、そのイベントによって指定される変更を自身が保持するインクデータクローン２８１９と文書構造クローン２８２１との内部コピーに適用し、応答してイベント中に記述されるデータを分析する。第２のアナライザは次いで、分析結果を用いてイベント２８２９を作成し、タグ「ＨａｎｄｗｒｉｔｉｎｇＲｅｃｏｇｎｉｔｉｏｎＣｈａｎｇｅ」でタグ付けする。インク分析ツール２８０３は、パーサプロセス２８１１および認識プロセス２８１７からイベントを受け取ると、イベント２８３１をアプリケーション２８０１に送って文書構造２８０７の変化を通知する。
【０２３５】
本発明のこれらの実施形態は、複数のタグを有するイベントをリッスンし、分析プロセスの変更によるイベントに内部処理に基づいて異なるタグでタグ付けすることにより、各分析プロセスを支援することもできる。したがって、本発明のこれら代替の実施は、文書をホストするソフトウェアアプリケーションの動作と非同期の文書中の電子インク分析も可能にすることができる。
【０２３６】
結論
本発明について本発明を実行する現時点で好ましい形態を含む特定の実施例との関係で説明したが、当業者は、添付の特許請求の範囲で述べる本発明の精神および範囲内に該当する、上述のシステムおよび技術の多数の変形形態および入れ替えがあることを理解されよう。
【図面の簡単な説明】
【０２３７】
【図１】本発明の特定の態様を実施することが可能な汎用デジタルコンピューティング環境の略図である。
【図２】本発明の特定の態様を実施することが可能なペン方式のパーソナルコンピューティング（ＰＣ）環境の図である。
【図３】電子文書の注釈に関連する本発明の諸態様の例示的実施の各種特徴を示す図である。
【図４】電子文書の注釈に関連する本発明の諸態様の例示的実施の各種特徴を示す図である。
【図５】電子文書のインク構文解析の概略的な特徴を示す図である。
【図６Ａ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｂ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｃ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｄ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｅ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｆ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｇ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｈ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図６Ｉ】本発明の少なくとも一部の態様を実施する際に有用な例示的データ構造の図である。
【図７Ａ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図７Ｂ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図８Ａ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図８Ｂ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図９Ａ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図９Ｂ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図１０Ａ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図１０Ｂ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図１１Ａ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図１１Ｂ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図１２Ａ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図１２Ｂ】電子文書の例と、それに関連付けられた、電子文書の電子インク注釈を処理する際に有用なデータ構造の例の図である。
【図１３Ａ】電子文書の例と、それに関連付けられた、電子文書中の電子フローチャートの要素を処理する際に有用なデータ構造の例の図である。
【図１３Ｂ】電子文書の例と、それに関連付けられた、電子文書中の電子フローチャートの要素を処理する際に有用なデータ構造の例の図である。
【図１４Ａ】電子文書の例と、それに関連付けられた、電子文書中の電子フローチャートの要素を処理する際に有用なデータ構造の例の図である。
【図１４Ｂ】電子文書の例と、それに関連付けられた、電子文書中の電子フローチャートの要素を処理する際に有用なデータ構造の例の図である。
【図１５Ａ】電子文書の例と、それに関連付けられた、電子文書中の電子表の要素を処理する際に有用なデータ構造の例の図である。
【図１５Ｂ】電子文書の例と、それに関連付けられた、電子文書中の電子表の要素を処理する際に有用なデータ構造の例の図である。
【図１５Ｃ】電子文書の例と、それに関連付けられた、電子文書中の電子表の要素を処理する際に有用なデータ構造の例の図である。
【図１６Ａ】本発明の各種実施例による電子インクを処理する方法の図である。
【図１６Ｂ】本発明の各種実施例による電子インクを処理する方法の図である。
【図１６Ｃ】本発明の各種実施例による電子インクを処理する方法の図である。
【図１６Ｄ】本発明の各種実施例による電子インクを処理する方法の図である。
【図１７】本発明の各種実施例による、例示的なインク分析プロセスにおけるデータオブジェクトの移動を説明する図である。
【図１８】本発明の各種実施例により操作することが可能な単純なデータツリーの図である。
【図１９】本発明の各種実施例による、例示的なインク分析プロセス中におけるデータオブジェクトの移動を説明する図である。
【図２０】本発明の各種実施例による、例示的なインク分析プロセス中におけるデータオブジェクトの移動を説明する図である。
【図２１】本発明の各種実施例による、例示的なインク分析プロセス中におけるデータオブジェクトの移動を説明する図である。
【図２２】本発明の各種実施例により操作することが可能な単純なデータツリーの図である。
【図２３】本発明の各種実施例による、例示的なインク分析プロセス中におけるデータオブジェクトの移動を説明する図である。
【図２４】本発明の各種実施例による、例示的なインク分析プロセス中におけるデータオブジェクトの移動を説明する図である。
【図２５】本発明の各種実施例による、例示的なインク分析プロセス中におけるデータオブジェクトの移動を説明する図である。
【図２６】本発明の各種実施例による、例示的なインク分析プロセス中におけるデータオブジェクトの移動を説明する図である。
【図２７】分析結果を文書の現在の状態と一致させる方法を説明するフローチャートである。
【図２８】本発明のさらに他の実施例による電子インクを非同期に分析する構成の図である。
【図１】
2007521534.tif 000003
【図２】
2007521534.tif 000004
【図３】
2007521534.tif 000005
【図４】
2007521534.tif 000006
【図５】
2007521534.tif 000007
2007521534.tif 000008
2007521534.tif 000009
2007521534.tif 000010
2007521534.tif 000011
2007521534.tif 000012
2007521534.tif 000013
2007521534.tif 000014
2007521534.tif 000015
2007521534.tif 000016
2007521534.tif 000017
2007521534.tif 000018
2007521534.tif 000019
2007521534.tif 000020
2007521534.tif 000021
2007521534.tif 000022
2007521534.tif 000023
2007521534.tif 000024
2007521534.tif 000025
【図１７】
2007521534.tif 000026
【図１８】
2007521534.tif 000027
【図１９】
2007521534.tif 000028
【図２０】
2007521534.tif 000029
【図２１】
2007521534.tif 000030
【図２２】
2007521534.tif 000031
【図２３】
2007521534.tif 000032
【図２４】
2007521534.tif 000033
【図２５】
2007521534.tif 000034
【図２６】
2007521534.tif 000035
【図２７】
2007521534.tif 000036
【図２８】
2007521534.tif 000037
【手続補正書】
【提出日】平成18年8月18日(2006.8.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１のデータ構造を第２のデータ構造で一致させる方法であって、
変更が成された前記第１のデータ構造の各ノードを前記第２のデータ構造の対応するノードにアクセスすることを含み、
前記アクセスされたノードの各々について、
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と不一致を生じるか否かを判定し、
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と不一致ではない場合、前記第１のデータ構造の前記アクセスされたノードに変更を行うことを特徴とする方法。
【請求項２】
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と不一致を生じると判定すること、および
前記不一致が必須型の不一致か任意型の不一致かを判定すること
をさらに含むことを特徴とする請求項１記載の方法。
【請求項３】
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と任意の不一致を生じると判定すること、および
前記第１のデータ構造の前記アクセスされたノードに変更を行うこと
をさらに含むことを特徴とする請求項２記載の方法。
【請求項４】
前記第２のデータ構造の対応するノードに成された変更が前記第１のデータ構造と任意の不一致を生じると判定すること、
前記任煮の不一致により、前記第２のデータ構造の対応するノードに成された変更を前記アクセスされたノードに成すことが可能か否かを判定すること、および
前記任意の不一致により、前記第２のデータ構造の対応するノードに成された変更を前記アクセスされたノードに成すことが可能である場合、前記アクセスされたノードに変更を行うこと
をさらに含むことを特徴とする請求項２記載の方法。
【請求項５】
不一致が、前記第１のデータ構造に対するインターフェイス規則に基づいて任意型か否かを判定することをさらに含むことを特徴とする請求項２記載の方法。
【請求項６】
前記第２のデータ構造への変更のログを利用して、前記第１のデータ構造におけるアクセスされたノードの各々について、前記第２のデータ構造の対応するノードに変更が成されたか否かを判定することを特徴とする請求項１記載の方法。
【請求項７】
第１のデータ構造を第２のデータ構造で一致させる方法であって、
前記第２のデータ構造のどのノードが前記第１のデータ構造の対応するノードからの変更を含んでいるかを判定することを含み、
変更を含む前記第２のデータ構造のノードの各々について、
前記第１のデータ構造における前記対応するノードにアクセスすることを試み、
前記第１のデータ構造における前記対応するノードがアクセス可能である場合、前記第２のデータ構造への前記変更が必須型の不一致または任意の不一致を生じるか否かを判定し、
前記第２のデータ構造への変更が任意型の不一致を生じる場合、
前記任意型の不一致が不一致の基準によって禁止されているか否かを判定し、
前記任意型の不一致が前記不一致の基準によって禁止されていない場合、前記第１のデータ構造の前記対応するノードへの変更を行うことを特徴とする方法。
【請求項８】
前記第１のデータ構造から空のノードを削除することをさらに含むことを特徴とする請求項７記載の方法。
【請求項９】
前記第２のデータ構造への変更が前記第１のデータ構造を維持するソフトウエアアプリケーションへの不一致を生じる、前記第１のデータ構造のノードを識別することをさらに含むことを特徴とする請求項７記載の方法。
【請求項１０】
前記不一致の基準は、
インクストロークをピンで固定されたノードの下の葉ノードに加えることを禁止し、
インクストロークを前記ピンで固定されたノードの下の葉ノードから削除することを禁止し、
前記ピンで固定されたノードの下の葉ノードを加えることを禁止し、
前記ピンで固定されたノードの下の葉ノードを削除することを禁止し、および
前記ピンで固定されたノードの下の葉ノードの親ノードの変更を禁止することを特徴とする請求項７記載の方法。
【請求項１１】
前記不一致の基準は、
新しいインクストロークを、指定された条件の下、ピンで固定されたノードの下の葉ノードに加えることを許容し、
インクストロークを前記ピンで固定されたノードの下の葉ノードから削除することを禁止し、
前記ピンで固定されたノードの下の葉ノードを加えることを禁止し、
前記ピンで固定されたノードの下の葉ノードを削除することを禁止し、および
前記ピンで固定されたノードの下の葉ノードの親ノードの変更を禁止することを特徴とする請求項７記載の方法。
【請求項１２】
前記不一致の基準は、
インクストロークを、指定された条件の下、ピンで固定されたノードの下の葉ノードに加えることを許容し、
インクストロークを前記ピンで固定されたノードの下の葉ノードから削除することを禁止し、
前記ピンで固定されたノードの下の葉ノードを加えることを禁止し、
前記ピンで固定されたノードの下の葉ノードを削除することを禁止し、および
前記ピンで固定されたノードの下の葉ノードの親ノードの変更を禁止することを特徴とする請求項７記載の方法。
【請求項１３】
不一致が、前記第１のデータ構造に対するインターフェイス規則に基づいて任意型か否かを判定することをさらに含むことを特徴とする請求項７記載の方法。
【請求項１４】
前記第２のデータ構造への変更のログを利用して、前記第１のデータ構造におけるアクセスされたノードの各々について、前記第２のデータ構造の対応するノードに変更が成されたか否かを判定することを特徴とする請求項７記載の方法。
【請求項１５】
第１のデータ構造を第２のデータ構造で一致させる方法であって、
前記第１のデータ構造の元のバージョンの少なくとも一部の第１のコピーおよび第２のコピーを作成すること、
文書分析プロセスにおいて前記第２のコピーを修正して、前記第２のデータ構造を作成すること、
前記第１のデータ構造の第２のバージョンの少なくとも一部を受け取ること、
前記第２のデータ構造のノードの各々を前記第１のコピーの対応するノードにマッピングすること、
前記第１のデータ構造の第２のバージョンの少なくとも一部におけるノードの各々を分析して、前記第１のコピーの対応するノードからの変更を前記ノードが含んでいるか否かを判定すること、および
分析されたノードが前記第１のコピーの対応するノードからの変更を含んでいる場合、変更が前記第１のデータ構造へ伝搬されるであろう、ノードのリストに前記対応するノードを加えることを特徴とする方法。
【請求項１６】
前記第１のコピーのノードの各々を分析して、対応するノードが前記第１のデータ構造の第２のバージョンから削除されるか否かを判定すること、および
前記対応するノードが前記第１のデータ構造の第２のバージョンから削除される場合、変更が前記第１のデータ構造へ伝搬されるであろう、ノードのリストに前記対応するノードを加えることを特徴とする請求項１５記載の方法。
【請求項１７】
前記第２のデータ構造のノードの各々を分析すること、および
前記分析されたノードが、変更が前記第１のデータ構造へ伝搬されるであろう、前記ノードのリストに無い場合、前記分析されたノードの変更を、前記第２のデータ構造の対応するノードから前記第１のデータ構造の第２のバージョンの前記対応するノードへと伝搬することを特徴とする請求項１６記載の方法。
【請求項１８】
前記第１のデータ構造の第２のバージョンから削除された、前記第１のデータ構造の第２のバージョンにおけるノードに対応する前記第２のデータ構造のノードを識別すること、
前記識別されたノードに削除されたノードのリストを加えること、および
全ての変更を前記第１のデータ構造の第２のバージョンへ伝搬された後に、識別されたノードを削除することを特徴とする請求項１６記載の方法。
【国際調査報告】
2007521534.tif 000038