(57)【特許請求の範囲】
【請求項１】
ユーザインタフェース（UI）を提示する情報処理装置であって、
UI部品の構成が記述された部品コンテンツを読み込む読み込み手段と、
読み込んだ前記部品コンテンツを解析して複数のUI部品を構築する構築手段と、
構築された複数のUI部品のうち最初に選択状態とされる初期フォーカスを持つUI部品を決定する決定手段と、
前記複数のUI部品のイメージを作成するとともに、前記決定手段で決定された前記初期フォーカスを持つUI部品を選択状態であることを表すイメージに加工してユーザに提示する提示手段と、
を備え、
前記部品コンテンツは、自UI部品の子UI部品への参照情報と、自UI部品及び子UI部品のうちのどれが初期フォーカスを持つかを指示する初期フォーカス指定の記述を含み、
前記構築手段は、前記自UI部品を生成し、その後、前記参照情報に基づいて、前記自UI部品に関連付けられた子UI部品を生成することによりUI部品階層を構築し、
前記決定手段は、前記UI部品階層のルートから、対応する初期フォーカス指定によって指示される子UI部品を辿り、対応する参照情報に子UI部品が指定されていないUI部品、対応する初期フォーカス指定に自UI部品が指示されているUI部品、又は、対応する初期フォーカス指定がないUI部品が検索されたとき、当該UI部品を、前記初期フォーカスを持つUI部品に決定する
ことを特徴とする情報処理装置。
【請求項２】
前記部品コンテンツは、自UI部品について、第１の初期フォーカス指定の記述と、前記第１の初期フォーカス指定とは異なる第２の初期フォーカス指定の記述とを含み、
前記決定手段は、前記構築手段が前記第１の初期フォーカス指定によって指示されるUI部品の構築に失敗した場合、前記第２の初期フォーカス指定によって指示されるUI部品を、前記初期フォーカスを持つUI部品に決定する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
ユーザインタフェース（UI）を提示するための情報処理装置の制御方法であって、
読み込み手段が、UI部品の構成が記述された部品コンテンツを読み込む読み込みステップと、
構築手段が、読み込んだ前記部品コンテンツを解析して複数のUI部品を構築する構築ステップと、
決定手段が、構築された複数のUI部品のうち最初に選択状態とされる初期フォーカスを持つUI部品を決定する決定ステップと、
提示手段が、前記複数のUI部品のイメージを作成するとともに、前記決定ステップで決定された前記初期フォーカスを持つUI部品を選択状態であることを表すイメージに加工してユーザに提示する提示ステップと、
を有し、
前記部品コンテンツは、自UI部品の子UI部品への参照情報と、自UI部品及び子UI部品のうちのどれが初期フォーカスを持つかを指示する初期フォーカス指定の記述を含み、
前記構築ステップは、前記自UI部品を生成し、その後、前記参照情報に基づいて、前記自UI部品に関連付けられた子UI部品を生成することによりUI部品階層を構築し、
前記決定ステップは、前記UI部品階層のルートから、対応する初期フォーカス指定によって指示される子UI部品を辿り、対応する参照情報に子UI部品が指定されていないUI部品、対応する初期フォーカス指定に自UI部品が指示されているUI部品、又は、対応する初期フォーカス指定がないUI部品が検索されたとき、当該UI部品を、前記初期フォーカスを持つUI部品に決定する
ことを特徴とする情報処理装置の制御方法。
【請求項４】
コンピュータに請求項３に記載の制御方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザインタフェースをユーザに提示する技術に関する。
【背景技術】
【０００２】
従来、機器やサービスのユーザインタフェース（以下「UI」ともいう。）は、CやＪａｖａ（登録商標）といったプログラミング言語によって作成され、機器上に搭載されるのがほとんどであった。しかし、近年、UIをUIコンテンツとして作成し、汎用ブラウザで表示することにより、ユーザにUIを提示することが可能になった。
【０００３】
例えば、ピザの宅配業者は、ユーザからのピザの注文を受け付けるUIをHTMLで記述し、インターネットで公開している。ユーザがインターネットブラウザでこのHTMLを表示すると、アニメーションや音を使ったUIが表示される。ユーザは、ピザの大きさ、枚数、トッピング、ドリンクなどの注文をこのUIを介して容易に行うことが可能である。
【０００４】
プログラミングではなく、UIコンテンツの作成により機器やサービスのUIを提示するメリットは次の２点である。
【０００５】
１．UIのコンテンツ（上述の例ではHTMLファイル）を書き換えるだけで、UIの更新を行うことが可能である。プログラミングによりUIを作成した場合は、機器上のプログラムを入れ替える必要がある。これは多くの場合、UIコンテンツの書き換えよりも大変な作業である。
【０００６】
２．既存のブラウザを利用することで、UIを構成する画像のレンダリングや音声出力などの実装を行う必要がない。UIを作成するプログラムを習得するよりも、HTMLのような記述仕様を学習する方が簡単である。
【０００７】
このようなメリットから、インターネット上のサービスを中心に、UIコンテンツによるUIの記述が広く使われるようになっている。
【０００８】
最近では、インターネット上のサービスだけではなく、機器（PC、TV、携帯電話等）のUIも、UIコンテンツにより作成されるようになってきた。例えば、Multimodal Interaction Activity (http://www.w3.org/2002/mmi/) では、UI記述の標準仕様を検討している。また、マイクロソフト社が提案するXAML (Extensible Application Markup Language) はＷｉｎｄｏｗｓ(登録商標)Vista（登録商標）に搭載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開2002-215278号公報
【特許文献２】特許第3186726号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
UIにはフォーカスという概念が存在する。これは、指向性の無いユーザ操作がどのフォームに入力されるかを表現したものである。例えば、キーボード入力は一般的には指向性が無い入力である。いくつかのテキスト入力エリアを持つUIがあった場合、どのテキスト入力エリアにテキストが入力されるかは、フォーカス指定が無い場合にはユーザは知ることができない。一般的に、フォーカスは、UI部品（UIを構成するテキストエリア、ボタン、チェックボックス等のパーツ）を点線の矩形で囲むことで表現される。この情報により、ユーザは現在のキーボード入力がどのテキスト入力エリアに入力されるかを知ることが可能である。
【００１１】
UIが表示された時に最初にフォーカスがあたる部品を初期フォーカスUI部品と呼ぶ。どのUI部品に初期フォーカスをあてるかは、UIコンテンツの設計者が決めるものである。ユーザが最初にアクセスする可能性が高いUI部品を初期フォーカスUI部品にすることで、ユーザビリティは向上する。どこに初期フォーカスを設定するかは、UIコンテンツの中に記述されることが多い。
【００１２】
また、UI部品は階層化することが可能である。図５（ａ）はあるUI部品の例である。このUI部品の階層は、図６（ａ）で示すようになる。501が601、502が602、503が603、504が604、505が605、506が606、507が607、508が608、509が609にそれぞれ対応している。階層関係を持つUI部品の集合でUIを表現することにより、他のUI開発者、あるいは自分が過去に作成したUI部品を再利用することができるようになる。
【００１３】
このように既存のUI部品を再利用し、階層化できるUI部品において、UI開発者の意図通りに初期フォーカスUI部品を設定することは困難である。たとえば、図５（ａ）の501のUI部品において507のラジオボタンが初期フォーカスUI部品とされていたとする。図５（ｂ）は、既存のUI部品を再利用したグラフィカルユーザインタフェースの例を示す図で、別のUI開発者が501のUI部品（702、703）を２つ組み合わせたUI部品である。このとき、702、703のUI部品では、それぞれ704、705のUI部品を初期フォーカスUI部品とするように記述されていることになる。このUIコンテンツを表示した場合、704、705のどちらのUI部品に初期フォーカスが設定されるかは、表示するブラウザの動作に委ねられる。このため、702、703を２つ組み合わせたUI開発者は、どちらのUI部品の初期フォーカス指定を採用するかを制御することができない。
【００１４】
特許文献１には、ユーザの操作履歴から、UI部品のフォーカス状態を自動で変更する技術が開示されている。また、特許文献２には、アプリケーション内の同一UI部品が同じ初期フォーカスを持つかどうかを検証するツールに関する技術が開示されている。
【００１５】
しかしながら、これらの技術を用いても、上記課題を解決することができない。
【００１６】
本発明は、初期フォーカスを指定したUI部品を持つUI部品のUI開発者と、前記UI部品を組み込んだUI部品のUI開発者双方の意図を反映した初期フォーカスの指定を行うことができる情報処理装置及びその制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明の一側面によれば、ユーザインタフェース（UI）を提示する情報処理装置であって、UI部品の構成が記述された部品コンテンツを読み込む読み込み手段と、読み込んだ前記部品コンテンツを解析して複数のUI部品を構築する構築手段と、構築された複数のUI部品のうち最初に選択状態とされる初期フォーカスを持つUI部品を決定する決定手段と、前記複数のUI部品のイメージを作成するとともに、前記決定手段で決定された前記初期フォーカスを持つUI部品を選択状態であることを表すイメージに加工してユーザに提示する提示手段とを備え、前記部品コンテンツは、自UI部品の子UI部品への参照情報と、自UI部品及び子UI部品のうちのどれが初期フォーカスを持つかを指示する初期フォーカス指定の記述を含み、前記構築手段は、前記自UI部品を生成し、その後、前記参照情報に基づいて、前記自UI部品に関連付けられた子UI部品を生成することによりUI部品階層を構築し、前記決定手段は、前記UI部品階層のルートから、対応する初期フォーカス指定によって指示される子UI部品を辿り、対応する参照情報に子UI部品が指定されていないUI部品、対応する初期フォーカス指定に自UI部品が指示されているUI部品、又は、対応する初期フォーカス指定がないUI部品が検索されたとき、当該UI部品を前記初期フォーカスを持つUI部品に決定することを特徴とする情報処理装置が提供される。
【発明の効果】
【００１８】
本発明によれば、初期フォーカスを指定したUI部品を持つUI部品のUI開発者と、前記UI部品を組み込んだUI部品のUI開発者双方の意図を反映した初期フォーカスを指定することが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明を適用可能なUI提示装置の機能構成図。
【図２】実施形態におけるUI提示装置の処理を示すフローチャート。
【図３】実施形態におけるUI部品を構築する処理、及び初期フォーカスを決定する処理のフローチャート。
【図４】本発明を適用可能なUI提示装置とUI部品コンテンツ作成装置のシステム構成を示す図。
【図５】UI部品を示すグラフィカルユーザインタフェースの例を示す図。
【図６】UI部品の階層構造の例を示す図。
【図７】実施形態５のUI部品階層の例を示す図。
【図８】実施形態におけるUI部品コンテンツの例を示す図。
【図９】初期フォーカス指定を持つUI部品階層の例を示す図。
【図１０】実施形態５の初期フォーカス決定ルーチンの例を示すフローチャート。
【図１１】実施形態におけるタスク階層の例を示す図。
【図１２】実施形態におけるタスクコンテンツの例を示す図。
【図１３】実施形態におけるUI提示装置の機能を実現する情報処理装置のハードウェア構成例を示す図。
【図１４】UI部品コンテンツ作成装置の機能構成図。
【図１５】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図１６】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図１７】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図１８】UI部品階層構築時のUI部品コンテンツの例を示す図。
【図１９】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図２０】初期フォーカス指定を行った時のUI部品コンテンツの例を示す図。
【図２１】UI部品コンテンツ作成装置の動作例を示すフローチャート。
【図２２】UI部品コンテンツ作成装置における子UI部品挿入動作例、及び初期フォーカス設定動作例を示すフローチャート。
【図２３】実施形態４の初期フォーカス決定ルーチンの例を示すフローチャート。
【図２４】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図２５】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図２６】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図２７】UI部品階層構築時のUI部品コンテンツの例を示す図。
【図２８】UI部品コンテンツ作成アプリの動作画面例を示す図。
【図２９】初期フォーカス指定を行った時のUI部品コンテンツの例を示す図。
【図３０】実施形態の機器UIの例を示す図。
【図３１】実施形態のUI部品階層の例を示す図。
【発明を実施するための形態】
【００２０】
以下、図面を参照して本発明の好適な実施形態について詳細に説明する。なお、本発明は以下の実施形態に限定されるものではなく、本発明の実施に有利な具体例を示すにすぎない。また、以下の実施形態の中で説明されている特徴の組み合わせの全てが本発明の課題解決手段として必須のものであるとは限らない。
【００２１】
＜実施形態１＞
まず、用語の定義を行う。本文書において、UIを構成する１連続の見た目と機能をあわせた要素をUI部品と呼ぶ。例えばUI部品には、GUIでよく用いられるGUIボタンや、テキストエリア、背景のビットマップイメージなどがある。
【００２２】
そして、UI部品を表現する内部データをUI部品コンテンツと呼ぶ。図８（ａ）は図５（ａ）の504のラジオボタングループを表すUI部品コンテンツの例である。この例のように、UI部品コンテンツは、XML形式で表現することが可能である。また、このXML形式をバイナリ化したバイトコードもUI部品コンテンツとすることが可能である。
【００２３】
図８（ａ）のようなUI部品コンテンツは、その部品の見た目、アニメーション、何が起こった場合にどう動作するかといった振る舞いの情報を記述することが可能である。また、子UI部品への参照情報803を持つことも可能である。図８（ａ）のUI部品コンテンツの例では、radio1, radio2という二つの子部品を持つことを表現している。この子供を持つことができるという性質により、UI部品は木構造として表現することが可能である。
【００２４】
例えば図５（ａ）のようなUI画面があった場合、501〜509のUI部品で表現することが可能である。そして、501〜509のUI部品はそれぞれ記憶装置中のUI部品コンテンツ101で表現され、UI部品階層構築部105は、図６（ａ）のようなUI部品階層を構築する。なお、501〜509はそれぞれ601〜609のウィジット（Widget）に対応している。この階層での親子関係は、UI部品の親子関係を表している。例えば、図５（ａ）の504はラジオボタングループを表す。このラジオボタングループは、２つのラジオボタン(506、507)を含んでいる。これにより、"Widget D"(604)の子として"Widget F"(606)と"Widget G"(607)が構成される。UIを階層構造で表現することにより、UI部品の再利用性が高まるという利点がある。例えば後にこのラジオボタングループを別のUIで再利用する場合には、"Widget D"(604)を親とする部分木をUIに組み込めばよい。
【００２５】
本発明を適用可能なUI提示装置は、階層化されたUI部品コンテンツを解釈し、ユーザにUIを提示する装置である。しかし、本発明を適用可能なUI提示装置が動作するためには、UI部品コンテンツ作成装置によって作成されたUI部品コンテンツが揃っていなければならない。
【００２６】
図４はUI提示装置とUI部品コンテンツ作成装置のシステム構成を示す図である。UI部品コンテンツ作成装置1400は、マウス/キーボード1403を介したユーザの操作により、記憶装置内のUI部品コンテンツ101の作成と編集を行う。UI提示装置100は、記憶装置内のUI部品コンテンツ101を参照し、ディスプレイ102あるいはスピーカ103を介してUIをユーザに提示する。
【００２７】
次に、これらUI部品コンテンツ作成装置1400とUI提示装置100の説明を行う。
【００２８】
[UI部品コンテンツ作成装置]
次に、このようなUI部品コンテンツを編集し、UI部品階層を構築する処理について説明する。図１４は、UI部品コンテンツ作成装置の機能構成図である。
【００２９】
UI部品コンテンツ作成装置(1400)は、UI部品コンテンツ入出力部(1404)から装置外の記憶装置にアクセスし、UI部品コンテンツ101のロードとセーブを行う。また、装置外のマウス/キーボード(1403)を介して行ったユーザの操作は、ユーザ操作取り込み部(1407)から装置内に取り込まれる。そして、装置内で編集中のUI部品コンテンツの情報は、UI部品コンテンツ提示部(1406)から装置外のディスプレイ(102)に出力される。
【００３０】
また、UI部品コンテンツ編集部(1405)では、ユーザの操作を解析し、その操作がUI部品階層の構築(子UI部品の挿入)である場合、その旨をUI部品コンテンツ階層構築部(1408)に通知する。また、ユーザの操作が初期フォーカスの設定である場合は、その旨を初期フォーカス設定部(1409)に通知する。これらの処理の流れについては後ほど説明する。
【００３１】
＜UI部品の新規作成＞
図１５はUI部品コンテンツ作成装置1400を組み込んだUI部品コンテンツ作成アプリケーションのGUI画面例である(1500)。この例では、UI開発者Aが"Widget B" という名前のUI部品コンテンツを新規作成した時点の画面を表している。UI部品コンテンツ作成アプリ(1500)には、UI部品階層構造提示エリア(1501)とUI部品の見た目提示エリア(1502)が存在する。UI開発者Aは、これらのエリアで編集操作を行うことによりUI部品コンテンツの編集を行う。
【００３２】
例として、UI開発者Aが図５（ａ）の502,508,509で表現されたチェックボックス部品を新規作成する手順を示す。なお、502,508,509それぞれを"Widget B", "Widget H", "Widget I"という名前で呼ぶ。
【００３３】
まず、UI開発者Aは、図１６のような"Widget B"の編集時において、UI部品の見た目提示エリアでマウス(1600)の右クリック操作を行う。するとその操作はユーザ操作取り込み部1407を介しUI部品コンテンツ編集部1405に通知される。そしてここで、コンテキストメニュー(1601)が表示され、そのメニューに"Add child widget"という項目が現れる。これを選択すると、UI部品コンテンツ階層構築部1408においてUI部品の一覧を提示する。これは、UI部品コンテンツ入出力部1404を介し、記憶装置101内に格納されたUI部品コンテンツの一覧を表示することで実現可能である。UI開発者Aは、提示されるUI部品の中から子Widgetとして設定したいUI部品を選択する。例えば、ここでは"Widget H"を選択したとする。すると、"Widget H"を"Widget B"の子として追加し、UI部品コンテンツ提示部1406において図１７のような"Widget H"が持つUIの見た目(1701)が生成される。そして生成された見た目をUI部品階層構造提示エリアに提示する(1700)。同様の操作を行うことにより、"Widget I"も子UI部品として追加することが可能である。
【００３４】
このときの"Widget B"のUI部品コンテンツの内部データの様子を示したものが図１８である。最初、子供を何も持たなかったときの状態が図１８（ａ）である(1800)。このコンテンツには、＜child-widget＞という要素がなく、子供が何も設定されていないことを示している。次に図１７までの操作を行い"Widget H"を子供に持つ状態が図１８（ｂ）である(1801)。"Widget H"に対する＜child-widget＞要素が存在している。さらに"Widget I"も子供に持った状態が図１８（ｃ）である。
【００３５】
さらに、UI部品コンテンツ作成アプリケーションでは、子のUI部品に初期フォーカス設定を行うことが可能である。図１９はこの操作を行っている場面を表している。図１９（ａ）のように、UI部品階層構造提示エリア(1900)に表示されたUI部品の上にマウスカーソルをあて、右クリックを行うと、その操作はユーザ操作取り込み部1407を介し、UI部品コンテンツ編集部1405に送られる。ここで、その操作に応じてコンテキストメニュー(1901)を表示させる。コンテキストメニューには"Set initial focus"という項目が現われる。UI開発者Aがこの項目を選択すると、その指示は初期フォーカス設定部1409に送られ、子のUI部品が初期フォーカスを持つという設定がなされる。そして、図１９（ｂ）のようにそれを表現した表示(1902)がUI部品コンテンツ提示部1406で生成され、ディスプレイ102を介してUI開発者Aに提示される。この例では、"Widget B"から"Widget I"に矢印が伸びた見た目となり、"Widget B"では"Widget I"に初期フォーカスが設定されたことを表現している。
【００３６】
最後に、UI開発者Aがデータのセーブを指示すると、その指示はユーザ操作取り込み部1407を介し、UI部品コンテンツ編集部1405に送られる。ここで、UI部品コンテンツの内部データをUI部品コンテンツ入出力部1404に送り、記憶装置101内に格納する。
【００３７】
図２０は、これまでの操作で"Widget B"のUI部品コンテンツの内部データどのように変ったかを説明した図である。最初、子供のどれにも初期フォーカスを設定していなかったときの状態が図２０（ａ）である(2000)。ルート要素の＜widget＞には"initial-focus"という属性がなく、子供のどれにも初期フォーカスを設定していないことを示している。次に図１９までの操作を行い"Widget I"に初期フォーカスを設定した時点での状態が図２０（ｂ）である(2001)。＜widget＞に"initial-focus"という属性がつき、それが子UI部品の"Widget I"を指し示している。
【００３８】
図２１は、UI部品コンテンツ作成装置(1400)の中枢部であるUI部品コンテンツ編集部(1405)の処理を示したフロー図である。ここでは、この図を用いて説明する。
【００３９】
UI部品コンテンツ作成装置が立ち上がると、このフローが開始される。フローが開始されると、まずUI部品コンテンツ入出力部1404が記憶装置101にアクセスし、編集対象のUI部品コンテンツのロードを行う(S2101)。例えば、一般的なファイル入力ダイアログを表示し、編集したいUI部品コンテンツをユーザに問い合わせる。そして、そのUI部品コンテンツをロードすることが考えられる。あるいは、UI部品を新規作成する場合は、新規作成するUI部品の名前をユーザに入力させ、UI部品コンテンツの雛形を記憶装置上に作成し、それをロードしてもよい。
【００４０】
編集対象のUI部品コンテンツのロードが終わると、そのUI部品コンテンツをUI部品コンテンツ提示部1406においてViewに反映する(S2102)。例えば、図１５のようなViewをユーザに提示する。なお、ロードしたUI部品コンテンツが過去に編集されたものである場合、図１７のように過去の編集結果を提示する。
【００４１】
次に、ユーザ操作取り込み部1407においてユーザの操作を取り込み(S2103)、UI部品コンテンツ編集部1405において操作に応じた処理の分岐を行う。
【００４２】
まず、ユーザの操作が装置の終了を指示したものである場合(S2104)、UI部品コンテンツ入出力部1404において編集中のUI部品コンテンツをセーブし(S2108)、本フローを終了する。装置の終了指示とは、たとえば、アプリケーションを終了するような処理である。
【００４３】
もし、ユーザ操作が子UI部品の挿入指示であった場合(S2105)、UI部品コンテンツ階層構築部1408において子UI部品の挿入処理(S2109)を行う。これはユーザが選択したUI部品コンテンツを、編集中のUI部品コンテンツの子供として設定するための処理である。子UI部品の挿入指示とは、例えば図１６で示したように、UI部品の見た目提示エリアでマウスの右クリック操作を行い、コンテキストメニューから"Add child widget"という項目を選択する操作が考えられる。
【００４４】
図２２（ａ）は、UI部品コンテンツ階層構築部1408において行われる子UI部品の挿入処理のフローである。この処理では、まず挿入する子UI部品を取得する(S2201)。例えば図１６で示したように、コンテキストメニューから"Add child widget"という項目を選択する時に、UI部品のリストを提示し、ユーザに選択させるようにしてもよい。次に、編集中のUI部品の子として選択した部品を付け加える(S2202)。具体的には、図１８で示したように、編集中のUI部品コンテンツに、＜child-widget＞という要素を追加し、その属性として選択したUI部品の情報を付与することが考えられる。
【００４５】
図２１の説明に戻る。もし、ユーザ操作が初期フォーカスの設定指示であった場合(S2106)、初期フォーカス設定部1409において初期フォーカスの設定処理(S2110)を行う。これは特定の子UI部品に初期フォーカスを設定するための処理である。初期フォーカスの設定指示とは、例えば図１９で示したように、UI部品階層構造提示エリアの子UI部品の上で右クリック操作を行い、コンテキストメニューから"Set initial focus"という項目を選択する操作が考えられる。
【００４６】
図２２（ｂ）は、初期フォーカス設定部1409において行われる初期フォーカスの設定処理のフローである。この処理では、まず初期フォーカスを持たせる子UI部品を選択する(S2301)。図１９の例では、子UI部品の上で右クリック処理を行った。従って、この右クリックを行った子UI部品を、初期フォーカスを持たせる子UI部品とみなしてよい。次に、編集中のUI部品に、選択した子UI部品の初期フォーカス設定を追加する(S2302)。具体的には、図２０（ａ），（ｂ）で示したように編集中のUI部品コンテンツに "initial-focus"という属性を追加し、その値として選択した子UI部品の名前を記述してもよい。
【００４７】
再び、図２１の説明に戻る。もし、ユーザの行った操作が装置の終了を指示したもの、あるいは、子UI部品の挿入を指示したもの、あるいは、初期フォーカスの設定を指示したものではなかった場合、それ以外の所定の動作を行う(S2107)。例えば、子UI部品の見た目位置を移動させる操作であった場合、ユーザの求める位置に子UI部品の見た目位置を移動する。あるいは、今までユーザが行った操作をundoする指示であった場合、undo操作を行う。これらの処理はUI部品コンテンツ編集部1405において行われる。
【００４８】
これらの処理を終えると、UI部品コンテンツ提示部1406において現在編集中のUI部品コンテンツをViewに反映する(S2102)。例えば、ユーザ操作が子UI部品の挿入であった場合、子UI部品の見た目をUI部品の見た目提示エリアに追加し、UI部品階層構造提示エリアに子UI部品の情報を追加する。
【００４９】
以上、これらの処理は、ユーザが終了指示を行うまで続ける。
【００５０】
＜作成済みUI部品の再編集＞
なお、これまでの説明は、UI部品を新規作成する場合について説明した。次に、UI開発者Cが、UI開発者AとUI開発者Bが作成したUI部品を再利用し、新たなUI部品を作成する操作について説明する。
【００５１】
図２４は既に作成されたUI部品コンテンツをロードした場面である。例えば図６（ｂ）のような階層を持つ"Widget A"というUI部品コンテンツをロードしたとする。なお、"Widget A"は、UI開発者Bが作成した"Widget C"という子部品しかもっていない。これから、先のUI開発者Aが作成した"Widget B"を子として追加する処理を説明する。
【００５２】
マウス/キーボード1403の操作により、UI開発者Cが既存のUI部品コンテンツのロードを指示すると、その操作はユーザ操作取り込み部1407を介し、UI部品コンテンツ編集部1405に送られる。すると、UI部品コンテンツ編集部1405ではUI部品コンテンツ入出力部1404を介し指定されたUI部品コンテンツを記憶装置101からロードする。
【００５３】
ロードが完了すると、UI部品コンテンツ作成アプリ(2400)はロードしたUI部品コンテンツの情報を、UI部品コンテンツ提示部1406から開発者Cのディスプレイ102に提示する。例えば、UI部品階層をUI部品階層構造提示エリア(2401)に提示し、UI部品の見た目をUI部品の見た目提示エリア(2402)に提示する。今回は、図６（ｂ）で表現された階層を持つUI部品コンテンツをロードしたとする。ユーザは、マウスポインタ(2403)を用いてUI部品の見た目等を編集することが可能である。
【００５４】
図２５は、過去に作成したUI部品を再利用し、現在のUI部品を取り込む場面である。まず、UI開発者CはUI部品の見た目提示エリア上で、子UI部品を取り込みたい場所にマウスポインタ(2500)を移動する。そしてマウスの右クリックを行うとその指示はユーザ操作取り込み部1407を介し、UI部品コンテンツ編集部1405に送られる。ここでは"Add child widget"という項目を持つコンテキストメニュー(2501)を表示する。UI開発者Cが"Add child widget"を選択すると、その指示はUI部品コンテンツ階層構築部1408に送られる。ここで、UI部品コンテンツ入出力部1404から記憶装置101内のUI部品コンテンツの情報を取り出し、その一覧を提示する。ここでは、UI開発者Cが先ほど作成した"Widget B"を選択したとする。すると、"Widget A"は既に追加されている"Widget C"に加え、"Widget B"も子UI部品として持つ。そして、図６（ａ）のUI階層が構築され、図26のようなViewがUI部品コンテンツ提示部1406からUI開発者Cのディスプレイ102に提示される。
【００５５】
図２６は"Widget B"が子UI部品として追加された後のアプリケーションのViewである。"Widget B"の情報がUI部品階層構造提示エリアとUI部品の見た目提示エリアに追加される(2600,2601)。なお、"Widget B"は先ほどの処理により"Widget H"と"Widget I"を子部品として持っているため、"Widget B"を追加するだけでこれらの部品を追加することになる。
【００５６】
図２７は、"Widget A"に"Widget B"を子UI部品として追加することで、"Widget A"のUI部品コンテンツがどのように変化したかを示した図である。図２７（ａ）は、"Widget B"を子UI部品として追加する前の状態である(2700)。この段階で、＜child-widget＞要素には"Widget C"しか設定されていない。図２７（ｂ）は追加した後の状態である(2701)。新たに"Widget B"に関する＜child-widget＞要素(2702)が追加されている。
【００５７】
さらに、子UI部品に初期フォーカス設定を行うことも可能である。図２８は、"Widget C"に初期フォーカス設定を行った状態を示している。まず、図２８（ａ）のように、UI部品階層構造提示エリア(2800)の中で初期フォーカス設定を行いたい子UI部品上で右クリックすると、その指示はユーザ操作取り込み部を介してUI部品コンテンツ編集部1405に送られる。そして、ここで、コンテキストメニュー(2801)を提示する。次に、UI開発者Cが提示されたコンテキストメニュー中の"Set initial focus"を選択したとする。すると、指示は初期フォーカス設定部1409に送られ、指定した子UI部品が初期フォーカス部品として設定される。そして、図２８（ｂ）のような初期フォーカス表示(2802)がUI部品コンテンツ提示部1406からディスプレイ102に出力される。
【００５８】
最後に、UI開発者Cがデータのセーブを指示すると、その指示はユーザ操作取り込み部1407を介し、UI部品コンテンツ編集部1405に送られる。ここで、UI部品コンテンツの内部データをUI部品コンテンツ入出力部1404に送り、記憶装置101内に格納する。
【００５９】
図２９は、"Widget A"において"Widget C"を初期フォーカス設定することで、"Widget A"のUI部品コンテンツがどのように変化したかを示した図である。図２９（ａ）は、"Widget C"を初期フォーカス設定する前の状態である(2900)。＜widget＞要素には"initial-focus"という属性が無い。図２９（ｂ）は"Widget C"を初期フォーカス設定した後の状態である(2901)。"initial-focus"という属性が追加され、その値として"Widget C"が設定されている(2902)。
【００６０】
ここまでの説明により、新規にUI部品コンテンツを作成する処理を示した。また、UI部品に作成済みのUI部品を子UI部品として追加する処理を示した。また、特定の子UI部品に初期フォーカスを設定する処理について示した。これらの処理を繰り返すことで、さらに複雑なUI部品階層を構築することも可能である。
【００６１】
[UI提示装置]
図１は、本発明を適用可能なUI提示装置の機能構成図である。ここでは、この図を用い、本実施形態のユーザインタフェース提示装置（以下「UI提示装置」）を説明する。
【００６２】
本実施形態におけるUI提示装置100は、機器又はサービスのUIをユーザに提示する装置である。
【００６３】
UI提示装置100は、装置外部の記憶装置101に格納されたUI部品コンテンツにアクセスすることが可能である。
【００６４】
また、UI提示装置100にはディスプレイ102やスピーカ103といった、出力デバイスが接続されている。これらの出力デバイスを介して、画像や音声をユーザに提示することが可能である。
【００６５】
UI提示装置100は、UI部品コンテンツ読み込み部104を有する。UI部品コンテンツ読み込み部104は、装置外部の記憶装置101からUI部品コンテンツを読み込む。
【００６６】
UI部品階層構築部105は、読み込んだUI部品コンテンツを解析し、１画面のUIを構成するUI部品の階層関係を構築する。１画面のUIは、複数のUI部品で構成することが可能である。
【００６７】
初期フォーカス位置決定部106は、UI部品階層構築部105で構築したUI部品階層から、初期フォーカスを持つUI部品を決定する。初期フォーカスを持つUI部品は、構築された複数のUI部品のうちで最初に選択状態とされることになる。この決定処理の詳細は後述する。
【００６８】
UI部品階層構築部105で構築したUI部品階層と、初期フォーカス位置決定部106で決定した初期フォーカスUI部品の情報は、UI提示部107に送られる。UI提示部107は、これらの情報を用いてユーザに提示するUIを構築する。例えば、図５（ａ）のようなグラフィカルユーザインタフェースのイメージを作成し、ディスプレイ102を介してユーザに提示する。このとき、初期フォーカスを持つUI部品は、点線の矩形をつけるなどの手法で選択状態であることを表すイメージに加工して、ユーザに提示する。
【００６９】
上述のようなUI提示装置100の機能は、パーソナルコンピュータ、ワークステーション等の情報処理装置によって実現が可能である。
【００７０】
図１３は、UI提示装置100の機能を実現する情報処理装置のハードウェア構成例を示す図である。
【００７１】
１は装置全体の制御を司るＣＰＵである。２はブートプログラムや固定的なデータ等を記憶しているＲＯＭである。３は主記憶装置として機能し、ＣＰＵ１のワークエリアを提供するＲＡＭである。４はハードディスク装置（ＨＤＤ）であり、ここにＯＳ４１をはじめ、UI提示プログラム４２などが格納される。UI提示プログラム４２には、上記したUI部品コンテンツ読み込み部104、UI部品階層構築部105、初期フォーカス位置決定部106、UI提示部107の各機能に対応するプログラムコードが含まれる。UI提示プログラム４２は例えば、インターネットブラウザに組み込まれる。
【００７２】
また、ＶＲＡＭ５は表示しようとするイメージデータを展開するメモリであり、ここにイメージデータ等を展開することでディスプレイ１０２に表示させることができる。７及び８はそれぞれ、各種入力操作を行うためのキーボード及びマウスである。９はネットワークに接続するためのインタフェース（Ｉ／Ｆ）である。この他、上記したスピーカ１０３が接続されている。
【００７３】
図２は、UI提示装置の処理を示すフローチャートである。
【００７４】
まず、ユーザが機器の電源を入れると、図２で示すフローに入る。あるいは、インターネットブラウザ等で、ユーザが求めるサービスにアクセスした場合に、このフローに入るようにしてもよい。
【００７５】
本フローに入ると、UI部品コンテンツ読み込み部104は、ルートとなるUI部品コンテンツを表す情報を取得する（ステップS201）。取得した情報は例えばＲＡＭに格納される。ルートとなるUI部品とは、そのUIを構成するUI部品階層のルートとなるUI部品である。
【００７６】
UI部品は木構造などで階層化して表現することが可能である。例えば、あるUI部品Aが別のUI部品B及びCを用いたUI部品である場合、UI部品AがUI部品BとCの親となる。このように、UI部品は階層化して表現することが可能であり、そのルートとなるUI部品コンテンツを表す情報をこの処理で取得する。一般的に、ルートとなるUI部品は、そのUIの１画面を表すUI部品して設計されることが多い。そしてルートとなるUI部品コンテンツは、機器あるいはサービスごとに決まっている。機器の場合、そのルートとなるUI部品コンテンツの情報（コンテンツIDやそのURI情報）は機器のメモリ内に格納される。また、サービスのUIの場合、そのサービスのHTML等のコンテンツにルートとなるUI部品コンテンツの情報（URI情報）が付与されることもある。
【００７７】
ルートとなるUI部品コンテンツを取得すると、UI部品階層構築部105は、そのコンテンツ情報を基にUI部品を構築する（ステップS202）。この処理は後ほど説明する。ルートとなるUI部品が構築されると、初期フォーカス位置決定部106は、そのUI部品を基に、初期フォーカス位置を決定する（ステップS203）。この処理も後ほど説明する。
【００７８】
ルートとなるUI部品が構築され、その初期フォーカス位置が決定されると、UI提示部107は、これらの情報を基に実際のUIを生成し、ユーザに提示する（ステップS204）。例えば、ピザの注文を行う入力フォーム群をグラフィカルユーザインタフェースとして作成し、ユーザのディスプレイから提示する。
【００７９】
図３（ａ）は、ステップS202の、コンテンツ情報を基にUI部品を構築する処理のフローチャートである。この処理は引数としてUI部品コンテンツを表す情報をとる。この情報は、例えば、UI部品コンテンツを表すID、あるいはそのUI部品コンテンツのURIである。
【００８０】
本フローに入ると、UI部品コンテンツを表す情報を基にUI部品コンテンツのロードを行う（ステップS301）。例えば、引数で与えられたUI部品コンテンツを表す情報がIDである場合には、IDとUI部品コンテンツの対応表などを参照し、UI部品コンテンツを取得する。引数で与えられたUI部品コンテンツを表す情報がURIである場合には、そのURI情報を基に、UI部品コンテンツを機器内あるいはネットワークを介して取得する。
【００８１】
図８（ａ）は、図５（ａ）のUIの504の部分のUI部品コンテンツの例である。UI部品コンテンツはこのようにXMLの形式で記述されてもよい。UI部品コンテンツ801は、自UI部品の子UI部品への参照情報803と、自UI部品あるいは子UI部品のうちのどれが初期フォーカスを持つかを指示する情報802の記述を含む。図８（ａ）の例では、自UI部品（ラジオボタングループ）は、そこに関連付けられたradio1、radio2の２つのラジオボタンを子UI部品として持ち、そのうちのradio1の子UI部品を、初期フォーカスを持つと定義している。
【００８２】
図８（ａ）のようなUI部品コンテンツを取得すると、そのUI部品コンテンツを解析し、対象となるUI部品に子のUI部品があるかを調べる（ステップS302）。図８（ａ）のコンテンツの場合、803にあたる情報が子のUI部品に関する情報である。この例では、子UI部品としてradio1とradio2の子UI部品を持つことを表している。ステップS302から始まるループでは、この子UI部品毎に、ステップS303とステップS304の処理を行うことを示している。
【００８３】
ステップS303では、子UI部品のコンテンツを示す情報から、子UI部品の構築を行う。子UI部品のコンテンツを示す情報は、子UI部品のIDあるいはそのUI部品コンテンツへのURI情報である。これらの情報を引数に、本処理フローで示す処理を行い、子UI部品の構築を行う。
【００８４】
そして、生成された子UI部品を、現在処理中のUI部品の子UI部品として追加する（ステップS304）。この子UI部品の生成（ステップS303）及び追加（ステップS304）を、現在処理中のUI部品の全ての子UI部品に関して行う。そして、UI部品コンテンツで定義された全ての子UI部品を処理すると、ステップS305の処理に進む。
【００８５】
ステップS305では、現在処理中のUI部品を本フロー呼び出し側（図２）に返す。これにより、本フローを処理することで、入力されたUI部品をルートに持つUI部品階層を構築し、呼び出し側に返す。
【００８６】
図３（ｂ）は、ステップS202における、UI部品階層を基に初期フォーカスを決定する処理のフローチャートである。このフローには、図３（ａ）の処理で生成されたUI部品階層のルートUI部品を引数として入る。例えば、図３（ａ）の処理で生成されたUI部品階層が図９に示すような階層であった場合、901で示すUI部品がルートUI部品である。ルートUI部品とは、そのUI階層のルートとなるUI部品であり、例えば、１つの画面を構成するトップのUI部品（例えばスクリーンUI部品）である。
【００８７】
ここでは、図９で示すUI部品階層の901のUI部品を引数として本フローに入ったと仮定して説明する。まず、現在処理中のUI部品（最初はルートUI部品901）の初期フォーカス指定を参照する（ステップS401）。初期フォーカス指定とは、自UI部品あるいは子UI部品うちのどのUI部品が初期フォーカスを持つかを示す情報である。この情報は、例えば、図８（ａ）のUIコンテンツの場合は802のような記述（"initial-focus"属性）で指定することが可能である。この情報は図３（ａ）の処理で生成されたUI部品階層にも残される。例えば、図９では、太線の矢印が初期フォーカスの情報を表している。例えば、図９の901のUI部品には２つの子UI部品が存在し、そのうちの"Widget C"(903)が初期フォーカスを持つことを表している。
【００８８】
処理中のUI部品が別のUI部品Aを初期フォーカス指定していた場合（ステップS402）、そのUI部品Aで初期フォーカスを判断する（ステップS403）。この処理は、そのUI部品Aを引数に本フローを再帰的に呼び出すことに相当する。例えば、"Widget A" のUI部品コンテンツには"Widget C"が初期フォーカスを持つと記述されていた場合、"Widget C" を引数として図３（ｂ）のフローを呼び出す。
【００８９】
初期フォーカス指定が別のUI部品Aを参照していなかった場合（ステップS402）、現在処理中のUI部品が初期フォーカスを持つとして判断する（ステップS404）。例えば、処理中のUI部品が子UI部品を持たない場合や、現在処理中のUI部品コンテンツにinitial-focus="_this"のような記述があり、自らが初期フォーカスを持つと指定されていた場合がこれに相当する。また、initial-focus属性自体が指定されておらず、初期フォーカス指定がなされていないUI部品が検索された場合も、これに相当する。
【００９０】
この図３（ｂ）のフローに、図９のUI部品階層のルートであるUI部品901を入力すると、初期フォーカス指定が "Widget A"、"Widget C"、"Widget D"、"Widget G" と推移する。そして、最終的に "Widget G" が初期フォーカスを持つUI部品となる。
【００９１】
以上説明した本実施形態におけるUI提示装置によれば、各UI開発者の意図を加味した初期フォーカスを決定することが可能である。例えば、図９での "Widget B"(902) というUI部品を作成したUI開発者Aがおり、"Widget B" の初期フォーカス指定を "Widget I"(909)にしていた。また、"Widget C"(903) というUI部品を作成したUI開発者Bがおり、"Widget G"(907)を初期フォーカス指定していた。ここで、UI開発者CがこれらのUI部品を再利用し、"Widget B" と "Widget C" を子UI部品として持つ"Widget A" を作成したとする。開発者Cは、"Widget B" と "Widget C" のどちらが初期フォーカスを持つことが望ましいかを検討し、"Widget C" に初期フォーカスを持たせたとする。すると、"Widget C" の子UI部品 "Widget G" に初期フォーカスがあたることになる。こうして、開発者Bと開発者Cの意向が初期フォーカスの決定に反映されることになる。
【００９２】
＜実施形態２＞
ここでは実施形態１のUI提示装置を、FAX機能の付いた複写機のGUI提示部に搭載した例を示す。
【００９３】
図３０（ａ）は、このFAX機能の付いた複写機のGUIの例である。このGUIは、スクリーン(3000)の上にCopyに関するUI部品(3001)とFAXに関するUI部品(3007)が乗っている。
【００９４】
Copyに関するUI部品には、コピー枚数を入力することができるエディットボックス(3002)と、カラーモードを選択するラジオボタン(3003)、押下することでコピーを実行することができるボタン(3006)がある。なお、カラーモードを選択するラジオボタンは、二つのラジオボタン要素(3003,3004)から成り立っており、ユーザはどちらか一方を選択することが可能である。
【００９５】
FAXに関するUI部品には、登録されたFAX送信先が格納されたリストボックス(3008)、原稿台の原稿を読み取るためのScanボタン(3009)、読み込んだ原稿を選択された送信先に送信するFAX実行ボタン(3010)からなる。
【００９６】
ユーザは、方向キー、テンキー、決定キーを使ってこのUIにデータを設定し、各種の操作を実行することが可能である。例えば、方向キーを押すことで、UI部品上のフォーカス(3011)を移動することができる。そして、フォーカスを各種ボタンの上に移動し、決定キーを押すことで、そのボタンを押下することができる。また、フォーカスをエディットボックスの上に移動し、テンキーを押すことで、数字に対応した値を入力することができる。また、フォーカスをリストボックスの上に移動し、テンキーを押すことで、数字に対応したリスト要素を選択することができる。
【００９７】
図３１（ａ）は図３０（ａ）のUIをUI部品階層で表した図である。3000から3010までのUI部品は、3100から3110までの要素にそれぞれ対応している。また、図３１（ａ）の黒線はそれぞれのUI部品の初期フォーカス指定を表している。
【００９８】
例えばCopyに関するUI部品(3101)は、コピー枚数を入力できるエディットボックス(3102)、カラーモードを選択するラジオボタン(3103)、押下によりコピーを実行できるボタン(3106)を子UI部品として持つ。そして、Copyに関するUI部品(3101)は、コピーボタン(3106)を初期フォーカス指定している。また、カラーモードを選択するラジオボタン(3103)は、二つのラジオボタン要素(3103,3104)を子UI部品として持つ。そして、ラジオボタン(3103)は、最初のラジオボタン要素(3103)を初期フォーカス指定している。
【００９９】
このようなUI部品コンテンツを記憶装置101からUI部品コンテンツ読み込み部104を介して取り込むと、本UI提示装置は、初期フォーカスを付けた状態でUIを提示する。具体的には、UI部品階層構築部105においてルートのUI部品の階層を生成する。そして、初期フォーカス位置決定部106においてルートにあるUI部品から初期フォーカス指定がされたUI部品をたどる。そしてその初期フォーカス指定がついえたUI部品を、初期フォーカスを持つUI部品として決定し、UI提示部107で初期フォーカスを設定したUIをディスプレイ102等に出力する。
【０１００】
例えば、図３１（ａ）のUI部品階層を取り込むと、本UI提示装置は、ルートにあるUI部品から初期フォーカス指定がされたUI部品をたどる。ルートにあるUI部品は3100であり、この初期フォーカス指定は、3101を指している。次に3101の初期フォーカス指定をたどると次は3106のUI部品に行き着く。3106のUI部品は他のUI部品を初期フォーカス指定していないため、このUI部品を、初期フォーカスを持つUI部品とみなす。これにより、このUIを初めて提示するときに、Copyボタン(3106)にフォーカス枠を付け、ユーザに提示する。
【０１０１】
これにより、UIの再利用を効果的に行うことができるようになる。例えば、Copyに関するUI部品を作成したUI開発者は、Copyボタン(3106)に初期フォーカスがあることが適切だと判断し、そのように設計した。なぜなら、原稿台に原稿を置き、決定キーを押すだけでコピーが行えることがCopy機としては望ましいと判断したためである。一方、FAXに関するUI部品を作成したUI開発者は、Scanボタン(3109)に初期フォーカスがあることが適切だと判断した。これは、原稿台に原稿を置き、決定キーを押すだけで原稿の読み取りが行えることがFAX機としては望ましいと判断したためである。そして、これら二つのUI部品(3101,3107)を組み込んだUI開発者は、Copyに関するUI部品(3101)の初期フォーカス設定を採用した。これは、この製品はFAX機としてよりもCopy機として使われることが多いと判断したためである。このように本発明を用いると、１階層下のどのUI部品に初期フォーカスがあるべきかを判断するだけで、最終的に適切な初期フォーカス設定がなされるようになる。
【０１０２】
＜実施形態３＞
上述の実施形態１、２では、初期フォーカス指定として、各部品UIコンテンツで単一のUI部品を指定していた。しかし、これを複数指定することも可能である。
【０１０３】
図８（ｂ）は、初期フォーカス指定として、複数のUI部品を指定した例である。UI部品コンテンツ1001には、1002で示される第１の初期フォーカス指定1に加えて、1003で示される第２の初期フォーカス指定2が記述されている。
【０１０４】
何らかの理由によって、初期フォーカス指定1に記述されているUI部品の構築に失敗した場合、初期フォーカス指定2に記述されているUI部品に初期フォーカスを与える。例えば、図８（ｂ）において、"radio2"のUI部品コンテンツ（"radio.xml"）にアクセスできなかった場合、"_this"(自分自身)を表すUI部品を初期フォーカスとする。
【０１０５】
このように、初期フォーカス指定を複数指定することにより、子UI部品として利用でき、かつ、初期フォーカスとして上位に指定されているものから初期フォーカスを決定することが可能となる。
【０１０６】
＜実施形態４＞
ここでは実施形態３のUI提示装置を、FAX機能の付いた複写機のGUI提示部に搭載した例を示す。
【０１０７】
図３０（ａ）は、このFAX機能の付いた複写機のGUIの例である。このGUIは、スクリーン(3000)の上にCopyに関するUI部品(3001)とFAXに関するUI部品(3007)が乗っている。
【０１０８】
Copyに関するUI部品には、コピー枚数を入力することができるエディットボックス(3002)と、カラーモードを選択するラジオボタン(3003)、押下することでコピーを実行することができるボタン(3006)がある。なお、カラーモードを選択するラジオボタンは、二つのラジオボタン要素(3003,3004)から成り立っており、ユーザはどちらか一方を選択することが可能である。
【０１０９】
FAXに関するUI部品には、登録されたFAX送信先が格納されたリストボックス(3008)、原稿台の原稿を読み取るためのScanボタン(3009)、読み込んだ原稿を選択された送信先に送信するFAX実行ボタン(3010)からなる。
【０１１０】
図３１（ｂ）は図３０（ａ）のUIをUI部品階層で表した図である。3000から3010までのUI部品は、3200から3210までの要素にそれぞれ対応している。また、図３１（ｂ）の黒線の矢印はそれぞれのUI部品の初期フォーカス指定を表しており、点線の矢印が第２の初期フォーカス指定に対応している。
【０１１１】
例えば、Screen(3200)はCopyに関するUI部品(3201)とFAXに関するUI部品(3207)を子UI部品として持つ。そして、第１の初期フォーカス指定としてCopyに関するUI部品(3201)を、第２の初期フォーカス指定としてFAXに関するUI部品(3201)を指定しているとする。
【０１１２】
このようなUI部品階層を取り込むと、これまでの説明ではルートのUI部品コンテツから初期フォーカス指定を辿り、それがついえたUI部品を、初期フォーカスを持つUI部品として決定した。
【０１１３】
しかし、何らかの理由で、特定のUI部品以下が使用不可能になったことを考える。例えば、FAX機能の付いた複写機において用紙切れが発生し、用紙を使ったCopyアプリケーションが使用できなくなったとする。その場合に、Copyに関するUIにはアクセスできないことが望ましい。当然、アクセスできないUIには初期フォーカスが設定されないことが望ましい。
【０１１４】
例えば、FAX機能の付いた複写機において用紙切れが発生した場合は、図３０（ｂ）のようなGUIとなることが望ましい。この図では、用紙を使用するCopyに関するUI（3301,3302,3303,3304,3305,3306）はグレーアウトされ、アクセスできないことをユーザに通知している。また、この画面が表示された際の初期フォーカス(3311)は、Copyに関するUI以外のUI部品にあたることが望ましい。
【０１１５】
図２３は、この時の初期フォーカス決定ルーチンのフローである。このフローには、ルートとなるUI部品コンテンツを伴って実行する。例えば、図３１（ｂ）のようなUI部品階層であった場合、ルートのScreenに関するUI部品コンテンツを伴って実行する。
【０１１６】
まず、現在処理中のUI部品から初期フォーカス指定を参照する(S3401)。例えば、図３１（ｂ）のScreenの場合、第一の初期フォーカス指定として Copyに関するUI(3201)を、第２の初期フォーカス指定として FAXに関するUI(3207)を取得する。
【０１１７】
次に、第１の初期フォーカス指定が別のUI部品Aを参照しているか判断する(S3402)。今回、第１の初期フォーカス指定はCopyに関するUI(3201)である。次に、このUI部品Aが利用可能かどうかを判定する(S3403)。ここでは、用紙切れが発生しており、Copyに関するUIは利用できないため、Noとなる。
【０１１８】
次に、第２の初期フォーカス指定が別のUI部品Bを参照しているか判断する(S3404)。今回、第2の初期フォーカス指定はFAXに関するUI(3207)である。そして、このUI部品Bが利用可能かどうかを判定する(S3405)。ここでは、利用可能と判断する。すると、UI部品Bで初期フォーカスを判断する(S3406)。つまり、UI部品BであるFAXに関するUI(3207)を伴い、図２３のフローを実行する。
【０１１９】
FAXに関するUI(3207)を伴い図２３のフローを実行すると、S3407の処理により、Scan ボタン(3209)で初期フォーカスを判断することになる。更に、Scan ボタン(3209)を伴い図２３のフローを実行すると、S3408の処理によりScan ボタン(3209)が初期フォーカスとして決定する。
【０１２０】
以上により、Scan ボタン(3209)が初期フォーカスを持つと判定され、図３０（ｂ）のように、Scanボタン(3309)に初期フォーカス(3311)があたった状態でユーザに提示されることになる。
【０１２１】
以上により、子UI部品の最大二つまでを初期フォーカス指定することができるようになった。そのため、子UI部品の一つが利用できなくなった場合に、もう一方のUI部品に初期フォーカス指定を行うことが可能となる。
【０１２２】
＜実施形態５＞
実施形態３と４では、第１の初期フォーカス指定、第２の初期フォーカス指定という形で、初期フォーカス指定を行った。しかし、初期フォーカスの候補を３つ以上設定することも可能である。
【０１２３】
例えば、図８（ｃ）の例では、初期フォーカスの指定に、初期フォーカス確率という形で、0から1までの数値を振ったUI部品コンテンツの例である。具体的には、このUI部品(3600)は"Number"、"Color_mode"、"Copy"という３つの子UI部品を持つ。そして、それぞれの子UI部品の初期フォーカスがあたる確率として、"0.4", "0.1", "0.5"という値を設定している(3601)。この確率は＜child-widget＞要素の"initial-focus-probability"属性で表現されている。
【０１２４】
なお、このような初期フォーカス確率という形で図３１（ｂ）のUI部品階層構造を表現し直した図が図７である。初期フォーカス指定を表した矢印の代わりに、0から1までの数値を、親子関係を表す線に付けている。この数値が大きいほどその子UI部品が初期フォーカスを持つ確率が高いとする。なお、ここでは一つの親が持つ子UI部品の初期フォーカス確率の総和は１となるようにしている。
【０１２５】
図１０は、この時の初期フォーカス決定ルーチンのフローである。このフローには、ルートとなるUI部品コンテンツを伴って実行する。例えば、図７のようなUI部品階層であった場合、ルートのScreen(3500)に関するUI部品コンテンツを伴って実行する。
【０１２６】
まず、現在処理中のUI部品から初期フォーカス指定を参照する(S3701)。例えば、図３１（ｂ）のScreen(3500)の場合、Copyに関するUI(3501)とFAXに関するUI(3507)それぞれの初期フォーカス指定として"0.7"、"0.3"を取得する。次に、内部変数Nを１で初期化する(S3702)。
【０１２７】
次に、Nが子UI部品の数より大きいかどうか判断する(S3703)。現在Nは1であり、このUI部品の子の数である2より大きくないためここではNoとなる。そして、N番目に大きい優先度を持つ子UI部品を取得する(S3704)。現在、Nは１であり、１番目に大きな優先度を持つUI部品であるCopyに関するUIであるUI部品(3501)を取得する。
【０１２８】
次に、取得したUI部品が利用可能かどうかを判断する(S3705)。ここでは現在用紙切れが発生しており、Copyに関するUIが利用できないとする。すると、Nに１を加える処理を行う(S3706)。これにより、Nが2に変更される。そしてNが子UI部品の数より大きいかの判定処理(S3703)に戻る。
【０１２９】
ここでも、Nの現在の数である2は子UI部品数の2よりも大きくないため、2番目に大きい優先度を持つ子UI部品であるFAXに関するUI部品(3507)を取得する(S3704)。そして、このUI部品が利用可能かを判定する(S3705)。ここでは用紙切れが発生しているが、FAX送信に関しては使用に影響がないため判定はYesとなる。そのため処理S3707に進み、本フローを今度はFAXに関するUI部品(3507)を引数として実行する。
【０１３０】
FAXに関するUI部品(3507)を引数として本フローを実行すると、Nが1の時にUI部品であるScanボタン(3509)が選択され(S3704)、そのUI部品が利用可能であると判定される(S3705)。そして、処理S3707で、今度はScanボタンに関するUI部品(3509)を引数として本フローを実行する(S3707)。
【０１３１】
Scanボタンに関するUI部品(3509)を引数として本フローを実行すると、このUI部品は子UI部品を持たないため、S3703の処理でYesと判定される。そして処理中のUI部品であるScanボタンに関するUI部品(3509)を、初期フォーカスを持つUI部品として決定する(S3708)。
【０１３２】
これにより、初期フォーカスを持つUI部品が決定され、図３０（ｂ）のようにUIを提示する際に3707のUI部品にフォーカス(3311)をあてた状態で提示することが可能となる。
【０１３３】
実施形態４では、子UI部品の最大二つまでを初期フォーカス指定することができた。そのため、子UI部品の一つが利用できなくなった場合に、もう一方のUI部品に初期フォーカスをあてることができる。しかし、初期フォーカス指定された二つのUI部品双方が利用不可能になった場合、適切な場所に初期フォーカスをあてることができなかった。
【０１３４】
一方、実施形態５の方式では、全ての子UI部品に優先度という形で初期フォーカス指定を行うことが可能となる。これにより、子UI部品のうち複数のUI部品が利用不可能になっても、利用可能な子UI部品のうち最も優先度の高いUI部品に初期フォーカス指定を行うことが可能となる。
【０１３５】
＜実施形態６＞
実施形態１から実施形態５では、UI部品階層での初期フォーカス決定方法について説明した。しかし、本発明は初期フォーカスの決定以外の処理にも応用可能である。
【０１３６】
例えば、図１１は、ピザ注文サービスが持つUIのタスク（Task）階層を示す図である。Taskとは、サービスが完了するまでにUI提示装置が達成すべき作業のことである。ルートとなる"Root Task"(1101)は、ユーザからピザとドリンクの注文を受け取るという責務がある。そして、その責務のために処理内容が具体化（break down）された"ユーザへの挨拶"(1002)、"注文の受け取り"(1103)という２つの子タスク要素へのリンク情報を持つ。このように自タスク要素は、その子タスク要素へとbreak down されていき、最終的には"「ピザの枚数は？」と表示し、一桁の数値を受け付ける"(1110)といった具体的なコマンドになる。
【０１３７】
自タスク要素が子タスク要素を指定する際に、どの子タスク要素を最初に実行するかの情報が指定されているものとする。例えば、図１２は、"Root Task"を表現したタスクコンテンツの例である。"Root Task"(1201)には"ユーザへの挨拶"(1203)と"注文の受け取り"(1204)という子Taskが宣言されており、そのうちの"ユーザへの挨拶"が初期タスクとして指定されている(1202)。
【０１３８】
UI提示装置は、図１１のようなTask階層を、ルートとして指定されたタスクコンテンツから構築する。そして構築されたタスク階層を用い、対応する初期タスク情報をルートタスクから参照していき、初期タスクとなるタスクを決定する。このときのアルゴリズムは図２から図３（ｂ）の"UI部品"を"Task"、"初期フォーカス"を"初期Task"と置き換えることで応用可能となる。
【０１３９】
また、実施形態２のように、タスクコンテンツに、第１の初期タスク情報に加えて、第２の初期タスク情報を記述するなど複数の初期タスクを指定し、タスク要素構築の失敗に備えてもよい。この場合、子タスクとして利用でき、かつ、初期タスクとして上位に指定されているものから初期タスクを決定することが可能となる。
【０１４０】
以上説明したように、本発明は、階層的に表現されたUI表現において、その中で唯一のUI要素(UI部品、Task)に特別の意味(初期フォーカス、初期Task)を持たせたい場合に利用することが可能である。
【０１４１】
＜実施形態７＞
上述の実施形態では、UI部品コンテンツあるいはTaskコンテンツがXML形式で記述されたファイルとして説明した。しかしこれは一例に過ぎないことを理解すべきである。各コンテンツはHTML形式のような既存の言語仕様で書かれたコンテンツであってもよい。また、XMLをbinary化したバイトコードであってもよい。また、CやＪａｖａ（登録商標）といった既存のプログラミング言語のソースファイル、ヘッダファイル、インタフェースファイルであってもよい。あるいはUIを表現する独自のデータ形式であってもよい。
【図１】
0005226588.tif 000002
【図２】
0005226588.tif 000003
【図３】
0005226588.tif 000004
【図４】
0005226588.tif 000005
【図５】
0005226588.tif 000006
【図６】
0005226588.tif 000007
【図７】
0005226588.tif 000008
【図８】
0005226588.tif 000009
【図９】
0005226588.tif 000010
【図１０】
0005226588.tif 000011
【図１１】
0005226588.tif 000012
【図１２】
0005226588.tif 000013
【図１３】
0005226588.tif 000014
【図１４】
0005226588.tif 000015
【図１５】
0005226588.tif 000016
【図１６】
0005226588.tif 000017
【図１７】
0005226588.tif 000018
【図１８】
0005226588.tif 000019
【図１９】
0005226588.tif 000020
【図２０】
0005226588.tif 000021
【図２１】
0005226588.tif 000022
【図２２】
0005226588.tif 000023
【図２３】
0005226588.tif 000024
【図２４】
0005226588.tif 000025
【図２５】
0005226588.tif 000026
【図２６】
0005226588.tif 000027
【図２７】
0005226588.tif 000028
【図２８】
0005226588.tif 000029
【図２９】
0005226588.tif 000030
【図３０】
0005226588.tif 000031
【図３１】
0005226588.tif 000032