(57)【要約】【課題】  複数のデータ構成の１つに従って放送データを選択的に受信できるようにすること。【解決手段】  クライアント・デバイスによって、複数のデータ構成のうちの１つに従って、放送データを選択的に受信する。放送データ・サーバが、視聴者への提示のために放送データを構成することが可能な方法を定義する構成定義を維持することによって、複数のデータ構成の放送を可能とする。放送データ・サーバによって、放送データを受信するクライアント・デバイスに関連付けることができる領域を識別する領域定義も維持される。構成定義が、領域定義にマッピングされ、クライアント・デバイスを特定の領域に関連付けて、特定の領域に関連付けられた複数のデータ構成のいずれかに従って放送データを選択的に受信できるようになる。【選択図】  図１
2004215284.tif 000002
【特許請求の範囲】
【請求項１】
放送データに関連付けられた複数の構成定義を含む構成ファイルであって、当該複数の放送構成ファイルのうちの１つの構成ファイルを受信すること、
前記構成ファイルから前記複数の構成定義のうちの１つを選択すること、および
前記選択された構成定義に従って前記放送データの部分を選択的に受信すること
を備えることを特徴とする方法。
【請求項２】
前記複数の構成定義は、前記放送データを視聴者に提示できる方法を定義することを特徴とする請求項１に記載の方法。
【請求項３】
前記複数の構成定義のうちの少なくとも１つは、前記放送データが表示される言語に関連付けられていることを特徴とする請求項１に記載の方法。
【請求項４】
前記複数の構成定義のうちの少なくとも１つは、あるレイアウト表現で前記放送データが表示されるべきであるという視聴者の関心に関連付けられていることを特徴とする請求項１に記載の方法。
【請求項５】
前記複数の構成定義のうちの少なくとも１つは、前記放送データが表示される時のターゲットを設定するのに使用される視聴者の関心に関連付けられていることを特徴とする請求項１に記載の方法。
【請求項６】
前記受信することは、
前記構成ファイルに関連付けられた領域識別子に基づいて、前記複数の放送構成ファイルから前記構成ファイルを選択すること、および
放送網から前記構成ファイルを獲得すること
を備えることを特徴とする請求項１に記載の方法。
【請求項７】
前記選択することは、前に選択されていた構成定義に関連付けられた構成識別子に基づいて、前記複数の構成定義のうちの前記１つを選択することを備えることを特徴とする請求項１に記載の方法。
【請求項８】
前記選択することは、前記構成ファイル内の構成定義の順序に基づいて、前記複数の構成定義のうちの１つを選択することを備えることを特徴とする請求項１に記載の方法。
【請求項９】
前記選択することは、
前記複数の構成定義のリストをレンダリングすること、および
前記複数の構成定義のうちの１つの視聴者選択を可能にすること
を備えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記選択的に受信することは、前記選択された構成定義によって指定される順序で前記放送データの部分を獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記選択的に受信することは、最大データ・サイズに基づいて、前記最大データ・サイズを超えるデータが獲得されないように、前記放送データの部分を獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項１２】
前記選択的に受信することは、獲得される前記放送データが、前記選択された構成定義にも関連付けられているデータ・ソース位置に関連付けられるように、前記放送データの部分を獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項１３】
前記選択的に受信することは、獲得される前記放送データが特定のクライアント・デバイス・タイプに関連付けられるように、クライアント・デバイスで前記放送データの部分を獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項１４】
前記構成ファイルは、領域識別子に関連付けられ、前記領域識別子は、放送データを受信するように構成された１つまたは複数のクライアント・デバイスに関連付けられることを特徴とする請求項１に記載の方法。
【請求項１５】
前記構成ファイルの名前は、前記領域識別子に基づくことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記複数の構成定義の個々の構成定義は、メタデータ・タグ、必須のデータ・タグ、および任意選択データ・タグのうちの少なくとも１つを備えることを特徴とする請求項１に記載の方法。
【請求項１７】
前記複数の構成定義の個々の構成定義は、順序付けられたタグの組を備え、１つまたは複数のメタデータ・タグに、１つまたは複数の必須タグが続くことを特徴とする請求項１に記載の方法。
【請求項１８】
前記順序付けられたタグの組は、さらに、前記１つまたは複数の必須タグに続く１つまたは複数の任意選択タグを備えることを特徴とする請求項１７に記載の方法。
【請求項１９】
前記メタデータ・タグは、構成名を備えることを特徴とする請求項１６に記載の方法。
【請求項２０】
前記メタデータ・タグは、構成識別子を備えることを特徴とする請求項１６に記載の方法。
【請求項２１】
前記必須データ・タグは、クライアント・デバイスがそれに関するデータを獲得しなければならないデータ・タイプを識別することを特徴とする請求項１６に記載の方法。
【請求項２２】
前記任意選択データ・タグは、それに関してクライアント・デバイスが前記クライアント・デバイスの構成に応じてデータを獲得してもしなくてもよいデータ・タイプを識別することを特徴とする請求項１６に記載の方法。
【請求項２３】
請求項１に記載の方法を実行するように構成されることを特徴とするテレビジョン・セットトップボックス。
【請求項２４】
請求項１に記載の方法を実行するように構成されることを特徴とするディジタル・ビデオ・レコーダ。
【請求項２５】
放送データに関連付けられた複数の構成定義を受信すること、および
前記複数の構成定義から１つの構成定義を選択すること
を備え、前記構成定義は、複数のタグを含み、各タグは、
データ・タイプと、
クライアント・デバイス・タイプと、
指定されたクライアント・デバイス・タイプに適切な、指定された、データ・タイプのデータがそこから放送される場所を示すデータ・ソース位置と
を備えることを特徴とする方法。
【請求項２６】
前記データ・タイプは、データ・タイプ・グループに関連付けられていることを特徴とする請求項２５に記載の方法。
【請求項２７】
前記データ・タイプ・グループは、基本的なクライアント・デバイス機能性をサポートするデータ・タイプを関連付ける基本データ・タイプ・グループを備えることを特徴とする請求項２６に記載の方法。
【請求項２８】
前記データ・タイプ・グループは、高度なクライアント・デバイス機能性をサポートするデータ・タイプを関連付ける高度なデータ・タイプ・グループを備えることを特徴とする請求項２６に記載の方法。
【請求項２９】
前記データ・タイプは、別のデータ・タイプに関連付けられたデータをレンダリングするレイアウトを定義するデータに関連付けられていることを特徴とする請求項２６に記載の方法。
【請求項３０】
前記データ・タイプは、別のデータ・タイプに関連付けられたデータによって定義されるレイアウトに従ってレンダリングできるデータに関連付けられていることを特徴とする請求項２６に記載の方法。
【請求項３１】
前記データ・タイプ・グループは、前記別のデータ・タイプにも関連付けられていることを特徴とする請求項３０に記載の方法。
【請求項３２】
前記データ・タイプは、別のデータ・タイプに関連付けられたデータをレンダリングするレイアウトを定義するデータに関連付けられていることを特徴とする請求項２５に記載の方法。
【請求項３３】
前記データ・タイプは、別のデータに関連付けられているデータによって定義されるレイアウトに従ってレンダリングすることができるデータに関連付けられていることを特徴とする請求項２５に記載の方法。
【請求項３４】
前記データ・タイプは、さらに、定義されている前記レイアウトのうちの少なくとも一部の代わりに使用されるオーバーライド・レイアウトを定義するデータに関連付けられていることを特徴とする請求項３３に記載の方法。
【請求項３５】
前記クライアント・デバイス・タイプは、複数のクライアント・デバイスに関連付けることができるクライアント名を備えることを特徴とする請求項２５に記載の方法。
【請求項３６】
前記クライアント・デバイス・タイプは、複数のクライアント・デバイスに関連付けることができるクライアント・バージョンを備えることを特徴とする請求項２５に記載の方法。
【請求項３７】
前記クライアント・デバイス・タイプは、複数のクライアント・デバイスに関連付けることができるクライアント名およびクライアント・バージョンを備えることを特徴とする請求項２５に記載の方法。
【請求項３８】
前記クライアント・デバイス・タイプは、前記構成定義が複数のクライアント・デバイス・タイプのクライアント・デバイスによってサポートされることを示すワイルド・カード値を備えることを特徴とする請求項２５に記載の方法。
【請求項３９】
前記データ・ソース位置は、放送カルーセル・データ・ディレクトリの名前を備えることを特徴とする請求項２５に記載の方法。
【請求項４０】
前記各タグは、さらに、前記指定されたデータ・タイプが必須のデータ・タイプまたは任意選択データ・タイプのどちらであるかを示すタグ・タイプを備えることを特徴とする請求項２５に記載の方法。
【請求項４１】
前記各タグは、さらに、前記データ・タイプに関連付けられたデータ・グループ・インジケータを備えることを特徴とする請求項２５に記載の方法。
【請求項４２】
前記データ・グループ・インジケータは、複数の関連するデータ・タイプを識別し、前記関連するデータ・タイプに関連付けられたデータは、個々に取られる時にクライアント・デバイスによって使用可能でなく、一緒に取られる時に使用可能なデータの完全なセットを形成することを特徴とする請求項４１に記載の方法。
【請求項４３】
前記データ・グループ・インジケータは、レイアウトを定義するデータに関連付けられた第１データ・タイプと、前記レイアウトに従ってレンダリングすることができるデータに関連付けられた第２データ・タイプとに関連付けられていることを特徴とする請求項４１に記載の方法。
【請求項４４】
前記第２データ・タイプは、さらに、前記レイアウトのうちの少なくとも一部のオーバーライドを定義するデータに関連付けられていることを特徴とする請求項４３に記載の方法。
【請求項４５】
請求項２５に記載の方法を実行するように構成されることを特徴とするテレビジョン・セットトップボックス。
【請求項４６】
請求項２５に記載の方法を実行するように構成されることを特徴とするディジタル・ビデオ・レコーダ。
【請求項４７】
放送データに関連付けられた複数の構成定義を受信すること、
前記複数の構成定義のうちの１つを選択すること、および
選択された前記構成定義に関連付けられた構成値を維持すること
を備え、前記維持することによって、後に同一の前記構成定義を再選択する機構が提供されることを特徴とする方法。
【請求項４８】
前記構成値は、
構成識別子と、および
クライアント・デバイスの領域識別子と
を備えることを特徴とする請求項４７に記載の方法。
【請求項４９】
放送データに関連付けられた複数の構成定義を受信すること、
前記複数の構成定義から第１の構成定義を選択すること、
前記第１の構成定義に従って、前記放送データの部分を選択的に受信すること、
その後、前記複数の構成定義から第２の構成定義を選択すること、および
前記第２の構成定義に関連付けられているが第１の構成定義に関連付けられていないデータだけが、前記第２の構成定義の前記選択に応答して受信されるように、前記第２の構成定義に従って前記放送データの追加部分を選択的に受信すること
を備えることを特徴とする方法。
【請求項５０】
第１の構成定義の前記選択は、前に選択されていた構成定義を識別して選択することを備えることを特徴とする請求項４９に記載の方法。
【請求項５１】
第１の構成定義の前記選択は、デフォルト構成定義を選択することを備えることを特徴とする請求項４９に記載の方法。
【請求項５２】
第２の構成定義の前記選択は、構成定義の視聴者選択を受け取ることを備えることを特徴とする請求項４９に記載の方法。
【請求項５３】
前記第１の構成定義に従って受信された前記データの部分を削除することをさらに含み、削除される前記データは、前記第２の構成定義に関連付けられていないことを特徴とする請求項４９に記載の方法。
【請求項５４】
選択された構成定義に従って、第１データ放送からデータを選択的に受信して維持すること、および
前記データの修正された版が、その後に放送される場合に、選択的に受信して維持されている前記データを、前記その後に放送されるデータからの前記データの前記修正された版に置換すること
を備えることを特徴とする方法。
【請求項５５】
第１のデータ・タイプが第２のデータ・タイプより高い優先順位を有するように、データ・タイプの順序付きの組を定義する構成定義を選択すること、および
前記第１のデータ・タイプに関連付けられた放送データが、前記第２のデータ・タイプに関連付けられた放送データが受信される前に受信されるように、前記構成定義に従って放送データを受信すること
を備えることを特徴とする方法。
【請求項５６】
前記第２のデータ・タイプに関連付けられて受信される前記放送データは、前記第１のデータ・タイプに関連付けられて受信されたデータをオーバーライドするデータを備えることを特徴とする請求項５５に記載の方法。
【請求項５７】
データの要求を受け取ること、および
受信された前記データを検索すること
を備え、前記第２のデータ・タイプに関連付けられた前記放送データが、前記第１のデータ・タイプに関連付けられた前記放送データが検索される前に検索されることを特徴とする請求項５５に記載の方法。
【請求項５８】
放送されるデータおよび構成ファイルを受信するように構成された１つまたは複数のチューナと、
データ構成モジュールであって、
前記放送された構成ファイルに基づいて使用可能なデータ構成を決定し、
前記データ構成のうちの１つを選択し、
前記選択されたデータ構成に従って前記データの部分を獲得する
ように構成されたデータ構成モジュールと
を備えることを特徴とするシステム。
【請求項５９】
前記データ構成モジュールは、
前記データのうちで特定のデータ・タイプに関連付けられた部分を選択的に獲得するように構成されたタスク・オブジェクトと、
複数のタスク・オブジェクトを管理するように構成されたクライアント・オブジェクトと
を備えることを特徴とする請求項５８に記載のシステム。
【請求項６０】
前記クライアント・オブジェクトは、さらに、複数のデータ構成のうちの１つの視聴者選択を可能にするように構成されていることを特徴とする請求項５９に記載のシステム。
【請求項６１】
前記クライアント・オブジェクトは、格納された構成値に基づいて、前に選択されていたデータ構成を選択するように構成されていることを特徴とする請求項５９に記載のシステム。
【請求項６２】
前記クライアント・オブジェクトは、状態機械として実装されていることを特徴とする請求項５９に記載のシステム。
【請求項６３】
前記タスク・オブジェクトが、状態機械として実装されていることを特徴とする請求項５９に記載のシステム。
【請求項６４】
同一の前記データ構成の後続の選択を可能にするために、選択されたデータ構成に関連付けられた構成値を維持するように構成されたメモリ・コンポーネントをさらに備えることを特徴とする請求項５８に記載のシステム。
【請求項６５】
放送データおよび複数の放送構成定義を受信する手段と、
前記複数の放送構成定義から、選択された構成定義を決定する手段と、
前記選択された構成定義に従って、前記放送データの部分を選択的に受信する手段と
を備えることを特徴とするシステム。
【請求項６６】
前記決定する手段は、
前に選択されていた構成定義に関連付けられた構成値を維持する手段と、
前記構成値に基づいて、前記複数の放送構成定義から構成定義を選択する手段と
を備えることを特徴とする請求項６５に記載のシステム。
【請求項６７】
前記決定する手段は、前記複数の放送構成定義を収容するファイル内の位置に基づいてデフォルト構成定義を決定する手段を備えることを特徴とする請求項６５に記載のシステム。
【請求項６８】
前記決定する手段は、前記複数の放送構成定義のうちの１つについての視聴者選択を可能にする手段を備えることを特徴とする請求項６５に記載のシステム。
【請求項６９】
放送される複数の領域構成ファイルであって、それぞれは複数の構成定義を含む複数の領域構成ファイルから、領域識別子に基づいて、領域構成ファイルを選択的に獲得する手段と、
前記複数の構成定義の選択された１つに基づいて、放送データの部分を選択的に獲得する手段と
を備えることを特徴とするシステム。
【請求項７０】
コンピュータ実行可能命令を備える１つまたは複数のコンピュータ可読媒体であって、前記コンピュータ実行可能命令は、実行されると、コンピューティング・システムに、
放送データをレンダリングするパラメータを定義する構成ファイルであって、使用可能な複数の構成を識別する構成ファイルを受信すること、
前記複数の使用可能な構成から選択された、選択された構成を決定すること、および
前記選択された構成に従って、放送データを獲得し、レンダリングすること
を行うように指示することを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項７１】
実行されると、コンピューティング・システムに、
前に選択されていた構成に関連付けられた構成値を決定すること、および
前記構成値に基づいて前記選択されていた構成を選択すること
を行うように指示するコンピュータ実行可能命令をさらに備えることを特徴とする請求項７０に記載の１つまたは複数のコンピュータ可読媒体。
【請求項７２】
実行されると、コンピューティング・システムに、前記構成ファイル内のデフォルト構成位置に基づいて前記選択された構成を選択することを行うように指示するコンピュータ実行可能命令をさらに備えることを特徴とする請求項７０に記載の１つまたは複数のコンピュータ可読媒体。
【請求項７３】
実行されると、コンピューティング・システムに、
前記複数の使用可能な構成のリストをレンダリングすること、および
前記複数の使用可能な構成の１つの視聴者選択を可能にすること
を行うように指示するコンピュータ実行可能命令をさらに備えることを特徴とする請求項７０に記載の１つまたは複数のコンピュータ可読媒体。
【請求項７４】
コンピュータ実行可能命令を備える１つまたは複数のコンピュータ可読媒体であって、前記コンピュータ実行可能命令は、実行されると、クライアント・デバイスに
前記クライアント・デバイスに関連付けられた領域識別子に基づいて、複数の放送データ構成定義からデータ構成定義を選択すること、
前記データ構成定義を獲得すること、および
前記データ構成定義に基づいて放送データのサブセットを選択的に獲得すること
を行うように指示することを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項７５】
コンピュータ実行可能命令を備える１つまたは複数のコンピュータ可読媒体であって、前記コンピュータ実行可能命令は、実行される時に、クライアント・デバイスに
複数のデータ・タイプの順序付きグループを識別する選択された構成定義を決定すること、および
放送データのうちで前記複数のデータ・タイプに関連付けられた部分が、前記構成定義によって識別される順序で受信されるように、前記選択された構成定義に従って前記放送データを選択的に受信すること
を行うように指示することを特徴とする１つまたは複数のコンピュータ可読媒体。
【請求項７６】
実行される時に、クライアント・デバイスに、
選択的に受信されたデータを求める要求を受け取ること、および
前記構成定義によって識別される順序と逆の順序での検索によって、要求されたデータを見つけること
を行うように指示するコンピュータ実行可能命令をさらに備えることを特徴とする請求項７５に記載の１つまたは複数のコンピュータ可読媒体。
【請求項７７】
実行される時に、クライアント・デバイスに、
前記複数のデータ・タイプの１つまたは複数に関連付けられたグループを決定すること、および
前記グループに関連付けられた各データ・タイプの放送データが受信されるまで、受信された前記放送データの処理を避けること
を行うように指示するコンピュータ実行可能命令をさらに備えることを特徴とする請求項７５に記載の１つまたは複数のコンピュータ可読媒体。
【請求項７８】
前記処理は、前記データを求める要求を受け取ることを備えることを特徴とする請求項７７に記載の１つまたは複数のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ放送（data broadcasting）に関し、より詳細には、複数のデータ構成のうちの１つに従って放送データ（broadcast data）を選択的に受信することに関する。
【背景技術】
【０００２】
ディジタル・テレビ網は、一般に、使用可能な帯域幅のほとんどを、オーディオ情報およびビデオ情報の放送に充てている。さらに、ビデオおよびオーディオをエンコードしていない他の情報は、一般に、通常はアウト・オブ・バンド・ネットワーク（out-of-band network）と称する、使用可能な帯域幅のうちの少量を使用して、並列に送信される。この、他の情報には、しばしば、電子番組ガイド（electronic program guide）データ、限定受信（conditional access）指示、表示されるユーザ・インターフェースのレイアウト情報、および広告データが含まれるが、これに制限はされない。通常、セットトップボックスは、セットトップボックスがプログラミング・データ（番組編成データ）および他の情報を蓄積する間に、視聴者が番組を自由に見れるように、ビデオ・データおよびオーディオ・データのデコードおよびレンダリングと並行してアウト・オブ・バンドのデータを収集するように設計されている。たとえば、ケーブル・テレビジョン放送会社は、放送ケーブル網を介して番組コンテンツを放送し、同一のケーブル網の別のより小さい帯域を介して追加の関連データを放送することができる。この形で、少なくとも２つのチューナを有するクライアントを使用する視聴者は、クライアントが、第２のチューナを使用して追加データの受信を続ける間に、第１のチューナを使用してチャネルを変更できる。代替案では、複数のデータ・ストリームを、同一のチャネルを介して平行に放送することができ、これによって、１つのチューナだけを有するクライアント・デバイスが、同一のチャネルを介して、放送番組コンテンツと放送データを同時に受信できるようになる。テレビジョン・チャネルの品質と数の両方が、ディジタル・テレビジョン経営者にとって主要な経営ポイントなので、副情報のために予約される帯域幅の量は、通常は、ビデオ・データおよびオーディオ・データの放送に使用される帯域幅の量と比較して、極端に制限されている。
【０００３】
【非特許文献１】ANDREAS BRAUN, et. al., "The Software Headend Architecture - A New Approach for Multi-Standard CATV Headends," Institute of Telecommunications, University of Stuttgart, Pfaffenwaldring 47, 70569 Stuttgart, Germany, 2002, IEEE, pp. 156-158
【非特許文献２】KUO-CHI CHU, et al., "A novel mechanism for providing service differentiation over CATV network," Computer Communications 25 (2002) 1214-1229
【非特許文献３】DEBRA A. HENSGN, "A Resource Allocation Framework for Heterogeneous SPMD interactive Television Environments," Proceeding of SPIE, Vol. 4528 (2001) pp. 1-12
【非特許文献４】RUDOLF JAEGER & JOSEF NEUBAUR, "Video and Interactive Internet access in a DVB Network," BetaReseach, Germany, copyright 2000 IEEE, pp. 439-445
【発明の開示】
【発明が解決しようとする課題】
【０００４】
通常、セットトップボックスは、特定の言語で、特定のレイアウトに従って、番組データなどの追加データをダウンロードして表示するように事前に構成される。サポートされる特定の言語およびレイアウトは、セットトップボックスが提供される時に初期化され、ユーザは、別の言語またはレイアウトを選択する能力を与えられていない。
【０００５】
本発明の目的は、複数のデータ構成の１つに従って放送データを選択的に受信できるようにすることである。
【課題を解決するための手段】
【０００６】
放送データ・サーバは、複数の領域定義にマッピングされる複数の構成定義を維持する。領域定義は、クライアント・デバイスが実装されている地理的領域、または地理的位置以外のパラメータに基づいたクライアント・デバイスについての他のグループ化を表すことができる。構成定義は、さまざまな言語および／または表示フォーマットによるデータのグループ化を定義する。領域／構成マッピングは、放送データと共に放送され、ある領域内の各クライアント・デバイスが、複数の構成のうちでその領域に関連付けられた構成に従って、放送データの一部を選択的に受信することを、可能にする。この形で、単一のデータ放送が、複数の構成の任意の１つに従うクライアント・デバイスによって受信されるようになり、この構成のそれぞれは、視聴者へのデータについて異なる提示をもたらすことになる。
【発明を実施するための最良の形態】
【０００７】
図面全体を通じて、類似する特徴および構成要素を指すのに同一の符号が使用される。
以下の説明は、テレビジョン放送システム（broadcast television system）で複数のデータ構成からなる放送を可能にすることを対象とする。番組コンテンツ（Program content）（たとえば、放送テレビジョン番組、ビデオ・オン・デマンド番組など）およびデータ（たとえば、電子番組ガイドデータ、ビデオ・オン・デマンド・データ、広告など）が、ケーブル・テレビジョン会社などのヘッドエンド・システムからケーブル・テレビジョン・セットトップボックスなどの複数のクライアント・デバイスに放送される。番組コンテンツおよび関連データの放送のほかに、ヘッドエンドは、放送データを受信するクライアント・デバイスに使用可能なデータ構成を定義するデータも放送する。クライアント・デバイスは、クライアント・デバイスに関連付けられたユーザ・インターフェースを介して使用可能な構成のリストを視聴者に提示する。視聴者が、使用可能な構成を選択すると、クライアント・デバイスは、選択された構成定義に従って放送データの一部を選択的に受信する。クライアント・デバイスは、クライアント・デバイスに関連付けられた領域識別子に基づく、複数の構成の任意の１つの、構成に従ってデータを選択的に受信することができる。一実装形態では、領域識別子は、クライアント・デバイスの製造業者によってクライアント・デバイスに割り当てられることになる。たとえば、ディジタル多用途ディスク（ＤＶＤ）プレイヤは、通常、そのユニットが設計された対象の特定の地理的領域（たとえば北アメリカ）を識別する、各ユニットに組み込まれている領域識別子を有する。代替実装形態では、ケーブル会社のセットアップ処理中に、クライアント・デバイスに領域識別子を割り当てることができる。たとえば、ケーブル会社は、クライアント・デバイスに関連付けられた領域を識別するデータのパケットを、クライアント・デバイスに送信することができる。もう１つの代替実装形態では、クライアント・デバイス上のアルゴリズムを使用して、たとえば使用可能なチャネルのリストに基づいて、適切な領域識別子を決定することができる。領域識別子は、クライアント・デバイスが実装されている地理的領域に基づくものとするか、他のパラメータ、たとえば、クライアント・デバイスのあるグループに使用可能にすることができるチャネルのラインアップに基づくものとすることができる。領域識別子は、使用可能な複数のデータ構成を判定するために、クライアント・デバイスによって使用されることができる。たとえば、サンフランシスコのケーブル会社から放送されるテレビジョン番組およびデータを受信するように構成されたテレビジョン・セットトップボックスが、英語構成に基づく放送データを、またはスペイン語構成に基づく放送データを、選択的に受信できるようにすることもできる。あるいは、放送されるテレビジョン番組およびデータをニューヨーク市のケーブル会社から受信するように構成されたセットトップボックスは、英語構成、ドイツ語構成、またはフランス語構成に基づく放送データを選択的に受信することができる。追加の構成もサポートすることができ、それは言語に基づくものとすることもでき、また言語に基づかないものとすることもできる。たとえば、子供向け構成は、、単純なユーザ・インターフェースを提供するように設計され、限られた数の放送チャネルへのアクセスを可能にすることができる。もう１つの例では、代替構成を設計して、たとえばプロスポーツチームまたは他の視聴者の関心に基づいて、テーマに合わせた構成のユーザ・インターフェースを提供することができる。さらに、英語バスケットボール構成、スペイン語野球構成、および英語／子供向け／野球構成など、１つまたは複数のテーマおよび言語の組合せに基づく構成を定義することができる。広告も、選択された構成に基づいてターゲットを設定することができる。
【０００８】
例示的なシステムアーキテクチャ
図１に、複数のデータ構成から成る放送を可能にするように実装される例示的な放送テレビジョン・システム１００を示す。システム１００は、複数の視聴者への番組コンテンツおよび関連データの配信を容易にする。テレビジョン放送システム１００は、１つまたは複数のコンテンツ・プロバイダ１０２と、１つまたは複数のデータ・プロバイダ１０４と、放送データ・サーバ１０６と、ヘッドエンド１０８と、イン−バンド・ネットワーク（in-band network）１１２およびアウト・オブ・バンド・ネットワーク１１４を介してヘッドエンド１０８に結合される複数のクライアント・デバイス１１０（１）、１１０（２）、…、１１０（Ｎ）を含む。
【０００９】
コンテンツ・プロバイダ１０２は、映画、テレビジョン番組、音楽、および類似するオーディオ・コンテンツおよび／またはビデオコンテンツなどの格納された番組コンテンツを、コンテンツ・プロバイダ１０２からヘッドエンド１０８に、配信する。さらに、コンテンツ・プロバイダ１０２は、生のコンテンツ（たとえば、生放送など、前に格納されたものではないコンテンツ）、および／または他の場所に格納されたコンテンツについての、ヘッドエンド１０８への配信を制御する。
【００１０】
データ・プロバイダ１０４は、広告、電子番組ガイド（ＥＰＧ）データ、ビデオ・オン・デマンド（ＶＯＤ）データなどの、放送されるべき追加データを放送データ・サーバ１０６に供給する。
【００１１】
放送データ・サーバ１０６は、データ・プロバイダ１０４からデータを受信し、複数のデータ構成定義に従ってデータを配列し、そのデータをヘッドエンド１０８に引き渡す。放送データ・サーバ１０６は、データ・コレクタ１１６および構成管理システム１１８を含む。データ・コレクタ１１６は、データ・プロバイダ１０４からデータを収集し、キャッシュに入れる。構成管理システム１１８は、構成定義を維持し、この構成定義は、データ・コレクタ１１６によって収集されたデータがヘッドエンド１０８にどのように配信されるべきか、言い換えると、クライアント・デバイス１１０にどのように放送されるか、を決定するのに使用される。
【００１２】
ヘッドエンド１０８は、データ・カルーセル（data carousel）１２０、放送送信器１２２を含み、任意選択として、コンテンツ・カルーセル１２４も含むことができる。データ・カルーセル１２０は、蓄積アリア（storage area）であり、そこからアウト・オブ・バンド（ＯＯＢ）ネットワーク１１４を介して複数のクライアント・デバイス１１０に（データ・プロバイダ１０４から放送データ・サーバ１０６を介して受信される）放送データを放送することになる。放送送信器１２２は、イン−バンド・ネットワーク１１２を介する番組コンテンツの送信およびＯＯＢネットワーク１１４を介するデータの送信を制御する。番組コンテンツは、コンテンツ・プロバイダ１０２から直接にストリーミングされることができ、あるいは、クライアント・デバイス１１０へ放送される前に、任意選択のコンテンツ・カルーセル１２４で受信し、格納することができる。テレビジョン・チャネルの品質および数の両方が、ディジタル・テレビジョン経営者にとって主要な経営ポイントなので、ＯＯＢネットワーク１１４のために予約される帯域幅の量は、通常は、イン−バンド・ネットワーク１１２のために予約される帯域幅の量と比較して、極端に制限されている。
【００１３】
クライアント・デバイス１１０は、ヘッドエンド１０８からイン−バンド・ネットワーク１１２およびＯＯＢネットワーク１１４を介して放送番組コンテンツおよび放送データを受信するように実装される。さらに、各クライアント・デバイスは、そのクライアント・デバイスに関連付けられた領域識別子に基づいてクライアント・デバイスに使用可能なデータ構成定義を収容する領域構成ファイルを受信するように構成される。クライアント・デバイスは、ユーザ・インターフェース・コンポーネントを使用して、使用可能な構成のリストを視聴者に提示する。ユーザが構成を選択すると、クライアント・デバイスは、選択された構成の定義に従って、放送データを選択的に受信する。
【００１４】
クライアント・デバイス１１０は、複数の形で実装されることが可能である。たとえば、テレビジョンに結合される衛星放送受信器として構成されたクライアント・デバイスは、衛星ベースの送信器から放送コンテンツおよびデータを受信し、受信されたコンテンツおよびデータは、テレビジョン・スクリーン上にレンダリングされる。ケーブルテレビジョンセットトップボックスとして実装されたクライアント・デバイスは、ケーブル網を介して放送コンテンツおよびデータを受信する。クライアント・デバイスの他の例は、ディジタル・ビデオ・レコーダ、ＴＶ対応パーソナルコンピュータなどを含み、１方向の放送網、１対多の放送網を介して放送データを受信するように構成された任意のクライアント・デバイスを含めることができる。例示的なクライアント・デバイスの選択されたコンポーネントを、図８を参照して、以下で詳細に説明する。
【００１５】
例示的な放送データ・サーバ
図２に、例示的な放送データ・サーバ１０６の選択されたコンポーネントを示す。放送データ・サーバ１０６には、プロセッサ２０２、データ・キャッシュ２０４（データ・ソースとしても働く）、およびメモリ２０６が含まれる。さらに、データ・コレクタ１１６および構成管理システム１１８が、メモリ２０６に格納され、プロセッサ２０２上で実行される。
【００１６】
データ・コレクタ１１６は、データ・プロバイダ１０４からデータを受信し、受信されたデータをデータ・キャッシュ２０４に格納する。図示の実装形態では、データ・コレクタ１１６は、広告データを受信する広告データ・コレクタ２０８、使用可能なオンデマンド・ビデオ・タイトルを説明するデータを受信するビデオ・オン・デマンド（ＶＯＤ）データ・コレクタ２１０、および電子番組ガイド（ＥＰＧ）データを受信するＥＰＧデータ・コレクタ２１２を含む。各データ・コレクタは、１つまたは複数のデータ・プロバイダ１０４からデータを受信することができる。さらに、データ・コレクタ１１６は、広告データ・コレクタ２０８、ビデオ・オン・デマンド（ＶＯＤ）データ・コレクタ２１０、およびＥＰＧデータ・コレクタ２１２には制限されず、これらは、単に、実装できる特定のデータ・コレクタの例を表している。
【００１７】
構成管理システム（Configuration management system）１１８には、構成リポジトリ２１４、構成インターフェース２１６、領域構成ファイル・ジェネレータ２１８、およびデータ構成モジュール２２０が含まれる。構成リポジトリ（Configuration repository）２１４は、領域、構成、および定義された領域と構成との間のマッピングを定義するデータを格納する。例示的な構成リポジトリ構造を、以下で、図３から図５を参照して詳細に説明する。構成インターフェース２１６は、構成リポジトリ２１４へのアクセスを提供し、領域定義、構成定義、および領域／構成マッピングを作成し、保守するシステム管理者用の機構を提供する。一実装形態では、領域定義は、通常、ヘッドエンド（たとえばケーブル会社）によって生成され、構成インターフェース２１６を使用して構成リポジトリ２１４に入力される。
【００１８】
領域構成ファイル・ジェネレータ２１８は、構成リポジトリ２１４に定義された領域ごとに、定義された領域に関連付けられた各構成に従ってクライアント・デバイス１１０が放送データを選択的に受信できる方法を指定する、フォーマットされた領域構成ファイルを生成する。説明する実装形態では、各領域構成ファイルは、各構成に関連付けられたファイル・ディレクトリ構造を指定する。一実装形態では、領域構成ファイル・ジェネレータ２１８は、データ・プロバイダ１０４からではなく構成リポジトリ２１４からデータを収集するデータ・コレクタ１１６のようなデータ・コレクタとして実装される。
【００１９】
データ構成モジュール２２０は、各領域構成ファイルで指定されるファイル・ディレクトリ構造に従って、（データがデータ・プロバイダ１０４から受信されるとそのデータが格納されるキャッシュメモリ位置である）データ・ソース２０４からデータ・カルーセル１２０にデータをコピーする。このデータは、データ・カルーセル１２０にコピーされた後に、ＯＯＢネットワーク１１４を介して放送され、クライアント・デバイス１１０は、各特定のクライアント・デバイス１１０に関連付けられた領域識別子に基づいて、多数のデータ構成のうちの１つに関連付けられたデータを選択的に受信することができる。たとえば、特定のクライアント・デバイスは、複数の構成に関連付けられた（構成リポジトリ２１４内で、したがって領域構成ファイル内で）領域識別子に関連付けることができる。そのクライアント・デバイスを使用する視聴者は、複数の使用可能な構成の１つを選択することができ、これによって、クライアント・デバイス１１０は、選択された構成に従って放送データの一部を選択的に受信できるようになる。放送されるデータの量は、データの特定部分が、複数の構成から使用可能であっても、データの各特定部分は１回だけ放送されるという事実によって最小にされる。データの特定部分が複数の構成から使用可能な場合に、それぞれが異なる選択された構成を有する複数のクライアント・デバイスは、選択された構成の間で共通するデータを全て受信することができる。領域構成ファイルは、以下に、図６を参照して詳細に説明する。
【００２０】
例示的な構成リポジトリ構造
図３に、図２の放送データ・サーバ１０６に実装される構成リポジトリ２１４の例示的構造を示す。構成リポジトリ２１４には、複数のデータ構成定義３０２および複数の領域定義３０４が格納される。各構成定義３０２は、構成定義に従って放送データを選択的に受信するクライアント・デバイス１１０によって使用されるデータを識別する。本明細書に記載の実装形態では、各構成定義３０２は、そこからデータを放送できるデータ・カルーセル・ディレクトリのグループを識別する。
【００２１】
各領域定義３０４は、クライアント・デバイスのセットに関連付けられることができる領域を識別する。本明細書に記載の実装形態では、各クライアント・デバイス１１０は、放送プロバイダによってクライアント・デバイスが提供される際に、領域識別子を割り当てられる。クライアント・デバイスの領域識別子は、構成リポジトリ２１４によって維持される領域定義３０４に相当する。領域は、地理的領域に基づいて定義することができ、あるいは、他のパラメータに基づくものとすることができる。たとえば、第１のケーブル会社が、同一の地理的領域内のクライアント・デバイスにサービスする第２のケーブル会社を取得することができるが、そのクライアント・デバイスは、初めは異なるケーブル会社によってサービスされていたので、それらに異なる領域識別子を関連付けることができる。代替実装形態では、領域を、クライアント・デバイスのあるグループから使用可能なチャネル・ラインアップに基づくものとすることができる。
【００２２】
構成リポジトリ２１４は、定義された構成３０２のどれが、定義された領域３０４のそれぞれに関連付けられたクライアント・デバイスに使用可能であるかを定義する領域／構成マッピング３０６も、格納する。例示的実装形態では、各定義された構成は構成ＩＤによって識別され、各定義された領域は領域ＩＤ（領域識別子）によって識別される。そのような実装形態では、領域／構成マッピング３０６は、領域ＩＤ／構成ＩＤ対に関して定義される。
【００２３】
例示的な構成定義構造
図４に、例示的な構成定義３０２のデータ構造を示す。図示の実装形態では、構成テーブル４０２は、定義された構成ごとに１つのレコードを格納する。言語テーブル４０４は、有効なカルチャ名（culture name）のリストを格納し、構成テーブル４０２内のカルチャ名フィールドに対する有効な値のルックアップ・テーブルとして使用される。タグ・テーブル４０６は、各定義された構成に関連付けられた詳細を記録し、特定の構成に関連付けることができるデータ・タイプごとに１つのレコードを格納する。クライアント・タイプ・テーブル４０８は、１つまたは複数の構成をサポートする能力があるクライアント・デバイスのタイプを識別するデータを格納し、タグ・テーブル４０６内のクライアント・タイプＩＤフィールドに対する有効な値のルックアップ・テーブルとして使用される。データ・タイプ・テーブル４１０は、構成に関連付けることができるデータ・タイプのリストを格納し、タグ・テーブル４０６内のデータ・タイプ名フィールドに対する有効な値のルックアップ・テーブルとして使用される。
【００２４】
表１に、例示的な構成テーブル４０２の構造を示す。
【００２５】
【表１】
2004215284.tif 000003
【００２６】
タグ・テーブル４０６には、各定義された構成に関連付けられた詳細を記録し、特定の構成に関連付けることができるデータ・タイプごとに１つのレコードを格納する。表２に、例示的なタグ・テーブル４０６の構造を示す。
【００２７】
【表２】
2004215284.tif 000004
【００２８】
クライアント・タイプ・テーブル４０８は、１つまたは複数の構成をサポートする能力があるクライアント・デバイスのタイプを識別するデータを格納する。表３に、例示的なクライアント・タイプ・テーブル４０８の構造を示す。
【００２９】
【表３】
2004215284.tif 000005
【００３０】
データ・タイプ・テーブル４１０には、１つまたは複数の構成に関連付けることができるデータ・タイプのリストを格納する。表４に、例示的なデータ・タイプ・テーブル４１０の構造を示す。
【００３１】
【表４】
2004215284.tif 000006
【００３２】
例示的な領域定義構造
図５に、例示的な領域定義データ構造３０４を示す。図示の実装形態では、領域テーブル５０２は、定義される領域ごとに１つのレコードを格納する。ＯＭグループ・テーブル５０４は、アウト・オブ・バンド変調器（ＯＭ）のグループを識別するデータを格納し、それぞれは、指定された周波数でネットワークを介してデータを送信するように構成される。個々のクライアント・デバイス・タイプは、個々の周波数でデータを受信するように構成することができる。領域をＯＭグループに関連付けることによって、同一のデータを複数の周波数で放送でき、サポートされるクライアント・デバイス・タイプのそれぞれがそのデータを受信することを可能にする。ＯＭグループ・テーブル５０４は、領域テーブル５０２内のＯＭグループＩＤフィールドに対する有効な値のルックアップ・テーブルとして使用される。
【００３３】
表５に、例示的な領域テーブル５０２の構造を示す。
【００３４】
【表５】
2004215284.tif 000007
【００３５】
表６に、例示的なＯＭグループ・テーブル５０４の構造を示す。上で説明したように、ＯＭグループは、同一のデータを複数の周波数で放送するために実装されるアウト・オブ・バンド変調器のグループである。
【００３６】
【表６】
2004215284.tif 000008
【００３７】
例示的な領域構成ファイルのフォーマット
上で図２に関して説明したように、構成管理システム１１８の領域構成ファイル・ジェネレータ２１８は、構成リポジトリ２１４内で定義される領域ごとに、フォーマットされた領域構成ファイルを生成する。各フォーマットされた領域構成ファイルは、定義された領域に関連付けられた構成ごとに、データ・カルーセル１２０内に実装されるファイル・ディレクトリ構造を指定する。一実装形態では、領域構成ファイルは、ＸＭＬファイルとしてフォーマットされる。領域構成ファイルに使用することができる他のフォーマットには、カスタム・フラット・ファイル・フォーマットを含めることができるが、これに制限はされない。一実装形態で、各生成される領域構成ファイルに、ｘｘｘｘ．ｒｇｎｃｆｇという名前がつけられ、ここで、ｘｘｘｘは、領域に関連付けられた整数領域ＩＤの４バイト１６進数表現であり、必要に応じて先頭に０が付加される、。本明細書に記載の実装形態では、各ｘｘｘｘ．ｒｇｎｃｆｇファイルは、データ・カルーセル１２０内の＼ｒｅｇｉｏｎｃｏｎｆｉｇディレクトリに格納される。
【００３８】
図６に、領域構成ファイル・ジェネレータ２１８によって生成されるファイルの例示的な構造を示す。領域構成ファイル６００は、領域エントリ６０２がルートである階層構成に従ってフォーマットされる。領域エントリ６０２は、特定の領域定義３０４に対応する。
【００３９】
１つまたは複数の構成エントリ６０４（１）、６０４（２）、…、６０４（Ｎ）は、各領域エントリ６０２に関連付けられる。各構成エントリ６０４は、特定の構成定義３０２に対応する。さらに、領域／構成マッピング３０６内で、構成エントリ６０４に対応する各構成定義３０２が、領域エントリ６０２に対応する領域定義３０４にマッピングされる。
【００４０】
タグ・テーブル４０６に格納されたデータに基づくデータ・タグは、各構成エントリ６０４に関連付けられる。たとえば、メタデータ・タグ６０６（１）、必須のデータ・タグ６０８（１）、および任意選択データ・タグ６１０（１）は、構成エントリ６０４（１）に関連付けられ、メタデータ・タグ６０６（２）、必須のデータ・タグ６０８（２）、および任意選択データ・タグ６１０（２）は、構成エントリ６０４（２）に関連付けられ、メタデータ・タグ６０６（Ｎ）、必須のデータ・タグ６０８（Ｎ）、および任意選択データ・タグ６１０（Ｎ）は、構成エントリ６０４（Ｎ）に関連付けられる。各構成エントリに関連付けられたタグ・エントリの順序は、タグ・テーブル４０６内の構成フィールドでの順序に基づいて決定される。このタグの順序は、クライアント・デバイス１１０が特定の構成に関連付けられたデータを獲得する順序も決定することができる。
【００４１】
メタデータ・タグ６０６は、各特定の構成に関する情報を指定するのに使用される。本明細書に記載の実装形態では、メタデータに、ＩＤおよび記述が含まれる。ＩＤメタデータ値は、データ・タイプ・フィールド値がＩＤであるタグ・テーブル４０６のレコードのタグ値フィールドに格納される。一実装形態では、ＩＤメタデータは、０と６５５３５の間の１０進の符号なし整数であり、構成テーブルの構成ＩＤフィールド値と同一である。この実装形態は、クライアント・デバイスがデフォルト構成ＩＤを便利に格納することを可能とし、その結果、視聴者が、クライアント・デバイスの電源を入れるたびに構成を選択する必要がなくなる。クライアント・デバイスが、電源を切られ、入れられる時に、視聴者が異なる構成を選択するまで、最後に選択した構成が表示される（メモリに格納された構成ＩＤに基づいて）。クライアント・デバイスに構成識別子を格納することは、領域構成ファイルの選択された構成の位置を示すインデックスを、その代わりに格納する実装に対する改善でもある。たとえば、クライアント・デバイスは、英語、スペイン語、ドイツ語を、この順序で使用可能な構成としてリストする領域構成ファイルを受信することができる。視聴者がスペイン語を選択する場合に、クライアント・デバイスは、視聴者が２番目の使用可能な構成を選択したことを示すインデックス値「２」を格納することができる。この領域構成ファイルが、その後、英語、フランス語、およびスペイン語をこの順序で含むように修正された場合に、次にクライアント・デバイスの電源が入れられた時に、フランス語構成が、２番目の使用可能な構成なので、自動的に選択される。したがって、インデックスではなく、選択された構成に関連付けられた識別子を格納することは、領域構成ファイル構造が変更された場合であっても、一貫性のある構成選択が保証される。
【００４２】
一実装形態で、構成ＩＤがメモリに格納されていない（たとえば、視聴者が、特定の構成を一度も選択していない）場合に、クライアント・デバイスは、領域構成ファルにリストされた最初の構成を自動的に選択する。
【００４３】
説明メタデータは、使用可能な構成のメニュー内で視聴者に提示できるストリングを表す。説明メタデータの値は、構成テーブル４０２内の構成名フィールドの値に対応する。
【００４４】
必須のデータ・タグ６０８は、クライアント・デバイスのオペレーションに対する主要なデータで、クライアント・デバイス・タイプに従って異なる可能性があるデータ、を指定するのに使用される。本明細書に記載の実装形態では、必須のデータ・タイプに、下記が含まれる。
・ｂｏｏｔｓｔｒａｐ
・ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅ
・ｐａｇｅｓ
・ｌａｎｇｕａｇｅ
・ａｄ
・ｃｏｎｆｉｇ
・ｌｃｌ＿ｅｐｇ＿ｂａｓｅ
・ａｐｐｄｉｓｃ
・ｌｃｌ＿ｅｐｇ＿ｅｘｔ
【００４５】
ｂｏｏｔｓｔｒａｐデータは、チャネル・ブラウジング、ボリューム表示、ロックされた番組のロック解除など、基本的なクライアント・デバイス・ファンクション（機能）に関連付けられた表示をサポートするのに必須のデータである。
【００４６】
ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅデータは、上述したｂｏｏｔｓｔｒａｐデータと共に使用されるリソース・ファイルおよび言語フォントを収容する。
【００４７】
ｐａｇｅｓデータは、クライアントが使用する表示ファイルのベース・セットを含み、フォント、ページ記述子ファイル（page descriptor files）、ビットマップ、スタイル記述子ファイル（style descriptor files）などを収容する。ｐａｇｅｓデータには、環境変数やカスタマイズ可能ストリングなどをセットするためにロード時に実行することができるスクリプト・ファイル、も含めることができる。一実装形態では、個々のファイルを、拡張子「．ｂｌｂ」を持つカルーセル・ブロブ（carousel blobs）内に連結することができる。
【００４８】
ｌａｎｇｕａｇｅ（言語）データは、静的に表示されるストリング（strings）を収容し、このストリングは、複数の構成に渡って一貫性のあるページ表示レイアウトを提供する。１つの例では、異なるストリングをロードして、異なる言語を表示することができる。ｌａｎｇｕａｇｅデータは、たとえばストリングのある言語への翻訳が大きすぎて標準レイアウトにおさまらず、オーバーライド・レイアウトを必要とする時、などに使用される、レイアウト・オーバーライドも収容することができる。
【００４９】
ｂｏｏｔｓｔｒａｐ、ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅ、ｐａｇｅｓ、およびｌａｎｇｕａｇｅデータ・タイプの間でデータを分割することによって、２つの重要なデータ分類が作られる。第１に、合わせて捉えると、タイプｂｏｏｔｓｔｒａｐおよびｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅのデータは、クライアント・デバイスの基本的な機能性を提供するのに必須のデータの最小限のセット（組）を構成する。合わせて捉えると、ｐａｇｅｓおよびｌａｎｇｕａｇｅデータ・タイプは、クライアント・デバイスの他の機能性に関連付けられて表示することができる追加デーを構成する。第２に、ｂｏｏｔｓｔｒａｐおよびｐａｇｅｓの両方のデータ・タイプは、レイアウト・データを収容し、ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅおよびｌａｎｇｕａｇｅの両方のデータ・タイプは、ｂｏｏｔｓｔｒａｐおよびｐａｇｅｓデータ・タイプのデータによって記述されるレイアウトを使用して表示できる特定のテキストデータを収容する。複数の異なる言語構成が、クライアント・デバイスで使用可能にされる場合に、異なる言語構成の間で、レイアウト・データが同一であり、実際のテキストだけが異なる可能性が高い。したがって、レイアウト・データの１組だけが放送される必要があり、一方、テキストデータは複数の組が放送される必要がある。言い換えると、同一のｂｏｏｔｓｔｒａｐおよび／またはｐａｇｅｓデータを、それぞれが異なるｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅデータおよびｌａｎｇｕａｇｅデータを有する複数の構成に関連付けることができる。さらに、レイアウト・データは、通常はテキストデータより複雑なので、複数の構成をサポートするために１組のレイアウト・データだけを送信できるようにすることによって、かなりの量の帯域幅を節約することができる。
【００５０】
いくつかの情況で、たとえば、ある言語の特定の単語または句が、他の言語よりかなり長く、その１つの言語に対してより大きいボタンまたはテキスト・フレームが必要になる場合など、異なる構成間でレイアウト・データがわずかに異なる場合がある。そのような状況をサポートすると同時に放送されるデータの量を最小にするために、オーバーライド・レイアウト・データを、特定の構成に関連付けられた適切なテキスト・データ・タイプに含めることができる。たとえば、クライアントがデータを受信すると、まずｂｏｏｔｓｔｒａｐデータ（レイアウト・データが含まれる）が受信され、ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅデータ（ｂｏｏｔｓｔｒａｐデータによって定義されるレイアウトに適用されるテキストが含まれる）が続く。したがって、ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅデータで受信されたレイアウト・データは、ｂｏｏｔｓｔｒａｐデータで最初に受信されたレイアウト・データにオーバーライドする（優先する）（ｂｏｏｔｓｔｒａｐデータで最初に受信されたレイアウト・データを無効にする）。同様に、オーバーライド・レイアウト情報は、ｌａｎｇｕａｇｅデータ・タイプまたはｃｏｎｆｉｇデータ・タイプに含めて、ｐａｇｅｓデータ・タイプで指定されるレイアウト情報にオーバーライドすることができる。クライアントによって維持される受信されたデータは、現在放送されているデータに再同期化されるので、更新された放送データは、領域構成ファイルで指定された順序で獲得される。しかし、アプリケーション（たとえば、ユーザ・インターフェース）によって、特定の放送データ・ファイルが要求されると、要求されたファイルが標準位置（たとえばｂｏｏｔｓｔｒａｐデータ・タイプ位置のレイアウト・データ）およびオーバーライド位置（たとえば、ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅｓデータ・タイプ位置のレイアウト・データ）の両方に存在する場合に、標準ファイルに出会う前にオーバーライド・ファイルに出会うように、クライアントは、選択された構成定義で定義されるデータ・タイプに関連付けられた位置を、逆の順序で検索する。
【００５１】
ａｄデータは、広告のコレクションからなる。さらに、ａｄデータには、クライアント・デバイス・タイプに応じて広告ダイジェスト・ファイルも含めることができる。広告ダイジェスト・ファイルは、現在放送について使用可能な広告と、特定の広告を表示しなければならない時を示すデータをリストする。広告ダイジェスト・ファイルには、通常は、各使用可能な広告に関連付けられた、タイトル、ビットマップ名、およびクリック−スルー（click-through）データが収容される。広告ダイジェスト・ファイルは、通常は、視聴者の関心に基づいてターゲットを設定された広告を実装するのに使用することができる。一実装形態では、タイプＩＰＧ１．５のクライアント・デバイスの広告ダイジェストが、「ｍｅｔａｄａｔａ．ａｄｓ」という名前のファイルに含まれる。タイプＢＡＳＩＣ１．０のクライアント・デバイスの広告ダイジェストは、圧縮されたＸＭＬファイルである「ＡｄＤｉｇｅｓｔ．ｇｚ」という名前のファイルに収容される。
【００５２】
ｃｏｎｆｉｇデータは、潜在的に、ｐａｇｅｓデータ・タイプに含めることができるすべてのものを収容し、全体的なｐａｇｅｓディレクトリへの微調整を指示する。たとえば、ｃｏｎｆｉｇデータは、メニュー・ページのデフォルト・ビット・マップに代わりに表示するためにロードされるオーバーライド・ビットマップを含めることができる。ローカル・ヘルプ・デスク番号は、ｃｏｎｆｉｇデータを使用して、含めることができるデータのもう１つの例である。
【００５３】
ｌｃｌ＿ｅｐｇ＿ｂａｓｅデータは、基本的なＥＰＧデータを収容する。一実装形態では、ｌｃｌ＿ｅｐｇ＿ｂａｓｅは、２つのディレクトリ、ｄａｔａ００およびｄａｔａ０１を収容し、ｄａｔａ００は、現在のタイム・スライスの詳細なＥＰＧデータを収容する。ｄａｔａ０１は、次のタイム・スライスの、より詳細でないＥＰＧデータを収容する。一実装形態では、タイム・スライスは、１２時間の期間として定義されるが、任意の時間セグメントをタイム・スライスとして実装できることを諒解されたい。ｄａｔａ００およびｄａｔａ０１ディレクトリに格納されるファイルは、クライアント・デバイスに実装されるＥＰＧアプリケーションによって理解されるフォーマットである。これらのディレクトリの両方のコンテンツは、この領域に割り当てられたクライアント・デバイス・タイプに格納するのに十分に小さいことが好ましい。一実装形態では、ｄａｔａ００およびｄａｔａ０１ディレクトリのサイズが、構成可能である。
【００５４】
ａｐｐｄｉｓｃデータ・タイプは、アプリケーションおよびサービス・カタログを通信するのに使用することができる。アプリケーションおよびサービス・カタログには、ダウンロードするクライアント・デバイスに使用可能にすることができる、追加のアプリケーションおよびサービスを記述した情報を収容する。本明細書に記載の実装形態では、ａｐｐｄｉｓｃデータ・タイプは、たとえば名前／バージョン、名前、または「＊」（すべてのクライアント・タイプへの適用可能性を示す）などに基づいて、特定のクライアント・タイプについてターゲットにすることができる（クライアント・タイプは、表３を参照して上述した）。
【００５５】
一実装形態では、必須のデータ・タイプを、さらに、異なるデータ・タイプがどのように関係するかに従ってグループ化することもできる。たとえば、ｂｏｏｔｓｔｒａｐおよびｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅデータ・タイプを一緒にグループ化することができ、ｐａｇｅｓおよびｌａｎｇｕａｇｅデータ・タイプを一緒にグループ化することができる。クライアントがデータを受信すると、特定のデータ・タイプのデータは、同一グループ内のすべてのデータが成功裡に受信されるまで、表示されない。たとえば、クライアントがｂｏｏｔｓｔｒａｐデータを受信するが、ｂｏｏｔｓｔｒａｐ＿ｌａｎｇｕａｇｅデータを受信しない場合に、ページ・レイアウトは表示されるが、テキストはなく、したがって、無用になる。関連するデータ・タイプをグループ化することによって、クライアントは、受信したデータのいずれかの表示を試みる前に、必要なすべてのデータを受信することが保証される。一実装形態では、データ・タイプ・グループを、データ・タイプがどのよう命名されるかに関して定義することができる。たとえば、「ｂｏｏｔｓｔｒａｐ」から始まるすべてのデータ・タイプを、１グループとみなすことができる。代替実装形態では、グループＩＤフィールドをタグ・テーブル４０６および領域構成ファイル内の各エントリに追加し、各データ・タイプがどのグループに属するかを識別することができる。
【００５６】
任意選択タグ６１０は、リソースが許す場合にクライアント・デバイスが任意選択としてダウンロードできるデータを指定するのに使用される。本明細書に記載の実装形態では、任意選択データに、拡張ＥＰＧリスティング・データ（データ・タイプｌｃｌ＿ｅｐｇ＿ｅｘｔ）が含まれ、これには、ｄａｔａ０２からｄａｔａＹＹという番号の複数のサブ・ディレクトリが含まれ、ここで、ＹＹは、２桁の１０進数としてフォーマットされた、最高の番号の名前をつけられたディレクトリである。十分なメモリが使用可能なクライアント・デバイスでは、スタートアップ時に他のすべてのタイプのデータを受信した後、および／またはガイドデータの変更が検出された時に、これらのディレクトリから選択的にデータを受け取ることができる。より高い番号のディレクトリのそれぞれに、より遅いタイム・スライスに関連付けられたＥＰＧデータが含まれる。クライアント・デバイスは、指定されたメモリの限度に達するか、すべてのディレクトリを読み取るまで、後続ディレクトリからのデータの読取を継続する。
【００５７】
１例としての領域構成ファイルは、下記のようにフォーマットすることができる。
【００５８】
【表７】
2004215284.tif 000009
【００５９】
＜ｒｇｎ＞タグは、領域定義の始めを示し、＜／ｒｇｎ＞タグは、領域定義の終りを示す。＜ｃｆｇ＞および＜／ｃｆｇ＞タグ対のそれぞれは、構成定義の始めおよび終りを示す。
＜ｃｆｇ＞および＜／ｃｆｇ＞タグ対の間の各タグは、タグ・テーブル４０６の１レコードに対応し、下記のフォーマットを有する。
<tag type name="data type name" ver="client type" val="tag value">
＜タグ・タイプ  ｎａｍｅ＝「データ・タイプ名」  ｖｅｒ＝「クライアント・タイプ」  ｖａｌ＝「タグ値」＞
【００６０】
ここで、”ｔａｇ  ｔｙｐｅ”（タグ・タイプ）は、データ・タイプ・テーブル４１０の対応するレコードのタグ・タイプ・フィールド値であり、”ｄａｔａ  ｔｙｐｅ  ｎａｍｅ”(データ・タイプ名)は、タグ・テーブル４０６の対応するレコードのデータ・タイプ名フィールド値であり、”client type”(クライアント・タイプ)は、クライアント・タイプ・テーブル４０８の対応するレコードのクライアント・タイプ・フィールド値であり、”ｔａｇ  ｖａｌｕｅ”（タグ値）は、タグ・テーブル４０６の対応するレコードのタグ値フィールド値である。＜ｃｆｇ＞および＜／ｃｆｇ＞タグ対の間のタグ・エントリの順序は、タグ・テーブル４０６内の各タグ・レコードの構成フィールド内の順序の値に基づいて決定することができる。
【００６１】
本明細書に記載の実装形態では、領域構成ファイルで指定される各データ・タイプおよび値が、データ・カルーセル１２０のディレクトリに対応する。したがって、上で図示し、説明した領域構成ファルの例では、データ・カルーセル１２０での下記のディレクトリ構造が仮定される。
【００６２】
【表８】
2004215284.tif 000010
【００６３】
複数データ構成の放送を可能にする方法
上で説明したように、放送データ・サーバ１０６は、複数のデータ構成定義を維持し、複数のクライアント・デバイス１１０への放送のために、ヘッドエンド・システム１０８にこれらの定義を提供する。各クライアント・デバイス１１０は、領域に関連付けられ、放送データ・サーバ１０６は、領域への構成定義のマッピングを維持し、その結果、個々の領域に関連付けられたクライアント・デバイスは、データ構成についての個々の組合せへのアクセスを有することができる。
【００６４】
放送データ・サーバ１０６によって実行されるような複数のデータ構成の放送を可能にすることは、コンピュータによって実行される、アプリケーション・モジュールなどの、コンピュータ実行可能命令についての全般的なコンテキストで説明することができる。一般に、アプリケーション・モジュールには、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。ヘッドエンドが複数のデータ構成を放送できるようにする放送・データ・サーバは、複数のプログラミング技法のいずれかを使用して実装することができ、ローカル・コンピューティング環境で実装するか、複数の通信プロトコルのいずれかに基づくさまざまな通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境に実装することができる。そのような分散コンピューティング環境では、アプリケーション・モジュールを、メモリ・ストレージ・デバイスを含む、ローカルおよびリモートの両方のコンピュータ記憶媒体に配置することができる。
【００６５】
図７に、複数のデータ構成の放送を可能にする方法７００を示す。例示のために、図７を、図１および図２に示されたコンポーネントを参照して説明する。
【００６６】
ブロック７０２で、放送データ・サーバ１０６は、放送データを受信して、格納する。たとえば、データ・コレクタ１１６は、データ・プロバイダ１０４からデータを収集し、データ・キャッシュ２０４にそのデータを格納する。収集されるデータには、広告、ＶＯＤデータ、およびＥＰＧデータを含めることができるが、これに制限はされない。
【００６７】
ブロック７０４で、放送データ・サーバ１０６は、１つまたは複数の構成定義を受信して、格納する。本明細書に記載の実装形態では、構成定義は、システム管理者によって、構成インターフェース２１６を介してサブミット（submit；発信）され、構成リポジトリ２１４に格納される。
【００６８】
ブロック７０６で、放送データ・サーバ１０６は、１つまたは複数の領域定義を受信して、格納する。本明細書に記載の実装形態では、領域定義は、ヘッドエンド１０８によって、構成インターフェース２１６を介するか、放送データ・サーバ１０６とヘッドエンド１０８の間の関係を確立する初期化プロセスを介して、サブミットされる。領域定義は、構成リポジトリ２１４に格納される。
【００６９】
ブロック７０８で、放送データ・サーバ１０６は、領域／構成マッピングを受信して、そのマッピングを、構成リポジトリ２１４に格納する。ブロック７１０で、領域構成ファイル・ジェネレータ２１８は、構成リポジトリ２１４に格納された領域定義ごとに、領域定義ファイルを生成する。本明細書に記載の実装形態では、各領域構成ファイルは、領域に関連付けられた１つまたは複数の構成を識別し、各構成に関連付けられたデータをそこからダウンロードできるデータ・カルーセル１２０のディレクトリを示すフォーマットされたＸＭＬタグを含む。領域構成ファイルは、そこからクライアント・デバイス１１０によってダウンロードすることになるデータ・カルーセル１２０のディレクトリ位置に書き込まれる。
【００７０】
ブロック７１２で、データ構成モジュール２２０は、構成リポジトリ２１４に格納された定義されたデータ構成に基づいて、データ・プロバイダ１０４から受信され、データ・キャッシュ２０４に格納されたデータを、データ・カルーセル１２０のディレクトリにコピーする。
【００７１】
順次的に説明したが、図７に示されたオペレーションは、必ずしも図に示された順序で実行する必要はない。たとえば構成定義、領域定義、および領域／構成マッピングを、最初に導入し、その後にデータを収集してデータ・カルーセルにデータをコピーすることを何回も繰り返すことを続けることができる。
【００７２】
例示的なクライアント・デバイス
図８に、図１に示された例示的なクライアント・デバイス１１０の選択されたコンポーネントを示す。クライアント・デバイス１１０は、チューナ８０２（複数）を含み、これらは、テレビジョン放送信号を受信するためにさまざまな周波数またはチャネルに同調する１つまたは複数のイン−バンド・チューナを表し、さらに、データ・カルーセル１２０に格納されたデータがそれを介して放送されるＯＯＢネットワーク１１４に対応する放送チャネルに同調するように構成することができるもう１つのチューナも含む。代替案では、チューナ８０２（複数）は、単一のチャネルを介して（番組コンテンツと放送データの両方を含む）複数のデータ・ストリームを同時に受信するように構成された単一のチューナを表すことができる。
【００７３】
クライアント・デバイス１１０は、クライアント・デバイス１１０のオペレーションを制御し、他の電子デバイスおよびコンピューティング・デバイスと通信するさまざまな命令を処理する１つまたは複数のプロセッサ８０４を含む。クライアント・デバイス１１０は、１つまたは複数のメモリ・コンポーネントを有するものとして実装することができ、このメモリ・コンポーネントの例には、ランダム・アクセス・メモリ（ＲＡＭ）８０６、ディスク・ドライブ８０８、マス・ストレージ・コンポーネント８１０、および不揮発性メモリ８１２（たとえば、ＲＯＭ、フラッシュ、ＥＰＲＯＭ、ＥＥＰＲＯＭなど）が含まれる。メモリ・コンポーネント（たとえば、ＲＡＭ８０６、ディスク・ドライブ８０８、記憶媒体８１０、および不揮発性メモリ８１２）には、受信されたコンテンツ（received content）、ＥＰＧデータ、クライアント・デバイス１１０用の構成情報、および／またはグラフィカル・ユーザ・インターフェース情報などのさまざまな情報および／またはデータが格納される。不揮発性メモリ８１２は、最後に選択された構成定義に関連付けられた識別子を維持するようにも構成され、その結果、クライアント・デバイス１１０が、電源を切られ、もう一度電源を入れられる場合に、同一の構成を選択できるようになる。
【００７４】
クライアント・デバイス１１０の代替実装形態に、ある範囲の処理能力およびメモリ能力を含めることができ、図８に示されたものより少数または多数のタイプのメモリ・コンポーネントを含めることができる。たとえば、フル・リソース・クライアントは、視聴者による再生のためにコンテンツを格納するディスク・ドライブ８０８を含む、かなりのメモリ・リソースおよび処理リソースを用いて実装することができる。しかし、低リソースのクライアントは、限られた量のＲＡＭ８０６のみで、ディスク・ドライブ８０８を有さず、限られた処理能力のプロセッサ８０４を有する、などの、限られた処理能力およびメモリ能力を有することになる。
【００７５】
オペレーティング・システム８１４および１つまたは複数のアプリケーション・プログラム８１６を、不揮発性メモリ８１２に格納し、プロセッサ８０４によって実行して、ランタイム環境を提供することができる。ランタイム環境は、アプリケーション・プログラム８１６がクライアント・デバイス１１０と相互作用できるようにするさまざまなインターフェースを定義できるようにすることによって、クライアント・デバイス１１０の拡張性を容易にする。
【００７６】
１方向の放送カルーセル・ファイル・システム（ＢＣＦＳ）８１５は、ＯＯＢネットワーク１１４と相互作用するように構成されて、クライアント・デバイス１１０によって維持されるデータが、ＯＯＢネットワーク１１４を介して放送されつつあるデータに同期化される。図からわかるように、ＢＣＦＳ８１５は、不揮発性メモリ８１２に格納され、且つプロセッサ８０４で実行される、ソフトウェア・アプリケーションとして実装される。代替案では、ＢＣＦＳ８１５を、１つまたは複数のハードウェア・コンポーネントとして、またはオペレーティング・システム８１４の一部として実装することもできる。各特定の実装形態で、ＢＣＦＳ８１５は、クライアント・デバイス１１０がそこから放送データを受信する特定のデータ・カルーセル１２０に関連付けられる（または、少なくともそのデータ・カルーセル１２０に従って構成される）。
【００７７】
ＢＣＦＳ８１５は、通常は、ディレクトリ・シーク（seek directory）オペレーション、ファイル・シーク（seek file）オペレーション、ディレクトリ同期化（sync directory）オペレーション、およびファイル同期化（sync file）オペレーションを、実行するように構成される。代替案では、ＢＣＦＳ８１５を、より基本的なオペレーションを実行するように構成することができ、上でリストしたオペレーションは、実装されるＢＣＦＳ８１５へのインターフェースを介して、たとえばオペレーティング・システム８１４の一部として使用可能になる。
【００７８】
ディレクトリ・シークオペレーションは、特定のローカル・ディレクトリに関連付けられたデータがデータ・カルーセル１２０上の同一の名前のディレクトリからＯＯＢネットワーク１１４を介して放送されているデータと同期化されているかどうか、を決定するために呼び出される（ディレクトリをパラメータとして）。ディレクトリ・シークオペレーションは、指定されたローカル・ディレクトリが放送されているディレクトリと同期化されている否かを示すインジケータと、指定されたディレクトリから放送されているデータのサイズ（たとえばバイト単位）を返す。
【００７９】
ファイル・シークオペレーションは、特定のファイルについてのローカルに維持されているコピーがＯＯＢネットワーク１１４を介して放送されている同一のファイルと同期化されているかどうか、を決定するために呼び出される（ファイル名をパラメータとして）。ファイル・シークオペレーションは、指定されたファイルが放送されていか否かを示すインジケータ、ファイルのローカルに維持されているバージョンが現在放送されつつあるファイルのコピーと一致するか否かを示すインジケータ、および放送されているファイルに関連付けられたファイル・サイズ（たとえばバイト単位）を返す。
【００８０】
ディレクトリ同期化オペレーションは、特定のローカル・ディレクトリに関連付けられたデータをデータ・カルーセル１２０上の同一の名前のディレクトリからＯＯＢネットワーク１１４を介して放送されつつあるデータと同期化させるために、呼び出される（ディレクトリをパラメータとして）。ディレクトリ同期化オペレーションは、指定されたディレクトリのすべてのローカルデータを削除して、指定されたディレクトリから放送されているデータを獲得する。
【００８１】
ファイル同期化オペレーションは、ＯＯＢネットワーク１１４を介して現在放送されている、指定された名前のファイルを獲得するために、呼び出される（ファイル名をパラメータとして）。
【００８２】
図示の例のクライアント・デバイス１１０において、ＥＧＰアプリケーション８１８は、不揮発性メモリ８１２に格納されて、受信されたＥＰＧデータを操作し、番組ガイドを生成する。クライアント・デバイス１１０に実装できるアプリケーション・プログラム８１６には、ウェブ（たとえば「ワールド・ワイド・ウェブ」）をブラウズするブラウザ、電子メールを容易にする電子メールプログラムなどを含めることができる。ユーザ・インターフェース・コンポーネント８２０も、不揮発性メモリ８１２に格納され、プロセッサ８０４で実行されて、クライアント・デバイスとのユーザ対話を提供する。
【００８３】
クライアント・デバイス１１０には、メモリ８１２に格納されてプロセッサ８０４で実行されるデータ構成モジュール８２２も含まれる。データ構成モジュール８２２には、クライアント・オブジェクト８２４および複数のタスク・オブジェクト８２６が含まれる。クライアント・オブジェクト８２４は、適切な領域構成ファイルを入手すること、タスク・オブジェクト８２６がサービスされるべき且つ再び取り上げるべき順序をスケジューリングすること、選択された構成の詳細をタスク・オブジェクト８２６およびユーザ・インターフェース８２０（および、おそらくは、アプリケーション・プログラム８１６および／またはＥＧＰアプリケーション８１８）から使用可能にすること、および領域構成ファイルが変更されていないことを経時的に検証すること、についての責任を負う。各タスク・オブジェクト８２６は、非同期コマンドをＢＣＦＳ８１５に発行してデータを得ることによって、選択された構成に関連付けられた特定のデータ・タイプのデータを得ることについての責任を負う。本明細書に記載の実装形態では、クライアント・オブジェクト８２４およびタスク・オブジェクト８２６が、状態機械（state machines）として実装され、それぞれ以下で詳細に説明される。データ構成モジュールを、類似する機能性を提供する複数の形で実装することができ、本明細書に記載の実装形態が、そのようなデータ構成モジュールの一例に過ぎないことも理解されたい。
【００８４】
クライアント・デバイス１１０は、この例で示されないテレビジョン・エンターテイメント・システムに関する他のコンポーネントを含むように実装することができる。たとえば、クライアント・デバイス１１０に、ユーザ・インターフェースのライト（lights；ウィンドウ）、ボタン、コントロール、および類似物を含めて、追加のデバイスとの視聴者対話を容易にすることができる。
【００８５】
図示のクライアント・デバイス１１０には、ＮＴＳＣ、ＰＡＬ、ＳＥＣＡＭ、または他のＴＶシステム・ビデオ信号などの放送ビデオ信号をデコードするデコーダ８２８も含まれる。クライアント・デバイス１１０には、無線インターフェース８３０、ネットワーク・インターフェース８３２、シリアルおよび／またはパラレル・インターフェース８３４、およびモデム８３６についての任意の組合せも含めることができる。無線インターフェース８３０を用いると、クライアント・デバイス１１０が、リモート・コントロール・デバイスなどのユーザが操作する入力デバイスから、または別のＩＲ、Ｂｌｕｅｔｏｏｔｈ、または類似するＲＦ入力デバイスから、入力コマンドおよび他の情報を受信できるようになる。
【００８６】
ネットワーク・インターフェース８３２およびシリアルおよび／またはパラレル・インターフェース８３４を用いると、クライアント・デバイス１１０が、さまざまな通信リンクを介して、他の電子デバイスおよびコンピューティング・デバイスと相互作用し、通信できるようになる。図示されてはいないが、クライアント・デバイス１１０に、他のデバイスと通信するために他のタイプのデータ通信インターフェースを含めることもできる。モデム８３６は、普通の電話回線を介する他の電子デバイスおよびコンピューティング・デバイスとのクライアント・デバイス１１０の通信を容易にする。
【００８７】
クライアント・デバイス１１０に、オーディオ・データおよびビデオ・データを処理、提示、または他の形でレンダリングできる、テレビジョンまたは他のデバイスに信号を供給する、オーディオ出力８３８およびビデオ出力８４０も含まれる。別々に図示されてはいるが、クライアント・デバイス１１０のコンポーネントのいくつかを、特定用途向け集積回路（ＡＳＩＣ）に実装することができる。さらに、システム・バス（図示せず）は、通常は、クライアント・デバイス１１０内のさまざまなコンポーネントを接続する。システム・バスは、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、またはさまざまなバス・アーキテクチャのいずれかを使用するローカル・バスを含む、複数のタイプのバス・アーキテクチャのいずれか１つまたは複数として実装することができる。例として、そのようなアーキテクチャに、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、マイクロチャネルアーキテクチャ（ＭＣＡ）バス、Ｅｎｈａｎｃｅｄ  ＩＳＡ（ＥＩＳＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカル・バス、および、メザニンバスとも称するＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔｓ（ＰＣＩ）バスを含めることができる。
【００８８】
データ構成の視聴者選択を可能にする方法
上で説明したように、クライアント・デバイス１１０は、ヘッドエンド１０８から放送番組および関連する放送データを受信する。さらに、クライアント・デバイス１１０は、領域識別子に基づいて、クライアント・デバイスから使用可能である１つまたは複数のデータ構成を示す放送領域構成ファイルを受信する。クライアント・デバイス１１０は、ユーザ・インターフェースを介して、使用可能なデータ構成のリストを視聴者に提示するように構成され、視聴者が選択したデータ構成に従って放送データを選択的に受信する。
【００８９】
クライアント・デバイス１１０によって実行される、データ構成の視聴者選択を可能にすることは、コンピュータによって実行される、アプリケーション・モジュールなどの、コンピュータ実行可能命令の全般的なコンテキストで説明することができる。一般に、アプリケーション・モジュールには、特定のタスクを実行するか特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。複数のデータ構成のいずれか１つに従って放送データを選択的に受信するように構成されたクライアント・デバイスは、複数のプログラミング技法のいずれかを使用して実装することができ、ローカル・コンピューティング環境に実装するか、複数の通信プロトコルのいずれかに基づくさまざまな通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境で実装することができる。そのような分散コンピューティング環境では、アプリケーション・モジュールを、メモリ・ストレージ・デバイスを含む、ローカルおよびリモートの両方のコンピュータ記憶媒体に配置することができる。
【００９０】
図９に、複数のデータ構成の１つについての視聴者選択を可能とし、選択されたデータ構成に従って放送データを選択的に受信する方法９００を示す。例示のために、図９を、図１、図２および図８に示されたコンポーネントを参照して説明する。
【００９１】
ブロック９０２で、クライアント・デバイス１１０は、その特定のクライアント・デバイスに適切な領域構成ファイルを獲得する。たとえば、一実装形態では、各領域構成ファイルに、複数のクライアント・デバイスに関連付けられた領域識別子に基づく名前がつけられる。ヘッドエンド１０８が、その領域構成ファイルを放送すると、各特定のクライアント・デバイスは、そのクライアント・デバイスに関連付けられた領域識別子に基づく名前を有する領域構成ファイルを獲得する。上で説明したように、クライアント・デバイスに関連付けられた領域識別子は、クライアント・デバイスが製造される際に、またはクライアント・デバイスのセットアップ処理中にケーブル・プロバイダによって、などの多数の方法によって割り当てることができる。
【００９２】
ブロック９０４で、クライアント・デバイス１１０は、受信された領域構成ファイルから１つの構成を選択する。この構成は、前に選択された（選択されていた）構成に基づいて選択することができ、あるいは、デフォルト構成（たとえば、領域構成ファイルで最初にリストされている構成）を選択することができる。初期構成を選択する例示的な方法を、以下で図１５を参照して詳細に説明する。
【００９３】
ブロック９０６で、クライアント・デバイス１１０は、領域構成ファイル内の最初に選択された構成定義に従って、データ・カルーセル１２０から放送されているデータの選択的な受信を開始する。クライアント・デバイス１１０は、領域構成ファイルで指定された順序で、データ・カルーセル１２０上のファイル・ディレクトリから放送されているデータを獲得する。
【００９４】
ブロック９０８で、クライアント・デバイス１１０は、受信された領域構成ファイルに基づいて、使用可能である、使用可能なデータ構成のリストを表示する。たとえば、視聴者の要求に応答して、ユーザ・インターフェース８２０は、構成リポジトリ２１４内の構成テーブルの構成名フィールドに対応する領域構成ファイルからの値のリストを表示する。
【００９５】
ブロック９１０で、クライアント・デバイス１１０は、視聴者による構成の選択を（ユーザ・インターフェース８２０を介して）受信する。視聴者が選択した構成に切り替える例示的な方法を、以下で図２１を参照して説明する。
【００９６】
ブロック９１２で、クライアント・デバイス１１０は、領域構成ファイルの視聴者が選択した構成定義に従って、データ・カルーセル１２０から放送されているデータを選択的に受信する。クライアント・デバイス１１０は、領域構成ファイルで指定される順序で、データ・カルーセル１２０のファイル・ディレクトリから放送されているデータを獲得する。獲得されたデータは、クライアント・デバイス１１０に、選択された構成に従ってデータを表示するのに十分なデータ・セットを与える。
【００９７】
クライアント・デバイス１１０のオペレーションは、構成を選択する別の視聴者要求が受信される場合に、上で説明したようにブロック９０８を継続することができる。
【００９８】
クライアント・デバイス１１０のオペレーションは、クライアント・デバイス１１０に関連付けられた領域識別子が変更される場合、またはクライアント・デバイス１１０に適切な放送領域構成ファイルが修正される場合に、上で説明したようにブロック９０２を継続することができる。
【００９９】
例示的なクライアント・オブジェクトの実装形態
図１０に、クライアント・オブジェクト８２４の選択されたコンポーネントを示す。上で説明したように、クライアント・オブジェクト８２４は、適当な領域構成ファイルを入手すること、タスク・オブジェクト８２６がサービスされるべき且つ再び取り上げるべき順序をスケジューリングすること、領域構成ファイルが変更されておらず、クライアント・デバイス１１０に関連付けられた領域識別子が変更されてないことを経時的に検証すること、選択された構成の詳細をタスク・オブジェクト８２６、ユーザ・インターフェース８２０、アプリケーション・プログラム８１６、および／またはＥＧＰアプリケーション８１８から使用可能にすること、に責任を負う。例示的な実装形態では、クライアント・オブジェクト８２４は、状態機械として実装される。
【０１００】
クライアント・オブジェクト８２４には、状態１００２、タスク・リスト１００４、オペレーション１００６、アプリケーション・プログラミング・インターフェース（ＡＰＩ）ファンクション１００８、タスク・アイドル・タイマ１０１０、および領域アイドル・タイマ１０１２が含まれる。クライアント・オブジェクト８２４は、実行するファンクションに従って、（複数の）状態（states）１００２の間で遷移する。クライアント・オブジェクト８２４の状態は、以下で図１２を参照して詳細に説明する形で、遷移する。
【０１０１】
タスク・リスト１００４は、クライアント・オブジェクト８２４によって維持されるタスク・オブジェクト８２６の順序付きリストであり、タスク・リスト１００４内のタスク・オブジェクトの順序に基づいてタスク・オブジェクト８２６に関連付けられたファンクションの実行を容易にする。タスク・リスト１００４内のタスク・オブジェクトの順序は、各タスク・オブジェクト８２６の次アクティビティ・タイム・プロパティに基づいており、このタクスオブジェクトは、以下で、図１１を参照して詳細に説明する。
【０１０２】
オペレーション１００６は、クライアント・オブジェクト８２４がタスク・オブジェクト（複数）８２６の間でナビゲートし、それに関連するオペレーションを実行できるようにするオペレーションの基本セットである。オペレーション１００６には、構成選択１０１４、タスク・リスト準備１０１６、最初のタスク取得１０１８、および全無効化１０２０を含めることができるが、これに制限はされない。
【０１０３】
構成選択１０１４は、クライアント・オブジェクト８２４によって実行され、デフォルト構成または前に選択されていた構成を決定する。例示的な構成選択オペレーション１０１４を、以下で図１５を参照して詳細に説明する。
【０１０４】
タスク・リスト準備１０１６は、クライアント・オブジェクト８２４によって実行され、タスク・リスト１００４を初期化する。例示的なタスク・リスト準備オペレーション１０１６を、下で図２０を参照して詳細に説明する。
【０１０５】
最初のタスク獲得１０１８は、クライアント・オブジェクト８２４によって実行され、次に実行されるタスクを決定する。例示的な最初のタスク取得オペレーション１０１８を、下で図２２を参照して詳細に説明する。
【０１０６】
全無効化１０２０は、クライアント・オブジェクト８２４によって実行され、クライアント・デバイス領域識別子が変更された（たとえば、新しい領域識別子が、ヘッドエンドから受信された）時または現在の領域構成ファイルが変更された時に、タスク・リスト１００４内の各タスク・オブジェクトを無効にする。例示的な全無効化オペレーション１０２０を、以下で図２３を参照して詳細に説明する。
【０１０７】
アプリケーション・プログラミング・インターフェース（ＡＰＩ）ファンクション１００８は、クライアント・オブジェクト８２４の外部から呼び出すことができる。選択ＡＰＩ呼出し１００８には、タスク追加１０２２、構成のユーザ選択（choose configuration）１０２４、特定ファイル検索１０２６、およびデフォルト・パス内ファイル検索１０２８を含めることができるが、これに制限はされない。
【０１０８】
タスク追加１０２２の呼出し（コール;call）は、クライアント・オブジェクト８２４が、新しいタスク・オブジェクトを生成し、各タスク・オブジェクト８２６を無効化することを引き起こす。例示的なタスク追加ファンクション１０２２を、以下で図１３を参照して詳細に説明する。
【０１０９】
構成のユーザ選択１０２４の呼出しは、使用可能な構成についての視聴者による選択の際に、クライアント・オブジェクト８２４がタスク・リスト１００４を更新することを引き起こす。例示的な構成のユーザ選択ファンクション１０２４を、以下で図２１を参照して詳細に説明する。
【０１１０】
特定ファイル検索１０２６の呼出しは、クライアント・オブジェクト８２４が、指定されたデータ・タイプに関連付けられた指定されたファイルを突き止めることを引き起こす。例示的な特定ファイル検索ファンクション１０２６を、以下で図３７を参照して詳細に説明する。
【０１１１】
デフォルト・パス内ファイル検索１０２８の呼出しは、クライアント・オブジェクト８２４が、現在選択されている構成に関連付けられたデータ・タイプを逆の順序で検索することによって、指定されたファイルを突き止めることを引き起こす。例示的なデフォルト・パス内ファイル検索ファンクション１０２８を、以下で図３８を参照して詳細に説明する。
【０１１２】
タスク・アイドル・タイマ１０１０は、クライアント・オブジェクト８２４によって使用され、タスク・オブジェクト８２６を実行する時を決定する。タスク・アイドル・タイマ１０１０は、現在の状態およびどのタスクが現在実行されているかに従ってリセットされる。タスク・アイドル・タイマ１０１０の使用を、以下でタスク実行を参照して詳細に説明する。
【０１１３】
領域アイドル・タイマ１０１２は、クライアント・オブジェクト８２４によって使用され、現在の領域構成ファイルが、現在放送されている領域構成ファイルとまだ同期化されているかどうかを検証する時と、クライアント・デバイス領域識別子が変更されたか否かを判定するためにクライアント・デバイス領域識別子を検査する時を決定する。
【０１１４】
例示的なタスク・オブジェクトの実装形態
図１１に、例示的なタスク・オブジェクト８２６の選択されたコンポーネントを示す。上で説明したように、各タスク・オブジェクト８２６は、非同期コマンドをＢＣＦＳ８１５に発行してデータを得ることによって、選択された構成に関連付けられた特定のデータ・タイプのデータを得る責任を負う。例示的実装形態では、タスク・オブジェクト８２６は、状態機械として実装され、複数のプロパティ１１０２、複数の状態１１０４、および複数のオペレーション１１０６を有する。
【０１１５】
プロパティ１１０２は、特定のタスク・オブジェクト８２６を定義するコンポーネントである。プロパティ１１０２には、下記を含めることができるが、これに制限はされない。
・  ユーザ・タスク・フラグ
・  データ・タイプ
・  同期化すべきファイル
・  再検査間隔
・  次アクティビティ時刻
・  ハンドラ・ファンクション
・  ハンドラ・ファンクション引数
・  データ・サイズ限界
・  デフォルト・パス内フラグ
・  サブ・ディレクトリ・フラグ
・  ファイル・フラグ
・  最後に同期化されたデータ・タイプ位置
・  ディレクトリ・インデックス
・  ディレクトリ・カウント
【０１１６】
「ユーザ・タスク・フラグ」のプロパティは、タスク・オブジェクトがユーザ・タスク（以下で図１２を参照して説明する）であるか否かを示す。「データ・タイプ」のプロパティは、タスク・オブジェクトに関連付けられたデータ・タイプの名前を格納する。「同期化すべきファイル」のプロパティは、定義されたタスク・オブジェクトを使用して、選択的に受信されるべき指定されたデータ・タイプに関連付けられたファイルの組を指定する。「再検査間隔」のプロパティは、変更についてデータをどれほど頻繁に検査しなければならないかを指定する。「次アクティビティ時刻」のプロパティは、タスク・オブジェクトに関連付けられたオペレーションを実行する間隔を示すのに使用される。「ハンドラ・ファンクション」のプロパティに、タスク・オブジェクト８２６に関連付けられたハンドラ・ファンクションへのポインタを格納する。「ハンドラ・ファンクション引数」のプロパティは、ハンドラ・ファンクションが呼び出される際に、そのハンドラ・ファンクションに渡される引数を格納する。「データ・サイズ限界」のプロパティは、指定されたデータ・タイプについて保持される最大データ・サイズを指定する。「デフォルト・パス内フラグ」のプロパティは、指定されたデータ・タイプに関連付けられたデータが、デフォルト・パス内ファイル検索ファンクション１０２８へのＡＰＩ呼出しによって開始される検索に含まれるべきか否かを示す。「サブ・ディレクトリ・フラグ」のプロパティは、指定されたデータ・タイプのデータがそこから放送される位置が、サブ・ディレクトリを含むことを示すのに使用される。「ファイル・フラグ」のプロパティは、指定されたデータ・タイプのデータがそこから放送される位置が、ファイルを含むことを示すのに使用される（サブ・ディレクトリ・フラグ・プロパティおよびファイル・フラグ・プロパティは、相互に排他的である）。「最後に同期化されたデータ・タイプ位置」は、タスク・オブジェクトに関連付けられたデータがそこから放送された位置を指定する領域構成ファイル内のタグからの値を格納する。「最後に同期化されたデータ・タイプ位置」の値は、新しい構成が選択された際に、データ・タイプを再同期化する必要があるか否かを決定するのに使用される。「ディレクトリ・インデックス」のプロパティは、どのサブ・ディレクトリが現在オペレーション状態にあるかを示す整数を格納する。「ディレクトリ・カウント」のプロパティは、現在同期化が完了しているディレクトリの数を示す整数を格納する。「ディレクトリ・インデックス」のプロパティおよび「ディレクトリ・カウント」のプロパティの使用を、以下で図３４を参照して詳細に説明する。
【０１１７】
状態１１０４は、（状態機械として実装されている）タスク・オブジェクト（複数）８２６が所与の時になる可能性がある複数の状態を表す。各タスク・オブジェクト８２６は、それが実行するファンクションに従って、複数の状態１１０４の間で遷移する。タスク・オブジェクト状態遷移を、以下で図２４および２８を参照して詳細に説明する。
【０１１８】
オペレーション１１０６は、特定のタスク・オブジェクト８２６によって、またはそれに関して実行することができるオペレーションを表す。オペレーション１１０６には、リセット１１０８、棚上げ（shelve）１１１０、チェック／無効化１１１２、およびデフォルト・ディレクトリ・リスト保守１１１４を含めることができるが、これに制限はされない。
【０１１９】
リセット・オペレーション１１０８は、タスク・オブジェクトの状態が変化し、タスクに関連付けられたデータ・タイプのデータ獲得が、最初から再開される時に実行される。例示的なリセット・オペレーション１１０８を、以下で図３４を参照して詳細に説明する。
【０１２０】
棚上げオペレーション１１１０は、タスクがユーザによって生成された（すなわち、ユーザ・タスク）が、現在選択されている構成によって使用されない時に実行される。例示的な棚上げオペレーション１１１０を、以下で図３５を参照して詳細に説明する。
【０１２１】
チェック／無効化オペレーション１１１２は、タスク・リスト１００４から、新たに選択された構成に関連付けられていないタスク・オブジェクト８２６をクリアするために実行される。例示的なチェック／無効化オペレーション１１１２を、以下で図３６を参照して詳細に説明する。
【０１２２】
デフォルト・ディレクトリ・リスト保守オペレーション１１１４は、デフォルト・パスの新しいディレクトリが、同期化されるかそのコンテンツを削除された時に実行される。たとえば、タスク・オブジェクトが同期化される時に、タスク・オブジェクト８２６は、そのタスクに関連付けられたデータ・タイプが、あるデータ・タイプ・グループに属するかどうかを調べることができる。属する場合には、どのデータ・タイプ・グループが使用可能かについてのリストを、（グループ内のデータ・タイプのすべてが同期化されているか否かに基づいて）更新することができる。特定のデータ・タイプ・グループに関連するデータのすべてが、同期化されていることがわかった場合には、初期化オペレーションの組を実行して、アクセスされるべきデータを準備することができる。たとえば、特定のデータ・タイプに関連付けられて受信されたスクリプト・ファイルを、初期化中に実行することができる。そのようなスクリプト・ファイルは、たとえば、フォントの組を使用可能にするのに使用することができる。実行することができるもう１つの初期化の例が、リソース・ファイルの順序付きリストの生成である。受信されたリソース・ファイルに、定義されるレイアウトに従って表示されるべき特定のテキスト・ストリングが含まれる場合がある。一実装形態では、リソース・ファイルのリストは、領域構成ファイルで指定されるデータ・タイプの順序に基づいて順序付けられる。ストリング値が要求される時に、逆の順序でリソース・ファイルを検索して、最後に受信されたデータが最初に検索されるようにする。（これによって、構成定義でより後に指定されたデータ・タイプに、構成定義のより前にリストされたデータ・タイプに関連付けられたデータをオーバーライドするデータが含まれるようにすることができる。）
【０１２３】
例示的なクライアント・オブジェクト状態遷移
図１２に、クライアント・オブジェクト８２４の状態１００２の間の遷移を示す。データ構成モジュール８２２が初期化されると、クライアント・オブジェクト８２４は、タスク追加状態１２０２に入る。クライアント・オブジェクト８２４が、タスク追加状態１２０２である間に、他のソフトウェア・アプリケーションまたはコンポーネントによって、タスク追加ＡＰＩ（下で図１３を参照して詳細に説明する）を呼び出して、カスタマイズされたタスク・オブジェクト８２６を生成することができる。クライアント・オブジェクト８２４がタスク追加状態１２０２である間に生成されるタスクを、ユーザ・タスクと称する。ユーザ・タスクは、通常は、ＥＧＰアプリケーション８１８などのアプリケーションによって生成され、アプリケーションの生成に特に適用される受信されたデータをどのように処理するかを指定する。広告データが、通常はユーザ・タスクによって処理できるデータ・タイプのもう１つの例である。
【０１２４】
ユーザ・タスクを追加した後に、クライアント・オブジェクト８２４は、領域構成ファイル獲得状態１２０４に入る。この状態である間に、以下で図１４を参照して詳細に説明するように、適切な放送領域構成ファイルが獲得され、１つの構成が選択される。
【０１２５】
領域構成ファイルを獲得し、１つの構成を選択した後に、クライアント・オブジェクト８２４は、メイン状態１２０６に入り、新しい領域識別子がクライアント・デバイス１１０に割り当てられるか、新しい領域構成ファイルが検出されるまで、メイン状態１２０６に留まる。メイン状態１２０６にいる間に、クライアント・オブジェクト８２４は、以下で図１６から図１９を参照して詳細に説明するように、タスク・オブジェクト８２６を管理する。
【０１２６】
例示的なクライアント・オブジェクトのタスク追加ＡＰＩファンクション
図１３に、ＡＰＩ呼出しに応答してクライアント・オブジェクト８２４によって実行され、新しいタスク・オブジェクト８２６を生成することができる例示的なタスク追加メソッド１０２２を示す。
【０１２７】
本明細書に記載の実装形態では、タスク追加メソッド１０２２に渡すことができる引数に、下記が含まれる。
・  データ・タイプ
・  同期化すべきファイル
・  再検査間隔
・  ハンドラ・ファンクション
・  ハンドラ・ファンクション引数
・  データ・サイズ限界
・  デフォルト・パス内フラグ
・  サブ・ディレクトリ・フラグ
・  ファイル・フラグ
【０１２８】
「データ・タイプ」の値は、タスクが関連付けられているデータ・タイプを示す。この値は、領域構成ファイル内に存在する可能性があるタグの名前エントリに対応する。
【０１２９】
「同期化すべきファイル」の値は、定義されたタスク・オブジェクトを使用して選択的に受信されるべき、指定されたデータ・タイプに関連付けられたファイルの組を指定する。一実装形態では、ワイルド・カード値（たとえば、「＊」）を使用して、指定されたデータ・タイプに関連付けられたすべてのファイルが同期化されなければならないことを示すことができる。
【０１３０】
「再検査間隔」の値は、どれほど頻繁に変更についてデータを検査しなければならないかを指定する。一実装形態では、この引数は、各データ検査の間の秒数を指定する整数値である。負の値は、データを１回だけ検査することを示すのに使用でき、正の値は、データを再検査する前に、成功裡の同期化オペレーションの後に待たなければならない秒数を示すのに使用することができる。
【０１３１】
「ハンドラ・ファンクション」の値には、生成されるタスク・オブジェクトに関連付けられた別のファンクションへのポインタを格納する。例示的実装形態では、ハンドラ・ファンクションは、特殊なデータ処理が望まれる時に使用されるコール・バック・ファンクションである。たとえば、ハンドラ・ファンクションを、ＥＰＧデータの責任を負うタスク・オブジェクトに関連付けて実装することができる。このハンドラ・ファンクションは、ローカルＥＰＧデータが現在放送されているＥＰＧデータと同期化されていないことを見つけた時に、どのアクションを実行するかを制御する責任を負うことができる。期限切れのＥＰＧデータは、視聴者にとって無用なので、ハンドラ・ファンクションは、更新されたＥＰＧデータが成功裡に受信されたか否かに無関係に、期限切れのＥＰＧデータが削除されるようにすることができる。同様に、ハンドラ・ファンクションは、広告データについての責任を負うタスク・オブジェクトに関連付けて実装することができる。このシナリオでは、期限切れの広告は、まだ視聴者に関係する場合があるので、ハンドラ・ファンクションは、更新されたデータが成功裡に受信されるまで、期限切れの広告データを維持されるようにすることができる。
【０１３２】
「ハンドラ・ファンクション引数」は、指定されたハンドラ・ファンクションに渡される引数を格納する。
【０１３３】
「データ・サイズ限界」の値は、指定されたデータ・タイプのために保持される最大データ・サイズを指定する。この引数は、クライアント・デバイスのメモリ・リソースが、余分なデータで消費されないことを保証するのに使用することができる。
【０１３４】
「デフォルト・パス内フラグ」のプロパティは、指定されたデータ・タイプに関連付けられたデータを、デフォルト・パス内ファイル検索ファンクション１０２８へのＡＰＩ呼出しによって開始される検索に含められるべきか否かを示す。
【０１３５】
「サブ・ディレクトリ・フラグ」のプロパティは、指定されたデータ・タイプのデータがそこから放送される位置にサブ・ディレクトリが含まれることを示すのに使用される。
【０１３６】
「ファイル・フラグ」のプロパティは、指定されたデータ・タイプのデータがそこから放送される位置に、ファイルが含まれることを示すのに使用される。（サブディレクトリフラグプロパティおよびファイル・フラグ・プロパティは、相互に排他的である）。
【０１３７】
ブロック１３０２で、クライアント・オブジェクト８２４は、受信されたデータ・タイプ引数を、タスク・リスト１００４に現在あるタスク・オブジェクト８２６と比較して、指定されたデータ・タイプのタスク・オブジェクト８２６が既にあるかどうかを決定する。既存のタスク・オブジェクト８２６が指定されたデータ・タイプについて見つかる場合に（ブロック１３０２からの「Ｙｅｓ」分岐）、ブロック１３０４で、タスク追加１０２２がエラーを返す。そうでない場合には（ブロック１３０２からの「Ｎｏ」分岐）、タスク追加１０２２は、ブロック１３０６に続く。
【０１３８】
ブロック１３０６で、クライアント・オブジェクト８２４は、受信したパラメータに基づいて、新しいタスク・オブジェクト８２６を生成する。
【０１３９】
ブロック１３０８で、クライアント・オブジェクト８２４は、新しいタスク・オブジェクト８２６をタスク・リスト１００４に追加する。
【０１４０】
ブロック１３１０で、クライアント・オブジェクト８２４は、新しいタスク・オブジェクトの次アクティビティ・タイムのプロパティを現在時刻（カレント・タイム）にセットし、その結果、このタスクが、タスク・アイドル・タイマ１０１０が次にシグナリングする（信号送りする、合図する）時に、処理の候補になるようにする。
【０１４１】
例示的なクライアント・オブジェクトの領域構成ファイル獲得状態
図１４に、領域構成ファイル獲得状態１２０４の間に、クライアント・オブジェクト８２４によって実行される例示的な方法１４００を示す。
【０１４２】
ブロック１４０２で、クライアント・オブジェクト８２４は、クライアント・デバイス１１０に関連付けられた領域識別子に基づいて、領域構成ファイル名を生成する。たとえば、一実装形態では、クライアント・デバイスに関連付けられた領域識別子は、０と６５５３５の間の整数であり、領域構成ファイルは、「ｘｘｘｘ．ｒｇｎｃｆｇ」という名前をつけられる。ここで、この「ｘｘｘｘ」は、必要に応じて前に０を付加される、領域識別子の４バイト１６進数表現である。したがって、そのような実装形態では、クライアント・オブジェクト８２４は、クライアント・デバイスに関連付けられた領域識別子を、４桁の１６進数値に変換し、ストリング「．ｒｇｎｃｆｇ」を後に追加することによって、領域構成ファイル名を作成する。
【０１４３】
ブロック１４０４で、クライアント・オブジェクト８２４は、作成された領域構成ファイル名をパラメータとして渡して、ＢＣＦＳ８１５へのファイル同期化呼出しを発行する。
【０１４４】
ブロック１４０６で、クライアント・オブジェクト８２４は、要求された領域構成ファイルが受信されたか否かを決定する。領域構成ファイルが、受信されていない場合には（ブロック１４０６からの「Ｎｏ」分岐）、ブロック１４０４で、クライアント・オブジェクト８２４はファイル同期呼出しを再発行する。
【０１４５】
領域構成ファイルが成功裡に獲得された場合に（ブロック１４０６からの「Ｙｅｓ」分岐）、ブロック１４０８で、クライアント・オブジェクト８２４は、構成選択オペレーション１０１４（以下で図１５を参照して詳細に説明する）を実行することによって、受信された領域構成ファイルで指定される構成を選択する。
【０１４６】
ブロック１４１０で、クライアント・オブジェクト８２４は、クライアント・オブジェクトの領域アイドル・タイマ１０１２に、将来のタイム（たとえば、カレント・タイム（現在時刻）から１０分）をセットする。
【０１４７】
ブロック１４１２で、クライアント・オブジェクト８２４は、タスク・アイドル・タイマ１０１０をカレント・タイム（現在時刻）にセットし、その結果、タスク・リスト１００４の最初のタスクが、できる限り早く実行されるようになる。
【０１４８】
ブロック１４１４で、クライアント・オブジェクト８２４が、メイン状態１２０６に入る。メイン状態１２０６である間にクライアント・オブジェクト８２４によって実行されるオペレーションは、以下で図１６を参照して詳細に説明する。
【０１４９】
例示的なクライアント・オブジェクトの構成選択オペレーション
図１５に、クライアント・オブジェクト８２４によって実行することができる例示的な構成選択オペレーション１０１４を示す。構成選択１０１４は、領域構成ファイル獲得状態１２０４である間に、クライアント・オブジェクト８２４によって実行され、適当な領域構成ファイルが受信された後に、初期構成選択を行う。
【０１５０】
ブロック１５０２で、クライアント・オブジェクト８２４は、受信された領域構成ファイルに従って使用可能な構成のリストを識別する。
【０１５１】
ブロック１５０４で、クライアント・オブジェクト８２４は、前に視聴者が選択していた構成を示す構成値が、メモリに格納されているか否かを決定する。本明細書に記載の実装形態では、クライアント・デバイスの領域識別子および構成識別子が、視聴者が構成を選択すると、一緒に構成値として格納される。このような方法で、クライアント・オブジェクト８２４は、クライアント・デバイスに関連付けられた領域識別子が変更される場合、または前に選択されていた構成がもはや使用可能でない場合に、無効な構成に基づいてデータを選択的に受信することを試みない。メモリに格納された構成値がないと決定される場合に（ブロック１５０４からの「Ｎｏ」分岐）、構成選択１０１４は、ブロック１５１２に続く。そうでない場合に（ブロック１５０４からの「Ｙｅｓ」分岐）、構成選択１０１４は、ブロック１５０６に続く。
【０１５２】
ブロック１５０６では、クライアント・オブジェクト８２４は、格納された構成値の一部として格納された領域識別子が、現在クライアント・デバイスに関連付けられている領域識別子と一致するか否かを決定する。格納された領域識別子が、現在のクライアント・デバイスの領域識別子と一致しないと決定される場合に（ブロック１５０６からの「Ｎｏ」分岐）、構成選択１０１４は、ブロック１５１２に続く。そうでない場合に（ブロック１５０６からの「Ｙｅｓ」分岐）、構成選択１０１４は、ブロック１５０８に続く。
【０１５３】
ブロック１５０８で、クライアント・オブジェクト８２４は、格納された構成識別子が、受信された領域構成ファイルの構成識別子と一致するかどうかを決定する。格納された構成識別子が、使用可能な構成と一致しないと判定される場合に（ブロック１５０８からの「Ｎｏ」分岐）、構成選択１０１４は、以下で説明するブロック１５１２に続く。そうでない場合に（ブロック１５０８からの「Ｙｅｓ」分岐）、構成選択１０１４は、ブロック１５１０に続く。
【０１５４】
ブロック１５１０で、クライアント・オブジェクト８２４は、現在の構成として、格納された構成識別子と一致する、受信された領域構成ファイルの構成定義を選択する。
【０１５５】
ブロック１５１２では、有効な構成値が格納されていないと判定される場合に（ブロック１５０４、１５０６、または１５０８のいずれかからの「Ｎｏ」分岐）、クライアント・オブジェクト８２４は、現在の構成として、受信された領域構成ファイルの最初にリストされた構成を選択する。
【０１５６】
例示的なクライアント・オブジェクトのメイン状態
図１６から図１９に、メイン状態１２０６である間にクライアント・オブジェクト８２４によって実行される例示的な方法１６００を示す。
【０１５７】
ブロック１６０２で、現在選択されている構成に従ってタスク・リスト１００４を初期化するために、クライアント・オブジェクト８２４によってタスク・リスト準備オペレーション１０１６が実行される。例示的なタスク・リスト準備オペレーション１０１６を、以下で図２０を参照して詳細に説明する。
【０１５８】
ブロック１６０４で、クライアント・オブジェクト８２４は、タスク・アイドル・タイマ１０１０がシグナリングしたか否かを決定する。タスク・アイドル・タイマ１０１０がシグナリングした場合に（ブロック１６０４からの「Ｙｅｓ」分岐）、メイン状態の処理は、以下で図１７を参照して説明するステップ１６０６に続く。
【０１５９】
ブロック１６０８で、クライアント・オブジェクト８２４は、ＢＣＦＳ８１５から応答を受け取ったか否かを決定する。クライアント・オブジェクト８２４がＢＣＦＳ８１５から応答（レスポンス）を受け取った場合に（ブロック１６０８からの「Ｙｅｓ」分岐）、メイン状態の処理は、以下で図１８を参照して説明するステップ１６１０に続く。
【０１６０】
ブロック１６１２で、クライアント・オブジェクト８２４は、領域アイドル・タイマ１０１２がシグナリングしたか否かを決定する。領域アイドル・タイマ１０１２がシグナリングした場合に（ブロック１６１２からの「Ｙｅｓ」分岐）、メイン状態の処理は、下で図１９を参照して説明するステップ１６１４に続く。
【０１６１】
ブロック１６１６で、クライアント・オブジェクト８２４は、構成のユーザ選択１０２４へのＡＰＩ呼出しが受信されたか否かを判定する。構成のユーザ選択１０２４へのＡＰＩ呼出しが受信された場合に（ブロック１６１６からの「Ｙｅｓ」分岐）、メイン状態の処理は、ステップ１６１８に続く。
【０１６２】
メイン状態の処理は、上で説明した条件の１つが満たされるまで継続される。
【０１６３】
ブロック１６１８で、クライアント・オブジェクト８２４は、以下で図２１を参照して説明するように、構成のユーザ選択１０２４を実行する。
【０１６４】
ブロック１６２０で、クライアント・オブジェクト８２４は、メイン状態１２０６に、再び、入る。
【０１６５】
図１７に、メイン状態１２０６である間にタスク・アイドル・タイマ１０１０からのシグナルに応答してクライアント・オブジェクト８２４によって実行される例示的な方法１７００を示す。
【０１６６】
ブロック１７０２で、クライアント・オブジェクト８２４は、最初のタスク獲得オペレーション１０１８を実行して、次に呼び出されるタスク・オブジェクト８２６を決定する。例示的な最初のタスク取得オペレーション１０１８を、以下で図２２を参照して詳細に説明する。
【０１６７】
ブロック１７０４で、クライアント・オブジェクト８２４は、タスク・リスト１００４内の最初のタスク・オブジェクト８２６の次アクティビティ時刻プロパティを検査する。次アクティビティ時刻が、現在時刻と等しいかそれより前（過去）である場合に（ブロック１７０４からの「Ｎｏ」分岐）、ブロック１７０６で、クライアント・オブジェクト８２４によって、タスク・アイドル・タイマ１０１０がセットされて、タスク・リスト１００４内の最初のタスク・オブジェクトの次アクティビティ時刻プロパティと等しい時刻がシグナリングされる。メイン状態の処理は、ブロック１７１０に続く。
【０１６８】
ブロック１７０８で、クライアント・オブジェクト８２４は、タスク・リスト１００４の最初のタスク・オブジェクト８２６を呼出し、タスク・オブジェクトを実行させる。
【０１６９】
ブロック１７１０で、クライアント・オブジェクト８２４が、再び、メイン状態１２０６に入る。
【０１７０】
図１８に、メイン状態１２０６である間に、応答がＢＣＦＳ８１５から受信される時に、クライアント・オブジェクト８２４によって実行される例示的な方法１８００を示す。
【０１７１】
ブロック１８０２で、クライアント・オブジェクト８２４は、受信されたＢＣＦＳ応答を、タスク・リスト１００４の最初のタスク・オブジェクトに転送する。
【０１７２】
ブロック１８０４で、クライアント・オブジェクト８２４は、タスク・オブジェクトから応答を受信する。
【０１７３】
ブロック１８０６で、クライアント・オブジェクト８２４は、タスクが同期していることをタスク・オブジェクトからの応答が示しているかどうかを、決定する。タスクが同期している場合に（ブロック１８０６からの「Ｙｅｓ」分岐）、ブロック１８０８で、タスク・オブジェクト８２６は、タスク・リスト１００４の最後にプッシュされる。
【０１７４】
ブロック１８１０で、クライアント・オブジェクト８２４は、タスク・オブジェクトからの応答が、タスク・オペレーションが成功裡に実行されたことを示していかどうかを決定する。その応答が成功を示す場合に（ブロック１８１０からの「Ｙｅｓ」分岐）、ブロック１８１２で、クライアント・オブジェクト８２４は、タスク・アイドル・タイマ１０１０をカレント・タイムにセットする。
【０１７５】
そうではなく、その応答が失敗を示す場合に（ブロック１８１０からの「Ｎｏ」分岐）、ブロック１８１４で、クライアント・オブジェクト８２４は、タスク・アイドル・タイマ１０１０に、近い将来のタイム（たとえば、カレント・タイムから５秒）をセットする。
【０１７６】
ブロック１８１６で、クライアント・オブジェクト８２４が、再び、メイン状態１２０６に入る。
【０１７７】
図１９に、メイン状態１２０６である間に領域アイドル・タイマ１０１２からのシグナルに応答してクライアント・オブジェクト８２４によって実行される例示的な方法１９００を示す。
【０１７８】
ブロック１９０２で、クライアント・オブジェクト８２４は、現在の構成が選択された時以降にクライアント・デバイス領域識別子が変更されたか否かを決定する。一実装形態では、クライアント・オブジェクト８２４によって、現在のクライアント・デバイス領域識別子が、現在選択されている構成に関連付けられた格納された構成値の領域識別子部分と比較される。クライアント・デバイス領域識別子が変更されている場合に（ブロック１９０２からの「Ｙｅｓ」分岐）、メイン状態の処理は、ブロック１９１０に続く。
【０１７９】
ブロック１９０４で、クライアント・オブジェクト８２４は、現在の領域構成ファイルが、現在放送されつつある同一の名前の領域構成ファイルと同期化されているか否かを決定する。領域構成ファイルが同期化されていない場合に（ブロック１９０４からの「Ｎｏ」分岐）、メイン状態の処理は、ブロック１９１０で継続される。
【０１８０】
ブロック１９０６で、クライアント・オブジェクト８２４は、領域アイドル・タイマ１０１２を、将来のタイム（たとえば、カレント・タイムから１０分）と等しくなるようにセットする。
【０１８１】
ブロック１９０８で、クライアント・オブジェクト８２４は、再び、メイン状態１２０６に入る。
【０１８２】
クライアント・デバイス領域識別子の不一致（ブロック１９０２からの「Ｙｅｓ」分岐）または領域構成ファイルの不一致（ブロック１９０４からの「Ｎｏ」分岐）のいずれかが見つかった場合に、ブロック１９１０で、クライアント・オブジェクト８２４は、全無効化オペレーション１０２０を実行して、現在タスク・リスト１００４にあるタスク・オブジェクトが実行されないようにする。例示的な全無効化オペレーション１０２０を、以下で図２３を参照して詳細に説明する。
【０１８３】
ブロック１９１２で、クライアント・オブジェクト８２４は、領域構成ファイル獲得状態１２０４に入る。
【０１８４】
例示的なクライアント・オブジェクトのタスク・リスト準備オペレーション
図２０に、クライアント・オブジェクト８２４によって実行することができる例示的なタスク・リスト準備オペレーション１０１６を示す。タスク・リスト準備１０１６は、領域構成ファイル取得状態１２０４である間に、クライアント・オブジェクト８２４によって実行され、現在選択されている構成に基づいてタスク・リスト１００４を初期化する。
【０１８５】
ブロック２００２で、クライアント・オブジェクト８２４は、領域構成ファイルの現在選択されている構成に関連付けられた最初の非メタ・タグを識別する。
【０１８６】
ブロック２００４で、クライアント・オブジェクト８２４は、タスク・リスト１００４を検査して、ブロック２００２で識別された非メタタグによって示されるデータ・タイプに関連付けられたタスク・オブジェクト８２６が存在するか否かを判定する。一致するタスクがタスク・リスト１００４にない場合に（ブロック２００４からの「Ｎｏ」分岐）、タスク・リスト準備１０１６は、ブロック２００６に続く。そうではなく、一致するタスクがタスク・リスト１００４にある場合に（ブロック２００６からの「Ｙｅｓ」分岐）、タスク・リスト準備１０１６は、以下で説明するブロック２０１０に続く。
【０１８７】
ブロック２００６で、クライアント・オブジェクト８２４は、ブロック２００２で識別されたタグが、必須タグであるか否かを判定する。領域構成ファイルの例を参照して上で説明したように、データ・タグの最初のエントリは、そのタグがメタデータ（ｍｅｔａ）、必須データ（ｒｅｑ）または任意選択データ（ｏｐｔ）のどれを指定するかを示す。識別されたタグが、必須タグでないと決定される場合に（ブロック２００６からの「Ｎｏ」分岐）、クライアント・オブジェクト８２４は、動作を行わず、タスク・リスト準備１０１６は、以下で説明するブロック２０１２に続く。
【０１８８】
識別されたタグが必須タグと判定される（ブロック２００６からの「Ｙｅｓ」分岐）と、ブロック２００８で、クライアント・オブジェクト８２４は、非ユーザ・タスク・オブジェクト８２６を生成しそのタスクをタスク・リスト１００４の最後に追加する。非ユーザ・タスク・オブジェクトは、デフォルトのパラメータ・セットを用いてタスク追加ＡＰＩファンクション１０２２を呼び出すことによって生成することができる。代替実装形態では、タスク追加１０２２の入力パラメータを、たとえばタスク・オブジェクト８２６に関連付けられたタグの追加エントリとして、領域構成ファイルに含めることができる。タスク・リスト準備１０１６は、その後、以下で説明するブロック２０１２に続く。
【０１８９】
識別されたタグに一致するタスクが既にタスク・リスト１００４に存在すると判定されると、ブロック２０１０で、クライアント・オブジェクト８２４は、既存のタスク・オブジェクトをタスク・リスト１００４の終りにプッシュする。さらに、これが、タスク・リストの終りにプッシュされる最初のタスク・オブジェクトである場合には、クライアント・オブジェクト８２４は、タスク・リスト１００４の終りに最初にプッシュされるタスクとしてそのタスクにフラグを立てる。
【０１９０】
ブロック２０１２で、クライアント・オブジェクト８２４は、領域構成ファイルを検査して、選択された構成の定義に関連付けられた追加の非メタ・タグがあるか否かを決定する。追加の非メタタグがある場合に（ブロック２０１２からの「Ｙｅｓ」分岐）、タスク・リスト準備１０１６は、選択された構成に関連付けられた残りの非メタタグがなくなるまで、ブロック２００２から２０１２をループする。タスク・リスト準備１０１６は、その後、ブロック２０１４に続く。
【０１９１】
ブロック２０１４で、クライアント・オブジェクト８２４は、タスク・リスト１００４を検査して、（上でブロック２０１０に関して説明したように）リストの最初のタスクに、タスク・リストの終りに最初にプッシュされたタスクとしてフラグが立てられているか否かを決定する。タスク・リスト１００４の最初のタスクが、最初にプッシュされたタスクとしてフラグを立てられていると決定される場合に（ブロック２０１４からの「Ｙｅｓ」分岐）、クライアント・オブジェクト８２４は、これ以上の動作を行わず、タスク・リスト準備１０１６は終了する。他一方、タスク・リスト１００４の最初のタスクが、最初にプッシュされたタスクとしてフラグを立てられていない場合に（ブロック２０１４からの「Ｎｏ」分岐）、タスク・リスト準備１０１６は、ブロック２０１６に続く。
【０１９２】
ブロック２０１６で、クライアント・オブジェクト８２４によって、タスク・リスト１００４の最初のタスクを検査して、そのタスクがユーザ・タスクであるか否かを決定する（ユーザ・タスクとは、上で図１２に関して説明したように、クライアント・オブジェクト８２４がタスク追加状態１２０２である間に生成されるタスク・オブジェクトである）。タスク・リスト１００４の最初のタスクがユーザ・タスクである場合に（ブロック２０１６からの「Ｙｅｓ」分岐）、タスク・リスト準備１０１６は、ブロック２０１８に続く。そうでない場合に（ブロック２０１６からの「Ｎｏ」分岐）、タスク・リスト準備１０１６は、ブロック２０２０に続く。
【０１９３】
ブロック２０１８で、クライアント・オブジェクト８２４は、タスク・リスト１００４の最初のタスクを棚上げする。タスクは、棚上げされると、タスク・リストに残るが、そのタスクが実行されないことを保証する最も遠い将来を表す日付および時刻にセットされた次アクティビティ時刻プロパティを有する。タスクの棚上げの例示的な方法を、以下で図３５を参照して詳細に説明する。
【０１９４】
ブロック２０２０で、クライアント・オブジェクト８２４は、タスク・リスト１００４の最初のタスクを削除する。
【０１９５】
その後、タスク・リスト準備１０１６は、ブロック２０１４にループバックし、タスク・リスト１００４の最初のタスクが、タスク・リスト１００４の終りにプッシュされた最初のタスクとしてブロック２０１０でフラグを立てられたタスクになるまで、ブロック２０１４からブロック２０２０までが繰り返される。
【０１９６】
例示的なクライアント・オブジェクトの構成選択ＡＰＩファンクション
図２１に、ＡＰＩ呼出しに応答してクライアント・オブジェクト８２４によって実行することができる例示的な構成のユーザ選択方法１０２４を示す。構成のユーザ選択１０２４は、ユーザ・インターフェース８２０などのユーザインターフェースコンポーネントを介して視聴者が呼び出すことができる。ユーザ・インターフェース８２０は、現在選択されている構成が強調（ハイライト）表示された状態で（または他の形で表されて）、使用可能な構成のリストが視聴者から使用可能にする。視聴者が、（現在選択されている構成以外の）構成を選択すると、構成のユーザ選択１０２４が呼び出される。
【０１９７】
ブロック２１０２で、クライアント・オブジェクト８２４は、必要とされるアプリケーション特定のシャットダウン・プロシージャ（any application-specific shutdown procedures）を実行して、クライアント・デバイスをどのデータ・ファイルに依存しないセーフ（安全）モードにする。たとえば、クライアント・デバイスを、視聴者が放送番組を見続けることができるが、ペイパービュー購入、チャネル・ロック、構成選択などのオペレーションの実行に必要なデータなどの、追加の放送データのどれにもアクセスすることを許可されない、特殊な状態にすることができる。
【０１９８】
ブロック２１０４で、クライアント・オブジェクト８２４は、クライアント・オブジェクト内の前に選択されていた構成に関連付けられた構成識別子を格納する。たとえば、クライアント・オブジェクト８２４は、現在の構成識別子を保持するローカル変数をセットする。この値は、不必要なタスク・オブジェクトをすべてクリアするために、新しい構成を前の構成と比較するのに使用される。
【０１９９】
ブロック２１０６で、クライアント・オブジェクト８２４は、タスク・リスト１００４のタスクのそれぞれについて、チェック／無効化オペレーション１１１２を呼び出す。チェック／無効化１１１２は、新たに選択された構成に関連付けられていないデータを解放するのに使用される。例示的なチェック／無効化のタスク・オペレーション１１１２を、以下で図３６を参照して詳細に説明する。
【０２００】
ブロック２１０８で、クライアント・オブジェクト８２４は、タスク・リスト準備１０１６（上で図２０に関して説明した）を実行して、新たに選択された構成に対応するようにタスク・リスト１００４を初期化する。
【０２０１】
ブロック２１１０で、クライアント・オブジェクト８２４は、現在のクライアント・デバイス領域識別子および現在選択されている構成識別子を、不揮発性メモリ８１２内に構成値として格納する。上で説明したように、現在の領域識別子および現在選択されている構成識別子を格納することは、クライアント・デバイス１１０が、スタートアップ時に、最後に選択された構成を再ロードすることを可能とする。しかし、クライアント・デバイス領域識別子が変更されたか、あるいは前に選択されていた構成がもはや使用可能でない場合には、クライアント・デバイス１１０は、前に選択されていた構成の再ロードを試みることを防止しる。
【０２０２】
例示的なクライアント・オブジェクトの最初のタスク獲得オペレーション
図２２に、クライアント・オブジェクト８２４によって実行できる例示的な最初のタスク獲得オペレーション１０１８を示す。最初のタスク獲得１０１８は、クライアント・オブジェクト８２４によって実行され、次のタスクを実行する時であることをタスク・アイドル・タイマ１０１０がシグナリングする時に、どのタスクを実行するかを決定する。
【０２０３】
ブロック２２０２で、クライアント・オブジェクト８２４は、タスク・リスト１００４の最初のタスクを識別する。
【０２０４】
ブロック２２０４で、クライアント・オブジェクト８２４は、タスク・リスト１００４の最初のタスクの次アクティビティ時刻プロパティを、現在時間と比較する。次のアクティビティ・タイムのプロパティが、現在時刻と等しいかそれより前（過去）である場合に（ブロック２２０４からの「Ｙｅｓ」分岐）、最初のタスク獲得１０１８が終了する。そうでない場合に（ブロック２２０４からの「Ｎｏ」分岐）、最初のタスク獲得１０１８は、ブロック２２０６に続く。
【０２０５】
ブロック２２０６で、クライアント・オブジェクト８２４は、現在のタスク・オブジェクトに関連付けられたタスク識別子および次アクティビティ時刻を格納し、そのタスクを、最も早い次アクティビティ時刻を有するタスクとして識別する。
【０２０６】
ブロック２２０８で、クライアント・オブジェクト８２４は、タスク・リスト１００４内にまだタスクがあるか否かを判定する。タスク・リスト１００４にまだタスクがある場合に（ブロック２２０８からの「Ｙｅｓ」分岐）、最初のタスク獲得１０１８は、ブロック２２１２に続く。そうでない場合に（ブロック２２０８からの「Ｎｏ」分岐）、ブロック２２１０で、最初のタスク獲得１０１８は、格納されたタスク識別子に関連付けられたタスク・オブジェクト８２６を、タスク・リスト１００４内の最初の位置に移動し、その後、終了する。
【０２０７】
ブロック２２１２で、クライアント・オブジェクト８２４は、タスク・リスト１００４の次のタスクを識別する。
【０２０８】
ブロック２２１４で、クライアント・オブジェクト８２４は、タスクの次アクティビティ時刻プロパティを、カレント・タイム（現在時刻）と比較する。次アクティビティ時刻プロパティが、現在時刻と等しいかそれより前（過去）である場合に（ブロック２２１４からの「Ｙｅｓ」分岐）、最初のタスク獲得１０１８は、ブロック２２１６に続く。そうでない場合に（ブロック２２１４からの「Ｎｏ」分岐）、最初のタスク獲得１０１８は、ブロック２２１８に続く。
【０２０９】
ブロック２２１６で、クライアント・オブジェクト８２４は、現在のタスク・オブジェクト８２６を、タスク・リスト１００４の最初の位置に移動し、終了する。
【０２１０】
ブロック２２１８で、クライアント・オブジェクト８２４は、現在選択されているタスクの次アクティビティ時刻プロパティを、ブロック２２０６に関して説明したように格納された次アクティビティ時刻プロパティと比較する。現在のタスクの次アクティビティ時刻が、格納された次アクティビティ時刻の前である場合に（ブロック２２１８からの「Ｙｅｓ」分岐）、最初のタスク取得１０１８は、ブロック２２０６にループバックする。そうでない場合に（ブロック２２１８からの「Ｎｏ」分岐）、最初のタスク取得１０１８は、上で説明したように、ブロック２２０８にループバックする。
【０２１１】
例示的なクライアント・オブジェクトの全無効化オペレーション
図２３に、クライアント・オブジェクト８２４によって実行することができる例示的な全無効化オペレーション１０２０を示す。全無効化１０２０は、領域識別子が変更された（たとえば、新しい領域識別子をヘッドエンドから受け取った）ことを検出したこと、または現在の領域構成ファイルが変更されたことを検出したことのいずれかに起因して、クライアント・オブジェクト８２４がメイン状態１２０６から出る時に実行される。全無効化１０２０は、タスク・リスト１００４内の各タスクを無効化し、クライアント・オブジェクト８２４を、領域構成ファイル獲得状態１２０４に置く。
【０２１２】
ブロック２３０２で、クライアント・オブジェクト８２４は、必要である可能性があるアプリケーション特定のシャットダウン・プロシージャを実行し、クライアント・デバイスを安全モードにする。たとえば、クライアント・デバイスを、視聴者が放送番組を見続けることができるが、ペイパービュー購入、チャネル・ロック、構成選択などのオペレーションの実行に必要なデータなどの、追加の放送データのどれにもアクセスすることを許可されない、特殊な状態にすることができる。
【０２１３】
ブロック２３０４で、クライアント・オブジェクト８２４は、タスク・リスト１００４の各タスクに関連付けられたリセット・ファンクションを呼び出す。たとえば、クライアント・オブジェクト８２４は、タスク・リスト１００４を通してループし、タスク・リスト１００４のタスク・オブジェクトごとにタスク・オブジェクト・リセット・オペレーション１１０８を呼び出す。例示的なタスク・オブジェクト・リセットオペレーション１１０８を、以下で図３４を参照して詳細に説明する。
【０２１４】
ブロック２３０６で、クライアント・オブジェクト８２４は、その現在の状態が領域構成ファイル獲得状態１２０４であるかどうかを決定する。現在の状態が領域構成ファイル獲得状態である場合に（ブロック２３０６からの「Ｙｅｓ」分岐）、全無効化１０２０は、ブロック２３０８に続く。そうでない場合に（ブロック２３０６からの「Ｎｏ」分岐）、全無効化１０２０は、ブロック２３１２に続く。
【０２１５】
ブロック２３０８で、クライアント・オブジェクト８２４は、未解決のＢＣＦＳ要求のすべてを取り消す。
【０２１６】
ブロック２３１０で、クライアント・オブジェクト８２４は、現在の領域構成ファイルを解放する。本明細書に記載の実装形態では、受信された放送データは、クライアント・オブジェクト８２４によってＲＡＭ内で維持される。代替実装形態では、受信された放送データは、ハード・ドライブまたは他のメモリ・デバイスに格納することができる。実装形態に応じて、クライアント・オブジェクト８２４は、領域構成ファイルが維持されるＲＡＭを解放することによって、ハード・ドライブに格納された領域構成ファイルを削除することによって、またはストレージスペースを使用可能にする他の方法によって、現在の領域構成ファイルを解放する。
【０２１７】
ブロック２３１２で、クライアント・オブジェクト８２４は、領域構成ファイル獲得状態１２０４に入る。
【０２１８】
例示的なタスク・オブジェクトの状態遷移
本明細書に記載の実装形態では、タスク・オブジェクト８２６は、生成される形に応じて、単一のディレクトリのコンテンツを監視する責任を負う場合があり、特定のディレクトリの下のすべてのサブ・ディレクトリのコンテンツを監視する責任を負う場合がある。ファイル・フラグのプロパティ・セットを有して生成されたタスク・オブジェクト８２６は、単一ディレクトリのコンテンツを監視する責任を負い、サブ・ディレクトリ・フラグのプロパティ・セットを有して生成されたタスク・オブジェクト８２６は、特定のディレクトリの下のすべてのサブ・ディレクトリのコンテンツを監視する責任を負う。本明細書に記載の実装形態では、１レベルのサブ・ディレクトリだけがサポートされるが、追加のサブ・ディレクトリ・レベルのサポートも、同様に実装できることを認識されたい。
【０２１９】
タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から２タイプのメッセージを受け取ることができる。第１のタイプは、タスク・アイドル・タイマ１０１０がシグナリングしたことを示し、タスク・オブジェクト８２６が、そのタスク・オブジェクトの現在の状態に基づいて次に実行する適切なＢＣＦＳコマンドを決定することを引き起こす。受け取ることができる第２のタイプのメッセージは、ＢＣＦＳ８１５からの応答である。
【０２２０】
ファイルに関する責任を負うタスク・オブジェクトの状態遷移
図２４に、単一ディレクトリのコンテンツを監視する（ファイル・フラグのプロパティによって示される）、生成されたタスク・オブジェクト８２６の状態１１０４の間の遷移を示す。タスク・オブジェクト８２６が生成される（たとえば、タスク追加１０２２へのＡＰＩ呼出しを介して）と、またはリセットされた（例示的なタスクリセットオペレーション１１０８を、下で図３４に関して詳細に説明する）ばかりの時に、タスク・オブジェクト８２６は新しい状態２４０２に入る。タスク・オブジェクト８２６は、新しい状態２４０２である間に、タスク・オブジェクトが処理されるべき（または実行される）ことのシグナルを受け取ると、同期化状態２４０４に入る。タスク・オブジェクト８２６の新しい状態の処理を、以下で図２５を参照して詳細に説明する。
【０２２１】
同期化状態（syncing state）２４０４である間に、タスク・オブジェクト８２６は、タスク・オブジェクト８２６に関連付けられたローカルに維持されるデータを、放送されている同一データ・タイプのデータと同期化することを試みる。タスク・オブジェクト８２６は、データが成功裡に同期化されるまで（その時点で、タスク・オブジェクト８２６は、同期状態２４０６に入る）、または、たとえば視聴者が新しい構成を選択する時などの、タスク・オブジェクトが無効化される時点まで（その時点で、タスク・オブジェクト８２６は、新しい状態２４０２に入る）、同期化状態２４０４に留まる。タスク・オブジェクト８２６の同期化状態の処理を、以下で図２６を参照して詳細に説明する。
【０２２２】
同期状態（synced state）２４０６である間に、タスク・オブジェクト８２６は、同期化されたデータが同期化されたままであることを検証する。タスク・オブジェクト８２６は、データがもはや同期化されていないと決定すると、再び、同期化状態２４０４に入る。タスク・オブジェクト８２６が、たとえば視聴者が新しい構成を選択した時など、無効化される場合に、タスク・オブジェクト８２６は、再び、新しい状態２４０２に入る。タスク・オブジェクト８２６の同期状態の処理を、以下で図２７を参照して詳細に説明する。
【０２２３】
図２５に、新しい状態２４０２である間にタスク・オブジェクト８２６によって実行される例示的な方法２５００を示す。
【０２２４】
ブロック２５０２で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号を受信するのを待つ。
【０２２５】
ブロック２５０４で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号を受信する。
【０２２６】
ブロック２５０６で、タスク・オブジェクト８２６は、（現在のタスク・オブジェクト８２６に関連付けられた構成定義内のタグのタグ値によって示される）タスクのデータ・タイプに関連付けられたディレクトリを指定して、ＢＣＦＳ８１５へのディレクトリ・シーク呼出しを発行する。
【０２２７】
ブロック２５０８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答が受け取られるのを待つ。
【０２２８】
ブロック２５１０で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５から応答を受信する。
【０２２９】
ブロック２５１２で、タスク・オブジェクト８２６は、ＢＣＦＳディレクトリ・シーク呼出しが成功であったかどうかを（受け取った応答に基づいて）決定する。
【０２３０】
ＢＣＦＳディレクトリ・シーク呼出しが成功であった場合に（ブロック２５１２からの「Ｙｅｓ」分岐）、タスク・オブジェクトの新しい状態の処理は、ブロック２５１４に続く。他方、ＢＣＦＳディレクトリ・シーク呼出しが失敗した場合に（ブロック２５１２からの「Ｎｏ」分岐）、タスク・オブジェクトの新しい状態の処理は、ブロック２５１６に続く。
【０２３１】
ブロック２５１４で、タスク・オブジェクト８２６は、受け取ったＢＣＦＳ応答を検査して、指定されたタイプの放送データが、タスク・オブジェクト８２６に関連付けられたデータ・サイズ限界プロパティ値を超えたかどうかを決定する。
【０２３２】
データ・サイズ限界を超える場合に（ブロック２５１４からの「Ｙｅｓ」分岐）、タスク・オブジェクトの新しい状態の処理は、ブロック２５１６に続く。他方、データ・サイズ限界を超えない場合、またはデータ・サイズ限界が指定されていない場合に（ブロック２５１４からの「Ｎｏ」分岐）、ブロック２５１８で、タスク・オブジェクト８２６は、同期化状態２４０４に入る。
【０２３３】
ブロック２５１６で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを、将来の時刻（たとえば現在時刻から５分）にセットし、タスク・オブジェクト８２６は新しい状態２４０２に留まり、ブロック２５０２に処理が継続される。
【０２３４】
図２６に、同期化状態２４０４である間に、タスク・オブジェクト８２６によって実行される例示的な方法２６００を示す。
【０２３５】
ブロック２６０２で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号が受信されるのを待つ。
【０２３６】
ブロック２６０４で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号を受信する。
【０２３７】
ブロック２６０６で、タスク・オブジェクト８２６は、（現在のタスク・オブジェクト８２６に関連付けられた構成定義のタグのタグ値によって示される）タスクのデータ・タイプに関連付けられたディレクトリを指定して、ＢＣＦＳ８１５へのディレクトリ同期化呼出しを発行する。
【０２３８】
ブロック２６０８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答が受信されるのを待つ。
【０２３９】
ブロック２６１０で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答を受信する。
【０２４０】
ブロック２６１２で、タスク・オブジェクト８２６は、ＢＣＦＳディレクトリ同期化呼出しが成功であったかどうかを（受け取った応答に基づいて）決定する。
【０２４１】
ＢＣＦＳディレクトリ同期化呼出しが成功であった場合に（ブロック２６１２からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期化状態の処理は、ブロック２６１４に続く。他方、ＢＣＦＳディレクトリ同期化呼出しが失敗であった場合に（ブロック２６１２からの「Ｎｏ」分岐）、タスク・オブジェクトの同期化状態の処理は、ブロック２６１８に続く。
【０２４２】
ブロック２６１４で、タスク・オブジェクト８２６は、受け取ったＢＣＦＳ応答を検査して、指定されたタイプの放送データが、タスク・オブジェクト８２６に関連付けられたデータ・サイズ限界プロパティ値を超えたかどうかを決定する。
【０２４３】
データ・サイズ限界を超える場合に（ブロック２６１４からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期化状態の処理は、ブロック２６１６に続く。他方、データ・サイズ限界を超えない場合、またはデータ・サイズ限界が指定されていない場合に（ブロック２６１４からの「Ｎｏ」分岐）、タスク・オブジェクトの同期化状態のオペレーションは、以下で説明するブロック２６２０に続く。
【０２４４】
ブロック２６１６で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを、将来の時刻（たとえば、現在時刻から５分）にセットする。
【０２４５】
ブロック２６１８で、タスク・オブジェクト８２６は、現在のタスク・オブジェクトに関連して受信されたデータのすべてを（メモリの削除または解放によって）解放し、タスク・オブジェクト８２６は、同期化状態２４０４に留まり、ブロック２６０２にループバックする。
【０２４６】
ブロック２６２０で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを、現在時刻に再検査間隔プロパティの値を足した値にセットする。
【０２４７】
ブロック２６２２で、タスク・オブジェクト８２６は、ハンドラ・ファンクションが（タスク・オブジェクト８２６のタスク・ハンドラ・ファンクションプロパティによって示される）そのタスク・オブジェクトに関連付けられているかどうかを決定する。ハンドラ・ファンクションが指定されている場合には、ブロック２６２６で、そのハンドラ・ファンクションが呼び出される。
【０２４８】
ブロック２６２４で、タスク・オブジェクト８２６は、同期状態２４０６に入る。
【０２４９】
図２７ａおよび２７ｂに、同期状態２４０６である間にタスク・オブジェクト８２６によって実行される例示的な方法２７００を示す。
【０２５０】
ブロック２７０２で、タスク・オブジェクト８２６は、タスク・オブジェクトに関連付けられた構成定義内のタグからのタグ値の名前を、タスク・オブジェクトの最後に同期化されたデータ・セット・プロパティにセットする。このタグ値は、受信されたデータがそこから放送された位置を示す。この値は、タスク・オブジェクトが同期化される時に格納され、クライアント・オブジェクト８２４が、新しい構成が選択される際に、再同期化が必要なタスク・オブジェクトを決定できるようにする。
【０２５１】
ブロック２７０４で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号が受信されるのを待つ。
【０２５２】
ブロック２７０６で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号を受信する。
【０２５３】
ブロック２７０８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５にディレクトリ・シーク呼出しを発行して、タスク・オブジェクト８２６に関連付けられたローカルに維持されるデータが、放送されているデータと、依然として同期化されているか否かを決定する。
【０２５４】
ブロック２７１０で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答が受信されるのを待つ。
【０２５５】
ブロック２７１２で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答を受信する。
【０２５６】
ブロック２７１４で、タスク・オブジェクト８２６は、ＢＣＦＳディレクトリ・シーク呼出しが成功であったかどうかを（受け取った応答に基づいて）決定する。
【０２５７】
ＢＣＳＦディレクトリ・シーク呼出しが成功であった場合に（ブロック２７１４からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期状態の処理は、ブロック２７１６に続く。他方、ＢＣＳＦディレクトリ・シーク呼出しが失敗であった場合に（ブロック２７１４からの「Ｎｏ」分岐）、タスク・オブジェクトの同期状態の処理は、ブロック２７２０に続く。
【０２５８】
ブロック２７１６で、タスク・オブジェクト８２６は、受け取ったＢＣＦＳ応答を検査して、指定されたディレクトリが依然として同期化されているかどうかを決定する。データが同期化されている場合に（ブロック２７１６からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期状態の処理は、ブロック２７２０に続く。そうでない場合に（ブロック２７１６からの「Ｎｏ」分岐）、タスク・オブジェクトの同期状態の処理は、ブロック２７１８に続く。
【０２５９】
ブロック２７１８で、タスク・オブジェクト８２６は、受け取ったＢＣＦＳ応答を検査して、指定されたタイプの放送データが、タスク・オブジェクト８２６に関連付けられたータ・サイズ限界プロパティ値を超えたかどうかを決定する。
【０２６０】
データ・サイズ限界を超える場合に（ブロック２７１８からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期状態の処理は、ブロック２７２０に続く。他方、データ・サイズ限界を超えない場合、またはデータ・サイズ限界が指定されていない場合に（ブロック２７１８からの「Ｎｏ」分岐）、タスク・オブジェクトの同期状態の処理は、以下で説明するブロック２７２２に続く。
【０２６１】
ブロック２７２０で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを、現在時刻に再検査間隔プロパティの値を足した値にセットし、タスク・オブジェクト８２６は、同期状態２４０６に留まり、ブロック２７０４にループバックする。
【０２６２】
ブロック２７２２で、タスク・オブジェクト８２６は、ハンドラ・ファンクションが（タスク・オブジェクト８２６のタスクハンドラ・ファンクションプロパティによって示される）そのタスク・オブジェクトに関連付けられているかどうかを決定する。ハンドラ・ファンクションが指定されていない場合には、ブロック２７２４で、タスク・オブジェクト８２６は、同期化状態２４０４に入る。他方、ハンドラ・ファンクションが指定されている場合には、ブロック２７２６で、そのハンドラ・ファンクションを呼び出して、いつ同期化が行われるかを判定し、処理は、図２７ｂに示されたブロック２７２８に続く。
【０２６３】
ブロック２７２８で、タスク・オブジェクト８２６は、ハンドラ・ファンクションからの応答に基づいて、同期化を即座に実行しなければならないかどうかを決定される。そうである場合には、ブロック２７３０で、タスク・オブジェクト８２６は、同期化状態２４０４に入る。
【０２６４】
そうでない場合には、ブロック２７３２で、タスク・オブジェクト８２６は、ハンドラ・ファンクションからの応答に基づいて、同期化を短い時間のうちに実行しなければならないかどうかを決定する。そうである場合には、ブロック２７３４で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを近い将来の時刻（たとえば、現在時刻から５秒）にセットし、タスク・オブジェクトの同期状態の処理は、ブロック２７０２（図２７ａに図示）に続く。
【０２６５】
ハンドラ・ファンクションからの応答によって、同期化を後に行うことが示される場合に（ブロック２７３２からの「Ｎｏ」分岐）、ブロック２７３６で、タスク・オブジェクト８２６はて、次アクティビティ時刻プロパティを、現在時刻に再検査間隔プロパティの値を足した値にセットする。タスク・オブジェクトの同期状態の処理は、ブロック２７０２（図２７ａに図示）に続く。
【０２６６】
サブ・ディレクトリの責任を負うタスク・オブジェクトの状態遷移
図２８に、特定のディレクトリの下のすべてのサブ・ディレクトリのコンテンツを監視する、生成された（サブ・ディレクトリ・フラグ・プロパティによって示される）タスク・オブジェクト８２６の状態１１０４の間の遷移を示す。図２８に示された状態遷移は、タスク・オブジェクト８２６が、複数のサブ・ディレクトリのデータを同期化する責任を負うので、図２４に示された状態遷移より複雑である。この場合に、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティおよびディレクトリ・カウント・プロパティを使用する。上で説明したように、ディレクトリ・インデックス・プロパティは、どのサブ・ディレクトリが現在操作されているかを示す整数を格納する。ディレクトリ・カウント・プロパティは、タスク・オブジェクト８２６によって現在同期化されているディレクトリの数を示す整数を格納する。
【０２６７】
タスク・オブジェクト８２６が生成される（たとえば、タスク追加１０２２へのＡＰＩ呼出しを介して）時、またはリセットされた（例示的なタスクリセットオペレーション１１０８を、以下で図３４を参照して詳細に説明する）ばかりの時に、タスク・オブジェクト８２６は、新しい状態２８０２に入る。タスク・オブジェクト８２６は、新しい状態２８０２である間にそれが処理される（または実行される）ことのシグナルを受け取る時に、有効化状態（validating state）２８０４に入る。このコンテキストでのタスク・オブジェクト８２６新しい状態の処理を、以下で図２９を参照して詳細に説明する。タスク・オブジェクト８２６は、タスク・オブジェクトが無効化される（視聴者が、タスク・オブジェクト８２６が関連しない新しい構成を選択する時など）場合に、他の状態から新しい状態２８０２に再入する。
【０２６８】
有効化状態２８０４は、タスク・オブジェクト８２６によって、タスク・オブジェクト８２６に関連付けられた各サブ・ディレクトリの同期化を制御するのに使用される。タスク・オブジェクト８２６有効化状態の処理を、下で図３０を参照して詳細に説明する。タスク・オブジェクト８２６は、有効化状態２８０４である間に、特定のサブ・ディレクトリが同期化されていないと判定した時に、同期化状態２８０８に入る。タスク・オブジェクト８２６は、有効化状態２８０４である間に、そのタスクに関連付けられたサブ・ディレクトリのすべてが同期化されていると判定した時に、同期状態２８０６に入る。
【０２６９】
同期化状態２８０８である間に、タスク・オブジェクト８２６は、タスク・オブジェクト８２６に関連付けられた特定のサブ・ディレクトリからのローカルに維持されるデータを、放送されているデータと同期化することを試みる。このコンテキストでのタスク・オブジェクト８２６の同期化状態の処理を、下で図３１に関して詳細に説明する。サブ・ディレクトリが成功裡に同期化された時に、タスク・オブジェクトは、有効化状態２８０４に戻る。
【０２７０】
タスク・オブジェクト８２６に関連付けられたすべてのサブ・ディレクトリが同期化された後に、タスク・オブジェクト８２６は、処理のシグナルがクライアント・オブジェクト８２４から受信されるまで、同期状態２８０６に留まる。同期状態２８０６である間に処理される時には、タスク・オブジェクト８２６は、タスク・オブジェクト８２６に関連付けられた放送されているサブ・ディレクトリを決定し、その後、タスク・オブジェクト８２６は、同期状態前の有効化状態２８１０に移る。このコンテキストでのタスク・オブジェクト８２６の同期状態の処理を、以下で図３２を参照して詳細に説明する。
【０２７１】
同期状態前の有効化状態２８１０である間に、タスク・オブジェクト８２６によって、タスク・オブジェクト８２６に関連付けられた各サブ・ディレクトリの、前に同期化されたデータが、依然として同期化されていることが検証される。タスク・オブジェクト８２６は、データがもはや同期化されていないと判定すると、再び、同期化状態２８０８に入る。タスク・オブジェクト８２６の同期状態前の有効化状態の処理を、以下で図３３を参照して詳細に説明する。
【０２７２】
図２９に、新しい状態２８０２である間にタスク・オブジェクト８２６によって実行される例示的な方法２９００を示す。
【０２７３】
ブロック２９０２で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号が受信されるのを待つ。
【０２７４】
ブロック２９０４で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号を受信する。
【０２７５】
ブロック２９０６で、タスク・オブジェクト８２６は、（タスク・オブジェクト８２６のデータ・タイプに関連付けられた現在選択されている構成定義のタグのタグ値によって与えられる）タスクに関連付けられた最上位ディレクトリを指定して、ＢＣＦＳ８１５にディレクトリ・シーク呼出しを発行する。
【０２７６】
ブロック２９０８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答が受信されるのを待つ。
【０２７７】
ブロック２９１０で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答を受信する。
【０２７８】
ブロック２９１２で、タスク・オブジェクト８２６は、ＢＣＦＳディレクトリ・シーク呼出しが成功であったかどうかを（受け取った応答に基づいて）決定する。
【０２７９】
ＢＣＦＳディレクトリ・シーク呼出しが成功であった場合に（ブロック２９１２からの「Ｙｅｓ」分岐）、タスク・オブジェクトの新しい状態の処理は、ブロック２９１６に続く。他方、ＢＣＦＳディレクトリ・シーク呼出しが失敗であった場合に（ブロック２９１２からの「Ｎｏ」分岐）、タスク・オブジェクトの新しい状態の処理は、ブロック２９１４に続く。
【０２８０】
ブロック２９１４で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを将来の時刻（たとえば現在時刻から５分）にセットし、タスク・オブジェクト８２６は、新しい状態２８０２に留まり、処理はブロック２９０２に続く。
【０２８１】
ＢＣＦＳディレクトリ・シーク呼出しが成功であった場合に（ブロック２９１２からの「Ｙｅｓ」分岐）、ＢＣＦＳ８１５は、指定された最上位ディレクトリに関連付けられたサブ・ディレクトリのリストと、サブ・ディレクトリのカウントを返す。
【０２８２】
ブロック２９１６で、タスク・オブジェクト８２６は、サブ・ディレクトリの返されたリストを格納する。一実装形態では、そのリストは、アルファベット順で格納され（、あるいはアルファベット順で後に処理され）る。
【０２８３】
ブロック２９１８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５によって返されたサブ・ディレクトリのカウントを格納する。
【０２８４】
ブロック２９２０で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティの値を０にセットする。
【０２８５】
ブロック２９２２で、タスク・オブジェクト８２６は、ディレクトリ・カウント・プロパティの値を−１にセットする。
【０２８６】
ブロック２９２４で、タスク・オブジェクト８２６は、有効化状態２８０４に入る。
【０２８７】
図３０に、有効化状態２８０４である間にタスク・オブジェクト８２６によって実行される例示的な方法３０００を示す。
【０２８８】
ブロック３００２で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号が受信されるのを待つ。
【０２８９】
ブロック３００４で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号を受信する。
【０２９０】
ブロック３００６で、タスク・オブジェクト８２６は、タスク・オブジェクト８２６が新しい状態２８０２である間に見つかったサブ・ディレクトリについてＢＣＦＳ８１５にディレクトリ・シーク呼出しを発行する。ディレクトリ・インデックス・プロパティは、サブ・ディレクトリの格納されたリストからサブ・ディレクトリを選択するのに使用される。
【０２９１】
ブロック３００８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答が受信されるのを待つ。
【０２９２】
ブロック３０１０で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答を受信する。
【０２９３】
ブロック３０１２で、タスク・オブジェクト８２６は、ＢＣＦＳディレクトリ・シーク呼出しが成功であったかどうかを（受け取った応答に基づいて）決定する。
【０２９４】
ＢＣＦＳディレクトリ・シーク呼出しが成功であった場合に（ブロック３０１２からの「Ｙｅｓ」分岐）、タスク・オブジェクトの有効化状態の処理は、ブロック３０１４に続く。他方、ＢＣＦＳディレクトリ・シーク呼出しが失敗であった場合に（ブロック３０１２からの「Ｎｏ」分岐）、タスク・オブジェクトの有効化処理は、ブロック３０１６に続く。
【０２９５】
ブロック３０１４で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを将来の時刻（たとえば現在時刻から５分）にセットし、タスク・オブジェクト８２６は、有効化状態２８０４に留まり、処理はブロック３００２に続く。
【０２９６】
ブロック３０１６で、タスク・オブジェクト８２６は、受信されたＢＣＦＳ応答を検査して、指定されたサブ・ディレクトリが同期化されているかどうかを決定する。ＢＣＦＳ８１５からの応答により、現在のサブ・ディレクトリが同期化されていないことが示される場合に（ブロック３０１６からの「Ｎｏ」分岐）、ブロック３０１８で、タスク・オブジェクト８２６は、同期化状態２８０８に入る。そうでない場合に（ブロック３０１６からの「Ｙｅｓ」分岐）、タスク・オブジェクトの有効化状態の処理は、ブロック３０２０に続く。
【０２９７】
ブロック３０２０で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティを１つ増分する（インクリメントする）。
【０２９８】
ブロック３０２２で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティの値を、ＢＣＦＳ８１５によって前に返されたサブ・ディレクトリのカウントと比較する。値が等しい（すべてのサブ・ディレクトリが同期化されたことを示す）場合に、ブロック３０２４で、タスク・オブジェクト８２６は、同期状態２８０６に設定される。他方、値が等しくない（同期化されていないサブ・ディレクトリが少なくとも１つあることを示す）場合に、タスク・オブジェクトの有効化状態の処理は、ブロック３００２に続く。
【０２９９】
図３１に、同期化状態２８０８である間にタスク・オブジェクト８２６によって実行される例示的な方法３１００を示す。
【０３００】
ブロック３１０２で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号が受信されるのを待つ。
【０３０１】
ブロック３１０４で、タスク・オブジェクト８２６によって、クライアント・オブジェクト８２４から処理する信号を受信する。
【０３０２】
ブロック３１０６で、タスク・オブジェクト８２６は、現在のサブ・ディレクトリ（ディレクトリ・インデックス・プロパティによって決定される）を指定して、ＢＣＦＳ８１５にディレクトリ同期化呼出しを発行する。一実装形態では、いくつかのデータ（たとえば、ＥＰＧ検査結果を表示するページ）は、他のディレクトリ内の他のデータへのポインタを必要とする場合があるので、タスク・オブジェクト８２６は、ディレクトリ同期化呼出しが行われる時を制御するハンドラ・ファンクションを呼び出すことができる。
【０３０３】
ブロック３１０８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答が受信されるのを待つ。
【０３０４】
ブロック３１１０で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答を受信する。
【０３０５】
ブロック３１１２で、タスク・オブジェクト８２６は、ＢＣＦＳディレクトリ同期化呼出しが成功であったかどうかを（返された応答に基づいて）決定する。
【０３０６】
ＢＣＦＳディレクトリ同期化呼出しが成功であった場合に（ブロック３１１２からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期化状態の処理は、ブロック３１１６に続く。他方、ＢＣＦＳディレクトリ同期化呼出しが失敗であった場合に（ブロック３１１２からの「Ｎｏ」分岐）、タスク・オブジェクトの同期化状態の処理は、ブロック３１１４に続く。
【０３０７】
ブロック３１１４で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを将来の時刻（たとえば現在時刻から５分）にセットし、タスク・オブジェクト８２６は、同期化状態２８０８に留まり、処理はブロック３１０２に続く。
【０３０８】
ブロック３１１６で、タスク・オブジェクト８２６は、受け取ったＢＣＦＳ応答を検査して、同期化されたサブ・ディレクトリ内のデータが、タスク・オブジェクト８２６に関連付けられたデータ・サイズ限界を超えたかどうかを決定する。
【０３０９】
データ・サイズ限界を超えた場合に（ブロック３１１６からの「Ｙｅｓ」分岐）、ブロック３１１８で、タスク・オブジェクト８２６は、サブ・ディレクトリのリストの最後のサブ・ディレクトリに関連付けられたデータを解放され、ブロック３１１６に続く。
【０３１０】
ブロック３１２０で、タスク・オブジェクト８２６は、ハンドラ・ファンクションがタスク・オブジェクト８２６に関連付けられている（ハンドラ・ファンクション・プロパティによって示されるように）か否かを決定する。タスク・オブジェクト８２６が、関連付けられたハンドラ・ファンクションを有する場合に（ブロック３１２０からの「Ｙｅｓ」分岐）、ブロック３１２２で、タスク・オブジェクト８２６はそのハンドラ・ファンクションを呼び出す。
【０３１１】
ブロック３１２４で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティを１つ増分する。
【０３１２】
ブロック３１２６で、タスク・オブジェクト８２６は、ディレクトリ・カウント・プロパティを１つ増分する。
【０３１３】
ブロック３１２８で、タスク・オブジェクト８２６は、再び、有効化状態２８０４に入る。
【０３１４】
図３２に、同期状態２８０６である間にタスク・オブジェクト８２６によって実行される例示的な方法３２００を示す。
【０３１５】
ブロック３２０２で、タスク・オブジェクト８２６は、タスク・オブジェクトに関連付けられた構成定義内のタグからのタグ値の名前を、タスク・オブジェクトの最後に同期化されたデータ・セット・プロパティにセットする。このタグ値は、受信されたデータがそこから放送された最上位ディレクトリを示す。この値は、クライアント・オブジェクト８２４が、新しい構成が選択される時に再同期化が必要なタスク・オブジェクトを判定できるようにするために、タスク・オブジェクトが同期化される時に格納される。
【０３１６】
ブロック３２０４で、タスク・オブジェクト８２６は、処理のシグナルがクライアント・オブジェクト８２４から受信されるかどうかを判定する。処理する信号が受信されるまで、タスク・オブジェクト８２６は、ブロック３２０４でのループを継続する。
【０３１７】
ブロック３２０６で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティを０にセットする。
【０３１８】
ブロック３２０８で、タスク・オブジェクト８２６は、同期状態前の有効化状態２８１０に入る。
【０３１９】
図３３ａおよび３３ｂに、同期状態前の有効化状態２８１０である間にタスク・オブジェクト８２６によって実行される例示的な方法３３００を示す。
【０３２０】
ブロック３３０２で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号が受信されるのを待つ。
【０３２１】
ブロック３３０４で、タスク・オブジェクト８２６は、クライアント・オブジェクト８２４から処理する信号を受信する。
【０３２２】
ブロック３３０６で、タスク・オブジェクト８２６は、タスク・オブジェクト８２６が新しい状態２８０２であった間に見つかったサブ・ディレクトリについて、ＢＣＦＳ８１５にディレクトリ・シーク呼出しを発行する。ディレクトリ・インデックス・プロパティが、サブ・ディレクトリの格納されたリストからサブ・ディレクトリを選択するのに使用される。
【０３２３】
ブロック３３０８で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答が受信されるのを待つ。
【０３２４】
ブロック３３１０で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５からの応答を受信する。
【０３２５】
ブロック３３１２で、タスク・オブジェクト８２６は、ＢＣＦディレクトリ・シーク呼出しが成功であったかどうかを（受け取った応答に基づいて）決定する。
【０３２６】
ＢＣＦＳディレクトリ・シーク呼出しが成功であった場合に（ブロック３３１２からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期状態前の有効化状態の処理は、ブロック３３１６に続くる。他方、ＢＣＦＳディレクトリ・シーク呼出しが失敗であった場合に（ブロック３３１２からの「Ｎｏ」分岐）、タスク・オブジェクトの同期状態前の有効化状態の処理は、ブロック３３１４に続く。
【０３２７】
ブロック３３１４で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティに将来の時刻（たとえば現在時刻から５分）をセットし、タスク・オブジェクト８２６は、同期状態前の有効化状態２８１０に留まり、処理はブロック３３０２に続く。
【０３２８】
ブロック３３１６で、タスク・オブジェクト８２６は、受信されたＢＣＦＳ応答を検査して、指定されたサブ・ディレクトリが同期化されているかどうかを決定する。ＢＣＦＳ８１５からの応答によって、現在のサブ・ディレクトリが同期化されていないことが示される場合に（ブロック３３１６からの「Ｎｏ」分岐）、タスク・オブジェクトの同期状態前の有効化状態の処理は、ブロック３３２４で継続される。そうでない場合に（ブロック３３１６からの「Ｙｅｓ」分岐）、タスク・オブジェクトの同期状態前の有効化状態の処理は、ブロック３３１８に続く。
【０３２９】
ブロック３３１８で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティを１つ増分する。
【０３３０】
ブロック３３２０で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティの値を、ＢＣＦＳ８１５によって前に返されたサブ・ディレクトリのカウントと比較する。値が等しい（すべてのサブ・ディレクトリが同期化されたことを示す）場合に、ブロック３３２２で、タスク・オブジェクト８２６は、同期状態２８０６に設定する。他方、値が等しくない（同期化されていないサブ・ディレクトリが少なくとも１つあることを示す）場合に、タスク・オブジェクトの同期状態前の有効化状態の処理は、ブロック３３０２に続く。
【０３３１】
ブロック３３１６で、指定されたサブ・ディレクトリが同期化されていないと判定される場合に、ブロック３３２４で、タスク・オブジェクト８２６は、ハンドラ・ファンクションがタスク・オブジェクト８２６に関連付けられているか否かを（ハンドラ・ファンクション・プロパティに基づいて）決定する。関連付けられたハンドラ・ファンクションがないと決定される場合には、ブロック３３２６で、タスク・オブジェクト８２６は、同期化状態２８０８に入る。そうでない場合には、タスク・オブジェクトの同期状態前の有効化状態の処理は、ブロック３３２８に続く。
【０３３２】
ブロック３３２８で、タスク・オブジェクト８２６は、関連付けられたハンドラ・ファンクションを呼び出して、サブ・ディレクトリを同期化する時を決定し、処理は、図３３ｂに示されたブロック３３３０に続く。
【０３３３】
ブロック３３３０で、タスク・オブジェクト８２６は、ハンドラ・ファンクションからの応答に基づいて、サブ・ディレクトリを即座に同期化しなければならないかどうかを判定する。そうである場合には、ブロック３３３２で、タスク・オブジェクト８２６は、同期化状態２８０８に入る。
【０３３４】
そうでない場合に、ブロック３３３４で、タスク・オブジェクト８２６は、ハンドラ・ファンクションからの応答に基づいて、サブ・ディレクトリを短い時間のうちに同期化しなければならないかどうかを判定する。そうである場合には、ブロック３３３６で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを近い将来の時刻（たとえば、現在時刻プラス５秒）にセットし、タスク・オブジェクトの同期状態前の有効化状態の処理は、図３３ａに示されたブロック３３０２に続く。
【０３３５】
ハンドラ・ファンクションからの応答によって、サブ・ディレクトリが後に同期化されることが示される場合に（ブロック３３３４からの「Ｎｏ」分岐）、ブロック３３３８で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを、現在時刻に再検査間隔プロパティの値を足した値にセットする。タスク・オブジェクトの同期状態前の有効化状態の処理は、図３３ａに示されたブロック３３０２に続く。
【０３３６】
例示的なタスク・オブジェクトのリセット・オペレーション
図３４に、タスク・オブジェクト８２６に関連付けられた例示的なリセット・オペレーション１１０８を示す。リセット・オペレーション１１０８は、タスク・オブジェクト８２６の状態が変更され、そのタスクに関するデータ獲得が、始めから再開される時に実行される。
【０３３７】
ブロック３４０２で、タスク・オブジェクト８２６は、ＢＣＦＳ８１５に対する未解決の要求をすべて取り消す。
【０３３８】
ブロック３４０４で、タスク・オブジェクト８２６は、クライアント・デバイス１１０で格納され、タスク・オブジェクト８２６のデータ・タイプに関連付けられている、すべてのデータ・ファイルを削除する。
【０３３９】
ブロック３４０６で、タスク・オブジェクト８２６は、ディレクトリ・カウント・プロパティに−１をセットし、試みられているディレクトリ同期化がないことを示す。
【０３４０】
ブロック３４０８で、タスク・オブジェクト８２６は、ディレクトリ・インデックス・プロパティを０にセットする。
【０３４１】
ブロック３４１０で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティをカレントのタイム（現在時刻）にセットし、このタスクが近い将来に実行されることを保証する。
【０３４２】
ブロック３４１２で、タスク・オブジェクト８２６は、新しい状態２４０２（または新しい状態２８０２）に入る。
【０３４３】
ブロック３４１４で、タスク・オブジェクト８２６は、このタスクに関連付けられたデータが、デフォルト・パスにあるか否かが（デフォルト・パス内フラグに基づいて）判定される。タスクに関連付けられたデータがデフォルト・パス内にない場合に（ブロック３４１４からの「Ｎｏ」分岐）、リセット・オペレーション１１０８は終了する。そうでない場合に（ブロック３４１４からの「Ｙｅｓ」分岐）、リセット・オペレーション１１０８は、ブロック３４１６に続く。
【０３４４】
ブロック３４１６で、タスク・オブジェクト８２６は、使用可能なディレクトリのリストを更新するために、デフォルト・ディレクトリ・リスト保守オペレーション１１１４を実行する。
【０３４５】
例示的なタスク・オブジェクトの棚上げオペレーション
図３５に、タスク・オブジェクト８２６に関連付けられた例示的な棚上げオペレーション１１１０を示す。棚上げオペレーション１１１０は、タスク・オブジェクト８２６がユーザによって生成されたが、現在選択されている構成によって使用されない時に実行される。
【０３４６】
ブロック３５０２で、タスク・オブジェクト８２６は、リセット・オペレーション１１０８（上で図３４に関して説明した）を実行する。
【０３４７】
ブロック３５０４で、タスク・オブジェクト８２６は、次アクティビティ時刻プロパティを、表現可能な最も遅い日付／時刻にセットする。これによって、タスクが、タスク・リスト１００４内に留まるが、次アクティビティ時刻プロパティが、絶対に別のタスクの次アクティビティ時刻プロパティより早くならないので、そのタスクが呼び出されないことを保証することができる。
【０３４８】
例示的なタスク・オブジェクトの無効検査オペレーション
図３６に、タスク・オブジェクト８２６に関連付けられた例示的なチェック／無効化オペレーション１１１２を示す。チェック／無効化オペレーション１１１２は、新たに選択された構成に関連付けられていないタスク・オブジェクトをクリアするために実行される。
【０３４９】
ブロック３６０２で、タスク・オブジェクト８２６は、その現在の状態を判定される。タスク・オブジェクト８２６が同期状態２４０６（または同期状態２８０６）である場合に（ブロック３６０２からの「Ｙｅｓ」分岐）、チェック／無効化１１１２は、ブロック３６０４に続く。そうでない場合に（ブロック３６０２からの「Ｎｏ」分岐）、チェック／無効化１１１２は、ブロック３６０６に続く。
【０３５０】
ブロック３６０４で、タスク・オブジェクト８２６は、最後に同期化されたデータ・セット・プロパティを検査する。タスク・オブジェクト８２６に現在関連付けられているデータ・タイプのソース位置（領域構成ファイル内の構成定義のタグ値によって示される）が、最後に同期化されたデータ・セット・プロパティと一致する場合に（ブロック３６０４からの「Ｙｅｓ」分岐）、オペレーションは行われず、チェック／無効化１１１２は終了する（この状況は、前に選択されていた構成に関してタスク・オブジェクト８２６に関連付けられたデータ・タイプのデータが、新たに選択された構成について同一であることを示す）。
【０３５１】
ブロック３６０６で、タスク・オブジェクト８２６は、リセット・オペレーション１１０８（上で図３４に関して説明した）を実行して、このタスクに関連付けられたすべてのデータをクリアする。
【０３５２】
例示的なクライアント・オブジェクトの特定ファイル検索ＡＰＩファンクション
図３７に、ＡＰＩ呼出しに応答してクライアント・オブジェクト８２４によって実行することができる例示的な特定ファイル検索ファンクション１０２６を示す。通常、特定ファイル検索１０２６は、視聴者に提示されるべきデータを検索するために、アプリケーション（ユーザ・インターフェースまたはＥＰＧアプリケーション）によって呼び出される。特定ファイル検索１０２６は、パラメータとしてフル・パス・ファイル名を受け取る。
【０３５３】
ブロック３７０２で、クライアント・オブジェクト８２４は、フル・パス・ファイル名を受信する。
【０３５４】
ブロック３７０４で、クライアント・オブジェクト８２４は、受け取ったパスを解析して、要求されたファイルのローカル・コピーを維持する責任を負うタスク・オブジェクト８２６を決定する。本明細書に記載の実装形態では、パスの最初の部分によってファイルに関連付けられたデータ・タイプが識別され、パスの第２の部分によって放送されるファイルのソース位置が識別され、パスの第３の部分によってファイル名が識別される。
【０３５５】
ブロック３７０６で、クライアント・オブジェクト８２４は、要求されたファイルの受信されたパスの第１部分および第２部分によって識別されるタスク・オブジェクトを検索する。
【０３５６】
ブロック３７０８で、クライアント・オブジェクト８２４は、ファイルが見つかったか否かを決定する。
【０３５７】
ファイルが見つけ出せなかった場合に（ブロック３７０８からの「Ｎｏ」分岐）、ブロック３７１０で、クライアント・オブジェクト８２４は、要求元アプリケーションに、ファイルの発見不能のエラーを返す。
【０３５８】
ファイルが見つけ出せた場合に（ブロック３７０８からの「Ｙｅｓ」分岐）、ブロック３７１２で、クライアント・オブジェクト８２４は、ファイルのサイズおよびファイルへのポインタを返す。
【０３５９】
例示的なクライアント・オブジェクトのデフォルト・パス内ファイル検索ＡＰＩファンクション
図３８に、ＡＰＩ呼出しに応答してクライアント・オブジェクト８２４によって実行することができる例示的なデフォルト・パス内ファイル検索ファンクション１０２８を示す。通常、デフォルト・パス内ファイル検索１０２８は、視聴者に提示されるデータを検索するために、アプリケーション（ユーザ・インターフェースまたはＥＰＧアプリケーション）によって呼び出される。デフォルト・パス内ファイル検索１０２８は、パラメータとしてファイル名をとる。
【０３６０】
ブロック３８０２で、クライアント・オブジェクト８２４は、ファイル名を受信する。
【０３６１】
ブロック３８０４で、クライアント・オブジェクト８２４によって、現在選択されている構成定義で最後にリストされるタグに関連付けられたタスク・オブジェクト８２６を識別する。
【０３６２】
ブロック３８０６で、クライアント・オブジェクト８２４は、識別されたタスク・オブジェクト８２６が（タスク・オブジェクトに関連付けられたデフォルト・パス内フラグによって示される）デフォルト・パス内にあるかどうかを決定する。識別されたタスク・オブジェクト８２６がデフォルト・パス内にない場合には、デフォルト・パス内ファイル検索１０２８は、ブロック３８１６に続く。
【０３６３】
ブロック３８０８で、クライアント・オブジェクト８２４は、識別されたタスク・オブジェクトに関連付けられたデータが同期化されているか否かを決定する。タスク・オブジェクトが、たとえば構成定義の一部として指定できるデータ・タイプ・グループ識別子に従って、グループ化される一実装形態では、識別されたタスク・オブジェクトに関連付けられたデータが同期化されているか否かの決定は、同一グループのタスク・オブジェクトに関連付けられたデータのすべてが同期化されているか否かの判定も含む。そのグループに関連付けられたタスク・オブジェクトのいずれかが同期化されていない場合には、現在のタスク・オブジェクトは、同期化されていないと決定される。この方法において、他のアプリケーション（ユーザ・インターフェースなど）は、グループのデータ・タイプに関連付けられたデータのすべてが成功裡に受信されるまで、その特定のデータ・タイプ・グループに関連付けられた受信データのすべてへのアクセスを与えない。識別されたタスク・オブジェクト８２６が同期化されていない場合には、デフォルト・パス内ファイル検索１０２８は、ブロック３８１６に続く。
【０３６４】
ブロック３８１０で、クライアント・オブジェクト８２４は、要求されたファイルの識別されたタスク・オブジェクト８２６によって維持されるデータを検索する。
【０３６５】
ブロック３８１２で、クライアント・オブジェクト８２４は、ファイルが見つかったか否かを決定する。
【０３６６】
ファイルが見つかった場合に（ブロック３８１２の「Ｙｅｓ」分岐）、ブロック３８１４で、クライアント・オブジェクト８２４は、ファイルのサイズおよびファイルへのポインタを返す。
【０３６７】
ファイルが見つからなかった場合に（ブロック３８１２の「Ｎｏ」分岐）、ブロック３８１６で、クライアント・オブジェクト８２４は、現在選択されている構成に関連付けられたタスク・オブジェクトのすべてが検査されたか否かを決定する。検索すべきタスク・オブジェクトがまだある場合に（ブロック３８１６の「Ｎｏ」分岐）、デフォルト・パス内ファイル検索１０２８は、ブロック３８２０に続く。
【０３６８】
検索すべきタスク・オブジェクトがもうない場合に（ブロック３８１６の「Ｙｅｓ」分岐）、ブロック３８１８で、クライアント・オブジェクト８２４は、ファイルの発見不能のメッセージを返す。
【０３６９】
ブロック３８２０で、クライアント・オブジェクト８２４は、現在選択されている構成定義でリストされるタグで、その前のタグに関連付けられたタスク・オブジェクト８２６を識別する。タスク・オブジェクトを逆の順序で検索して、オーバーライドされるデフォルト・データが見つかる前に、オーバーライド・データ（それがオーバーライドするデフォルト・データの後にダウンロードされる）が見つかることを保証する。
【０３７０】
結論
構造化された特徴および／または方法ステップに関する言語でシステムおよび方法を説明したが、請求項で定義される発明が、本明細書に記載の特定の特徴またはステップに必ずしも制限されないことを理解されたい。そうではなく、特定の特徴およびステップは、請求される発明の実装についての好ましい形として開示されたものである。
【図面の簡単な説明】
【０３７１】
【図１】複数のデータ構成を放送するために実装される例示的な放送テレビジョン・システムを示す図である。
【図２】図１の放送テレビジョン・システムで使用される例示的な放送データ・サーバの選択コンポーネントを示す図である。
【図３】図２の放送データ・サーバで使用される構成リポジトリの例示的構造を示す図である。
【図４】図３の構成リポジトリに格納される構成定義の例示的なデータ構造を示す図である。
【図５】図３の構成リポジトリに格納される領域定義の例示的なデータ構造を示す図である。
【図６】図３の構成リポジトリに格納されるデータに基づいて生成される領域構成ファイルの例示的な構造を示す図である。
【図７】複数のデータ構成の放送を可能にする例示的な方法を示す図である。
【図８】図１の放送テレビシステムで使用され、複数のデータ構成の任意の１つに従って放送データを選択的に受信するために実装される、例示的なクライアント・デバイスの選択コンポーネントを示す図である。
【図９】視聴者が複数のデータ構成の１つを選択できるようにする例示的な方法を示す図である。
【図１０】図８のクライアント・デバイス内で状態機械として実装される例示的なクライアント・オブジェクトの選択コンポーネントを示す図である。
【図１１】図８のクライアント・デバイス内で状態機械として実装される例示的なタスク・オブジェクトの選択コンポーネントを示す図である。
【図１２】図１０のクライアント・オブジェクトでの状態遷移を示す例示的なブロック図である。
【図１３】ＡＰＩ呼出しに応答して新しいタスク・オブジェクトを生成するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【図１４】領域構成ファイル獲得状態の間に図１０のクライアント・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図１５】構成を選択するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【図１６】メイン状態である間に図１０のクライアント・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図１７】メイン状態である間にタスク・アイドル・タイマ・シグナルに応答して図１０のクライアント・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図１８】メイン状態である間に１方向放送カルーセル・ファイル・システムから応答を受け取る時に図１０のクライアント・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図１９】メイン状態である間に領域アイドル・タイマ・シグナルに応答して図１０のクライアント・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図２０】タスク・リストを準備するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【図２１】ＡＰＩ呼出しに応答して構成を選択するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【図２２】最初に処理すべきタスク・オブジェクトを識別するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【図２３】タスク・リストのすべてのタスク・オブジェクトを無効化するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【図２４】図１１のタスク・オブジェクトの状態遷移を示す例示的なブロック図である。
【図２５】新しい状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図２６】同期化状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図２７ａ】同期状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図２７ｂ】ハンドラ・ファンクションが呼び出された後の同期状態の間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図２８】図１１のタスク・オブジェクトでの状態遷移を示す例示的な流れ図である。
【図２９】新しい状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図３０】有効化状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図３１】同期化状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図３２】同期状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図３３ａ】同期状態前の有効化状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図３３ｂ】ハンドラ・ファンクションが呼び出された後の同期状態前の有効化状態である間に図１１のタスク・オブジェクトによって実行されるオペレーションを示す例示的な処理流れ図である。
【図３４】図１１のタスク・オブジェクトの例示的なリセット方法を示す図である。
【図３５】図１１のタスク・オブジェクトの例示的な棚上げ方法を示す図である。
【図３６】図１１のタスク・オブジェクトの例示的な無効検査方法を示す図である。
【図３７】ＡＰＩ呼出しに応答して所与のパス内で指定されたファイルを検索するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【図３８】ＡＰＩ呼出しに応答してデフォルト・パス内で指定されたファイルを検索するために図１０のクライアント・オブジェクトによって実行することができる例示的な方法を示す図である。
【符号の説明】
【０３７２】
１００  放送テレビジョン・システム
１０２  コンテンツ・プロバイダ（複数）
１０４  データ・プロバイダ（複数）
１０６  放送データ・サーバ
１１６  データ・コレクタ
１１８  構成管理システム
１０８  ヘッドエンド
１２４  コンテンツ・カルーセル
１２２  放送送信機
１２０  データ・カルーセル
１１２  イン−バンド・ネットワーク
１１４  アウト−オブ−バンド・ネットワーク
１１０  クライアント装置
【図１】
2004215284.tif 000011
【図２】
2004215284.tif 000012
【図３】
2004215284.tif 000013
【図４】
2004215284.tif 000014
【図５】
2004215284.tif 000015
【図６】
2004215284.tif 000016
【図７】
2004215284.tif 000017
【図８】
2004215284.tif 000018
【図９】
2004215284.tif 000019
【図１０】
2004215284.tif 000020
【図１１】
2004215284.tif 000021
【図１２】
2004215284.tif 000022
【図１３】
2004215284.tif 000023
【図１４】
2004215284.tif 000024
【図１５】
2004215284.tif 000025
【図１６】
2004215284.tif 000026
【図１７】
2004215284.tif 000027
【図１８】
2004215284.tif 000028
【図１９】
2004215284.tif 000029
【図２０】
2004215284.tif 000030
【図２１】
2004215284.tif 000031
【図２２】
2004215284.tif 000032
【図２３】
2004215284.tif 000033
【図２４】
2004215284.tif 000034
【図２５】
2004215284.tif 000035
【図２６】
2004215284.tif 000036
【図２７ａ】
2004215284.tif 000037
【図２７ｂ】
2004215284.tif 000038
【図２８】
2004215284.tif 000039
【図２９】
2004215284.tif 000040
【図３０】
2004215284.tif 000041
【図３１】
2004215284.tif 000042
【図３２】
2004215284.tif 000043
【図３３ａ】
2004215284.tif 000044
【図３３ｂ】
2004215284.tif 000045
【図３４】
2004215284.tif 000046
【図３５】
2004215284.tif 000047
【図３６】
2004215284.tif 000048
【図３７】
2004215284.tif 000049
【図３８】
2004215284.tif 000050