(57)【要約】【課題】  拡張可能なインク用スキーマを実現する。【解決手段】  スキーマをインク用に書くことができる、システム、方法、およびデータ構造が説明される。第１例では、スキーマを、インクの階層構造中で種々のノード型をアドレス指定するために書くことができる。他の例では、スキーマを、ユーザ対話を規定して書くことができる。最後に、これらのスキーマを結合して（７０６）、新しい対話モデルの拡張性を提供する。【選択図】  図７
2004192626.tif 000002
【特許請求の範囲】
【請求項１】
インク用新しいノード型を加えるための方法であって、
インクノード型の第１のセットを持った第１のスキーマを得るステップと、
新しいインクノード型を前記第１のスキーマへ加えるステップと、
前記新しいインクノード型を持った前記第１のスキーマを、第２のスキーマとして保存するステップとを
備えたことを特徴とする方法。
【請求項２】
前記第２のスキーマは、段落ノードを含むことを特徴とする請求項１記載の方法。
【請求項３】
前記第２のスキーマは、文ノードを含むことを特徴とする請求項１記載の方法。
【請求項４】
前記第２のスキーマは、行ノードを含むことを特徴とする請求項１記載の方法。
【請求項５】
前記第２のスキーマは、単語ノードを含むことを特徴とする請求項１記載の方法。
【請求項６】
前記第２のスキーマは、ページノードを含むことを特徴とする請求項１記載の方法。
【請求項７】
前記第２のスキーマは、ブロックノードを含むことを特徴とする請求項１記載の方法。
【請求項８】
インク用のユーザインタフェースを修正するための方法であって、
エンティティ、およびユーザによる１また複数の動作への関連した応答をリストするステップと、
新しいエンティティおよび関連した、応答または複数の応答を加えるステップと、
前記エンティティと前記新しいエンティティおよび関連した応答とのリストを、エンティティおよび関連した応答の新しいリストとして格納するステップと
を備えることを特徴とする方法。
【請求項９】
エンティティの前記新しいリストは、段落エンティティを含むことを特徴とする請求項８記載の方法。
【請求項１０】
エンティティの前記新しいリストは、ページエンティティを含むことを特徴とする請求項８記載の方法。
【請求項１１】
エンティティの前記新しいリストは、ブロックエンティティを含むことを特徴とする請求項８記載の方法。
【請求項１２】
エンティティの前記新しいリストは、文エンティティを含むことを特徴とする請求項８記載の方法。
【請求項１３】
エンティティの前記新しいリストは、行エンティティを含むことを特徴とする請求項８記載の方法。
【請求項１４】
エンティティの前記新しいリストは、単語エンティティを含むことを特徴とする請求項８記載の方法。
【請求項１５】
インクスキーマを含むコンピュータシステムであって、前記インクスキーマは、
ノード型間の関係を規定するノード型を含む第１のスキーマと、
ユーザインタフェースのエンティティに関した、ユーザ動作についての応答を規定する第２のスキーマとを備え、
前記ノード型を、前記ユーザインタフェースエンティティにおいて表すこと
を特徴とするコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インクスキーマを含むコンピュータシステムに関し、より詳細には、インクについての意味情報のためのスキーマおよびインクとのユーザ対話方法の拡張性を志向するインク用の新しいノード型を加えるための方法、およびインク用のユーザインタフェースを修正するための方法、ならびにインクスキーマを含むコンピュータシステムに関する。
【背景技術】
【０００２】
ワードプロセッサは、線形の配置で情報を格納する。テキストは、ウィンドウに適合するようにまとめられる一方、データストリームは、一般に、種々の行、段落、区分、およびページの切れ目を持った線形ファイルである。ワードプロセシング技術において知られているように、単語、文または段落を選択することができる。単語、文および段落が周知なので、この機能は存在する。単語、文、および段落を用いるアプリケーションは、これら項目をどのようにして相互に関係を持たせるかという認識を持ってハードコードされている。さらに、これらの項目と対話するためのユーザインタフェースもまた周知である。インクへ適用するとき、段落、行、および単語を、直接、インクと対話するアプリケーションへとハードコードしても良い。種々のエンティティを処理するためのアプリケーションをハードコードする一例は以下の通りである。
選択されたエンティティが段落である場合、そのとき．．．；
そうでなければ、選択されたエンティティが単語である場合、そのとき．．．；
そうでなければ、．．．．
しかしながら、このようなアプローチは、３つの問題点を引き出す。
【０００３】
第１に、段落、行、および単語の認識を持つアプリケーションをハードコードすることは、これらの項目に対して十分に作動するが、導入されるべき新しいエンティティに対して障害を作り出す。例えば、一方のアプリケーションがインクに基づいたシステムにおいて文を識別した場合、そのアプリケーションが作られたときに存在した、エンティティの全ての種類でハードコードされている、他方のアプリケーションは、文に基づいたデータ構造およびコマンドに基づいた文を処理しようとする上でエラーを返すであろう。また、新しいエンティティに対するサポートを供給するために、アプリケーションに対するコードを書きなおす必要がある。さらに、問題点は、新しいエンティティに対応するアプリケーションと新しいエンティティに対応しないアプリケーションとの間でデータファイルを共有しようと試みるときに、生じる。
【０００４】
第２に、新しいエンティティとのユーザ対話をスクリプトすることは困難である。新しい対話モデルをコードの古いバージョンへスクリプトすることを要求され、またはユーザが新しいエンティティとの対話を試みる毎に、エラーを返すことを要求される。
【０００５】
第３に、どのようにそれがアプリケーションを統合するかについて、新しいエンティティをアドレス指定するコードは、一般的に新しいエンティティのためのユーザインタフェースを処理するコードとは異なるので、不連続性が存在する。コードセットの不一致により、エラーコードが必ず生じる。
【０００６】
より良いアプローチが、新しいエンティティをインクに基づいたアプリケーションへ追加するために必要である。
【０００７】
本発明に係る参考文献は存在しない。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
従来のシステムには上述したような種々の問題があり、さらなる改善が望まれている。本発明は、このような状況に鑑みてなされたもので、その目的とするところは、拡張可能なインクスキーマを実現した、インクスキーマを含むコンピュータシステムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の態様は、上述された問題の少なくとも１つに対する解決策を提供する。それによって、インクツリーにおいて新しいノード型を作成することができ、それと同様に、新しいおよび既存のインクに対応するシステムで使用するための、新しい対話モデルを規定することができる。本発明の態様は、拡張可能なスキーマとしてのインクのノード型および対話モデルのうち少なくとも１つを規定することに関する。
【００１０】
本発明のこれらの態様、および他の態様は、以下の図面および関連した説明を通して理解されるであろう。
【発明の効果】
【００１１】
以上説明したように本発明によれば、拡張可能なインク用スキーマを実現できる。
【発明を実施するための最良の形態】
【００１２】
以下図面を参照して本発明の実施形態を詳細に説明する。  
以下に続く種々の実施形態の詳細な説明と同様に、上述した本発明の態様の幾つかの概要は、添付した図面と結び付けて読むと、より理解され、それら図面は、一例を含むものであり、主張された本発明に関しての制限を含むものではない。
【００１３】
本発明の態様は、インクドキュメント構造の処理およびユーザ対話モデルのための拡張可能なスキーマを提供することに関するものである。拡張可能なスキーマを用いると、インクに基づいたドキュメントまたは他の形式の構造を、簡単に変えることができる。例えば、ワードプロセッサは、ドキュメントの構造中で狭い（制限されている）のが実際である一方、インクに基づいたドキュメントは、そのように抑制されていない。スキーマに基づいたノード規定を持ったインクに基づいたドキュメントにより、ユーザは、あらゆるドキュメント形式を自由に作成できる（それらドキュメント形式を、ドキュメントの構造または意味の決定を補助するために、さらに認識／構文解析技術と結合しても良い）。
【００１４】
本発明の種々の態様の理解を促進するために、以下で、幾つかのサブセクションを設ける。サブセクションは、用語、汎用コンピュータ、インクツリー、例示的な段落、機能の実行、およびデータ構造を含む。
【００１５】
用語
インクとは、プロパティを持ったストローク（ｓｔｒｏｋｅ）のシーケンスまたはセットである。ストロークのシーケンスは、順序付けられた形式でストロークを含むことができる。シーケンスを、取り込まれた時間によって順序付けても良く、またはストロークがページ上に出現する場所によって順序付けても良い。他の順序が可能である。ストロークのセットは、ストロークのシーケンスまたは無秩序のストロークまたはそれらのあらゆる組み合わせを含むことができる。インクを、追加的なプロパティ、メソッド、およびトリガーイベントなどを含むように拡張しても良い。少なくともこれらのイベントのうちの幾つかを組み合わせると、それをインクオブジェクトとして参照することができる。
【００１６】
インクオブジェクトとは、プロパティ、メソッド、および／またはイベントを持ったまたは持たないインクを格納するデータ構造である。
【００１７】
ストロークとは、取り込まれた点（ｐｏｉｎｔ）のシーケンスまたはセットである。例えば、与えられたとき、点のシーケンスを、線で結ぶことができる。あるいは、ストロークを、点および次の点の方向におけるベクトルとして表しても良い。つまり、ストロークは、インクに関する、点またはセグメントのあらゆる表示を含むように意図され、点の基底表示（ｕｎｄｅｒｌｙｉｎｇ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）および／または点をつなぐものに無関係である。
【００１８】
点（ｐｏｉｎｔ）とは、空間における位置を規定する情報である。例えば、点を、取り込まれた空間（例えば、デジタイザ上の点）、仮想インク空間（例えば、取り込まれたインクが配置される空間の座標）、および／または表示空間（例えば、表示デバイスの点または画素）に関係があると定義することができる。
【００１９】
汎用コンピュータ
図１は、本発明の種々の態様を実施するのに用いることができる、従来の汎用デジタルコンピューティング環境の一例の機能ブロック図である。図１において、コンピュータ１００は、プロセシングユニット１１０、システムメモリ１２０、およびシステムバス１３０を含み、そのシステムバスは、システムメモリからプロセシングユニット１１０までを含む、種々のシステムコンポーネントを接続する。システムバス１３０は、幾つかの種類のバス構造のうちのいずれでも良く、メモリバスまたはメモリコントローラ、ペリフェラルバス、および種々のバスアーキテクチャのいずれかを用いるローカルバスを含むことができる。システムメモリ１２０は、リードオンリーメモリ（ＲＯＭ）１４０およびランダムアクセスメモリ（ＲＡＭ）１５０を含む。
【００２０】
ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）１６０は、例えば、スタートアップ中等に、コンピュータ１００内の要素間の情報の伝達を支援する基本ルーチンを含んでおり、ＲＯＭ１４０に格納される。コンピュータ１００は、また、（不図示の）ハードディスクからの読み取りおよびそのハードディスクへの書き込みをするためのハードディスクドライブ１７０、着脱可能な磁気ディスク１９０からの読み取りまたはその磁気ディスクへの書き込みをするための磁気ディスクドライブ１８０、および例えば、ＣＤ  （ｃｏｍｐａｃｔ  ｄｉｓｃ）ＲＯＭまたは他の光媒体のような、着脱可能な光ディスク１９２からの読み取りまたはその光ディスクへの書き込みを行うための光ディスクドライブ１９１を含むことができる。ハードディスクドライブ１７０、磁気ディスクドライブ１８０、および光ディスクドライブ１９１を、ハードディスクドライブインターフェイス１９２、磁気ディスクドライブインターフェイス１９３、および光ディスクドライブインターフェイス１９４によってそれぞれシステムバス１３０に接続する。それらドライブおよびそれらの関連したコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよびパーソナルコンピュータ１００に対する他のデータの不揮発性ストレージを提供する。例えば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）などのような、コンピュータによってアクセス可能であるデータを格納できる、他の種類のコンピュータ可読媒体をまた本実施形態のオペレーティング環境で用いても良い、ということは当業者によって理解されよう。
【００２１】
多数のプログラムモジュールを、ハードディスクドライブ１７０、磁気ディスク１９０、光ディスク１９２、ＲＯＭ１４０またはＲＡＭ１５０上に格納することができ、そのＲＡＭ１５０は、オペレーティングシステム１９５、１また複数のアプリケーションプログラム１９６、他のプログラムモジュール１９７、およびプログラムデータ１９８を含んでいる。ユーザは、例えば、キーボード１０１およびポインティングデバイス１０２等のような、入力デバイスを通じて、コマンドまたは情報をコンピュータ１００へ入力することができる。（不図示の）他の入力デバイスは、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送アンテナ、スキャナなどを含んでも良い。これらのおよび他の入力デバイスを、しばしば、システムバスに結合される、シリアルポートインターフェイス１０６を通じて、プロセシングユニット１１０へ接続するが、例えば、パラレルポート、ゲームポートまたはユニバーサルシリアルポート（ＵＳＢ）等のような、他のインターフェイスによって接続しても良い。さらに、これらのデバイスを、（不図示の）適切なインターフェイスを介してシステムバス１３０へ直接、結合しても良い。モニタ１０７または他の種類の表示デバイスを、また、例えば、ビデオアダプタ１０８のような、インターフェイスを介してシステムバス１３０へ接続する。モニタに加えて、パーソナルコンピュータは、一般的に、例えば、スピーカおよびプリンタ等のような、（不図示の）他のペリフェラル出力デバイスを含む。好適な実施形態において、ペンデジタイザ１６５および付帯しているペンまたはスタイラス１６６を、手書き入力をデジタルで取り込むために提供する。ペンデジタイザ１６５とシリアルポートとの間には直接接続を示しているが、実際には、ペンデジタイザ１６５を、当技術分野で知られるような、パラレルポートまたは他のインターフェイス、およびシステムバス１３０を介して、プロセシングユニット１１０に直接結合しても良い。さらに、デジタイザ１６５を、モニタ１０７から離れて示しているが、デジタイザ１６５の使用可能な入力エリアは、モニタ１０７の表示エリアと同一の広がりを持たせるようにすることが好ましい。さらに、デジタイザ１６５は、モニタ１０７に一体化されても良く、または、モニタ１０７へとかぶせるような分離デバイスとして、またはさもなければモニタ１０７へと取り付ける分離デバイスとして存在しても良い。
【００２２】
コンピュータ１００は、例えば、リモートコンピュータ１０９等のような、１また複数のリモートコンピュータとの論理接続を用いるネットワーク化環境において動作することができる。メモリストレージデバイス１１１のみを図１では例示しているが、リモートコンピュータ１０９は、サーバ、ルータ、ネットワークＰＣ（ｐｅｒｓｏｎａｌ  ｃｏｍｐｕｔｅｒ）、ピアデバイスまたは他の一般のネットワークノードであることができ、一般的に、コンピュータ１００に関する上述の要素のうちの多く、または全てを含む。図１に記載された論理接続は、ローカルエリアネットワーク（ＬＡＮ）１１２とワイドエリアネットワーク（ＷＡＮ）１１３を含む。このようなネットワーク環境は、オフィス、企業全体に亘るコンピュータネットワーク、インターネットおよびイントラネットにおいて当たり前のことであり、有線および無線通信プロトコルの双方を用いる。
【００２３】
ＬＡＮネットワーク環境を用いると、コンピュータ１００は、ネットワークインターフェイスまたはアダプタ１１４を通して、ローカルエリアネットワーク１１２に接続される。ＷＡＮネットワーク環境を用いると、パーソナルコンピュータ１００は、一般的に、モデム１１５または、例えば、インターネット等のような、ワイドエリアネットワーク１１３に対して、通信を確立するための他の手段を含む。モデム１１５は、内部または外部にあっても良く、シリアルポートインターフェイス１０６を介して、システムバス１３０に接続される。ネットワーク化された環境において、パーソナルコンピュータ１００に関して描かれたプログラムモジュール、またはその一部を、遠隔メモリストレージデバイスに格納しても良い。
【００２４】
示されたネットワーク接続は、例示的であり、コンピュータ間で通信リンクを確立するための他の技術を用いることができることは、理解されるであろう。例えば、ＴＣＰ／ＩＰ、イーサネット（登録商標）、ＦＴＰ（ｆｉｌｅ  ｔｒａｎｓｆｅｒ  ｐｒｏｔｏｃｏｌ）、ＨＴＴＰ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｔｒａｎｓｐｏｒｔ  Ｐｒｏｔｏｃｏｌ）などのような、周知の種々のプロトコルのいずれかの存在を想定し、およびシステムを、ユーザがウェブに基づいたサーバからウェブページを検索できるような、クライアントサーバの設定で、動作することができる。種々の従来のウェブブラウザのいずれかを用いて、ウェブページ上のデータを表示し、処理することができる。
【００２５】
インクツリー
コンピュータは、組織化された構造にデータを配置して、データを簡単に検出しアクセスすることができる。一般的に用いられるデータ構造のうちのある種類は、ノードのデータ構造であり、ツリー構造は、ノードのデータ構造のほんの一例である。ツリー構造において、関連したデータのピースは、ツリーの中で個々のノードを形成する。（ルートノードを除く）各ノードは、単一の親ノードのみを有するが、（同じ親を共有する）複数の兄弟ノードおよび複数の子ノードを有することができる。従来、ノードＡの親がノードＢである場合、またはノードＡの親がノードＢの子孫である場合、ノードＡをノードＢの子孫として参照する。同様に、ノードＢがノードＡの子孫である場合、ノードＡをノードＢの先祖として参照する。
【００２６】
図２Ａおよび図２Ｂは、どのようにしてツリー構造を用いて、情報を編成することができるかを図を用いて例示する。より詳細には、これらの図は、どのようにしてツリー構造を用いて、電子インクに関するデータを編成し、その結果、インクを、ユーザによって取り扱うことができるか、またはアプリケーションの認識機能によって編成することができるかを例示する。電子インクを、ストロークから構成することができ、各ストロークは、例えば、ポインティングデバイスの移動に対応する。各ストロークは、ストロークのプロパティを規定する情報を含み、そのプロパティは、例えば、ストロークを構成するデータの点、ストロークの方向ベクトル、ストロークのカラー、およびストロークをディスプレイ上で表現する厚さ（ｔｈｉｃｋｎｅｓｓ）である。
【００２７】
インクに関するツリー構造（または他のグラフ）を用いる１つの利点は、インク情報を、（ストローク、単語、ブロックなどを用いて）直接に処理するための、またはノードおよび／または修正しているサブノードツリーにおいてノードをアドレス指定することによって処理するための機能を含む。これは、インクを直接にアドレス指定するオリジナルコードをまだなお用いる可能性があるので、レガシサポート（ｌｅｇａｃｙ  ｓｕｐｐｏｒｔ）を異なるバージョンのコードへ提供する。さらに、より新しいコードは、アドレス指定プロセスを簡素化するための構造の情報を用いても良い。
【００２８】
ツリーを用いる他の利点は、全体のサブツリーを簡単にアドレス指定するための機能である。例えば、（ツリー中の段落またはブロックノードが、インクカラーに対して何も識別子を有さない可能性があるので）段落をブルーインクカラーへ設定することは、段落自身に対してなんの意味も有さない一方、インクツリーを用いることは、段落に対するインクカラーを明記するための、および段落中の各ストロークに対するインクセットのカラーを有するための機能を提供する。
【００２９】
ストロークを個々に処理できる一方、それらを処理する前に、ストロークを、まず、編成することは、一般的に効果的である。従って、パーサを用いて、個々のストローク間の関係を確立することができ、ついで、ストロークを、編集または手書き認識のためにより大きいユニットへ編成することができる。例えば、パーサを用いて、関連したストロークのグループを一緒にして単語を形成するユニットへ関連付けることができる。同様に、パーサは、１また複数の単語のグループを一緒に関連付けて行を形成することができ、および１また複数の行のグループを関連付けてブロックまたは段落を形成することができる。それから、パーサは、１また複数のブロックまたは段落のグループを一緒に関連付けて単一のページまたはドキュメントを形成することができる。
【００３０】
パーサは、自動（関係を独力で作ること）、マニュアル（ユーザがインク間の関係を明記すること）、または双方の組み合わせで作動することができる。
【００３１】
パーサは、一般的に、電子インクストローク間の関係を正確に表す、ツリー構造を作成するために電子インクを数回、分析する必要がある。さらに、電子インクを編集する毎に、パーサは、ツリーをアップデートする必要がある。それ故に、パーサは、頻繁に、および延長された期間、作動する必要がある。それがツリー構造を洗練する必要がある毎に、パーサを絶えずアクティブソフトウエアアプリケーションと干渉させるのを回避するために、パーサは、その代わりに、幾つかの環境とのバックグラウンドで、連続的に、作動することができる。ツリーは、様々な種類のノードを含む。
単語ノード型；
行ノード型；
ブロックノード型；
ページノード型；
段落ノード型；
文ノード型；
これら種々のノード型を、図２Ａおよび図２Ｂ中に示すようなノード型の例の中で示す。
【００３２】
図２Ａは、パーサによって、一般的に提供されることができる結果を表すツリー構造２００を例示する。ツリー２００は、単語ノード２０１を含む。各単語ノード２０１は、個々のストロークについてのデータを含み、それらストロークは、対応する単語Ｗを構成する。より詳細には、パーサが、ストロークのグループが単語Ｗを構成すると判定している場合、そのとき、それらストロークについてのデータは、単語Ｗを表す単語ノード２０１に含まれる（またはその単語ノード２０１によって参照される）。
【００３３】
多数の単語Ｗを、パーサによって単一の行Ｌと関連付ける場合、そのとき、単語Ｗに対する単語ノード２０１を、行Ｌに対応する行ノード２０２の子として配置する。行ノード２０２は、例えば、行Ｌ中の単語Ｗを構成するインクのカラーまたは厚さ等のような、その子の全てに共通のデータを含むことができる。行ノード２０２は、パーサがブロックＢへと関連付けた行Ｌに対応しており、ついで、ブロックＢに対応するブロックノード２０３の子として配置される。ブロックノード２０３は、そのとき、ページノード２０４の子として働き、そのページノード２０４は、例示された例において、ツリー２００についてのルートノードである。もちろん、パーサが多数のページの境界を認識する場合、そのとき、ページノード２０４は、それ自身、全体のドキュメントに対応するルートノードの子とすることができる。
【００３４】
図２Ｂは、他のインク構造を示し、そのインク構造中で、インク情報を、行、ブロックおよびページに対するものとして、行および段落について処理する。インクツリーを構造２０８として示し、単語ノード２０５を、行ノード２０６に接続する。行ノード２０６を、段落ノード２０７に接続する。
【００３５】
オプションの文構造の情報を、図２Ａおよび図２Ｂ中の文ノードＳによって表すことができる。この情報を、また、行ノード２０２および２０６の代わりに、または結びつけて用いることができる。この文構造の情報は、行のインクに対するものとして、別個の文に関して動作するようなシステムの機能を提供する。幾つかの場合において、文は、多数の行にまたがることができる。他の場合において、多数の文が、１つの行に出現するかもしれない。文の情報の包含は、ツリーの形式的な定義（各子が１つの親ノードをちょうど有する）に違反する。ここで、文の情報を包含すると、２つの親（行ノードおよび文ノード）を種々の単語ノードに提供する。この包含を、ＤＡＧ（ｄｉｒｅｃｔｅｄ  ａｃｙｃｌｉｃ  ｇｒａｐｈ）によってより正確に表す。従って、ツリーまたは他の構造のどちらかを用いて、インク情報を正確に表すことができる。
【００３６】
オリジナルのインクツリー構造が文の情報を熟慮しない場合、文の情報（図２Ａおよび２ＢにおけるノードＳ）の包含は、問題を含む。言い換えれば、インク情報を、オペレーティングシステムまたはインクツリー２００および２０８を作成しトラバースするアプリケーションへと、特にコードしてきたかもしれない。このハードコーディングは、新しいノード型の後の追加を困難にさせる。
【００３７】
スキーマの一部としてインク情報を表すことによって、上述の問題を解決することができる。例えば、アプリケーションでノード型のリストを予め規定する代わりに、スキーマ表現を用いて、ノード型を提供することができる。スキーマ表現を用いると、インクツリーの豊富で複雑な表現を作成することができる。新しいノードを持ったインクツリーを、より古いアプリケーションで処理すると、次の２つの動作のうち少なくとも１つが起こる。第１の動作では、アプリケーションは、インクスキーマを調べて、新しいノードがスキーマに適合しているか、および適切に動作しているかどうか判定することができる。第２の動作では、アプリケーションは、新しいノードを無視し、インクツリーの処理を継続することができる。この第２の動作において、アプリケーションは、未知のノードを処理するので、エラーを返すこと無しに、その基本的な機能を、やはり提供することができる。
【００３８】
このアプローチは、注釈の種類および他のパラメータの、新しい定義を含むスキーマ中の修正を考慮に入れるのに柔軟である。さらに、（“ノード型”として一般的に表された）異なるノードを規定することができ、既存のおよび将来のシステムへ拡張可能な新しいノードを有する。
【００３９】
例えば、図７は、どのようにして新しいノード型を、既存のスキーマへ加えることができるかの一例を示す。古い（または既存のまたは配置された）スキーマ７０１は、多数の関係を含んでいる。例えば、古いスキーマは、ドキュメントを、ゼロまた複数の段落を含むものとして規定し、段落は１また複数の行を含み、行は１また複数の単語を含み、単語は１また複数のストロークを含み、およびストロークは１また複数の点を含む。
【００４０】
図７に示されるように、新しいノード型（ここでは、“文”）を、新しい追加（ｎｅｗ  ａｄｄｉｔｉｏｎ）７０２として、スキーマへ含ませる。スキーマを発展させるための機能により、新しいノード型についての機能を、過去のコードの有用性を損なうこと無しに、追加することが可能である。例えば、インクのノードの構造への、スキーマに基づいたアプローチを用いるアプリケーションは、（それが理解できない）新しいノード型を無視する一方、古いノード型を、適切に処理することができる。これは、コストが過剰にならない、共同利用可能なデータ構造を提供することができるという利点を提供する。
【００４１】
ノードの拡張性を支援するために（他のアプローチが可能ではあるが）、種々のノード型を、種々のノード型に対する識別を用いて格納することができる。例えば、ノード型識別子を、各ノードに添付されたＧＵＩＤとして格納しても良い。ＧＵＩＤは、グローバルユニーク識別子であり、それを用いて、特定の項目をユニークに識別することができる。当技術分野で知られているような、他の識別子を用いても良いということは理解される。ＧＵＩＤは、“無効な（ｎｕｌｌ）”および“不確実な（ｕｎｓｕｒｅ）”値を含む予め規定された値を有することができる。
【００４２】
インクツリー構造の種々の動作は、他のノード型が存続することができるものの中に、ノード型が存続することができるものに関する規則を実施することができる。例えば、単語は、段落を含むことができないということを決定することができる。これらの規則は全て、関連した言語（例えば、ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）、ＨＴＭＬ（Ｈｙｐｅｒ  Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕｇｅ），および他の言語）で明記されたスキーマにおいて定義される。第三者が、例えば、音楽記法の行が音部記号および韻律（ｍｅａｓｕｒｅ）、等を含むことを明記するための、異なる言語スキーマ（例えば、ＸＭＬ、またはＨＴＭＬスキーマ）を、完全に規定することができるので、これは、最大の拡張性を提供する。
【００４３】
例示的な段落
図３は、インク構造の情報を本システムに提供するために解析される段落を示す。この段落は、２つの文を含む。例示的な目的のために、以下の２つの文を用いる。
“Ｊｏｈｎ  ｗａｌｋｅｄ  ｔｏ  ｔｈｅ  ｓｔｏｒｅ．”
および
“Ｈｅ  ｂｏｕｇｈｔ  ａｐｐｌｅｓ．”
図３に示すように、ペアの文を、Ｌ０、Ｌ１およびＬ２の３行に解析する。これらの行を、段落Ｐ０へとまとめる。単語を以下の表１ように分類する。
【００４４】
【表１】
2004192626.tif 000003
【００４５】
図３は、また、２つの対話領域（ｉｎｔｅｒａｃｔｉｏｎ  ｒｅｇｉｏｎ）ＩＲ０およびＩＲ１を示す。もちろん、他の対話領域を、例えばヒットテスティング（ｈｉｔ−ｔｅｓｔｉｎｇ）に基づいて明記、または判定することができるが、これら２つの対話領域を例示的な目的のために用いる。
【００４６】
図４は、構文解析動作の結果を含む、インクツリーの例を示す。ここで、段落４０１のＰ０は、３つの子、つまり、（段落の３行を表している）サブノード４０２（Ｌ０、Ｌ１およびＬ２）を有する。ノードＬ０は、（行Ｌ０中の２つの単語を表している）２つの単語ノードＷ０およびＷ１の親である。ノードＬ１は、（行Ｌ１中の４つの単語を表している）４つの単語ノードＷ２〜Ｗ５の親である。ノードＬ２は、（行Ｌ２中の２つの単語を表している）２つの単語ノードＷ６およびＷ７の親であり、それら単語ノードを、図中符号４０３として集合的に表す。
【００４７】
当技術分野で知られているように、（例えば、ハードコードされた、または表形式で）アプリケーション中の全ての対話関係を格納することができる。しかしながら、これらの対話モデルは、アプリケーションの現在のバージョンと同じくらい最新であるだけである。例えば、空のエリア（例えば、ＩＲ１）上の（例えば、ペンの第２の端にある消去センサによってトリガされた）消去動作の対話をアドレス指定した新しい対話モデルを作成した場合、過去のハードコードされた対話モデルは、この新しい対話を包含することは不可能であろう。この問題に対処するための、新しいドライバのセット、またはオリジナルプログラムのアップデートされたバージョンを、少なくともダウンロードする必要がある。
【００４８】
本発明の態様によれば、対話スキーマとして対話モデルを表現することができ、そこで、新しい対話をスキーマに従って規定することができる。インターフェイス論理の再使用を可能にする目的で、ユーザインタフェース論理をカプセル化する、コンポーネントを使用しても良い（およびそれによって、アプリケーション全体に一貫したインクの体験を提供する）。この場合、ペンに基づいた（ｐｅｎ−ｂａｓｅｄ）ユーザインタフェースは、選択動作（ｓｅｌｅｃｔｉｏｎ  ｂｅｈａｖｉｏｒ）、つまり、ハードウエアボタンおよびダイアログボックスのような静的ユーザインタフェースでない選択動作を含む。
【００４９】
ユーザインタフェーススキーマを、インクツリーノードの構造スキーマと独立に規定しても良い。これは、ユーザインタフェーススキーマが、ノードの環境中に、等価物を有していない新しい機能性を組込むことを許されているという利点を提供する。しかしながら、インクツリーノードのスキーマとユーザインタフェーススキーマとの組み合わせは、新しいインク型の拡張性を向上させる。例えば、スキーマを新しいノードタイプとそれらの関係とで規定すると、インクを解釈しランタイムでそれらの関係を確立する、構文解析コンポーネントを、また、実行することができ、それと同様に、スキーマによって規定されたインクの要素に、共通のペンに基づいたユーザインタフェースを提供する、ユーザインタフェースコンポーネントを実施することができる。
【００５０】
例えば、音楽記法についてのスキーマ（行が、音部記号および幾つかの韻律を有し、韻律は、音符（ｎｏｔｅ）および休符（ｒｅｓｔ）を含むが、音符は、韻律を含むことができない）を規定することができる。音楽記法のパーサは、インクツリーとユーザインタフェーススキーマとを用いて、その結果を伝達することができる。さらに、音楽記法についてのユーザインタフェースコンポーネントは、音符に対するドラッグアンドドロップのような機能を実装することができ、音符に対するドラッグアンドドロップは、リアルタイムでスケール上の位置へスナップし、リアルタイムで音符の正確な数を韻律の中へ単に与えること等を行う。そして、あらゆるインク認識（ｉｎｋ−ａｗａｒｅ）アプリケーションは、これらの機能を取り込むことができる。
【００５１】
プラグ可能なユーザインタフェースで、インクツリー構造の基礎拡張性は、新しい度合いの力を持つようになる。
【００５２】
図５は、どのようにしてストロークの情報を格納することができるかの一例を示す。インクオブジェクト５０１は、単一のストロークを含む（ここで、単一のストロークは、単語“Ｊｏｈｎ”とつづる）。あるいは、単語“ｊｏｈｎ”は、１つ以上のストロークを含んでも良い。図５は、インクオブジェクト５０１が、単語“Ｊｏｈｎ”を構成する、ストロークの４つのセット５０２〜５０５を含む、例示を示す。他のストロークを、他のインクオブジェクト５０６〜５０８中に格納しても良い。最後に、インク構造の情報５０９を、格納しても良い。インク構造の情報は、どのようにして、インクオブジェクト５０１、５０６〜５０８がお互いを関係付けるかを、システムが理解できる能力を提供する。インク構造は、段落、行、ページ、ブロック、およびインク中の相互関係を記述する他の情報を含んでも良い。
【００５３】
再び図３を参照すると、単語の属性（例えば、“ｗａｌｋｅｄ”単語Ｗ１）を修正することを望むかもしれない。クリックトゥセレクト（ｃｌｉｃｋ−ｔｏ−ｓｅｌｅｃｔ）の選択技術を用いると、それをダブルクリックすることによって、単語Ｗ１を選択することができる。あるいは、実装に依存するが、スタイラスのシングルタップを用いて、単語またはストロークの集合を選択することができる。さらに、実行は、追加のタップをさらに用いて、選択範囲を変えることができる。
【００５４】
一度選択されると、そのとき、選択された単語上で動作を実行する。単語のグループを修正するために、単語を選択し、選択されたグループ上で機能を実行するように試みることを、また期待するであろう。このアプローチでの困難は、その機能であり、その機能は、単語Ｗ１を修正するためのものであり、また、単語（または行または段落）のグループの修正を処理するために十分洗練される必要がある。単に配置すると、このアプローチは、多数の異なる種類の入力を処理することができるような機能を必要とする。機能への入力は、１つのストローク、多数のストローク、１つの単語、多数の単語、１つの行、多数の行、１つの段落、または多数の段落、またはその上グループの他の組み合わせであっても良い。このような機能への種々の入力は、機能を書くことを困難にする。なぜならば、プログラマは、１）受け取る可能性のある全ての入力を予想すること、および２）異種の入力の数にも関わらず、一貫して実行する機能を書くことを必要とするからである。
【００５５】
対話モデルのスキーマ表現を提供することによって、新しい対話は、規定され、およびアプリケーションにスキーマ中の情報に基づいた新しい対話を解釈させることができる。例えば、２つの異なるスタイラスを用いてドキュメントを作成し、および２つのスタイラスが異なる意義を有し、さらに対話モデルの処理を対話スキーマに加える場合、新しい対話モデルが未知であるとき、エラーを返すことに対するものとして、アプリケーションは、対話モデルを適切に解釈することができ、および新しい対話モデルを適切に処理できるか、または無視することができる。
【００５６】
図７を参照すると、ユーザインタフェーススキーマを、表として表すことができる。ここで、エンティティ７０３を、動作７０４に関連させる。例えば、動作（タップ、ダブルタップ、左クリック、右クリック、等）をそれらの上で実行すると、種々のエンティティ（段落、行、単語、ストローク、空白、スクロールバー、ボタンなど）は、種々の動作（動作１、動作２、動作３、動作４、動作５など）を割り当てられる。このようなインターフェイスへのスキーマのアプローチによって、新しいエンティティ７０３（ここでは、文ノード型７０５）を加えることができ、および種々の方法で対話するとき、どの動作を新しいユーザインタフェースへ適用することができるかを明記することができる。例えば、文上でタップすると、第ｎ動作を実行することができる。文上でダブルタップすると、第ｑ動作を実行することができる。この方法では、異なるユーザ対話を、難無く、新しいユーザインタフェースの項目に関連付けることができる。
【００５７】
さらに、本発明のさらに他の態様では、スキーマ７０１および７０２を、エンティティ７０３へリンクしても良い（図中符号７０６）。新しい態様をスキーマ７０１加えると、そのとき、関連したエンティティを、エンティティ７０３の１つとしてのエンティティとして公開することができる。スキーマに導入された新しいノード型とユーザインタフェース中のエンティティとの間のこのような関係を用いると、多数の利点を実現することができる。例えば、基礎的なコードをより簡単に維持することができる。同じコード中のエンティティの個々の記法を創作する必要がない。他の点では、同じエンティティを、２つの異なる概念によって参照することができる。また、同じエンティティを、コードの幾つかの部分でモデル化し、そこで、エンティティの修正を、コードの全てを検討する必要がなく、簡単に処理する。
【００５８】
データ構造
図６Ａおよび図６Ｂは、例示的なデータ構造を示す。そのデータ構造を用いて、インクツリーまたは他のノードのデータ構造をサポートすることができる。図６Ａは、２重にリンクされたツリー構造を示す。図６Ｂは、動的配列を用いる類似したツリーを示す。
【００５９】
図４のインクツリーを、図６Ａによって部分的に表す。段落ノード６０１は、２つのポインタを含む。第１ポインタ６０２は、最初の行（ｆｉｒｓｔ  ｌｉｎｅ）ノード６０４を指す。段落ノード６０１の第２ポインタ６０３は、最後の行（ｌａｓｔ  ｌｉｎｅ）ノード６２０を指す。図６Ａには示していないが、段落ノード６０１は、また、次の段落ポインタおよび前の段落ポインタを含むことができる。もちろん、必ずしも、全てのポインタは、用いられる必要は無く、またはインクツリーを正確に表すように存在する必要もない。
【００６０】
最初の行ノード６０４は、４つのポインタを含む。第１ポインタ６０６は、次の行（ｎｅｘｔ  ｌｉｎｅ）６１９を指す。最初の行６０４の第２ポインタは、前の行（ｐｒｅｖｉｏｕｓ  ｌｉｎｅ）ノードを指す。この例では、最初の行ノード６０４への前のノードが存在しないので、前の行ノードポインタ６０７は、いずれの前のノードも指さない。次に、最初の単語（ｆｉｒｓｔ  ｗｏｒｄ）ポインタ６０８は、最初の単語ノード６２１を指す。この例では、行ノード６０４の中に１つだけ他の単語があるので、最後の単語（ｌａｓｔ  ｗｏｒｄ）ポインタ６０９は、最後の単語ノード６１４を指し、その単語ノード６１４は、Ｗ０の後のさらに次の単語である。
【００６１】
２番目の行（ｓｅｃｏｎｄ  ｌｉｎｅ）ノード６１９は、最初の行ノード６０４と同様に、４つのポインタを同様に含む。２番目の行ノード６１９の次の行ポインタは、３番目の行（ｔｈｉｒｄ  ｌｉｎｅ）ノード６２０を指す。２番目６１９の前の行ポインタは、戻って最初の行ノード６０４を指す。最初の単語ポインタおよび最後の単語ポインタは、それぞれ、２番目の行ノード６１９の中で最初の単語および最後の単語を指す。行ノード６１９および６２０に関連付けられた単語を、簡潔にするためにここでは示さない。
【００６２】
３番目の行ノード６２０は、同様に４つのポインタを含む。３番目の行ノード６２０の次の行ノードポインタは、次の行ノードを示さない（図４の例においては、３番目の行ノードが最後の行であるため）。３番目の行ノード６２０の前の行ポインタは、戻って２番目の行ノード６１９を指す。３番目の行ノード６２０の最初の単語ポインタおよび最後の単語ポインタは、３番目の行ノード６２０に関連付けられた単語を指す。
【００６３】
最初の単語ノード６２１は、４つのポインタを含む。第１ポインタは、次の単語（ｎｅｘｔ  ｗｏｒｄ）ポインタ６１０であり、その次の単語ポインタ６１０は、ノード６０４の中の次の単語を指す。行ノード６０４の中に前の単語（ｐｒｅｖｉｏｕｓ  ｗｏｒｄ）が存在しないので、前の単語ポインタ６１１は、いずれの単語も指さない。最初のストローク（ｆｉｒｓｔ  ｓｔｒｏｋｅ）ポインタ６１２および最後のストローク（ｌａｓｔ  ｓｔｒｏｋｅ）ポインタ６１３は、それぞれ、最初のおよび最後のストロークを指す。
【００６４】
最後の単語ノード６１４は、最初の単語ノード６２１のそれと同様の構造を含む。最後の単語ノード６１４は、（もはや単語を指さない）次の単語ポインタ６１５、（戻って前の単語ノード６２１を指す）前の単語ポインタ６１６、最初のストロークポインタ６１７および最後のストロークポインタ６１８を含む。
【００６５】
単語ノード６１０および６１４の構造は、図６Ａに表されるように実施されることができ、または代わりの表現を有しても良い。例えば、単語ノードは、インクストロークを含む、インクオブジェクトであっても良い。また、単語は、ストロークを指す、インクオブジェクトであっても良い。
【００６６】
補足する点として、図６Ａは、図４のノードを表すということに注意する。図６Ａは、双方向性の参照を持ったノードを示す。この例では、すべてのノードは、前のノードと同様に、次のノードへのポインタを含む。多くのポインタ（少なくともリンクされたリスト）を有することでの利点は、いずれのノードから、親および周囲のノードを見つけることができることである。あるいは、この配置を、幾つかのポインタを除去することによって簡素化しても良い。例えば、行ノード６０４、６１９、および６２０の前の行ポインタを、除去しても良い。同様に、前の単語ポインタ６１１および６１６を、同様に除去しても良い。前の行ポインタと前の単語ポインタとを除去すると、データ構造をより小さくすることができる。
【００６７】
種々の行、単語、および段落は、多数のサブノードを有することができることが理解される。幾つかのノードは、次のノードを有さなくても良いことがさらに理解される。例えば、段落が、３つの行を有し真ん中の行がコンテンツを有さない場合（例えば、スペースを２つの行の間に挿入した場合）、記述したノードのいずれかを、サブノードおよび／またはコンテンツを持たないプレースホルダとして、用いることができる。
【００６８】
さらに、他の名前を用いて、本発明の範囲から逸脱することなく、種々のノードおよびお互いの関係を表すことができることが理解される。例えば、段落ノード６０１を、ページノードとして参照し、ノード６０１、ならびに行ノード６０４、６１９、および６２０の間、または単語ノード６２１および６１４の間に挿入された多数のノードを参照することができる。追加的に挿入されたノードは、手書きインクの構文解析の他の種類を反映することができる。これら追加的なノードは、文の情報（例えば、単語が、文、およびそれと同種のものを構成するもの）を含んでも良い。
【００６９】
図６Ａの代替として、図６Ｂのツリー構造を用いても良い。図６Ｂは、動的配列を用いるツリー構造を示す。動的配列は、リストをトラバースする必要がなく、メンバへの直接アクセスの利点を有する。動的配列を用いると、従来の、静的配列をトラバースすることによって消費されたメモリの消耗は最小になる。
【００７０】
ある動的配列の実装を、Ｍｉｃｒｏｓｏｆｔ  Ｆｏｕｎｄａｔｉｏｎ  Ｃｌａｓｓ（ＭＦＣ）のＣＡｒｒａｙクラスに基づかせても良い。動的配列の他の実装は、当技術分野で知られている。
【００７１】
図６Ｂは、ブロックノード６２２を示し、そのブロックノード６２２は、その中に含まれた、ブロック数の初期カウント６２３（ここでは、３）を含む。まず、第０ブロック６２４を、単語ノード６２７へリンクする。他の第１ブロック６２５および第２ブロック６２６を、追加的な単語ノードへリンクしても良いが、簡略化のために、それら追加的な単語ノードを示さない。
【００７２】
単語ノード６２７は、それによって参照される単語の数の初期カウント（６２８）（ここでは、２つの単語）を含む。第０単語６２９は、ストロークノード６３１を参照する。第１単語６３０は、ノード６３６を参照する。ストロークノード６３１は、１また複数のストローク（例えば、第０ストローク６３２および第１ストローク６３３）を含む。各ストロークは、１また複数の点を含み、それら点は、インクストロークを構成する。それら点を、第０ストローク６３２および第１ストローク６３３中に、集合６３４および６３５として格納する。
【００７３】
同様に、ストロークノード６３６は、（ここでは、第０ストローク６３７、および第１ストローク６３８で示された）１また複数のストロークを含む。各ストロークは、１また複数の点を含み、それら点は、インクストローク、つまりストロークを構成する（ここでは、点６３９および点６４０を、第０ストローク６３７および第１ストローク６３８にそれぞれ関係付ける）。
【００７４】
本発明を添付した特許請求の範囲を用いて定義しているけれども、これらの特許請求の範囲は、本発明が、本明細書で、コンビネーションまたはサブコンビネーションで説明した要素およびステップを含むように意図されていることを、示している。従って、本発明を定義するための、任意の数の代替コンビネーションが存在し、それら代替コンビネーションは、種々のコンビネーションまたはサブコンビネーションにおいて、明細書本文、特許請求の範囲、および図面を含む、明細書からの１また複数の要素を組込む。本発明の態様の代替コンビネーションを、単独もしくはここで定義した１また複数の要素またはステップとの組み合わせのどちらかで、本発明の変更または訂正として、もしくは本発明の一部として利用することができることは、本明細書を考慮して、当業者には明らかであろう。ここに含まれた本発明の記載された説明はこのような変更および訂正を全て包含する、ということを意図することができる。
【図面の簡単な説明】
【００７５】
【図１】本発明の実施形態に関して用いることができるコンピュータの概略的説明を示す図である。
【図２Ａ】本発明の実施形態による、文の例示的構文解析を示す図である。
【図２Ｂ】本発明の実施形態による、文の例示的構文解析を示す図である。
【図３】本発明の実施形態による、サンプルの段落を示す図である。
【図４】本発明の実施形態による、図３の段落に適用されたツリー構造を表す図である。
【図５】本発明の実施形態による、インクオブジェクトおよび構造情報を示す図である。
【図６Ａ】本発明の実施形態による、ツリー構造を例示する図である。
【図６Ｂ】本発明の実施形態による、ツリー構造を例示する図である。
【図７】本発明の実施形態による、インクの態様を規定する拡張可能なスキーマの一例を示す図である。
【符号の説明】
【００７６】
７０１  古いスキーマ
７０２  スキーマへの新しい追加
７０３  エンティティ
７０４  動作
７０５  新しいユーザインタフェース
【図１】
2004192626.tif 000004
【図２Ａ】
2004192626.tif 000005
【図２Ｂ】
2004192626.tif 000006
【図３】
2004192626.tif 000007
【図４】
2004192626.tif 000008
【図５】
2004192626.tif 000009
【図６Ａ】
2004192626.tif 000010
【図６Ｂ】
2004192626.tif 000011
【図７】
2004192626.tif 000012