(57)【要約】  コンテンツの種類のデータコンテナをコンテンツフィルタリングする方法は、符号化されたフィルタのセットと、各コンテンツの種類についての符号化されたルールのセットとを生成する段階に基づく。各符号化されたフィルタは、ユーザ定義演算子の各演算子、および、コンテンツ記述子と記述子の基準とを含む２つのオペランドと表される。フィルタはバイナリ状態を有し、ルールは１つのフィルタまたは複数の選択されたフィルタに基づく。方法を実装する装置は、ユーザ定義構成データを受信するためのユーザインターフェース、コンテンツの種類ごとに符号化されたフィルタのセットおよび符号化されたルールのセットを生成する構成モジュール、ネットワークからデータコンテナを受信し、フィルタリングされたデータコンテナを該ネットワークに送信するためのネットワークインターフェース、データコンテナにルールを適用するフィルタリングモジュールを有する。【選択図】図３２
2013536513.tif 000002
【特許請求の範囲】
【請求項１】
１セットのコンテンツの種類、１セットのコンテンツの記述子、１セットの記述子の基準、１セットの演算子、１セットのフィルタの定義、および１セットのルールの定義を受信するためのユーザインターフェースと、
第１のプロセッサに、前記フィルタの定義に基づいて、各符号化されたフィルタが演算子、コンテンツ記述子、および記述子の基準によって決定されるバイナリ状態を有する符号化されたフィルタを生成させ、前記ルールの定義に基づいて、各符号化されたルールが少なくとも１つのフィルタそれぞれのバイナリ状態に従って決定されるバイナリアウトカムを有している符号化されたルールを生成させるプロセッサ可読命令を格納する構成モジュールと、
前記符号化されたルール、前記符号化されたフィルタ、および記述子の定義を格納するルールメモリデバイスと、
ネットワークからデータストリームを受信するためのネットワークインターフェースと、
前記符号化されたルールを前記データストリームに適用するフィルタリングモジュールと
を備えるデータストリームフィルタリングを行うデバイス。
【請求項２】
各動作が、プロセッサに、データストリームのデータコンテナの対応する編集機能を実行させるプロセッサ可読命令として実装される１セットの動作を格納する動作メモリデバイスと、
第２のプロセッサに、前記データストリームからデータコンテナを抽出させ、各データコンテナをコンポーネントにパースさせ、各コンポーネントのコンテンツの種類を決定させ、前記コンテンツの種類に関連する特定の符号化されたフィルタと特定の符号化されたルールとを評価させ、前記特定の符号化されたルールの値に従って動作を行わせるプロセッサ可読命令を格納する命令メモリと
をさらに備える、請求項１に記載のデバイス。
【請求項３】
各動作記述が前記１セットの動作内の対応する動作の自然言語による記述を含む、１セットの動作記述を格納する記述メモリデバイスと、
前記第２のプロセッサに、前記記述メモリデバイスから前記各データコンテナに実行される各動作の記述を読み出させ、前記各データコンテナに前記各動作の前記記述を挿入させる、前記命令メモリに格納されたプロセッサ可読命令と
をさらに備える、請求項２に記載のデバイス。
【請求項４】
前記第１のプロセッサに、
（Ａ）各ルールツリー内の各ルールがバイナリアウトカムを有しており、２つの動作のうち１つが後続して、少なくとも１つのルールが少なくとも１つの後続ルールを有する少なくとも１つのルールツリー、および、
（Ｂ）１つのルール階層内のルールは互いに独立しており、ルート階層を超えるルール階層のルールは、前のルール階層のルールに依存している、階級的ルール階層
の一方で前記符号化されたルールを構成させる、前記構成モジュールのメモリデバイスに格納された命令をさらに備える、請求項１から３のいずれか一項に記載のデバイス。
【請求項５】
第１のプロセッサに、各フィルタがコンテンツの種類、コンテンツの記述子、記述子の基準、および演算子を特定する１セットのフィルタの定義をユーザに促させ、前記各フィルタを符号化して１セットの符号化されたフィルタを生成させ、前記ユーザに１セットのルールの定義を促させ、前記ルールを符号化して、１セットの符号化されたルールを生成させ、コンテンツの種類ごとに前記符号化されたルールを実行する順序を選択して１セットのコンテンツ固有の順序立てられたルールを生成するよう前記ユーザに促させる第１セットのプロセッサ可読命令を格納した第１の命令メモリデバイスと、
第２のプロセッサに、各データコンテナをコンポーネントにパースさせ、各コンポーネントのコンテンツの種類を決定させ、前記各コンポーネントに順序立てられたルールのセットをそれぞれ適用させる第２セットのプロセッサ可読命令を格納した第２の命令メモリデバイスと
をさらに備える、請求項１に記載のデバイス。
【請求項６】
前記第１のプロセッサに、少なくとも１つのルールツリーで前記１セットのコンテンツ固有の順序立てられたルールを構成させるプロセッサ可読命令を格納するメモリデバイスをさらに備え、
前記少なくとも１つのルールツリーの各ルールツリーは、それぞれＲ０からＲμ-１と称される、μ個のルール（μ＞１）と、動作Ａ１からＡ２μとして示される２×μ個の動作とを有し、
ルールＲｊ（０≦ｊ≦μ）は２つの状態０および１のいずれかの状態を取り、２つの動作Ａ２ｊ＋１およびＡ２ｊ＋２のうち１つの動作を生じさせ、
少なくとも１つのルールＲｊ（０≦ｊ＜（μ―１）／２）が、２つのルールＲ２ｊ＋１およびＲ２ｊ＋２のいずれかに進む、請求項５に記載のデバイス。
【請求項７】
前記第２セットのプロセッサ可読命令は、前記第２のプロセッサに、Ｒｊ（０≦ｊ＜μ）を評価させ、Ｒｊが０になる情報に呼応して動作Ａ２ｊ＋１を適用させ、Ｒｊが１になるという情報に呼応して動作Ａ２ｊ＋２を適用させる、請求項６に記載のデバイス。
【請求項８】
前記第１のプロセッサに、各ルールについて、前記１セットのルールのうちの２つの動作と２つの後続ルールとを特定して少なくとも１つのルールがヌルの後続ルールとするよう前記ユーザに促させ、前記１セットのルールを複数の階層にソートさせ、前記第１の命令メモリデバイスに格納されているプロセッサ可読命令をさらに備え、
１つの階層内のルールは互いに独立しており、第１の階層を越える階層のルールは、前の階層のいずれかが持つルールに依存している、請求項５から７のいずれか一項に記載のデバイス。
【請求項９】
前記第１のプロセッサに、前記１セットのコンテンツ記述子、前記１セットの基準、および、前記演算子を表示させて、前記１セットのフィルタの定義を促させ、前記１セットの符号化されたフィルタを表示させて、前記１セットのルールの定義を促させ、前記１セットの符号化されたルールを表示させて、前記符号化されたルールを実行する前記順序の選択を促させるプロセッサ可読命令を格納するメモリデバイスをさらに備える、請求項５から７のいずれか一項に記載のデバイス。
【請求項１０】
前記１セットのルールのうちの１つのルールは、単一のフィルタと、少なくとも２つのフィルタのブール関数とのうちのいずれかに従って定義される、請求項５から７のいずれか一項に記載のデバイス。
【請求項１１】
データコンテナをコンテンツフィルタリングする方法であって、
少なくとも１つのプロセッサと、プロセッサ実行可能命令を格納する少なくとも１つのメモリデバイスとを利用する段階を備え、
前記プロセッサ実行可能命令は、
コンテンツの種類の定義と、コンテンツの記述子と、記述子の基準と、フィルタと、ルールとをユーザから受信して、
前記コンテンツの種類ごとに、前記定義に基づいて、各符号化されたフィルタがバイナリ状態を有し、ユーザ指定演算子のうちそれぞれの演算子、および、コンテンツ記述子と記述子の基準とを含む２つのオペランドとして表される１セットの符号化されたフィルタと、各ルールが、選択されたフィルタのバイナリ状態のユーザ指定関数として表される１セットのルールとを生成して、
ネットワークから、それぞれ異なるコンテンツの種類のコンポーネントを有するデータコンテナを受信して、
各コンポーネントにそれぞれコンテンツの種類を決定して、
前記各コンポーネントに、それぞれの前記コンテンツの種類に関連するルールのセットを割り当てる、方法。
【請求項１２】
各動作が１セットのプロセッサ実行可能命令として提示される１セットの動作を受信する段階と、
前記１セットのルールのうちの個々のルールにより、前記１セットの動作内の動作の識別子を受信する段階と、
各動作の記述が、前記１セットの動作内の１つの動作に対応しており、当該動作の自然言語による記述を含む、１セットの動作の記述を受信する段階と、
前記１セットの動作の記述を、記述メモリデバイスに格納する段階と、
当該ルールのセットから選択されたルールの値を決定する段階と、
前記選択されたルールの値に対応する動作を実行する段階と、
前記記述メモリデバイスから前記動作の記述を読み出す段階と、
前記データコンテナに前記記述を挿入する段階と
をさらに備える、請求項１１に記載の方法。
【請求項１３】
前記コンテンツの種類についてユーザが定義した優先度を取得する段階と、
各コンテンツの種類の優先順位に従って前記コンポーネントをソートして、ソートされたコンポーネントを生成する段階と、
特定のコンテンツの種類の各コンポーネントについて、前記特定のコンテンツの種類に対応して選択されたルールのセットを利用しながら、ソートされた前記コンポーネントを順次フィルタリングする段階と
をさらに備える、請求項１１または１２に記載の方法。
【請求項１４】
前記各コンポーネントについて前記各ルールのセットを利用しながら、前記コンポーネントを同時にフィルタリングして、フィルタリングされたコンポーネントを生成する段階と、
フィルタリングされた前記コンポーネントを単一のデータストリームに合成する段階と
をさらに備える、請求項１１または１２に記載の方法。
【請求項１５】
選択された前記フィルタの全てのバイナリ状態について、前記ユーザ指定関数を予め計算して格納する段階をさらに備える、請求項１１または１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、それぞれ異なるコンテンツの種類の複数のコンポーネントのデータコンテナのコンテンツのフィルタリングに係り、特に、複数の相互に関連しあっているルールに基づいてコンテンツをフィルタリングするための方法および装置に係る。
【背景技術】
【０００２】
異なるコンテンツの種類のデータを含むデータストリームをトランスポートするネットワークでは、レシーバの機能、ダウンストリーム送信機能、その他の制約に合致した互換性を確保するためにコンテンツを修正することが必要かを判断するべく、データストリームを検査すると望ましい場合がある。コンテンツの修正は、データのトランスコードを利用して、符号化方法またはトランスレーティングを変更して、符号化レートを変更することで、ネットワークのスループットを高めようとする場合にも望ましい場合がある。これらコンテンツに対する検査および修正に加えて、コンテンツ管理フィーチャには、ほかにも、通信データを個々人に特化したものとすること、レシーバに対してデータコンテンツ、その他通信経路の条件等の有用な情報を提供することなどが含まれる。
【０００３】
コンテンツの種類には、ビデオ信号、音声信号、静止画、動画、または文字が含まれてよい。コンテンツの種類が異なると、利用可能な修正もそれに応じた基準に基いて異なる。さらに、１つのコンテンツの種類に行われる修正であっても複数の相互に関連しあった条件に基づいて行われる場合があり、これにより、コンテンツ管理プロセスが難しいものとなっている。したがって、コンテンツ管理を効率的に処理して、リアルタイムに（実質的に同時に）コンテンツを検査して、適宜コンテンツに修正を行うことのできる装置が望まれている。
【発明の概要】
【０００４】
マルチメディアサービスを提供するネットワーク内での、コンテンツフィルタリング機能を提供することが、本願発明の目的である。コンテンツ適合機能を持つコンテンツフィルタリング設備を組み込むことが、他の目的である。
【０００５】
本願発明の一態様では、データストリームフィルタリングを行うための装置が提供される。装置は、プロセッサ可読命令を格納するメモリデバイスとプロセッサとを備える。デバイスは、ユーザインターフェースと、構成モジュールと、ネットワークインターフェースと、フィルタリングモジュールとに組織化される。ユーザインターフェースは、ユーザから、１セットのコンテンツの記述子、１セットの記述子の基準、１セットの演算子、１セットのフィルタの定義、および１セットのルールの定義を受信する。
【０００６】
構成モジュールは、第１のプロセッサに、符号化されたフィルタと符号化されたルールとを生成させる命令を格納するメモリデバイスを含む。符号化されたフィルタは、フィルタの定義に基づいている。フィルタの定義は、演算子と２つのオペランドとを特定しており、このうち１つがコンテンツ記述子であり、他方が記述子の基準であるフィルタはバイナリ状態を有する。符号化されたルールは、ルールの定義に基づいている。ルールの定義は、選択されたフィルタのブール関数を特定している。各符号化されたルールは、各選択されたフィルタのバイナリ状態に従って決定されたバイナリアウトカムを有する。１つのルールは単一のフィルタとして定義されてよい。符号化されたルール、符号化されたフィルタ、および、記述子の定義は、フィルタリングモジュールがアクセスするメモリデバイスに格納される。
【０００７】
装置はさらに、各動作が、プロセッサに、データストリームのデータコンテナの対応する編集機能を実行させるプロセッサ可読命令として実装される１セットの動作を格納する動作メモリデバイスを含む。装置はさらに、各動作記述が１セットの動作内の対応する動作の自然言語による記述を含む、１セットの動作記述を格納する記述メモリデバイスも含む。
【０００８】
ネットワークインターフェースは、ネットワークからデータストリームを受信して、データストリームを、データストリームの修正を行うことができるフィルタリングモジュールに送り、データストリームをそれぞれの宛先へネットワーク経由で送信する。
【０００９】
フィルタリングモジュールは、第２のプロセッサに、データストリームからデータコンテナを抽出させ、各データコンテナをコンポーネントにパースさせる命令を格納する命令メモリを含む。各データコンテナの各コンポーネントについて、フィルタリングモジュールは、コンテンツの種類を決定して、関連する符号化されたルールと符号化されたフィルタとを選択する。フィルタリングモジュールは、コンテンツの各記述子の値を決定して、選択した符号化されたフィルタと選択した符号化されたルールとを評価して、選択した符号化されたルールの値に従って動作を実行する。命令メモリは、さらに、第２のプロセッサに、記述メモリデバイスからデータコンテナに実行する各動作の記述を読み出して、各動作の記述をデータコンテナに挿入させるさらなる命令を格納してよい。
【００１０】
ルールは相互に関連しあっていてよく、この場合には、構成モジュールは、フィルタリングモジュール内で適切な順序で順次評価を受けさせるために、符号化されたルールを並べてよい。ルールは、ルールツリーまたは階級的ルール階層に構成されてよい。
【００１１】
本発明の別の態様では、データコンテナのコンテンツフィルタリング装置が提供される。デバイスは、データメモリデバイスと命令メモリデバイスとを含む。第１のデータメモリは、コンテンツの種類のセット、コンテンツの記述子のセット、記述子の基準のセット、および、演算子のセットを含む構成データを格納する。第１の命令メモリは、第１のプロセッサに、フィルタのセット、ルールのセットの定義、および、ルールの適用順序の選択をユーザに促させるプロセッサ可読命令を格納する。各フィルタは、コンテンツの種類、コンテンツの記述子、記述子の基準、および演算子に従って定義されている。１つのルールは、２以上のフィルタのブール関数で表すこともできる。しかし、１つのルールが１つのフィルタに基づいていてもよい。
【００１２】
第２の命令メモリは、第２のプロセッサに、各データコンテナをコンポーネントにパースさせ、各コンポーネントのコンテンツの種類を決定させ、順序立てられたルールのセットを各コンポーネントに適用させるプロセッサ可読命令を格納する。
【００１３】
第１の命令メモリは、第１のプロセッサに、ルールを少なくとも１つのルールツリーに構成させるプロセッサ可読命令を格納してよく、ここで各ルールツリーにおけるルールの数と動作の数とはそれぞれであってよい。各ルールは、２つの状態「０」および「１」という２つの状態のうちいずれかの状態をとり、２つの動作のうち１つを生じさせる。少なくとも１つのルールは、２つの後続ルールのうち１つに進む。
【００１４】
第１の命令メモリは、第１のプロセッサに、各ルールについて２つの動作、および、各ルールに後続する２つの後続ルールの特定をユーザに促させるプロセッサ可読命令を格納してよく、ここで少なくとも１つのルールがヌルである後続ルールを有していてよい。命令はさらに、第１のプロセッサに、ルールのセットを複数の階層にソートさせて、１つの階層におけるルールが互いに独立したものであり、第１の階層を超える階層のルールが、前の階層のいずれかのルールに依存するようにする。
【００１５】
デバイスはさらに、第１のプロセッサに、１セットのコンテンツ記述子、１セットの基準、および、演算子を表示させて、１セットのフィルタの定義を促させ、１セットの符号化されたフィルタを表示させて、１セットのルールの定義を促させ、１セットの符号化されたルールを表示させて、符号化されたルールを実行する順序の選択を促させるプロセッサ可読命令を格納するメモリデバイスを有するユーザインターフェースを有する。
【００１６】
本発明のさらなる態様では、データコンテナをコンテンツフィルタリングする方法が提供される。方法は、少なくとも１つのプロセッサと、少なくとも１つのメモリデバイスとを利用する段階を備える。方法は、ユーザの入力を受信する段階と、コンテンツの種類ごとに、ユーザの入力に基づいて、符号化されたフィルタのセットと符号化されたルールのセットとを生成する段階とを備える。
【００１７】
ユーザの入力は、コンテンツの種類の定義、コンテンツの記述子、記述子の基準、演算子、フィルタ、およびルールを含む。各符号化されたフィルタは、ユーザ定義演算子のうちの各演算子、および、コンテンツ記述子および記述子の基準を含む２つのオペランドとして表される。フィルタはバイナリ状態を有する。１つのルールは、１つのフィルタに基づいていてもよいし、選択された複数のフィルタに基づいていてもよい。後者の場合には、１つのルールは、選択された複数のフィルタのバイナリ状態のユーザ指定関数として表される。
【００１８】
方法はさらに、コンポーネントごとに、各コンテンツの種類が決定されるような異なるコンテンツの種類のコンポーネントを有するデータコンテナをネットワークから受信する段階と、各コンポーネントに、各コンテンツの種類に関連する各ルールのセットを割り当てる段階とを含む。
【００１９】
方法はさらに、各動作が１セットのプロセッサ実行可能命令として提示される１セットの動作を受信する段階と、１セットのルールのうちの個々のルールにより、１セットの動作内の動作の識別子を受信する段階とを含む。
【００２０】
方法はさらに、各動作の記述が、１セットの動作内の１つの動作に対応しており、各動作の自然言語による記述を含む、１セットの動作の記述を受信する段階と、１セットの動作の記述を、記述メモリデバイスに格納する段階とを含む。
【００２１】
方法はさらに、ルールの値を決定する段階と、ルールの値に対応する動作を実行する段階と、記述メモリデバイスからコンポーネントに実行される動作の記述を読み出す段階と、オンポー念とに動作の記述を挿入する段階とを含む。
【００２２】
一実施形態では、方法は、コンテンツの種類についてユーザが定義した優先度を取得する段階と、各コンテンツの種類の優先順位に従ってデータコンテナのコンポーネントをソートして、ソートされたコンポーネントを生成する段階と、ソートされたコンポーネントを順次フィルタリングする段階とを備える。そのコンポーネントのコンテンツの種類について特に選択されたルールのセットが適用される。別の実施形態では、方法は、複数のコンポーネントを同時にフィルタリングする段階と、フィルタリングした複数のコンポーネントを１つのデータストリームに合成する段階とを含む。
【００２３】
本願発明の実施形態は、添付図面を参照して、実施例を使用して本願明細書で説明される。
【図面の簡単な説明】
【００２４】
【図１】図１は、本願発明の実施形態に従う、ネットワークを介して通信されるデータコンテナをフィルタリングおよび適合するサービス制御部および編集エンジンをサポートするネットワークを説明する。
【図２】図２は、本願発明の実施形態に従う、制御部およびトランスコーダを備える編集エンジンを説明する。
【図３】図３は、本願発明の実施形態に従う、マルチメディアコンテナ、コンテナコンポーネントのコンテンツ記述子、およびコンテンツフィルタの例示的構造を説明する。
【図４】図４は、本願発明の実施形態に従う、データコンテナに適用可能なルールのセットに関連付けられたブール演算式の代数形式を説明する。
【図５】図５は、本願発明の実施形態に従う、コンテンツフィルタリング処理の基本コンポーネントを説明する。
【図６】図６は、本願発明の実施形態に従う、コンテナのコンテンツ記述子の導出処理を説明する。
【図７】図７は、本願発明の実施形態に従う、コンテンツフィルタリングシステムを説明する。
【図８】図８は、本願発明の実施形態に従う、複数のコンポーネントを有するコンテナに適用される、図７のシステムに類似するシステムを説明する。
【図９】図９は、本願発明の実施形態に従う、コンテンツフィルタリング処理の詳細である。
【図１０】図１０は、本願発明の実施形態に従う、ルールのブール演算式を評価する方法を説明する。
【図１１】図１１は、本願発明の実施形態に従う、フィルタリングルールを符号化するための第１の例示的ルールツリー構造を説明する。
【図１２】図１２は、図１１のルールツリー構造の符号化するための第１データ構造を説明する。
【図１３】図１３は、本願発明の実施形態に従う、フィルタリングルールを符号化するための第２の例示的ルールツリー構造を説明する。
【図１４】図１４は、図１３の第２の例示的ルールツリーに適用される図１２の第１データ構造を説明する。
【図１５】図１５は、本願発明の実施形態に従う、図１２および図１４で例示された第１データ構造を適用する処理を説明する。
【図１６】図１６は、本願発明の実施形態に従う、ルールツリーを符号化する第２データ構造を説明する。
【図１７】図１７は、本願発明の実施形態に従う、図１６で例示された第２データ構造を適用する処理を説明する。
【図１８】図１８は、本願発明の実施形態に従う、ルールツリーを使用してルールの結果を決定する処理を説明する。
【図１９】図１９は、本願発明の実施形態に従う、図１８の処理に関連付けられるリーフベクトルを形成する段階の詳細である。
【図２０】図２０は、本願発明の実施形態に従う、高速実行時ルール実行のためのブール演算式の前処理方法を説明する。
【図２１】図２１は、図２０の方法の例示的実施を説明する。
【図２２】図２２は、本願発明の実施形態に従う、フィルタ定義およびルール定義に関するデータエントリの処理を説明する。
【図２３】図２３は、マルチメディアコンテナのコンポーネントの連続フィルタリング処理を説明する。
【図２４】図２４は、本願発明の実施形態に従う、複数のコンテンツフィルタリングルールを適用する処理を説明する。
【図２５】図２５は、本願発明の実施形態に従う、コンテンツフィルタリング動作を決定するルール間の依存関係を図示するグラフを説明する。
【図２６】図２６は、本願発明の実施形態に従う、図２のエンジンの動作管理部のモジュールを説明する。
【図２７】図２７は、本願発明の実施形態に従う、図２のエンジンのトランスコーダのモジュールを説明する。
【図２８】図２８は、本願発明の実施形態に従う、図２のエンジンのトランスコーダのモジュールを説明する。
【図２９】本発明の一実施形態において、各データコンテナがそれぞれ異なるコンテンツの種類のコンポーネントを含みうる、複数のデータコンテナとして構成されるデータストリームをフィルタリングする方法の概略図である。
【図３０】図２９の方法で利用されるフィルタ、ルール、および動作の相互関係を示す。
【図３１】本発明の一実施形態において図２９の方法を実装するデバイスを示す。
【図３２】図３１のデバイスの詳細図である。
【図３３】本発明の一実施形態において、符号化されたルールを予め定められた順序に生成するデバイスの一例を示す。
【図３４】本発明の一実施形態において、図３３のデバイスが生成した、符号化されたルールを利用してそれぞれ異なるコンテンツの種類の複数のコンポーネントであるデータコンテナを処理するデバイスの一例を示す。
【図３５】本発明の一実施形態において、図３３のデバイスが生成した、符号化されたルールを利用して１つのデータコンテナの複数のコンポーネントを並行処理するデバイスの一例を示す。
【図３６】図３５のデバイスの変形例を示す。
【図３７】本発明の一実施形態において、それぞれが、特定のコンテンツの種類のいずれかのコンポーネントを処理するよう構成されている４つのフィルタリングモジュールを利用する装置の一例を示す。
【図３８】本発明の一実施形態における、図３７の装置の制御システムを示す。
【図３９】本発明の一実施形態における、データコンテナのフィルタリング装置を示す。
【図４０】本発明の一実施形態において、ルールがバイナリアウトカムを有し、２つの動作のうち１つと２つの他の動作のうち１つとが続く完全なルールツリーの形態の図３３のデバイスが生成する符号化されたルールの構成を示しており、ここで各リーフルールは、連続するルールがなく、動作を必要としないヌルルールである。
【図４１】図４０のルールツリーを通る２つの経路を示す。
【図４２】図４０の完全なルールツリーから導出した、１つのルールの後に有効なルールとヌルのルールとが後続している不完全なルールツリーを示す。
【図４３】本発明の一実施形態において、ヌルのエントリを利用して不完全なルールツリーに適合させた、完全なルールツリーを表す標準的なデータ構造の一例を示す。
【図４４】本発明の一実施形態において、複数のルール階層の図３３の構成デバイスが生成する、符号化されたルールの構成を示しており、同じルール階層内のルールは互いに独立しており、第１のルール階層を超える階層のルールは、前のルール階層のルールに依存する。
【図４５】図４４の複数階層の構成の中間階層の第１のルールを示しており、第１のルールが２つの動作の１つに続き、２つの他のルールが後に続いており、最終階層の第２のルールは、２つの動作のうち１つに続いているが、後続するルールがない。
【図４６】本発明の一実施形態において、各ルールのレコードが、「偽」または「真」のバイナリアウトカムを有している現在のルールを示しているような複数のルールのレコードを有するユーザ指定のルールの継承テーブルの一例を示しており、動作および後続するルールは、複数のルール階層の図３３の構成デバイスが生成する符号化されたルールをソートするとき有用なように、各結果に対応している。
【図４７】図４６のルールの継承テーブルに対応するルールグラフを示す。
【図４８】本発明の一実施形態において、図４４に示す複数のルール階層の図３３の構成デバイスが生成する、符号化されたルールの一般的なソート方法を示すフローチャートである。
【図４９】本発明の一実施形態における、図４８の方法の実装例を示すフローチャートである。
【図５０】図４６のルールの継承テーブルの例について、図４９で図４８の方法を実装した一例を示す。
【図５１】図４６のルールの継承テーブルに類似したユーザ指定のルールの継承テーブルであるが、１つのルールのレコードの後続するルールがヌルのルールで置き換えられたテーブルを示す。
【図５２】図５１のルールの継承テーブルに図４９で図４８の方法を実装したときの一例を示す。
【図５３】図５１のルールの継承テーブルに従ってルールを処理する順序の一例を示す。
【図５４】図５１のルールの継承テーブルに従ってルールを処理する順序の別の一例を示す。
【発明を実施するための形態】
【００２５】
用語
マルチメディアサービス（MMS）：この用語は、口語的には、テキスト、オーディオ信号、ビデオ信号、画像、プレゼンテーション等のような異なる形式の情報コンテンツが、ネットワークを介して端末間で交換される、マルチメディアコンテンツ通信サービスをいう。１つの端末から他に送信される符号化済み情報は、通常は、異なる情報コンテンツに対応する、時間インターリーブされたセグメントを伴う単一のデータストリーム内に配置される。
【００２６】
コンテナ：コンテナは、コンピュータ可読媒体に格納されるとともに、コンピュータネットワーク上で送信されるコンピュータファイルである。コンテナは、様々なタイプのデータを含むように構成される。コンテナは、複数のテキスト、オーディオ、および様々なストリームの連携された再生を可能にする同期情報を伴うビデオストリームをサポートしてもよい。
【００２７】
コンテナコンポーネント：コンテナはセクションを備え、それぞれが、テキスト、オーディオデータ、画像データ、またはビデオデータのような特定の形式で符号化されたデータを有する。用語コンテナコンポーネントは、１セクション内のデータのことをいう。コンテナコンポーネントは、簡潔さを旨として「コンポーネント」といわれてもよい。マルチメディアメッセージングシステムにおいては、コンポーネントは、「メディア」としても知られる。
【００２８】
コンテナスクリーニング：「コンテナスクリーニング」は、全ての好ましくない挿入、特に有害な挿入がないことを確実にするために全てのコンポーネントを含むコンテナコンテンツを検査する処理のことをいう。
【００２９】
コンテナ適合：「コンテナ適合」は、個々の受信機の復号化機能と非互換であることが発見されたコンテナコンポーネントの形式を修正する処理をいう。もしコンテナコンポーネントを受信機に適合するように提示できないのであれば、コンテナコンポーネントは削除されてもよい。コンテナ適合処理は受信機固有であるが、コンテナスクリーニング処理は意図される受信機のタイプに依存しない。
【００３０】
コンテナ編集：用語「コンテナ編集」は、コンテナスクリーニングおよびコンテナ適合の結合された処理のことをいう。
【００３１】
コンテナコンディショニング：この用語は、「コンテナ編集」と同義で使用されうる。しかしながら、コンテナコンディショニングは、たとえコンテナが修正されていない場合でも、コンテナに適切な通知を追加する。
【００３２】
トランスコーダ：トランスコーダは、符号化情報の直接のデジタル−デジタル変換を実行し、１つのフォーマットの情報レコードを、特定の受信機に適した異なるフォーマットで再生可能にするデバイスである。
【００３３】
図１は、以降で送信部１２０および受信部１６０として参照される送信デバイス１２０から受信デバイス１６０への経路を提供するネットワーク１４０を説明する。ネットワーク１４０は、異なるタイプの数多くの他のハードウェア端末デバイスに加えて、サービス制御部１０３および編集エンジン１０６をサポートする。送信部１２０は、受信部１６０に、符号化済みテキスト、オーディオ信号、静止画像、アニメーション画像（画像の高速表示）、およびビデオ信号のような異なるコンテンツタイプのデータを含み得るコンテナを送信する。次に、コンテナは、コンテナを検査するとともに、必要ならば、コンテナのコンテンツを編集する編集エンジン１０６にコンテナを移動させるサービス制御部１０３に移動させてもよい。編集処理は、いかなる好ましくない挿入、特に有害な挿入がないことを確実にするためのデータスクリーニング、特定の要件に合致させるためのコンテンツ修正、および個々の受信部の復号化能力に一致したコンテンツ適合を含む。
【００３４】
図２は、編集エンジン１０６を説明する。ネットワークインターフェース２１０は、リンク２０４を介してクライアントからコンテナを受信する。コンテナは、個々に２４０（１）、２４０（２）、…、２４０（ｍ）として特定されるｍ＞１個の制御部２４０の１つに移動される。制御部２４０は、別個のハードウェアエンティティとして実施されてもよく、または以下で説明されるように複数のトランスコーダ２８０をホスティングするコンピュータデバイスを共有してもよい。制御部２４０はプロトコル固有であり、それぞれが個々のプロトコルにより形成されるコンテナを扱うようにプログラムされる。特定のプロトコルを扱う制御部は、同じ制御部タイプであるといわれる。制御部は、制御部グループにグループ化され、それぞれの制御部グループは、同一のプロトコルにより形成されたコンテナを扱う。編集エンジン１０６は、異なるタイプの制御部を有してもよい。しかしながら、編集エンジン１０６の全体は、同じタイプの制御部を有するように構成されてもよい。編集エンジン１０６は、また、負荷均衡化モジュール２９０を有してもよい。
【００３５】
編集エンジン１０６は、個々に２８０（１）、２８０（２）、…２８０（ｎ）として特定される複数のトランスコーダ２８０を有する。トランスコーダ２８０の主要な機能は、１つのフォーマットの情報レコードを、特定の受信機に適した異なるフォーマットで再生可能にするために、符号化済み情報の直接のデジタル−デジタル変換を実行することである。しかしながら、トランスコーダは、コンテンツ適合とともにコンテンツフィルタリング処理を実行してもよい。複数の選択されたトランスコーダ２８０は、制御アセンブリを共に形成する各制御部２４０に割り当てられる。例えば、図２において、制御部２４０（１）およびトランスコーダ２８０（１）から２８０（５）は、それぞれのコンピュータデバイスにインストールされた１つの制御アセンブリを形成する。制御部２４０（ｍ）およびトランスコーダ２８０（ｎ−２）から２８０（ｎ）は、他のコンピュータデバイスにインストールされた他の制御アセンブリを形成する。制御アセンブリは、プロセッサおよびメモリデバイスをサポートする単一の回路基板であり、「ブレードサーバ」とも呼ばれる、サーバユニットにインストールされるのが好ましい。
【００３６】
プロセッサ２２０は、ネットワークインターフェース２１０および動作管理部２３０をホスティングする。ネットワークインターフェース２１０は、ネットワーク１４０（図１）に通信可能に接続されたクライアントからコンテナを受信する。動作管理部２３０は、動作、管理、および維持機能を実行するための、コンピュータ可読格納媒体に格納されたコンピュータ可読命令を備える。
【００３７】
サービス制御部１０３は、コンテナを受信するとともに、編集エンジン１０６の１つにコンテナ編集要求を送信してもよい。
【００３８】
プロセッサ２２０は、また、動作管理部２３０に接続され、符号化済みルールの配列を入力するための、かつ各制御部２４０にそれぞれのトランスコーダの部分セットを割り当てるための、コンピュータ可読媒体に格納されたコンピュータ可読命令を備えるグラフィカルユーザインターフェース（図示せず）をホスティングする。構成メモリデバイス２６０は、各制御部に割り当てられたトランスコーダの識別子を格納する。
【００３９】
コンテンツフィルタリング処理を支配するルールは、各トランスコーダ２８０によってアクセスされるルールメモリ２２５に格納される共通のルールファイルとして格納されてもよい。それに代えて、制御部および関連付けられたトランスコーダをホスティングする各コンピュータデバイス（サーバユニット）は、ルールファイルの関連する部分セットを格納してもよい。
【００４０】
図３は、それぞれ３２０（１）、３２０（２）等として特定される複数のコンポーネント３２０を有するコンテナを説明する。コンポーネント３２０は、テキスト、オーディオ録音、符号化済み画像、ビデオ録画、および他のいかなるコンテンツタイプであってもよい。コンポーネントのコンテンツは、Dを記述子の総数として、それぞれ、３３２（１）、３３２（２）、…、３３２（ｊ）、および３３２（D）として特定される記述子３３２のセット３３０を使用して特徴付けられる。コンテンツ記述子は、コンテンツタイプ、識別子（名）、拡張子、デジタル署名、暗号化機能、優先度、およびファイルサイズのような複数の属性により定義される。記述子は、マルチメディア遠隔通信の進化する技術に伴い、コンテンツフィルタリング要件が変化するとともに追加または削除されてもよい。
【００４１】
本願発明の実施形態に従うと、コンテナコンポーネントのコンテンツの特徴は、コンテンツが特定の基準に合致するかどうかをそれぞれの２進変数が決定する、２進変数のセットとして表される。受信済みコンテナのコンテンツ記述子の値は、コンテナのコンテンツを検査することによって決定される。したがって、この機能を実行するトランスコーダは、受信済みコンテナのフォーマットおよびコンテナが形成されたプロトコルの意味を認識している。特徴付ける２進変数の値は、コンテンツフィルタリングシステムのインストーラ（ユーザ）によって入力されたコンテンツ記述子（３４２）の値および対応する基準３４６の２つのオペランドに演算子３４４を適用することによって決定される。演算子３４４および２つのオペランド３４２および３４６は、（コンテンツ条件または単に条件とも呼ばれる）フィルタ３４０を形成するといわれる。このように、コンテナコンポーネントのコンテンツは、それぞれが「真」または「偽」の値を有するフィルタのセットによって特徴付けられる。
【００４２】
受信機に適合するための適合の前にコンテナを編集することは、ルールのセットに基づくものであり、各ルールはコンテンツ全体を削除する、コンテンツに発見された悪意のある挿入を削除する、またはコンテンツの添付物を除去するような編集動作を決定する。ルールは、フィルタのそれぞれの部分セットの関数である。フィルタが２進変数になるように選択すると、ルールを定義する関数は、フィルタの部分セットのブール演算式として形式化されるのが好ましい。こうすると、（図７および図８に関してより詳細に説明される）コンテンツフィルタリングシステムのインストーラ（ユーザ）は、フィルタの部分セットによって、ブール演算式、およびブール演算式を実行した結果により実行される動作とによってルールを定義する。
【００４３】
図４は、データコンテナのコンポーネントに適用可能であり、ルールベクトル４２０に格納された、４つのルールからなるセットに関連付けられたブール演算式の代数形式を説明する。同じルールのセットは、また、ルールフィルタの少なくとも１つのコンポーネントに適用されてもよい。
【００４４】
第１ルール、ルール１は、単一のフィルタ（size>30000）によって定義され、コンテンツ記述子は、コンポーネントのサイズであり、演算子は、"GREATER THAN"であり、かつ基準は３００００（参照符号４４０）である。ルールの結果がブール「真」である場合、それぞれの動作はコンポーネントをドロップするとともに、考察下のコンポーネントに対して残りのルールを処理するのを中止する。
【００４５】
第２ルール、ルール２は、２つのフィルタ（size>5000）および（family≠message）のブール演算式４５０によって定義される。第１フィルタの記述子は"size"であり、基準は"5000"であり、かつ演算子は"GREATER THAN"である。第２フィルタの記述子は"family"であり、基準は"message"であり、かつ演算子は"NOT EQUAL"である。ブール演算式は、単一の演算子"OR"を含む。ルール２に関連付けられた動作は、ルール１の動作と同じである。
【００４６】
第３ルール、ルール３は、３個のフィルタ（size>25000）、(content-type=image/wbmp)、および（content-type=image/png）からなるブール演算式４６０によって定義される。第１フィルタの記述子は"size"であり、基準は"25000"であり、かつ演算子は"GREATER THAN"である。第２フィルタの記述子は、"content-type"であり、基準は"image/wbmp"であり、かつ演算子は"EQUAL"である。第３フィルタの記述子は、"content-type"であり、基準は"image/png"であり、かつ演算子は"EQUAL"である。ブール演算式は２つの演算子"AND"および"OR"を含む。ルール３の動作は、ルール１の動作と同じである。"wbmp"は無線ビットマップ（無線アプリケーションプロトコル、WAP、グラフィックフォーマット）のことをいい、かつ"png"は"Portable Network Graphics"のことをいうことに留意する。
【００４７】
第４ルール、ルール４は単一のフィルタ（family=message）によって定義され、記述子の内容は"family"であり、基準は"message"であり、かつ演算子は"EQUAL"（参照符号４７０）である。
【００４８】
図５は、図２の動作管理部２３０に組み込まれるとともに、ユーザインターフェース５２０、フィルタ定義を取得するフィルタ作成モジュール５３０、ルール定義を取得するルール構築モジュール５４０、フィルタ定義を格納するメモリ区画５５０、およびルール定義（ルール構造）を格納するメモリ区画５６０を備える、データ取得サブシステムの基本コンポーネントを説明する。ユーザインターフェース５２０によって、インストーラ（ユーザ）が入力データ５１２を提供してフィルタのセットおよびルールのセットを定義することが可能になる。フィルタ作成モジュール５３０は、実行されると、インストーラにコンテンツ記述子の定義、各定義の基準、および演算子を入力するようにプロセッサが促すことを引き起こす、コンピュータ可読格納媒体に格納されたコンピュータ可読命令を備える。記述子の値は、受信済みコンテナのコンテンツにより決定される。
【００４９】
ルール構築モジュール５４０は、コンピュータ可読格納媒体に格納されたコンピュータ可読命令を備え、実行されると、それぞれのルールに対してブール演算式を入力するとともに、予め定められた動作のセットから動作を選択するようにプロセッサがインストーラに促す。コンピュータ可読命令は、また、プロセッサにブール演算式をパースさせるとともに、実行する表現の項の順序を決定させる。
【００５０】
フィルタ定義は、メモリデバイスのメモリ区画５５０に格納され、かつルール定義は同じメモリデバイスのメモリ区画５６０または任意の他のメモリデバイスに格納される。
【００５１】
図６は、メモリ区画５５０に格納されたコンテンツ記述子の定義を使用して受信済みコンテナ６１２のコンテンツ記述子の値を決定する処理を説明する。受信済みコンテナ６１２は、コンテナのコンポーネントを特定するために、ステップ６２０でパースされる。各コンポーネントはステップ６４０において解析されるとともに、ステップ６５０において、結果とメモリ区画５５０から読まれたコンテンツ記述子の定義とがペアにされる。
【００５２】
図７は、本願発明の実施形態に従う、コンテンツフィルタリングシステムの全体構成を説明する。メモリ７１０は全ての関連するフィルタのデータを格納する。各フィルタは、図５のモジュール５３０によって決定される演算子のセット７４０からの演算子、図６のステップ６５０において決定されるコンテンツ記述子のセット７２０からのコンテンツ記述子、および図５のモジュール５３０において決定される記述子の基準のセット７３０からの記述子の基準によって定義される。各フィルタの２進値（「真」および「偽」）は、図５のモジュール５４０において定義されるルールのセットの実行において使用するためにメモリデバイス７５０に格納される。
【００５３】
各ルールは、フィルタの部分セット、ブール演算式、および動作によって定義される。メモリ７７０は、システムのインストーラ（ユーザ）の入力により、図５のモジュール５４０で決定された符号化済みブール演算式を格納する。メモリ７６０は、各ルールで使用されるフィルタの識別子およびそれぞれのブール演算式を格納する。メモリ７８０は、それぞれのブール演算式の評価の結果に従って実行される編集動作の指示を格納する。各ブール演算式の実行は２進の結果およびそれぞれの編集動作を生成する。編集動作の完了に応じて、編集されたコンテンツはメモリ７９０に配置される。
【００５４】
図７は、本願発明の実施形態による、単一のコンポーネントに適用されるとした、コンテンツフィルタリングシステムを説明するが、図８は、ｋ＞１個のコンテナコンポーネントに適用されるとして、図７のコンテンツフィルタリングシステムを説明する。メモリデバイス８１０は、ｋ個のコンテナコンポーネントのそれぞれの全ての関連フィルタのデータを格納する。各フィルタに関連するデータは、それぞれ８１２（１）から８１２（ｋ）として特定される。コンテナのコンポーネントは連続的に処理される。考察中のコンポーネントに対し、各フィルタの演算子を適用した結果は、メモリ８５０内に保持される。Ｎ＞１個の符号化済みブール演算式のセットは、メモリ８６４に格納される。ブール演算式は、８７０（１）から８７０（Ｎ）として個々に特定され、各々が、それぞれ８８０（１）から８８０（Ｎ）として特定されるＮ個の編集動作からのそれぞれの編集動作に関連付けられる。
【００５５】
図９は、コンテンツフィルタリングの例示的な処理を説明する。図７および図８のコンテンツフィルタリングのためのシステムのインストーラ（ユーザ）は、最初に、それぞれ９２０（１）から９２０（５）として特定される５個のコンテンツ記述子、それぞれ９２２（１）から９２２（８）として特定される８個の記述子の基準、およびそれぞれ９２４（１）から９２４（４）として特定される４個の演算子を定義した。インストーラは、それぞれ９３０（１）から９３０（１２）として特定され、それぞれのフィルタがコンテンツ記述子９２０の１つ、基準９２２の１つ、および演算子９２４の１つを指定する１２個のフィルタを定義した。５個のコンテンツ記述子９２０（１）から９２０（５）の値の決定に応じて、図６のステップ６５０で説明されるように、１２個のフィルタの２進値が決定される。
【００５６】
インストーラは、それぞれ９５０（１）から９５０（６）として特定され、それぞれのブール演算式が１２個のフィルタの部分セットに関連付けられている、６つのブール演算式を定義した。例えば、ブール演算式９５０（２）は２つのフィルタ９３０（１）および９３０（６）に関連付けられるとともに、ブール演算式９５０（５）はフィルタ９３０（２）、９３０（８）、および９３０（１１）に関連付けられる。インストーラは、それぞれ９６０（１）から９６０（４）として特定される４つの動作を定義した。インストーラは、次いで、図５のルール構築モジュール５４０を使用して、それぞれ９４０（１）から９４０（９）として特定される９個のルールを定義した。各ルールは、単一のブール演算式９５０および単一の動作９６０に関連付けられる。例えば、ルール９４０（１）は、ブール演算式９５０（２）および動作９６０（２）を指定し、一方ルール９４０（９）は、ブール演算式９５０（５）および動作９６０（４）を指定する。
【００５７】
ルールは単一のフィルタに基づいてもよく、ルールの結果は当該フィルタの２進値である。例えばルール９４０（７）はフィルタ９３０（１１）のみに依存する。
【００５８】
ブール演算式の表現
図７および図８のコンテンツフィルタリングシステムのインストーラは、通常の代数文法によって、またはツリー構造によってブール演算式９５０を提供してもよい。図５のユーザインターフェース５２０は、代数形式で表現されたブール演算式を符号化する第１モジュール（図示せず）およびツリー構造として表現されたブール演算式を符号化する第２モジュール（図示せず）を備える。２つのモジュールの各々は、インストーラがブール演算式を正しく指定できるようにするための、それぞれのテンプレートを提供する。
【００５９】
ブール演算式は、単純演算、結合演算、および複合演算を備える。単純演算は、演算子およびオペランドが（例えば２つの括弧のような）２つのデリミタによって区切られた演算子および２つのオペランドとして示される。演算子およびオペランドは、任意の順序でリストされてもよく、かつ２つのデリミタは互いに区別される必要はない。２つのオペランドは、２つのフィルタを表すブール変数である。結合演算は、演算子および２つの単純演算が２つのデリミタによって区切られた、演算子および２つの単純演算を備える。複合演算は、２つの演算の何れかが、単純演算または結合演算であってもよい、全てが２つのデリミタで区切られた演算子および２つの演算を備える。複合演算を構成する２つの演算は、また複合演算であってもよい。単純演算、結合演算、または複合演算のデリミタは同じであってもよい。
【００６０】
図１０は、本願発明の実施形態による、単純演算を認識かつ実行することのみを必要とする、ブール演算式の評価方法を説明する。方法によると、単純演算を特定するために、符号化済みブール演算式がパースされる。特定された単純表現の演算子は、（例えば"1"および"0"として表される）「真」または「偽」の２進値を生成すべく、それぞれのオペランド（フィルタ）に適用される。このように処理された、演算子、オペランド、および特定された単純演算の２つのデリミタは、削除されるとともに、演算の結果に置換される。この処理は、符号化済みブール演算式が単一の単純演算に縮小されるまで再帰的に継続され、その結果はブール演算式のアウトカムとなる。
【００６１】
図１０のステップ１０１２において、単純演算を特定するためにブール演算式が検査される。単純演算が発見された（ステップ１０１４）場合、ステップ１０１６は単純演算を実行するとともに、２進値を生成する。ステップ１０１８は、単純演算の演算子、オペランド、およびデリミタを２進値で置換する。ステップ１０１２は、次いで、縮小されたブール構造内の他の単純演算を探すために再訪される。ステップ１０１４がブール演算式の現在の形式にさらなる単純演算が発見されないと決定した場合、ステップ１０２０は、現在の形式を検査して、単一の２進値（「真」、「偽」、または「１」、「０」）に現在の形式が実際に縮小したかどうかを決定する。そうである場合、ステップ１０２２は単一の２進値をブール演算式の実行結果として報告する。処理されたブール演算式が２以上の２進値を含むとステップ１０２０が決定した場合、ステップ１０２４は、ブール演算式は正しく形成されていないという通知を報告する。
【００６２】
図１０の処理は、ユーザ（インストーラ）がブール演算式を訂正できるようにデータ入力の間に実行されるのが好ましい。ユーザインターフェース５２０または編集エンジンの他のいくつかのコンポーネントは、誤って形成されたブール演算式を解析するとともに、エラーを位置特定するコンピュータ命令を備えてもよい。
【００６３】
本願発明の実施形態によるブール演算式を符号化および評価する代替的方法は、ブール演算式のグラフィカルなツリー表現に依存する。それぞれがツリーのリーフであるフィルタ１からフィルタ６として特定される６個のオペランド（６個のフィルタ）のブール演算式を図示する例示的ルールツリー１１００が図１１に説明されている。Θ１、Θ２、およびΘ３と記される３つの演算子は、３つの演算｛フィルタ１、Θ１、フィルタ２｝、｛フィルタ３、Θ２、フィルタ４｝、および｛フィルタ５、Θ３、フィルタ６｝を定義する。各演算子のすぐ次のサクセサが定義される。例えば、Θ１、Θ２、およびΘ３のサクセサは、それぞれ演算子Θ５、Θ４、およびΘ４であるとともに、演算子Θ４およびΘ５のサクセサは、それぞれΘ５および"NULL"である。"NULL"サクセサを有する演算子は、ブール演算式の結果を生成する。
【００６４】
演算子Θ１は、演算子Θ５のオペランドである、２進出力B1を生成する。演算子Θ２は、演算子Θ４のオペランドである２進出力B2を生成する。演算子Θ３は、演算子Θ４のもう一方のオペランドである２進出力B3を生成する。演算子Θ４は、演算子Θ５のもう一方のオペランドである２進出力Ｂ４を生成する。演算子Θ５は、ツリーによって表されるブール演算式の結果である２進出力Ｂ＊を生成する。
【００６５】
図１２は、図１１のルールツリー１１００を表現するテンプレート配列１２３０を説明する。テンプレート配列１２３０のインデックス１２２０は、図１２に指示されるように、０から１９まで変化する。テンプレート配列１２３０は、演算子の総数（図１１の例示的ツリーにおいては５個）に等しい数のレコードに分割され、それぞれのレコードは、演算子に対応するとともに、２つのオペランドを有する単純操作を表す。フィルタの２進値は、考察下のコンテナが処理された後に判る。このように、レコードは、個々のフィルタのインデックス、演算子定義、およびすぐ次の演算子に対応する他のレコードへのポインタを有する。"NULL"ポインタは、現在のレコードが処理すべき最後のレコードであることを指示する。ユーザは、任意の順序でレコードを入力してもよく、かつ図５のユーザインターフェース５２０を伴うモジュール（図示せず）は、レコードが連続的に処理されてもよく、かつ任意のレコードが処理されるときに、それぞれのオペランドの値は既に決定されているようにレコードを再オーガナイズする。
【００６６】
図１２に説明されるように、最初の３つのレコードは、ツリーのリーフを形成する６個のフィルタに適用可能である演算子Θ１、Θ２、およびΘ３に対応する。１番目のレコードのポインタπ（１）は、演算子Θ１の２進の結果B(1)を保持する配列のインデックス１６を指示する。２番目のレコードのポインタπ（２）は、演算子Θ２の２進の結果B(2)を保持する配列のインデックス１２を指示する。３番目のレコードのポインタπ（３）は、演算子Θ３の２進の結果B(3)を保持する配列のインデックス１３を指示する。このようにすると、４番目のレコードに到達したときに、２つのオペランドB（２）およびB(3)は既に算出されていることになる。演算子Θ４の２進の結果B(4)は、位置π（４）＝１７に書かれる。このようにすると、５番目のレコードに到達したときに、それぞれの２つのオペランドB(1)およびB(4)は、既に判っているようになる。演算子Θ４はサクセサを有さない（すなわちヌルサクセサを有する）ので、演算子Θ４の２進出力は、ブール演算式の結果である。
【００６７】
テンプレート配列１２３０の例示的なアクティブ化は、図１２にも説明される。図６の処理により決定されたフィルタ１からフィルタ６の値は、それぞれ「真」、「偽」、「真」、「偽」、「真」、および「真」である。ブール演算子Θ１からΘ５は、ユーザによってそれぞれ"AND"、"OR"、"AND"、"AND"、および"XOR"として指定される。演算子Θ４（"XOR"）がヌルサクセサを有するので、演算子"XOR"は、ブール演算式の結果である２進出力「真」を生成する。
【００６８】
図１３は、L1からL１１と記された１１個のリーフ（フィルタ）のブール演算式に対応する第２の例示的なルールツリー１３００を説明するとともに、図１４は、図１２のテンプレート配列１２３０に類似し、図１３のルールツリーに、インデックス１４２０を０から４３まで変化させながら適用される、テンプレート配列１４３０を説明する。ルールツリー１３００は、Θ２からΘ１１と記された１０個の演算子を備える。１番目のリーフL1は、サクセサを有さない演算子Θ１１のオペランドである。統一性のため、ルールツリー１３００を表す、図１４のテンプレート配列１４３０の（図１４においてレコード１と記された）１番目のレコードは、概念的には、「ドントケア」オペランドφおよびL1の値をサクセサ演算子Θ１１のオペランドとして運ぶ許容非存在演算子Θ１を含むと概念的に捉えられる。当業者に公知であるように、オペランドφに割り当てられた「ドントケア」値は、都合の良いように「真」状態または「偽」状態のいずれであってもよい。残りの１０個のレコード、テンプレート配列１４３０のレコード２からレコード１１は、演算子Θ２からΘ１１に対応する。図１４のテンプレート配列１４３０のそれぞれのエントリL1、L2、からL11は、フィルタへのインデックス（ポインタ）である。図１２を参照しながら上述されたように、図５のユーザインターフェース５２０に関連付けられたオーガナイズモジュール５２２は、各レコードが既に決定済みのオペランドを有し、レコードが連続的に処理されうるように、レコードを配置する。
【００６９】
図１５は、テンプレート配列１２３０（図１２）または１４３０（図１４）を使用するツリー符号化方法を概要する。ステップ１５２０において、それぞれがツリー内のノードに対応する複数のレコードを有するテンプレートが生成される。各レコードは、２つのフィルタのインデックス、現在の演算子、および現在の演算子のサクセサに対応するサクセサレコードへのポインタを含む、４つのフィールドを有する。ステップ１５３０において、図６の処理により決定されたフィルタのリストは、考察下のコンテナに対して準備される。ステップ１５４０において、ツリーテンプレートのレコードは連続的に処理される。各レコードのオペランドは、フィルタのリストをインデックス化することによって取得される。それぞれの演算子はオペランドに適用されるとともに、２進の結果は、サクセサレコードのオペランドフィールドに配置される。ステップ１５５０において、最終レコードの演算子の結果は、ツリーによって表現されるブール演算式の結果として提示される。
【００７０】
図１６は、本願発明の実施形態によるルールツリー構造を表現する代替的な方法を説明する。ルールに関連するフィルタ（条件）のセットは、上述されたように、コンテンツ記述子、記述子の基準、およびフィルタ演算子に基づき定義される。フィルタのセットの定義は、フィルタ定義配列に格納される。Θ１、Θ２、Θ３、Θ４、Θ５、Θ６、Θ７、Θ８、Θ９、Θ１０、Θ１１と記述されるブール演算子のセットは、ヌルサクセサを指定された１つの演算子Θ１１と、ブール演算子のセットからのサクセサを指定された、それぞれの他の演算子とによって定義される。フィルタはツリーのリーフを形成するとともに、フィルタの部分セットに分割され、部分セットのフィルタは、ブール演算子のセットの中からのブール演算子のオペランドを形成する。特に、フィルタの部分セットが２つのフィルタを含む場合、ブール演算子の総数は、フィルタの総数引く１に等しい。
【００７１】
Ｍ（Ｍ＞１）個のフィルタのセットを考察すると、Ｎ個のリーフレコード１６２２、１＜Ｎ＜Ｍ、を備えるリーフベクトル１６２０のテンプレートが形成される。各リーフレコード１６２２は、演算子のセットの中からのリーフの演算子１６２８およびそれぞれのフィルタの部分セットを有する。インストール段階で、各リーフレコード１６２２は、演算子およびフィルタ定義配列内のオペランド（フィルタ）のインデックスを含む。それぞれのコンテナコンポーネントに対して、各リーフレコード１６２２のフィルタの値が決定される。
【００７２】
リーフレコードの数Nに等しい数のノードレコード１６４２を有するノードベクトル１６４０が形成される。各ノードレコード１６４２は、ノード演算子フィールド１６４８およびノード状態フィールド１６４４を有する。インストール段階で、ノードレコード１６４２ドは空であり、データを含んでいない。ブール演算子１６４８およびノードレコード１６４2のノードの状態１６４４は、リーフレコードの処理中に最初に決定される。Ｎ個のノードレコード１６４２は、いかなる順序で配置されてもよい。しかしながら、最初にノードレコード１６４２をリーフレコード１６２２に１対１に対応させるのが好都合である。このようにすると、ノードレコード１６４２（ｊ）、１≦ｊ≦Nのブール演算子は、リーフレコード１６２２（ｊ）のブール演算子のサクセサになる。
【００７３】
フィルタの値の決定に応じて、各リーフの演算子１６２８がそれぞれのフィルタ（それぞれの２進条件）に適用されるとともに、結果はノードレコード１６４２のノード状態フィールド１６４４に配置される。各リーフの演算子１６２８のサクセサは、ノードレコードのノード演算子フィールド１６４８に配置される。
【００７４】
全てのリーフレコード１６２２（図１６の例では１６２２（１）から１６２２（６））を処理した後、ノードレコード１６４２（図１６の例では１６４２（１）から１６４２（６））が処理される。本願明細書では接続ノードレコードと呼ばれる、共通の演算子を有するノードレコードが、次いで特定される。新しい状態を生成するために、共通の演算子は、次いで、全ての接続ノードレコードのノードの状態に適用される。接続ノードレコードから選択されたノードレコードの演算子フィールドは、共通の演算子のサクセサによって置換されるとともに、選択されたノードレコードのノード状態フィールドは、丁度決定された新しい状態によって置換される。残りの結合ノードレコードは、ノードベクトルから削除される。こうして、結合ノードレコードを伴う接続ノードレコードのそれぞれのセットの置換をもって、ノードベクトル内のノードレコードの数は、減少される。接続ノードレコードを特定する処理は、ノードベクトルが唯一のノードレコードを含むまで再帰的に継続する。残りの１個のノードレコードの演算子フィールドのブール演算子の適用結果は、ブール演算式の評価について求められている結果である。最終ノードレコードのブール演算子は、ヌルサクセサを有する。
【００７５】
図１６は、ツリーのリーフを形成する１１個のフィルタからなるブール演算式を表す図１３の例示的ツリーに対するルールツリーを符号化する再帰ルール構築１６００を説明する。リーフ（フィルタ）は、L1からL11と記される。図１３のツリーにおいて、リーフL1は他のいかなるリーフにも関連付けられていない。統一性のため、リーフL1は、受動演算子Θ１を共有するリーフφに人為的に関連付けられている。挿入されたリーフφは、「ドントケア(don't care)」値が割り当てられる。当業者に公知であるように、「ドントケア」値は、「真」状態または「偽」状態のいずれにも都合よく割り当てられうる。
【００７６】
ブール演算子のセットΘ２からΘ１１は、ユーザによって定義される。演算子Θ２からΘ６はリーフレコード１６２２（２）から１６２２（６）に関連付けられている一方、演算子Θ７からΘ１１はノードレコード１６４２（２）から１６４２（６）に関連付けられている。演算子Θ１１はヌルサクセサを有するとともに、他の各演算子Θ２からΘ１０は、図１６のリスト１６１０内で図示されるように、演算子Θ７からΘ１１のセットからのサクセサを有する。
【００７７】
リーフベクトル１６２０は、それぞれが１６２２（１）から１６２２（６）として特定される６個のリーフレコード１６２２を備え、割り当てられた演算子Θ１からΘ６は、オペランドフィールド１６２４に配置された対応するオペランドのインデックスを伴う、演算子フィールド１６２８に配置される。６個のリーフレコードのオペランドフィールドのオペランドは、{Φ, L1}、{L2, L3}、{L4, L5}、{L6, L7}、{L8, L9}、および{L10, L11}である。
【００７８】
フィルタの２進値が決定された場合（図５および図６）、リーフレコード１６２２が処理される。リーフレコード１６２２（１）から開始して、作為的受動演算子Θ１は、単に、ノードレコードのノード状態フィールド１６４２（１）にL1の値を渡す。Θ１のサクセサである演算子Θ１１は、ノードレコードの演算子フィールド１６４２（１）に配置される。２番目のリーフレコード１６２２（２）は、次いで処理され、ノードレコードのノード状態フィールド１６４２（２）に配置される２進値B2を生成するために、演算子Θ２はリーフL2およびL3（フィルタL2およびL3）に適用される。演算子Θ９である演算子Θ２のサクセサは、ノードレコード１６４２（２）の演算子フィールドに配置される。処理は、全てのノードレコード１６４２（１）から１６４２（６）が決定されるまで継続する。
【００７９】
処理は、ノードベクトル１６４０のみを使用して再帰的に継続し、リーフベクトル１６２０はもはや不要である。ノードレコード１６４２（１）内の演算子Θ１１は、ノードベクトル１６４０（１）内でペアにされていない。それ故、ノードレコード１６４２（１）は変更されずにとどまる。ノードレコード１６４２のいずれも演算子Θ９を含まないので、同様に、ノードレコード１６４２（２）は、変更されずにとどまる。ノードレコード１６４２（３）および１６４２（４）は、オペランドＢ３およびＢ４に適用されて、ノードレコード１６４２（３）のノード状態フィールドに配置される２進の結果Ｂ７を生成し、Ｂ３を置換する、共通の演算子Θ７を有する。Θ９である演算子Θ７のサクセサ演算子は、ノードレコード１６４２（３）の演算子フィールドに配置され、Θ７を置換する。新しい結合レコード１６４２（３）内で、今消費されたノードレコード１６４２（４）は、削除される。同様に、ノードレコード１６４２（５）および１６４２（６）は、演算子Θ８のサクセサ演算子Θ１０を有する新しいノードレコード内で結合されるとともに、共通の演算子Θ８をオペランドＢ５およびＢ６に適用することによって、ノード状態Ｂ８が決定される。ノードベクトルは、参照符号１６４０（２）によって特定される４つのノードレコードに今では縮小している。ノードベクトル１６４０（２）は、ノードベクトル１６４０（１）を単に上書きする。
【００８０】
処理は、結合されて新しい結合ノードレコード１６４２（２）を生成するノードレコード１６４２（２）および１６４２（３）とともに再帰的に継続される一方、ノードレコード１６４２（１）および１６４２（４）は変更されずにとどまる。２つの不変ノードレコードは、今、縮小されたノードベクトル１６４０（３）内のレコード１６４２（１）および１６４２（３）である。
【００８１】
ノードレコード１６４２（２）および１６４２（３）は、共通の演算子Θ１０を有する。ノードレコード１６４２（２）のノード状態フィールドに配置される新しい状態Ｂ１０を生成するために、演算子Θ１０はオペランドＢ９およびＢ８に適用される。演算子Θ１０のサクセサ演算子Θ１１は、ノードレコード１６４２（２）のノード状態フィールドに配置される。ブール演算式の出力Ｂ＊を生成するために、ノードレコード１６４２（１）および１６４２（２）の共通の演算子Θ１１はオペランドＢ１およびＢ１０に適用される。
【００８２】
図１７は、図１６のリーフベクトル１６２０およびノードベクトル１６４０を使用してルールツリーの出力を決定する処理を説明する。ステップ１７２０において、考察下のデータコンテンツを特徴付けるブール条件のセット（ブールフィルタＬ２からＬ１１）が決定される。ステップ１７２２において、Ｎ＞１個のリーフレコード１６２２を有するリーフベクトル１６２０が形成される。各リーフレコード１６２２は、ブール演算子フィールド１６２８およびブール条件の部分セット（フィルタＬ２からＬ１１の部分セット）のためのフィールドを有する。ステップ１７２４において、Ｎ個のノードレコード１６４２のノードベクトル１６４０が形成される。
各ノードレコード１６４２は、ブール演算子フィールド１６４８およびノード状態フィールド１６４４を含む。ステップ１７２６において、各リーフの演算子は、図５および図６を参照して上述されたようにコンテンツデータの特徴から決定される、それぞれのブール条件（ブールフィルタ）の部分セットが適用される。２進の結果は、選択されたノードレコード１６４２のノード状態フィールドに配置される。ステップ１７２８において、各リーフの演算子のサクセサが、選択されたノードレコードの演算子フィールドに配置される。ステップ１７３０において、共通の演算子を有するノードレコードが結合レコードに置換され、こうしてノードベクトル１６４０のノードレコード１６４２の数を減少させる。ステップ１７３２において、置換されたノードレコードのノード状態に共通の演算子が適用されるとともに、２進の結果は、結合レコードの演算子フィールドに配置される。ステップ１７３４において、図１６のリスト１６１０から決定された共通の演算子のサクセサは、結合ノードレコードの演算子フィールドに配置される。ステップ１７３６において、残りのノードレコードの数が１より大きい場合、共通の演算子のノードレコードを結合する処理を継続するためにステップ１７３０が再訪される。残りのレコードの数が１の場合、残りのノードレコードの演算子がノードレコードのノード状態に適用されるとともに、編集動作が実行される必要があるかどうかを結果が決定する（ステップ１７４０）。
【００８３】
図１８は、図１７の処理の詳細であるフローチャートである。ステップ１８２０において、図１９に詳細されるように、リーフベクトル１６２０が形成される。リーフレコード１６２２（１）から１６２２（Ｎ）は連続的に考察される。ステップ１８２４において、インデックスｊは０に等しくなるよう設定される。より多くのリーフレコードが処理されるべきであるとステップ１８２６が決定した場合、ステップ１８２８は、インデックスｊを１だけ増加するとともに、現在のリーフレコードのリーフインデックスに対応するリーフセット（フィルタのセット）を取得するとともに、ステップ１８３０は、現在のリーフレコードの演算子θ（演算子Θ１からΘ６の１つ）を取得する。ステップ１８３２は、取得されたリーフのセットに演算子を適用し、２進出力Ｂを生じる。ステップ１８３４において、図１６のリスト１６１０からサクセサＳ（θ）が決定される。
【００８４】
ノードベクトル１６４０のノード状態フィールドおよび演算子フィールドは、本願明細書で、Ｕ（ｊ）、Ｖ（ｊ）、１≦ｊ≦Ｎとして記される、即ちＵ（ｊ）およびＶ（ｊ）は、ノードレコード１６４２（ｊ）、１≦ｊ≦Ｎを定義する。ステップ１８３６において、Ｂの値はノードベクトル１６４０のノード状態フィールドＵ（ｊ）に配置されるとともに、Ｓ（θ）の値はノードベクトル１６４０の演算子フィールドＶ（ｊ）に配置される。全てのリーフレコード１６２２（１）から１６２２（Ｎ）が処理された場合、インデックスｊはリーフレコードの数Ｎに等しく、かつノードベクトル１６４０の各ノードレコード１６４２は、それぞれのノード演算子およびノード状態を有する。ステップ１８４０において、ノードベクトル１６４０のノードレコード１６４２の現在の値νは、（Ｎに等しい）ｊに等しくなるよう設定される。ステップ１８４２において、ノードレコードの現在の数νが１より大きい場合、同じ演算子を有する全てのノードレコード１６４２を収集するとともにそのようなレコードを結合するためにノードベクトルがスキャンされる。スキャンの前に、ノードレコードの数の変化を検知できるようにするために、ノードレコードの現在の数ν＊＝νはレコードされる（ステップ１８４３）。
ステップ１８４４において、インデックスｋはゼロに等しくなるよう設定されるとともに、ステップ１８４６は、ノードレコード１６４２（ｋ）の演算子θ＝Ｖ（ｋ）をレコードする。ステップ１８４８は、ノードベクトル１６４０の後続ノードレコードを検査して、同じ演算子θを有する後続ノードレコードの数μを特定する。特定された後続ノードレコードの数μがゼロの場合（ステップ１８５０）、インデックスｋはステップ１８５２において１だけ増加されるとともに、インデックスｋが現在のノードレコードの数νより小さい場合、ステップ１８４６は再訪される。そうでないならば、ステップ１８５６は、同じ演算子θのノードレコードの（μ＋１）個のオペランドを収集するとともに、（μ＋１）個のオペランドに演算子θを適用して、結合ノードレコードの新しい状態Ｂを決定する。ステップ１８６０において、後続のμ個の特定されたノードレコードは削除されるとともに、ステップ１８６２はノードレコード１６４２（ｋ）のノード状態フィールドＵ（ｋ）に新しい状態Ｂを、かつノードレコード１６４２（ｋ）の演算子フィールドＶ（ｋ）にサクセサ演算子Ｓ（θ）を挿入する。残りのノードレコードの数は、ステップ１８６４において（ν―μ）として決定される。ノードベクトル１６４０が共通の演算子のさらなるノードレコードを含むかどうかを決定するために、ステップ１８５２および１８５４がステップ１８６４の後に適用される。ｋがνより小さいことをステップ１８５４が決定した場合、ノードベクトルのスキャンはステップ１８４６から継続する。そうでなければ、ステップ１８５４がｋ＝νであると決定した場合（ｋはνを超えられない）、ステップ１８５５は、（ステップ１８６４において最後に更新された）νの現在の値は、以前の値ν＊よりも小さいことを確認する。層でなければ、ステップ１８８０においてエラーが報告される。特に、ブール演算式のユーザが提供した表現が正しくなければ、ステップ１８５５の要求ν＜ν＊は満たされない。ν＜ν＊の場合、ステップ１８５５にステップ１８４２が続く。残りのノードレコード数が１であることをステップ１８４２が決定した場合、それぞれの編集動作を決定する状態Ｂ＊を決定する（ステップ１８９０）ために、残りのノードレコードの演算子がそれぞれのオペランドに適用される。
【００８５】
図１９は、図１６のリーフベクトル１６２０を形成する図１８のステップ１８２０の詳細である。ステップ１９２０において、フィルタ（条件）のセットが形成されるとともに、ステップ１９２２において、図５および図６を参照して説明されたようなユーザ入力に基づき、リーフの演算子が決定される。対応するリーフレコード１６２２を生成するために、リーフの演算子は連続的に適用される。少なくとも１つの演算子が未だ適用されていないとステップ１９２４が決定した場合、ステップ１９２６は、リーフベクトルに新しいリーフレコード１６２２を追加する。ステップ１９２８は、残りの演算子の１つを選択するとともに、ステップ１９３０は、リーフレコードの演算子フィールド１６２４に関連付けられたフィルタを追加する。選択された演算子に属する全てのフィルタが現在のリーフレコード１６２２に含まれたとステップ１９３２が決定するまで、ステップ１９３０は繰り返される。現在のリーフレコード１６２２が完成すると、ステップ１９３２において決定されたように、ステップ１９２４は再訪される。全てのリーフの演算子が考察されたとステップ１９２４が決定すると、完成リーフベクトル１６２０は、図１８のステップ１８２４に提示される。
【００８６】
図２０は、フィルタのセットのそれぞれの値に対して、ルールのブール演算式の２進値を予め算出する方法を説明する。フィルタのセットは、ストリング内の各ビットが、それぞれ１つのフィルタに対応するように、フィルタへの１対１対応を有する複数のビットを有するビットストリングによって表される。μ＞１個のフィルタならば、ストリングは、μビットおよび０から２μ―１まで変化する仮定値を含む。ステップ２０１２において、（μビットが全てゼロに設定された）０の開始ストリング値が設定され、２μ個のエントリを有するルールベクトルのそれぞれのエントリは"0"に初期化される。ステップ２０１４において、図１０、１５、または１７を参照して説明された方法の１つを使用して、ブール演算式が評価される。ステップ２０１６において、２進の結果（「真」「偽」）が、ストリングの現在の値（０から２μ―１）に対応する位置でルールベクトルに格納される。ステップ２０１８において、ストリング値は、１を加算することによって増加される。ストリングのμビットのそれぞれが０の値を有するとステップ２０３０が判断した場合、ルールベクトルの生成は完了する（ステップ２０４０）。特に、μビットのそれぞれが"1"の値を有するストリングは、ルールベクトルの（２μ―１）番目のエントリに対応するとともに、ステップ２０１８において１を加えることで、ストリングをμ個のゼロにリセットする。それに代えて、ストリングは、ルールベクトルの生成完了を指示するために使用される最重要ビットを伴う（μ＋１）ビットを有してもよい。ルールベクトルは、次いで、実行時にブール演算式の２進値を直接決定し、それによってコンテンツフィルタリングシステムのスループットを増大するのに使用されてもよい。
【００８７】
総じて、データコンテナのコンテンツをフィルタリングする方法は、その結果、次のステップを備える。
（１）それぞれのフィルタは、コンテンツの選択された記述子および個々の記述子の基準の関数である、フィルタのセット（２進条件）が定義される。
（２）それぞれのルールは、ブール演算式および対応するコンテンツフィルタリング動作を指定する、ルールのセットが定義される。
（３）ブール演算式は、一度に１つ考察される。
（４）フィルタ（２進条件）のμ個のブール演算式を考察する。フィルタは、μビット、μ＞１のストリングとして表される。
（５）ストリングの２μ個の値のそれぞれに対してブール演算式を評価し、それぞれのエントリがストリングの２μ個の値の１つに対応するコンテンツメトリックの状態である、２μ個のエントリからなるルールベクトルを生成する。
（６）全てのブール演算式に対してステップ（５）を繰り返す。
（７）データコンテナを受信およびパースする。
（８）データコンテナのコンテンツにより、ルールを選択するとともに選択されたルールの指定されたμ個のフィルタの値を決定する。
（９）選択されたルールに対応するルールベクトルをインデックス付けするとともに、μビットからなるストリングによって決定されるインデックスに対応するルールベクトル内のエントリの値を決定する。
（１０）エントリの値によりコンテンツフィルタリング動作を実行する。
（１１）新しいルールが受信済みコンテナに適用される必要がある場合、ステップ（８）から（１０）を繰り返す。
【００８８】
図２１は、Ｌ１、Ｌ２、Ｌ３、およびＬ４と記される４つのフィルタのセット（μ＝４）のブール演算式を指定するルールのためのルールベクトルを説明する。フィルタのセットは、４ビットからなるストリングによって表される。ブール演算式は、'0000'から'1111'まで変化する、ストリングの１６個の値２１１２のそれぞれに対して評価され、ストリングのストリング値ｊ、０≦ｊ＜μに対応して、「真」または「偽」として指示される２進出力２１１４（ｊ）を生成する。
【００８９】
コンテナの受信に応じて、図２１で考察されたルールの４個のフィルタのセットを決定するために、コンテナコンポーネントのコンテンツが検査される。例えば、４個のフィルタが値"1"、"0"、"0"、および"1"を有する場合、"1001"のストリング２１４０を生成し、ブール演算式の値は２進ルールベクトル２１１４の位置９（２進１００１）から直接読まれる。
【００９０】
図２１の例示的説明を伴う図２０の方法は、中程度の数のオペランド（フィルタ）のブール演算式を採用するルールに適している。例えば、８フィルタを伴うならば、２進ルールベクトル２１１４は比較的短く、２５６ビットを有するに過ぎない。例えば、ブール演算式が１６個以上のオペランドを有する場合、大きな２進ルールベクトルを格納するよりもむしろ、評価が必要とされる都度ブール演算式を評価するのが好ましい。１６を超えるブール演算式当たりのオペランドの数は、あり得ないかもしれない。
【００９１】
図２２は、フィルタ定義およびルール定義に関連するデータエントリの処理を説明する。処理は、ルールファイルが既に生成されているかどうかを決定すること（ステップ２２２０）から開始する。もしルールファイルが未だ生成されていないのであれば、ステップ２２２２は、当業者に公知である通常の方法を使用してファイルを生成する。次のステップは、ルールファイルにルールを追加する。ルールファイルの投入および更新はステップ２２２４において開始する。ステップ２２２４はルールファイルを開くとともに、新しいルールが符号化されかつルールファイルに追加されるべきかどうかをユーザに指示するように促すステップ２２２６に処理を移動させる。ルールファイルの投入および更新は、ユーザによって停止される（ステップ２２８０）。より多くのルールが追加される場合、ユーザインターフェース５２０（図５、または動作、管理、および維持モジュール２３０（図２））に配置されるデータ取得モジュール（図示せず）は、ルールテンプレートを生成する（ステップ２２３０）。ルールテンプレートは、選択的に多くの形式の１つを取ってもよく、ユーザによって決定されてもよい。ルールテンプレートの形式は、（１）ユーザによって指定されるルールが連続的に適用されるべきかまたは階層型順序により適用されるべきか、および（２）ルールのブール演算式が代数解析的フォーマットで入力されるべきか、ツリーのノードが演算子および個々のオペランドを表すツリー構造フォーマットで入力されるべきか、に依存する。何れの場合においても、データ取得モジュールは、データ入力を容易にする命令を伴うそれぞれのテンプレートを提供してもよい。例えば、データ取得モジュールは、それぞれが演算子およびオペランドのセットを備える単純演算を入力するようにユーザに促し、次いで好ましい表現に進むことによって、ブール演算式の代数形式を構築するようユーザを案内してもよい。構築された表現の有効性は、新しい演算子の追加のそれぞれに伴い検証されてもよい。ブール演算式がツリー構造として提示される場合、データ取得モジュールは、ツリーの選択済みノードに関するデータをユーザが入力すると、剪定および検証されうる、一般的なツリー構造を表示してもよい。
【００９２】
ステップ２２３２において、任意の適したフォーマットで符号化されたルール識別子が提供される。ステップ２２３４において、ルール動作が指定されるとともに、ステップ２２４０は、ルールに関連付けられたブール演算式を定義する。特定のルールのルール動作は、関連付けられたブール演算式の値により適用される。ステップ２２４０は、ステップ２２４２、２２４４、２２４６、２２４８、２２５０、２２５２、および２２６０を備える。ステップ２２４２は、図３内の参照符号３４０で説明されたフィルタテンプレートを生成する。ステップ２２４４は、考察下のコンテナのコンテンツの多くの記述子の１つであってもよいフィルタのタイプを設定する。ステップ２２４６は、単項演算子、２進演算子、算術演算子、比較演算子、論理演算子、集合演算子、およびユーザ定義演算子からなるメニューから選択されてもよい、フィルタの演算子を設定する。ステップ２２４８は、ステップ２２４４において選択された記述子に関連する目標値または閾値である、フィルタ基準を設定する。ステップ２２５０は、ルールのための新しいフィルタを定義すること、またはこれまでに指定されたフィルタのセットに適用されるブール演算式を定義することに進むことをユーザに促す。他のフィルタを追加するために、ステップ２２５０において全ての関連するフィルタが存在することをユーザが決定するまで、ステップ２２４２から２２４８は再訪される。ステップ２２５２は、上述のフォーマットの１つによりブール演算式を入力するようにユーザに促す。単一のフィルタの値を使用してステップ２２３４において指定されたルール動作が適用されるかどうかを決定する受動演算子にブール演算式を縮小する図９の場合において説明されたように、ルールは１つのフィルタのみに基づいてもよいことに留意する。
【００９３】
ステップ２２６０は、ステップ２２２４で開かれたルールファイルに丁度構成されたばかりのルールを追加する。こうして構成されたそれぞれのルールのフィルタの値は、受信済みコンテナの処理に応じて「実行時」と決定されるべきであることに留意する。符号化済みルールは、単にフィルタを格納する配列（図示せず）のインデックスであってもよいフィルタ識別子を含む。
【００９４】
図２２の処理はシステムのインストールまたは更新の間に実行される。符号化されるとともに、ルールファイルに格納されたルールは、「リアルタイム」にアクティブ化される。
【００９５】
図２３は、複数のコンポーネントを有する受信済みマルチメディアコンテナのコンポーネントの連続フィルタリング処理を説明する。コンテンツフィルタリングのためのコンテナのコンポーネントの処理順序は任意であり、かつユーザによって設定されてもよい。他の動作上の理由によってコンテナ全体に全体的な束縛が課される場合、コンポーネントの処理順序は逐次的（consequential）になる。
【００９６】
制御部２４０（図２）によって促された場合、コンテンツフィルタリング処理はステップ２３２０で開始する。コンポーネントを処理すべき順序を選択すると、ステップ２３４０は、少なくとも１つのコンポーネントは、ステップ２３５０においてなお処理されるべきかどうかを決定する。そうでなければ、ステップ２３８０は処理を終了するとともに、結果を報告する。ステップ２３６０において、考察下のコンポーネントに適用可能なルールのセットの全てのルールが実行され、かつ他のコンポーネントが処理される必要があるかを決定するためにステップ２３４０が再訪される。モジュールは、コンポーネントに適用された全てのフィルタリング動作を指示する通知を挿入する。
【００９７】
図２４は、コンテナのコンテンツにルールのセットが適用されるステップ２３６０（図２３）の詳細である。ステップ２３６０は、コンテナのコンポーネントに適用する。ステップ２４２４は、ルールのセット全体が適用されたかどうかを決定する。そうであれば、ステップ２４８０は、ルールのセットの実行から生じる全てのコンテンツフィルタリング動作を指示する通知をコンテナに追加する。そうでなければ、ステップ２４２８は、現在のルールを選択するとともに、選択済みの現在のルールに関連付けられた全ての関連フィルタの定義を取得する。特に、１つのルールが他のルールの選択に影響する場合、ルールが特定の順序で配置されてもよい。それに加えて、ルール間依存は、図２５を参照して説明されるように、単純な配列よりもむしろ形式グラフによって表現されてもよい。
【００９８】
ステップ２４３０は、選択された現在のルールを実行する。ステップ２４３０は、ステップ２４３２、２４３６、２４４０、および２４４４を含む。ステップ２４３２は、ステップ２４２８において特定された全てのフィルタが、各フィルタの２進値を決定するためにアクティブ化されるかどうかを決定する。フィルタは、それぞれのオペランドにフィルタの演算子が適用されフィルタの２進値を生成する場合に、アクティブ化されるといわれる。現在のルールに関連する全てのフィルタがアクティブ化された場合、ステップ２４３２はステップ２４６０に制御を移す。その他の場合、考察下のフィルタ値を生成するために、ステップ２４３６、２４４０、および２４４４が実施される。ステップ２４３６は、図５および図６を参照点説明されるように、考察下のコンテナコンテンツの特徴に基づいて、演算子およびそれぞれのオペランドの値を取得する。ステップ２４４０は、オペランドに演算子を適用し、かつステップ２４４４は、現在のルールのブール演算式を評価するときに使用するための現在のフィルタの値をレコードする。
【００９９】
ステップ２４６０は、図１０、図１５、または図１７の符号化方法の１つによるブール演算式を取得する。ステップ２４６４は、ブール演算式を評価する。ステップ２４６８は、ステップ２４６４において決定されたようなブール演算式の値に従って、現在のルールに関連するコンテンツフィルタリング動作を考察下のコンテンツのコンテンツに適用してもよい。ステップ２４７０において、もし現在のルールのコンテンツフィルタリング動作がコンテナコンポーネント全体の削除を生じたならば、後続のルールはあっても実行する必要はなく、かつステップ２３６０は削除済みコンポーネントに個々の通知を追加する。もしコンテンツが編集されなかった、または編集されたが削除されなかったならば、考察下のコンテンツにさらなるルールが適用される必要があるかどうかを決定するためにステップ２４２４は再訪される。添付物が特定の閾値を超過する、または除去不能である悪意のある挿入を添付物が有しているならば、コンポーネント全体は削除されてもよい。
【０１００】
ルール間依存
一般的に、特定のコンテンツに適用可能なルールは、補完動作、対立動作、または相互排他動作を有しうる。補完動作では、コンテンツフィルタリングの結果は、ルールを実施する順序に依存しなくてもよい。対立動作または相互排他動作では、１つの動作が他に優先する。本願発明の実施形態に従い、ユーザは、グラフを使用してルール間関係を定義するように促されてもよい。
【０１０１】
図２５は、ルール１からルール５と記された５個のルールの階層型配置を示すグラフを説明する。ルールの状態は、本願明細書において、ルールのブール演算式の実行から生じる２進値として定義される。
【０１０２】
ルール１の「真」の状態は、"action 1"とラベル付された動作を生じ、その後にステップ２３６０は完了したと見なされる。"action 1"は、２つの正反対、１つめは、コンポーネント全体が大きすぎるまたは修復不能であるいずれかのためにコンポーネント全体を削除することと、２つめは、コンポーネントが悪意のある挿入を含むには小さすぎるのでコンポーネントは受け入れ可能であると決定することと、のうち１つを指示してもよい。ルール１の「偽」の状態は、コンテンツが１番目のテストを通過したことおよび２番目のルール２のテストに従うべきであることを指示する。
【０１０３】
ルール２の状態「真」は、ルール５の実施が続く"action 2"とラベル付された動作を生ずる。ルール２の「偽」の状態は、コンテンツが２番目のテストを通過するとともに、３番目のルール３のテストに従うべきであること等を指示する。ルール４が「偽」である場合、処理は、コンテンツを編集することなく終了する。処理は、また、（ただ）１つ：｛動作１｝、｛動作２および動作５｝、｛動作３｝、および｛動作５｝を実施した後に終了してもよい。
【０１０４】
図２６は、以下に一覧される、動作管理部２３０によって使用されるモジュールを説明する。各モジュールは、コンピュータ可読格納媒体に格納されたコンピュータ可読命令を備える。（１）特定のプロトコルにより形成されたマルチメディアデータコンテナをサーバユニットが受け入れるように構成する、サーバユニット構成モジュール２６１０、（２）共通タイプのデータコンテナを処理するように個別に構成されたサーバユニットの間で、マルチメディアデータコンテナを均等に分配する、負荷均衡化モジュール２６１２、（３）それぞれのフィルタは、コンテンツ記述子、記述子の基準、および演算子の定義を指定するフィルタのセットの定義をユーザから取得する、フィルタ定義モジュール２６１４、（４）代数文法によりユーザがブール演算式を提供することを可能にする、ブール演算式取得モジュール２６１６、（５）ツリー構造の形式でユーザがブール演算式を提供することを可能にする、ブール演算式取得モジュール２６１８、（６）それぞれのツリーノードが演算子および個々のオペランドセットを表す、一般的なツリー図を編集および選定することによって、ユーザがブール演算式を入力することを可能にする、ブール演算式取得モジュール２６２０、（７）それぞれのルールがフィルタの部分セットのブール演算式およびフィルタリング動作を指定する、コンテンツフィルタリングルールのセットをユーザから取得する、ルール構築モジュール２６２２、（８）ルールに対して指定されたブール演算式の正当性を検証する、ルール検証モジュール２６２４、（９）ルールによって実行される特定のフィルタリング動作が少なくとも１つの後続ルールの実行を防ぐ順序にルールを配置するルール配置モジュール２６２６、（１０）与えられたルールのそれぞれのブール演算式の値を条件とする与えられたルールの後続ルールをユーザが指定することを促すルール間依存モジュール２６２８、（１１）形式グラフの形式（図２５）で、コンテンツフィルタリングルールのセットを提示するルールグラフ定義モジュール２６３０、（１２）通常のロジック最適化技術を使用して、各ルールのブール演算式を最適化して、処理労力を最小化するルール最適化モジュール２６３２、（１３）多くともプリセットされた数のフィルタを有するフィルタの部分セットをそれぞれ指定する特定のルールを選択し、特定のルールのそれぞれについて、フィルタの部分セットの全ての値に対してフィルタの部分セットのブール演算式を評価し、ｍ＞１をフィルタの部分セット内のフィルタの数として、２ｍビットからなる配列を生成し、かつメモリデバイス（図２０および２１）においてビットの配列を格納するルール前処理モジュール２６３４、（１４）それぞれのコンテナタイプは、ソースでコンテナが形成されたプロトコルに対応する、コンテナタイプにコンテナを並べ替えするとともに、複数の制御部の中からの特定の制御部に特定のタイプのコンテナを移動させる、ネットワークインターフェース２１０および動作管理部２３０に関連付けられてもよい、並べ替えモジュール２６３６。並べ替えモジュール２６３６は、ネットワークインターフェース２１０または動作管理部２３０に関連付けられていてもよい。
【０１０５】
図２７は、本願発明の実施形態に従い、トランスコーダ２８０によって使用され、以下に一覧されるモジュールを説明する。各モジュールは、コンピュータ可読格納媒体に格納されたコンピュータ可読命令を備える。（a）マルチメディアデータコンテナの各コンポーネントのコンテンツを特徴付け、コンテンツ記述子を決定し、演算子を適用し、かつフィルタの状態を決定するモジュール２７１０。（ｂ）ブール演算式の実行時評価およびルールの２進出力の決定のためのモジュール２７２０。ブール演算式は、代数文法またはツリー構造により提示されてもよい。（ｃ）個々のルールのブール演算式のプリセットされた値に従い、与えられたコンテナコンテンツに関するフィルタリング動作を実行するモジュール２７３０。
【０１０６】
図２８は、本願発明の実施形態に従う、トランスコーダサービスモジュール２８１０、プログラムレジストリ２８２０、およびプログラムストレージ２８４０を備えるトランスコーダ２８０を説明する。トランスコーダサービスモジュールは、実行されたときに、プロセッサのコアに、複数の制御部からの特定の制御部から、特定のコンテナおよび編集要求を受信させ、編集要求に関連するプログラムを選択および実行させ、かつ特定の制御部に結果を戻させる、コンピュータ可読格納媒体に格納されたコンピュータ可読命令を備える。プログラムレジストリは、実行されたときに、プロセッサに、個々の機能によりプログラムをオーガナイズさせ、かつ既存のプログラムをそれぞれの新しいプログラムに置換させる、コンピュータ可読命令を備える。
【０１０７】
制御部２４０（図２）は、トランスコーダ２８０に編集要求を転送する。編集要求２８５０の受信に応じて、トランスコーダサービスモジュール２８１０は、編集要求に含まれる情報を使用して、どのプラグインプログラムを実行するかを特定する。トランスコーダサービスモジュール２８１０は、選択されたプラグインプログラムを実行するとともに、結果をそれぞれの制御部２４０に戻す。
【０１０８】
「プラグイン」は、本願明細書において、特定のタスクを実行するように工夫された自己完結モジュールとして定義される。プログラムストレージ２８４０は、コンピュータ可読格納媒体に格納されたコンピュータ可読命令を備え、かつ（a）最初にロードされた常駐プラグイン２８４２、および（ｂ）動的にロードされ、常駐プラグインを置換してもよい外部プラグイン２８４４、の２つのタイプのプラグインを有する。
【０１０９】
常駐プラグインは基本機能を提供し、かつ外部プラグインは追加機能を提供し、コンテンツフィルタリングおよびウィルススキャンは、そのような機能の２つの例である。
【０１１０】
プラグインは、プラグイン登録およびアクセスを管理するプログラムレジストリ２８２０と共に登録される。プログラムレジストリ２８２０は、プラグインの特徴に基づきプラグインをオーガナイズする。プラグインは、プラグイングループ内に配置されてもよい。
【０１１１】
プラグインプログラムは、予め定められた仕方でプラグインの実行をオーガナイズする。プラグインプログラムは、特定の目標を有する予め定められたプラグインのセットに対して実行ロジックを決定する単純命令のセットから構築される。
【０１１２】
プラグインを使用する簡潔なプログラムの命令例は、次に提示される。
【０１１３】
【表１】
2013536513.tif 000003
【０１１４】
左側の数字は、参照を容易にするためにのみ導入されており、かつ必ずしも命令の一部を構成するものではない。
【０１１５】
各"Execute"コマンドは、常に常駐プラグインの名称を参照する引数としてプラウグインの名称を有する。外部プラグインは、選択的であり、かつそれ故に存在する場合にのみ実行されるので、名称によって直接参照されない。各"Execute Group"コマンドは、引数としてプラグイングループの名称を有する。コマンド"Execute Group"は、当該グループに属する全てのプラグインを実行する。
【０１１６】
１行目は、プログラムの全てのエラー時に１４行目にジャンプするとともに、１５から１８行目をもって実行を再開することを記述する。２および３行目は、完了すべき適合のセットアップを実行する。４行目は、必要であれば入力の復号化を実行し、例えば入力がＥメールの場合、Ｅメールは部分コンポーネントに分解される。５行目および９行目は、コンテンツフィルタリングプラグインが属するプラグイングループを実行する。従ってもし存在すれば、５行目を実行開始するとともに９行目で終了する。６行目および７行目は、それぞれ、適合パイプラインの生成に必要なセットアップ動作を実行するため、および適合パイプラインを実際に生成するために使用される。適合パイプラインは、要求された適合を行うために実行されるべき動作のセットを含む。８行目は、適合パイプラインが実行される前に適合パイプラインに影響を与える全ての外部プラグインを実行することを意図する。１０行目は、適合に参加する入力コンポーネントの詳細を提供する。１８行目は、出力コンポーネントに類似のタスクを実行する。そのような情報は、報告、課金、および必ずしも適合機能に関連しない他の目的のために解析されてもよい。１１行目は適合パイプラインの最適化を実行する。１２行目は、適合パイプラインの実行の前に適合パイプラインの解析および最適化を実行する全ての外部プラグインを実行する。１３行目は適合パイプラインを実行する。１５行目は、適合パイプラインの実行結果として生成される出力コンポーネントを特徴付ける。１６行目は、生成された出力コンポーネントに影響を与える全ての外部プラグインを実行する。そして、１７行目は、（詳細な適合レコードを提供するような）適合を完成させる追加のステップを実行する。
【０１１７】
ルールは、"Rule Files"として永続的に格納される。ルールファイルは、２以上の制御部に対して適用されてもよい。ルールファイルを使用したコンテンツフィルタリングは、メディア（コンテンツ）に対して、ルールファイルに含まれるルールを適用する。与えられたルールが「真」の場合、対応する動作が実行される。動作は、（携帯固有のウィルスを含む）ウィルスのような好ましくないコンテンツを除去することと、（ゲームのような）特定のタイプのメディアを除去することと、サードパーティのアプリケーションを使用して（メディアをウィルススキャンするように）メディアに動作を実行することとを含んでもよい。しかしながら、特定のタイプのコンテンツは、処理せずに通過してもよい。
【０１１８】
ルールの定義は、動作管理部２３０（図２）においてなされる。コンテンツ編集（フィルタリングおよび適合）に影響するルールの適用は、トランスコーダ２８０においてなされる。一度、ルールファイルが生成されると、次いで、適合要求が選択するトランスコーダ２８０へ全ての適合要求と共にルールファイルを送信するように、ユーザが、制御部２４０の１つを選択的に構成する。
【０１１９】
動作"Drop"は、メディアがコンテンツ適合処理の出力の一部ではないことを確実にする。動作"scan keep"は、メディアのウィルススキャンをもたらす。これは、アンチウィルスプラグインがインストールされていることを仮定する。適切なプラグインプログラムのアンチウィルスプラグインが実行される実行箇所で、"scan for virus"とマークされる全てのメディアがウィルススキャンされるように、メディアは、実際に"scan for virus"として「マーク」される。
【０１２０】
ルール１と呼ばれるルール例は、以下に与えられる。
【０１２１】
【表２】
2013536513.tif 000004
【０１２２】
ルール１に関連付けられた名称は"MaxFileSize50000"であり、当該ルールに対応する動作は、当該ルールに含まれるフィルタに合致する全てのメディアを除去するための"Drop"である。このルールは２つのフィルタを指定する。第１フィルタは、ファイルのサイズに対して適用される"MaxFileSize"タイプである。フィルタ演算子は、"GreaterThan"であり、値は"50000"である。第２フィルタは、"Family"と呼ばれるタイプによって特徴付けられる。このフィルタは、メディアのファミリー（例えばIMAGE,AUDIO等）に対して適用される。当該フィルタに関連付けられる演算子は"NotEqual"であり、値は"MESSAGE"である。フィルタは、ブール演算子"AND"を使用して結合される。このようにして、ファイルが５００００より大きなサイズを有するとともに、"MESSAGE"ファミリーではないならば、指定された動作が実行される。
【０１２３】
ルール２と呼ばれる他のルールは次に説明される。
【０１２４】
【表３】
2013536513.tif 000005
【０１２５】
ルールの名称は"MaxFileSize25000AndContentTypes"であり、対応する動作は "Drop"である。ルール２の目的は、ルール内に含まれるフィルタに合致する全てのメディアを除去することである。ルール２の構造の詳細な説明は、次に示される。
【０１２６】
次のフィルタのみが指定される。
【０１２７】
１番目のフィルタ：
−フィルタタイプは"MaxFileSize"であり、かつフィルタはファイルのサイズに対して適用され、
−演算子は"Greater Than"であり、
−値は"25000"である。
"AND"ブールフィルタリング演算子を伴う開括弧。
２番目のフィルタ：
−フィルタタイプは"ContentType"であり、かつフィルタはメディアの（mimetypeと等価である）コンテンツタイプに対して適用され、
−演算子は"Equals"であり、
−値は"image/wbmp"である。
３番目のフィルタ：
−ブールフィルタリング演算子"OR"を有し、
−フィルタタイプは"ContentType"であり、かつフィルタはメディアの（mimetypeと等価である）コンテンツタイプに対して適用され、
−演算子は"Equals"であり、
−値は"image/png"である。
閉括弧。
【０１２８】
このように、ファイルが"25000"よりも大きなサイズを有し、かつ（"image/wbmp"に等しいコンテンツタイプ、または"image/png"に等しいコンテンツタイプを有する）ならば、ルールで指定された動作が実行される。動作はメディア、またはメディアが電子メールまたはＭＭＳのようなコンテナであるならばそのいずれかの添付物、に作用する。動作は、"keep"（メディアを適合）、"keep & scan"（適合前にメディアをウィルススキャンする）、"drop"（最終メッセージに添付物を含ませない）、"pass-through"（メディアを適合せず、変更しない）を含んでも良い。
【０１２９】
共通のルールファイル内で定義された実施例ルール３は、次に説明される。
【０１３０】
【表４】
2013536513.tif 000006
【０１３１】
他の実施例において、共通のルールファイルを完成するルール４が提示される。
【０１３２】
【表５】
2013536513.tif 000007
【０１３３】
この場合、共通ルールファイルは、300000より大きいサイズを有する全てのファイルを「ドロップ」するルール３、およびメッセージである全てのメディアにウィルススキャンを実行するルール４、を含む。
【０１３４】
共通のルールファイルが全ての制御部に適用されるとともに、いくつかの制御部"X"がルール１および２を含むルールファイルを定義した場合を考察する。選択されたトランスコーダに適合要求を送信する場合、当該制御部は、ルール１から４を含み、"RuleFile1"と呼ばれるルールファイルを送信する。"RuleFile1"の構造が提示される。
【０１３５】
【表６】
2013536513.tif 000008
【０１３６】
この特徴を提供する実施形態のコンテキストにおいて、ルールファイル内のルール構造を管理するのにＸＭＬが使用される。これによって、ポータビリティおよびスケーラビリティが確保される。ＸＭＬ版のＲｕｌｅＦｉｌｅ１が次に示される。
【０１３７】
【表７】
2013536513.tif 000009
【０１３８】
コンテンツフィルタリングの例は以下に示される。マルチメディアコンテナ：
MMS  特徴:
名前:  mms1.mms
ファミリー:  MESSAGE
サイズ:  171100
コンテンツタイプ:  application/vnd.wap.multipart.mixed
添付物の数:  3
MMS  添付物の特徴:
名前:  image.jpg
ファミリー:  IMAGE
サイズ:  75000
コンテンツタイプ:  image/jpg
名前:  image2.jpg
ファミリー:  IMAGE
サイズ:  45000
コンテンツタイプ:  image/jpg
名前:  image.png
ファミリー:  IMAGE
サイズ:  50000
コンテンツタイプ:  image/png
を考察する。
【０１３９】
コンテンツフィルタリングは、次のステップにより実行される。
ＭＭＳがコンテンツフィルタリングを通る：
−メディアはファミリー"MESSAGE"に属するので、このメディアに対して、ルール"VirusScan"は"true"に評価し、
−メディアは"scan for virus"とマークされる。
添付物image.jpgがコンテンツフィルタリングを通る：
−メディアはメッセージではなく、かつメッセージのサイズは５００００より大きいので、ルール"MaxFileSize50000"は、"true"に評価し、
−メディアは、"Drop"とマークされる。
添付物image2.jpgがコンテンツフィルタリングを通る：
−このメディアに対して、何れのルールも"true"に評価されない。
２番目の添付物image.pngがコンテンツフィルタリングを通る：
−メディアは２５０００より大きいサイズを有し、かつコンテンツタイプは"image/png"なので、ルール"MaxFileSize25000AndContentTypes"は、このメディアに対して"true"に評価し、
−メディアは、"Drop"とマークされる。
【０１４０】
プラグインプログラムは、コンテンツフィルタリングプラグインの実行後に再開する。これにより、アンチウィルスプラグインによる、ＭＭＳメディアおよびそのコンテンツのウィルススキャンを生ずる。適合処理は、次いで開始する。適合およびコンテンツフィルタリングによって、次の形式の出力ＭＭＳが生成される場合を考察する。
【０１４１】
MMS  特徴:
名前:  mms1out.mms
ファミリー:  MESSAGE
サイズ:  25175
コンテンツタイプ:  application/vnd.wap.multipart.mixed
添付物の数:  2
MMS 添付物の特徴:
名前: image2.gif
ファミリー: IMAGE
サイズ: 24000
コンテンツタイプ: image/gif
名前: removal_notification.txt
ファミリー: TEXT
サイズ:  75
コンテンツタイプ:  text/plain
【０１４２】
コンテンツ適合の結果として、"image2.jpg"は、出力"image2.gif"に適合されたと仮定している。"image.jpg"および"image.png"は、「ドロップ」されるとともに、コンテンツフィルタリング動作が適用されて生じる出力ＭＭＳの一部ではないことに留意する。新しいメディア"removal_notification.txt"が出力メッセージに追加される。これは、"image.jpg"および"image.png"の除去から生じる。トランスコーダは、メディアの除去に応じて、説明テキスト通知が添付されるように工夫されている。この通知は、元々ＭＭＳ内にあったメディアのいくつかは適合できず、かつ除去されたことの説明をＭＭＳの受信機に提供するように意図されている。
【０１４３】
トランスコーダ内に、アンチウィルススキャンが外部プラグインの形式で存在する。この場合、プラグインアーキテクチャは、ＭｃＡｆｅｅ（登録商標）、Ｋａｓｐｅｒｓｋｙ（登録商標）のようなサードパーティのアンチウィルススキャンエンジンへのインターフェースを提供するのに使用される。アンチウィルスプラグインの存在は、任意の外部プラグインのように選択的である。プラグインプログラムのレベルでは、アンチウィルスプラグインを実行することを意図するプラグインプログラムは、アンチウィルスプラグインが属するプラグイングループを実行するコマンドを含んでもよい。
【０１４４】
アンチウィルスプラグインの実行は、メディアがウィルススキャンされることを自動的には意味しない。ウィルススキャンは、コンテンツフィルタリングによって"scan for virus"とマークされたメディアにのみ実行される。いくつかのサードパーティのアンチウィルスエンジンは、スタンドアロンライブラリとしてインストールされてもよい。他のサードパーティのアンチウィルスエンジンは、クライアント−サーバとしてインストールされてもよい。アンチウィルスプラグインは、サードパーティのアンチウィルスエンジンに正しく接続されるような仕方で書かれる。どの場合においても、アンチウィルスプラグインは、コンテンツ適合が行われるメディアにウィルススキャンを実行するための、トランスコーダのエントリポイントである。
【０１４５】
このように、上述の実施形態においては、（１）添付物をチェックするためにメッセージをパースする機能と、（２）コンテンツの種類に応じたフィルタリングを行うために添付物の特徴を特定する機能と、（３）ユーザが定義した拡張可能な階層型のルールのセットを収容して、メディアの要素が好ましいか否かを判断する機能とが提供される。
【０１４６】
編集動作で、メディアの添付物がどのように取り扱われるかを決定する。編集動作は、適合処理に添付物を提供することと、適合処理に提供する前に添付物を維持するとともにメディアをウィルススキャンすることと、添付物をドロップすることとの１つ以上を含んでもよい。編集動作は、アンチウィルスおよび進入防止ソフトウェアプログラムを起動することを含んでもよい。
【０１４７】
図２９は、データストリームをフィルタリングする方法の概略を示す。データストリームは、各データコンテナがそれぞれ異なるコンテンツの種類のコンポーネントを含むことのできるデータコンテナとして構成される。この方法は、汎用コンピュータであってよいコンピューティングデバイスに実装される。
【０１４８】
ステップ２９２０で、ユーザ（インストーラ）は、コンテンツの種類とコンテンツの記述子とを定義する。コンテンツ記述子（コンポーネントサイズ等）は、複数のコンテンツの種類に共通であってよい。コンテンツ記述子（例えば符号化方法）は、単一のコンテンツの種類に固有であってよい。ユーザはさらに、各フィルタが１つの演算子と２つのオペランドとを有し、いずれかが、コンテンツ記述子の値であり、他方が対応する基準（閾値）であってよい、データフィルタの定義を行う。演算子は、フィルタのバイナリ状態を決定する。例えば、記述子はコンポーネントサイズであってよく、基準は８０キロバイトであってよく、演算子は比較を行い、コンポーネントのサイズが８０キロバイト未満である場合に「偽」となり、その他の場合に「真」となってよい。
【０１４９】
ユーザはさらに、それぞれのルールが単一のフィルタまたは複数のフィルタのブール関数に基づいてよい、複数のルールを提供する。１つのフィルタとしてルールが定義されると、フィルタの状態がルールのアウトカムとなる。ルールが複数のフィルタに基づく場合には、ブール関数がルールのバイナリアウトカムを決定する。１つのルールは、ルールのバイナリアウトカムに基づく動作を呼び出す。ある動作は、受信したコンポーネントを受理するものであったり、コンポーネントを編集して、不要なコンテンツを除去するものであったり、または、レシーバの既知の機能に準拠するようにコンポーネントを再度符号化したりするものであってよい。コンポーネントは、互いに独立した、または互いに関係し合っていてよい複数のルールにしたがってフィルタリングされてよい。しかし、あるコンポーネントに利用する複数のルールは相互に関連しあっている可能性がある。例えば、第１のルールは、コンポーネントのサイズが所定の閾値を超えている場合にコンポーネントの圧縮を行う、というものであってよく、第２のルールは、コンポーネントが一定の不要なコンテンツを含んでいる場合にそのコンポーネントを破棄し、そうではない場合にはコンポーネントを維持する、というものであってよい。好適には第２のルールが最初に利用される。
【０１５０】
ステップ２９４０で、メモリデバイスにインストールされているプロセッサ実行可能な命令が、プロセッサに、ステップ２９２０で取得されたユーザ入力に基づいて１セットの符号化されたルールおよび１セットの符号化されたフィルタを生成させる。符号化されたルールは、ルールツリー構造で、または階級的ルール階層で構成されてよいが、それに関しては図３６から図４８を参照して説明する。プロセッサ実行可能な命令は、各ルールが定義する動作を実行する。各コンテンツの種類は、１セットの符号化されたルールのうちのサブセットに関連付けられている。ステップ２９４０は、周期的に繰り返されてよく、または必要に応じて、ステップ２９２０で取得されるユーザ入力の更新に呼応する形で実行されてもよい。ステップ２９４０は、「オフライン」プロセスとして実装される。
【０１５１】
ステップ２９６０では、ネットワークから受信するデータにフィルタリングルールが適用される。受信したデータコンテナをパースして、それぞれ異なるコンテンツの種類のコンポーネントとする。各コンポーネントについて、該コンポーネントのコンテンツの種類について指定されている、符号化されたルールを利用する。コンテナの任意のコンポーネントについて実行される編集動作についての情報がデータコンテナに付加されてよい。編集動作により、データコンテナ全体が削除され、編集動作の情報のみが、送信先であるレシーバへと送信されることになる。
【０１５２】
図３０は、それぞれ３０２２（０）から３０２２（６）という参照番号を付された７つのフィルタ３０２２を有するフィルタセット３０２０と、それぞれ３０３２（０）から３０３２（８）という参照番号を付された９つのルール３０３２を有するルールセット３０３０と、それぞれ３０４２（１）から３０４２（５）という５つの動作３０４２を有する動作セット３０４０とを示している。動作の１つは、考慮されているコンポーネントに対して何ら変更を及ぼさない受身な動作であってよい。コンテンツ記述子３０１０、記述子の基準３０１２、および演算子のリスト３０１４（ステップ２９２０で取得される）が、ステップ２９４０で符号化されたフィルタ３０２２を形成する。ステップ２９４０で決定された、符号化されたフィルタ３０２２と、ステップ２９２０で取得された、ユーザにより定義されたブール式３０２４とが、ステップ２９４０で符号化されるフィルタ２９４０を形成している。フィルタ３０２２は、独立したバイナリ変数であり、ルール３０３２は、各ブール関数に従って単一のフィルタまたは複数のフィルタから決定されるバイナリ値を有している。データコンテナのコンポーネントに利用される単一のルールは、そのルールのバイナリ値にしたがって決定される２つの動作３０４２のうち１つとなる。２つの動作のうち１つは、受身な動作であってよい。ルールのサブセット３０３２を単一のコンポーネントに利用することで、複数の動作を生じさせることもできる。
【０１５３】
図３１は、図２９の方法を実装するデバイスを示す。ユーザインターフェース３１２０はユーザ入力２９２０を受け取り、入力のサニティーを検証して、必要に応じて入力データを修正するようユーザに促す。ユーザ入力は、構成モジュール３１４０に送られて、ここで、プロセッサ可読である、符号化されたフィルタおよび符号化されたルールが生成される。新たなユーザデータエントリに呼応して、構成モジュール３１４０が起動される。構成モジュール３１４０は、図３６から図３９を参照して説明するような少なくとも１つのルールツリーの形態で、または、図４０から図４８を参照して説明するような階級的ルール階層に、符号化されたルールをソートしてよい、または、並び替えてよい。
【０１５４】
構成モジュール３１４０の主要な出力は、コンテンツの種類ごとに１セットの符号化されたルールである。しかし、符号化されたルール１つを複数のコンテンツの種類に適用することもできる。あるルールのアウトカムは、１つのフィルタまたは複数のフィルタのブール関数の状態であってよい。各フィルタは、コンテンツ記述子、記述子の基準、および演算子の関数である。あるフィルタの記述子の基準および演算子は、符号化されたフィルタに埋め込まれており、記述子の値は、受信されたコンテナのコンテンツから決定される。構成モジュール３１４０で決定された、プロセッサが可読である符号化されたルールおよび符号化されたフィルタは、フィルタリングモジュール３１６０での利用に備えてメモリデバイス３１５０に格納される。符号化されているフィルタまたは符号化されているルールの任意のものを、異なるコンテンツの種類のデータコンポーネントに利用することができる。メモリデバイス３１５０はさらに、記述子の定義も格納する。
【０１５５】
ネットワークインターフェース３１８０は、ネットワークからデータストリームを受信して、受信したデータをフィルタリングモジュール３１６０に渡し、フィルタリングモジュール３１６０で、受信したデータからデータコンテナが抽出されて、各データコンテナがパースされて、それぞれ異なるコンテンツの種類であってよい各コンポーネントとされる。各コンポーネントの記述子の値は、符号化されたフィルタ、ひいては、符号化されたルールを評価するために決定される。フィルタリングモジュール３１６０は、符号化されたルールを各コンテナのコンポーネントに適用して、編集されたコンポーネントを生成して、編集されたコンポーネントは編集されたコンテナにアセンブルされ、ネットワークインターフェース３１８０およびリンク３１８２を介して宛先へと送信される。コンテナは特にフィルタリングモジュール３１６０で変更処理を行われなくてもよいが、任意で、編集結果の通知をコンテナに添付してもよい。
【０１５６】
図３２は、図３１のデバイスの実装例を示しており、構成モジュール３２４０およびフィルタリングモジュール３２６０が図３１のモジュール３１４０および３１６０の実装例を表している。ユーザインターフェース３１２０は、記述子の定義のリスト３２２２、記述子の基準のリスト３２２６、フィルタ演算子のリスト３２２４、フィルタ定義３２３２、および、ルールの定義３２３４を含む入力データを取得する。ルールは、それぞれのフィルタのブール関数として定義されていてもよい。入力データはメモリデバイス３２２０に格納される。構成モジュール３２４０は、プロセッサ３２４２と、プロセッサ３２４２に、フィルタ定義３２３２、記述子の定義３２２２、記述子の基準３２２６、および演算子３２２４に基づいて符号化されたフィルタを生成させる第１セットの命令３２４６（命令１として示されている）を格納しているメモリデバイス３２５０とを含んでいる。符号化されたフィルタはメモリデバイス３２４５に格納される。命令メモリデバイス３２５０はさらに、プロセッサ３２４２に、メモリデバイス３２４５に格納されている符号化されたフィルタとルールの定義３２３４とを利用して、符号化されたルールを生成させる第２セットの命令３２４８（命令２として示されている）も格納している。符号化されたルールはメモリデバイス３２５５に格納される。特に、符号化されたフィルタを格納するメモリデバイス３２４５、および、符号化されたルールを格納するメモリデバイス３２５５は、共有メモリデバイスの各分割部分であってよい。
【０１５７】
フィルタリングモジュール３２６０は、プロセッサ３２６２と、プロセッサ３２６２に、ネットワークインターフェースモジュール３１８０から受信したコンテナ３２８４のコンテンツ記述子３２６５の値を決定させて、メモリデバイス３２５５に格納されている符号化されているルールを利用して、編集されたコンテナ３２７０（ネットワークインターフェース３１８０を介して宛先へと送信される）を生成させる命令（命令３として示されている）を格納するメモリデバイス３２６４とを含む。
【０１５８】
図３３もまた、図３１のデバイスの実装例を示しており、構成モジュール３３４０は、モジュール３１４０の実装例を表している。図３２のデバイス同様に、ユーザインターフェース３１２０は、記述子の定義のリスト３３２２、記述子の基準のリスト３３２６、フィルタ演算子のリスト３３２４、フィルタ定義３３３２、および、ルールの定義３３３４を取得し、ここで１つのルールの定義は、それぞれのフィルタのブール関数を含んでもよい。加えて、ユーザインターフェース３１２０は、符号化されたルールの実行順序を決定するために利用される、ユーザが定義したルールの順序３３３８を取得する。全てのユーザ入力はメモリデバイス３３２０に格納される。構成モジュール３３４０は、プロセッサ３３４２と、プロセッサ３３４２に、フィルタ定義３３３２、記述子の定義３３２２、記述子の基準３２２６、および演算子３３２４に基づいて符号化されたフィルタを生成させ、符号化されたフィルタをメモリデバイス３３４５に格納させる第１セットの命令３３４４（命令Ａとして示されている）を格納しているメモリデバイス３３５０とを含んでいる。メモリデバイス３３５０はさらに、プロセッサ３３４２に、メモリデバイス３３４５に格納されている符号化されたフィルタとルールの定義３３３４とを利用して、符号化されたルールを生成させる第２セットの命令３３４６（命令Ｂとして示されている）も格納している。符号化されたルールはメモリデバイス３３５５に格納される。メモリデバイス３３５０はさらに、プロセッサ３３４２に、ユーザが定義したルールの順序３３３８に従って符号化されたルールをソートさせる第３のセットの命令３３４８（命令Ｃとして示されている）も格納している。ソートされたルールはメモリデバイス３３５８に格納される。
【０１５９】
このフィルタのセットの定義、および、ルールのセットの定義、および、符号化されたルールをソートしたり適用したりする順序の選択を促すべく、構成モジュール３２４０または３３４０は、関連するデータをユーザインターフェース３１２０を介してユーザに表示してもよい。したがって、構成モジュール３２４０または３３４０に関連するメモリデバイス（不図示）は、プロセッサ可読命令によりポピュレートされてよく、このプロセッサ可読命令が、プロセッサ３２４２または３３４２に、コンテンツ記述子のセット、基準のセット、および、演算子を表示させ、符号化されたフィルタのセット３２４５または３３４５を表示させ、符号化されたルール３２５５または３３５５のセットを表示させてよい。
【０１６０】
図３４は、図３３の構成モジュールが生成する符号化されたルールを利用してそれぞれ異なるコンテンツの種類の複数のコンポーネントのデータコンテナを処理するためのフィルタリングモジュール３４６０を示す。フィルタリングモジュール３４６０は、プロセッサ３４６２と、プロセッサ３４６２に、ネットワークインターフェースモジュール３１８０から受信した各コンテナ３４８４をパースして、各構成コンポーネントにさせ、これらのコンポーネントを、ユーザが指定するコンポーネントの優先順位に従ってソートして、ソートされたコンポーネントをメモリデバイス３４５２に格納させる命令（命令Ｄとして示されている）を格納するメモリデバイス３４６４とを含む。命令はさらにプロセッサ３４６２に、記述子の定義３３２２を利用して各コンポーネントの各コンテンツ記述子の値を決定させ、記述子の値をメモリデバイス３４６５に格納させ、メモリデバイス３３４５に格納されている符号化されたフィルタを利用して、メモリ３３５８に格納されている順序付けされたルールを利用して、編集されたコンテナ３４７０を生成させ、編集されたコンテナ３４７０は、ネットワークインターフェース３１８０を介して宛先へと送信される。
【０１６１】
構成モジュール３２４０または３３４０は、各動作記述が、動作のセットのうち対応する動作の自然言語記述を含むような１セットの動作記述を格納するための記述メモリデバイスを含んでよい。フィルタリングモジュール３４６０の命令メモリ３４６４は、次いで、プロセッサ３４６２に、構成モジュール３３４０の記述メモリデバイスからデータコンテナに実行される各動作の記述を読み出させ、各動作の記述をデータコンテナに挿入させるためのプロセッサ可読命令を格納してよい。
【０１６２】
図３５は、図３３の構成モジュール３３４０が生成する符号化されたルールと複数のコンテンツ固有フィルタリングモジュールとを利用してデータコンテナの複数のコンポーネントを並行処理するデバイスの一例を示す。図３５に示すデバイスの例は、それぞれ３５６０−Ａ、３５６０−Ｂ、３５６０−Ｃ、および、３５６０−Ｄとして示される、４つのコンテンツ固有フィルタリングモジュール３５６０を示している。ネットワークインターフェース３１８０（図３１）は、データコンテナを受信して、受信したデータコンテナをバッファ３５８４に配置する。モジュール３５８８は、受信したデータコンテナをパースして各コンポーネントにして、コンポーネントごとに、予め定義されているコンテンツの種類のセットからコンテンツの種類を特定して、各コンポーネントをそれぞれのフィルタリングモジュール３５６０に送る。図３５は、受信したコンテナについてバッファリングされた４つのコンポーネント（３５１２−Ａ、３５１２−Ｂ、３５１２−Ｃ、および、３５１２−Ｄ）を示している。
【０１６３】
各コンテンツ固有フィルタリングモジュール３５６０は、対応するプロセッサ、命令メモリ、およびデータメモリを有している。フィルタリングモジュール３５６０−Ａは、プロセッサ３５６２−Ａ、命令メモリ３５６４−Ａ、およびデータメモリ３５８０−Ａを含んでいる。フィルタリングモジュール３５６０−Ｂは、プロセッサ３５６２−Ｂ、命令メモリ（不図示）、およびデータメモリ（不図示）を含んでいる。フィルタリングモジュール３５６０−Ｃは、プロセッサ３５６２−Ｃ、命令メモリ（不図示）、およびデータメモリ（不図示）を含んでいる。フィルタリングモジュール３５６０−Ｄは、プロセッサ３５６２−Ｄ、命令メモリ３５６４−Ｄ、およびデータメモリ３５８０−Ｄを含んでいる。
【０１６４】
受信したコンテナのコンポーネント３５１２−Ａは、フィルタリングモジュール３５６０−Ａで処理される。データメモリ３５８０−Ａは、第１のコンテンツの種類に対して、記述子のセット３５２２−Ａ、符号化されたフィルタのセット３５４５−Ａ、コンテンツ記述子を特定する各符号化されたフィルタ、記述子の基準、および演算子を格納しており、且つ、各ルールがそれぞれのフィルタのバイナリ状態のブール式で符号化されていてよい順序立てられたルールのセット３５６８−Ａを格納している。命令メモリデバイス３５６４−Ａに格納されている命令は、プロセッサ３５６２−Ａに、順序立てられたルール３５６８−Ａにしたがってコンポーネント３５１２−Ａを編集させて、バッファ３５９０−Ａに保持される編集されたコンポーネントを生成させる。
【０１６５】
同様にして、コンポーネント３５１２−Ｂ、３５１２−Ｃ、３５１２−Ｄは、第２のコンテンツの種類のコンポーネントを処理するフィルタリングモジュール３５６０−Ｂ、第３のコンテンツの種類のコンポーネントを処理するフィルタリングモジュール３５６０−Ｃ、第４のコンテンツの種類のコンポーネントを処理するフィルタリングモジュール３５６０−Ｄにより処理される。データメモリ３５８０−Ｄは、４番目のコンテンツの種類の対応する記述子のセット３５２２−Ｄと、各符号化されたフィルタがコンテンツ記述子を特定している、符号化されたフィルタのセット３５４５−Ｄと、記述子の基準と、演算子とを格納しており、さらには、各ルールがそれぞれのフィルタのバイナリ状態のブール式で符号化されていてよい順序立てられたルールのセット３５６８−Ｄを格納する。命令メモリデバイス３５６４−Ｄに格納されている命令によって、プロセッサ３５６２−Ｄは、順序立てられたルール３５６８−Ｄに従ってコンポーネント３５１２−Ｄを編集して、バッファ３５９０−Ｄに保持される編集されたコンポーネントを生成する。マルチプレクサ３５９４は、４つのフィルタリングモジュールが生成する編集されたコンポーネントを合成して、ネットワークインターフェース３１８０経由での宛先への送信に備えさせる（図３１）。
【０１６６】
フィルタリングモジュール３５６０−Ａ、３５６０−Ｂ、３５６０−Ｃ、３５６０−Ｄは、いずれもがルールそれぞれを少なくとも１つのルールツリーに配置することができ、このルールツリーでは、各ルールは、それぞれ２つの動作のうち１つに続いており、任意で、２つの他のルールのうちの１つに続いてもよいバイナリアウトカムを有しているが、これに関しては、図４０から図４３を参照して後述する。
【０１６７】
ユーザ定義されたルールの順序３３３８（図３３）は、図４４から図５４を参照して後述するように、ルールの処理の階層順序を決定するために利用されるルールの継承レコードの形態であってよい。
【０１６８】
フィルタリングモジュール３５６０−Ａ、３５６０−Ｂ、３５６０−Ｃ、３５６０−Ｄの少なくとも１つが、各データコンポーネントに信号処理機能を行うことができる。これは、関連する命令メモリに格納されている命令をそれぞれ実行する特定用途デジタル回路またはモジュールプロセッサ３５６２−Ａ、３５６２−Ｂ、３５６２−Ｃ、３５６２−Ｄを利用して実装することができる。
【０１６９】
各フィルタリングモジュールは、各データコンポーネントの特徴を決定して、決定された特徴から各コンポーネントの記述子を特定して、記述子の値を求め、関連メモリデバイスから対応する記述子の基準を取得する。次いで、各フィルタがコンテンツ記述子、記述子の基準、およびフィルタのバイナリ状態を決定する演算子を特定している１セットのフィルタを決定する。フィルタのセットにおけるバイナリ値を利用して、ルールのセットの値が決定される。各ルールは、フィルタそれぞれのバイナリ状態のブール式として符号化されると好適である。フィルタリングモジュールは、各ルールに従って各コンポーネントを編集して、編集されたコンポーネントを生成する。
【０１７０】
図３５のデバイスにおいては、データコンテナをパースしてそれぞれ異なるコンテンツの種類のコンポーネントにして、個々のコンポーネントをフィルタリングモジュールへそれぞれ送る。しかし、コンテナが一定の基準（例えばサイズの限定または有害なコンテンツからの自由度）を満たすか否かを決定するために、前もってコンテナ全体を検査しておくことが望ましいだろう。図３６は、図３５のデバイスの変形例を示しており、この変形例では、自身のプロセッサ、命令メモリ、およびデータメモリを有するルートモジュール３６２０が、特定のルールをコンテナ全体に適用している。ルートモジュール３６２０は、データコンテナ全体を削除したり、コンポーネントを削除したり、データコンテナの添付物を削除することができる。ルートモジュール３６２０はさらに、データコンテナをその構成コンポーネントへとパースして、コンポーネントのいずれかが、レシーバの公知の機能に準拠させるためのトランスコードを必要とするかを判断してよい。
【０１７１】
ルートモジュール３６２０は、データコンテナ１つ１つに対して、および、データコンテナ全体の添付物に対して適用可能な基本ルールのセットと、必要なフィルタリング機能をルートプロセッサに実行させるプロセッサ実行可能命令とを格納している。
【０１７２】
図３６のデバイスはさらに、ルートモジュールおよびコンテンツ固有フィルタリングモジュール３５６０−Ａ、３５６０−Ｂ、３５６０−Ｃ、３５６０−Ｄがアクセス可能な動作メモリ（不図示）も含んでいてよい。動作メモリは、各動作が対応する編集機能を実行するためのプロセッサ可読命令として提示されるような動作のセットを格納する。動作メモリはさらに、ポインタの配列も格納しており、ポインタの配列は、ルール識別子によりインデックス化され、基本ルールのセット内の各ルールおよびコンテンツ固有ルールのセット内の各ルールに対応する動作を示している。
【０１７３】
ルートモジュール３６２０は、受信したデータコンテナを検査して、添付物の削除、コンポーネントの削除、コンポーネントに対する信号処理機能、および、受信したデータコンテナに対する通知の添付といった機能のうち一部または全てを実行することができる。
【０１７４】
図３６の装置は、中央データメモリに、ルールメモリデバイスの全ての予め定義されているコンテンツの種類に適用可能なルールのスーパーセット、および、動作メモリデバイスの対応する動作のスーパーセットを格納してよい。ルールおよび動作は、コンピュータ実行可能命令として符号化することができる。ルールのスーパーセット内に、固有フィルタリングモジュール３５６０のメモリデバイスは、特定のフィルタリングモジュールに適用可能な１セットのルールのインデックスのみを格納すればよく、動作のスーパーセット内には、この１セットのルールに対応する動作のインデックスのみを格納すればよい。
【０１７５】
図３５または図３６のデバイスは、各フィルタリングモジュールは、特定のコンテンツの種類に対して適用され、複数のフィルタリングモジュールが、あるデータコンテナのそれぞれ異なるコンポーネントに対して同時に動作するように描かれている。しかし多くの場合、各モジュールが１つのデータコンテナの全てのコンポーネントを処理し、複数のモジュールがそれぞれ異なるデータコンテナに対して同時に動作可能であると望ましいだろう。従い、各フィルタリングモジュールの命令メモリデバイスが、各コンテンツの種類についての命令を格納している。このようなスキームの利点は、任意のフィルタリングモジュールが任意のデータコンテナを処理することができ、現在のデータコンテナの処理が終わると、すぐに新たなデータコンテナの処理に移ることができることから、スループットが向上するという点である。図３７は、それぞれが特定のコンテンツの種類のいずれかのコンポーネントを処理するよう構成された４つのフィルタリングモジュール３７６０（フィルタリングモジュール３７６０−１、３７６０−２、３７６０−３、３７６０−４と個別に特定される）を利用する装置の一例を示す。４つのフィルタリングモジュールは、好適には同一構成であるとよい。
【０１７６】
各フィルタリングモジュール３７６０は、モジュールプロセッサ、データメモリ、命令メモリ、および、編集されたデータコンテナを保持するためのバッファを含む。フィルタリングモジュール３７６０−１、３７６０−２、３７６０−３、３７６０−４の構成部材は、図３７には示さない。データメモリは、符号化されたルールを格納している。命令メモリは、モジュールプロセッサに、符号化されたルールをデータコンテナ全体およびデータコンテナの個々のコンポーネントに対して適用させて、編集されたデータコンテナを生成させるプロセッサ実行可能命令を格納している。
【０１７７】
ネットワークインターフェース３７１０は、複数のデータストリームに属しているデータコンテナを受信して、ネットワークリンクを介して、編集されたデータコンテナを送信する。入力モジュール３７２０は、受信されたデータコンテナを入力メモリデバイス３７２２に保持して、入力メモリデバイスで待ち状態にあるデータコンテナを、入力セレクタ３７２４経由で、占有されていないフィルタリングモジュール３７６０−１、３７６０−２、３７６０−３、３７６０−４に転送する。出力モジュール３７３０は、フィルタリングモジュールのバッファに保持されている、編集されたデータコンテナを出力セレクタ３７２６経由で転送する。入力セレクタ３７２４および出力セレクタ３７２６は、それぞれ入力モジュール３７２０および出力モジュール３７３０の一部として実装可能である。
【０１７８】
図３８は、図３７の装置の制御システムを示す。制御システムは、中央プロセッサ３８１０、中央データメモリ３８３０、および、中央プロセッサ３８１０にネットワークインターフェース３７１０、入力モジュール３７２０、および出力モジュール３７３０（図３７）の機能を果たさせるプロセッサ実行可能命令を格納する中央命令メモリ３８２０を含む。
【０１７９】
中央命令メモリ３８２０は、中央プロセッサ３８１０に、各受信データコンテナにラベルを添付させて、各受信したコンテナが属しているデータストリーム、および、そのデータストリーム内の循環コンテナ番号を特定させる入力モジュール命令を格納していてよい。中央命令メモリ３８２０は、中央プロセッサに、添付したラベルを利用して、各データストリームについて編集されたデータコンテナを、対応する受信したデータコンテナの連番になるよう並べさせる出力モジュール命令を格納していてよい。
【０１８０】
各フィルタリングモジュール３７６０−ｊ（１≦ｊ≦４）は、モジュールプロセッサ３８６２−ｊ、モジュール命令メモリ３８６４−ｊ、およびデータメモリ３８８０−ｊを有する。中央プロセッサ３８１０は、モジュールプロセッサ３８６２−１、３８６２−２、３８６２−３、および３８６２−４と、それぞれデータメモリデバイス３８８０−１、３８８０−２、３８８０−３、および３８８０−４経由で通信する。フィルタリングモジュール３７６０−ｊの命令メモリ３８６４−ｊは、対応するモジュールプロセッサ３８６２−ｊに、符号化されたルールを複数のセットのコンテンツ固有ルールにソートして、コンテンツ固有ルールの各セット内のコンテナに基づくルールおよび別のソートルールを階層構造にソートする（図４４から図５４を参照して後述する）。
【０１８１】
中央命令メモリ３８２０は、さらに、中央プロセッサ３８１０に、各受信されたデータコンテナを、それぞれ異なるコンテンツの種類の構成コンポーネントにパースさせ、それぞれのラベルに、受信されたデータコンテナ内の各コンポーネントの位置の情報を挿入させる入力モジュール命令も格納してよい。または、データコンテナのパースは、各フィルタリングモジュール３７６０により実装されてよく、フィルタリングモジュール３７６０が格納する命令によって、モジュールプロセッサ３８６2が、入力モジュールから転送されたデータコンテナをそれぞれ異なるコンテンツの種類の構成コンポーネントにパースする、というものであってよい。
【０１８２】
データコンテナは、宛先のレシーバに適合させるためにコンポーネントのサイズを低減させたりトランスコードを行ったりする、目的で圧縮等の信号処理を必要とするコンポーネントを含んでいる場合がある。好適には、この機能は入力モジュール３７２０で実行されるとよい。中央命令メモリ３８２０は、中央プロセッサ３８１０に、信号処理が必要なデータコンポーネントを特定させて、各信号処理機能を適用させるプロセッサ可読命令を格納していてよい。
【０１８３】
データコンテナは、添付物を含んでよく、添付物を検査して、必要な場合には編集することが望ましい。これは入力モジュール３７２０で行われてよい。従って中央命令メモリ３８２０は、中央プロセッサ３８１０に、受信したデータコンテナの添付物を検知させて、添付物が見つかると、それぞれ符号化されたルールを適用させるプロセッサ可読命令を格納していてよい。
【０１８４】
記述メモリデバイス３８１６は、動作記述のセットを格納しており、このなかの各動作記述は、予め定義された動作のセットにおける対応する動作の自然言語による記述を含んでいる。次いで、中央命令メモリ３８２０は、中央プロセッサ３８１０に、記述メモリデバイス３８１６から各データコンテナに実行する各動作の記述を読み出させ、各動作の記述を各データコンテナに挿入させるプロセッサ実行可能命令を格納してよい。
【０１８５】
図３９は、データコンテナをフィルタリングする装置３９００を示す。装置は、構成モジュール３９０２とフィルタリングモジュール３９０４とを含む。構成モジュール３９０２は、構成データに「オフライン」で前処理を行う。フィルタリングモジュール３９０４は、「リアルタイム」でデータコンテナを処理する。
【０１８６】
構成モジュール３９０２は、構成プロセッサ３９２０、命令メモリデバイス３９３０（「命令１」として示されている）、符号化されたルールおよび動作を格納するデータメモリデバイス３９４０、ルールの継承のレコードを格納するメモリデバイス３９４４、およびソートされたルールを保持するメモリデバイス３９４６、またはソートされたルールおよび対応する動作へのポインタを含む。
【０１８７】
メモリデバイス３９４０は、各ルールがプロセッサ実行可能命令のセットとして符号化されているルールのセットを格納するメモリセクション３９４１に分けられ、バイナリ値に評価して、１つ１つのメモリセクション３９４２は、各動作がデータコンポーネントを編集するためのプロセッサ実行可能命令のセットとして符号化されている動作のセットを格納している。
【０１８８】
メモリデバイス３９４４は、各ルールの継承のレコードが特定のルールに対応しているルールのセットの継承のレコードを格納しており、特定のルールの値「０」に対応する第１の動作および第１の後続するルールのインジケータと、特定のルールの値「１」に対応する第２の動作および第２の後続するルールのインジケータとを含む。
【０１８９】
命令メモリデバイス３９３０は、構成プロセッサ３９２０に、ソートされたルールを生成させ、ソートされたルールをメモリデバイス３９４６に格納させるプロセッサ可読命令を格納している。ソートされたルールは、各ルール階層が互いに独立しており、第１の階層を超える各ルール階層内のルールが少なくとも１つ前のルール階層の少なくとも１つのルールに基づいているようなルール階層に構成されていてよい。または、ソートされたルールは、ルールごとに、ルールの値「０」に対応する第１の動作を示し、ルールの値「１」に対応する第２の動作を示すルールバイナリツリーの形態で提示されてもよい。
【０１９０】
フィルタリングモジュール３９０４は、データコンテナのリアルタイム処理用のフィルタリングプロセッサ３９６０、命令メモリ３９７０（「命令２」として示される）、ネットワークから受け取ったデータコンテナを保持するためのバッファ３９８２、および、メモリ３９４６に格納されているルールに従って編集されたデータコンテナを保持するためのバッファ３９８４を有している。命令メモリ３９７０は、フィルタリングプロセッサ３９６０に、ソートしたルールを順次データコンテナに適用させるプロセッサ可読命令を格納している。
【０１９１】
装置３９００は、図３８のメモリデバイス３８１６に類似した記述メモリデバイス（不図示）を利用して、動作記述のセットを格納することができる。次いで、命令メモリデバイス３９７０は、フィルタリングプロセッサ３９６０に、記述メモリデバイスから各データコンテナに実行する各動作の記述を読み出させ、各動作の記述をデータコンテナに挿入させるプロセッサ実行可能命令を格納してよい。
【０１９２】
図４０は、ルールがバイナリアウトカムを有し、２つの動作のうち１つと２つの他の動作のうち１つとが続く完全なルールツリー４０００の形態の、図３３の構成デバイスが生成した、符号化されたルールの構成を示しており、ここで各リーフルールは、後続するルールがなく、動作を必要としないヌルルール（不図示）である。
【０１９３】
深さｄの完全なルールツリーでは（図４０のルールツリーではｄ＝３）、μの数のルール（ヌルのルールを除く）が、μ＝（２ｄ−１）であり、動作の数は、ルールの数の二倍である。しかし任意のデータコンポーネントに利用されるルールの最大数は、ｄに等しく、同様に、任意のデータコンポーネントに利用される動作の最大数はｄである。μ個のルールがＲ０からＲμ-１として示され、２×μ個の動作がＡ１からＡ２μとして示され、ルールＲｊ（０≦ｊ≦μ）の後に、２つの動作のうち１つ（Ａ２２ｊ＋１またはＡ２ｊ＋２）が後続して、ルールＲｊ（０≦ｊ＜２ｄ−１−１）＝（μー１）／２が、２つのルールＲ２ｊ＋１およびＲ２ｊ＋２のいずれかに進む。１を超える数のルールが同じ後続ルールに連なる場合もあれば、複数のルールが同じ動作に連なる場合もある。従って固有のルールの数および固有の動作の数は、必ずしも互いに特定の関係を持つものではない。
【０１９４】
ＲｊおよびＲｊという記載（ｊ＞０）は、インデックスｊのルールを示すための同義語として利用されることに留意されたい。
【０１９５】
フィルタリングモジュールは、ルートルールＲ０の値が「０」である場合に、動作１（４０２０−１）を適用して、ルールＲ１の値を決定する。逆にルートルールＲ０が「１」である場合には、フィルタリングモジュールは動作２（４０２０−２）を適用して、ルールＲ２の値を決定する。同様にルールＲ１は、動作３（４０２０−３）およびルールＲ３になり、動作４（４０２０−４）およびルールＲ４に進む。ルールＲ２は、動作５（４０２０−５）およびルールＲ５に連なり、または、動作６（４０２０−６）およびルールＲ６に連なる。ルールＲ３は、動作７（４０２０−７）または動作８（４０２０−８）に連なり、ルールＲ４は、動作９（４０２０−９）または動作１０（４０２０−１０）に連なり、ルールＲ５は、動作１１（４０２０−１１）または動作１２（４０２０−１２）に連なり、ルールＲ６は、動作１３（４０２０−１３）または動作１４（４０２０−１４）に連なる。動作７および動作１４にはそれぞれ、ヌルルールＲ＊（不図示）が後続する。
【０１９６】
図４１は、ルートルールＲ０が値「０」を有し、動作１（４０２０−１）およびルールＲ１に連なる第１のケースを示しており、ルールＲ１は、値「１」を有して、動作４（４０２０−４）およびルールＲ４に連なり、ルールＲ４は、値「０」を有して、動作９（４０２０−９）に連なる。第２のケースでは、Ｒ０の値が「１」であり、動作２（４０２０−２）およびルール２ｎ連なり、ルールＲ２の値が「０」であり、動作５（４０２０−５）およびルールＲ５に連なり、Ｒ５の値が「０」であり、動作１１（４０２０−１１）に連なる。
【０１９７】
図４２は、図４０の完全なルールツリーから導出された不完全なルールツリー４２００を示しており、このルールＲ５はヌルルールとして指定されているので、動作４０２０（１１）および動作４０２０（１２）は適用できない。Ｒ２の値が「１」のとき、ルールＲ２は唯一有効なルールであるＲ６となる。
【０１９８】
図４３は、Ｒ０からＲμ―１と示されているμ個のルールについて図４０の完全なルールリーを表す標準的構造を示しており、２×μ個の動作がＡ１からＡ２μとして示され（μ＞１）、（２×μ＋１）個のセルが０から２×μとしてインデックスされている配列４３２０が利用されている。示されているようにμ＝７についてのセルインデックスは、０から１４である（参照番号４３１０）。インデックスｊの配列４３２０のセル（０≦ｊ＜μ）は、ソートされるルールを格納するメモリデバイス（不図示）の、符号化されているルールへのポインタ（参照番号４３１６）を格納している。インデックスｊ（１≦ｊ＜２×μ）の配列４３２０のセルは、動作のリストを格納するメモリデバイス（不図示）の、符号化されている動作へのポインタ（参照番号４３１４）を格納している。インデックスｊの配列４３２０のセル（０≦ｊ＜μ）は、線４３２５が示すように、２つのインデックス（２ｊ＋１）および（２ｊ＋２）のセルに連なる。インデックスｊ＝０のセルは、ルートルールＲ０の識別子を格納して、インデックス１および２のセルに連なる。インデックスｊ＝１のセルは、動作Ａ１およびルールＲ１へのポインタを格納して、インデックス３および４のセルに連なる。インデックスｊ＝２のセルは、動作Ａ２およびルールＲ２へのポインタを格納して、インデックス５および６のセルに連なる（２×２＋１および２×２＋２）。インデックスｊ＝３のセルは、動作Ａ３およびルールＲ３へのポインタを格納して、インデックス７および８のセルに連なる（２×３＋１および２×３＋２）。インデックスｊ＝４のセルは、動作Ａ４およびルールＲ４へのポインタを格納して、インデックス９および１０のセルに連なる（２×４＋１および２×４＋２）。インデックスｊ＝５のセルは、動作Ａ５およびルールＲ５へのポインタを格納して、インデックス１１および１２のセルに連なる。インデックスｊ＝６のセルは、動作Ａ６およびルールＲ６へのポインタを格納して、インデックス１３および１４のセルに連なる。インデックス７から１４のセルは、動作Ａ７からＡ１４の動作へのポインタを格納する。
【０１９９】
配列４３４０は、ルールＲ５がヌルルールである図４２の不完全なルールツリーに対応しており、配列４３４０のインデックス５のセルが、最後の動作Ａ５を提供しており、その他のセルには導かれない。
【０２００】
図４４は、複数のルール階層の図３３の構成デバイスが生成する、符号化されたルールの構成を示しており、ルール階層内のルールは互いに独立しており、ルート階層である第１のルール階層を超える階層のルールは、前のルール階層のルールに依存する。図４４は、４つのルール階層４４２０（１）、４４２０（２）、４４２０（３）、４４２０（４）（それぞれ階層１、階層２、階層３、階層４とも称される）を示している。他のルールに依存しないルールは、ここでは、独立したルールまたは自由なルールと称する。独立したルール同士はルートルールであり、階層１を構成するよう選択される。互いに独立しているが、階層１のルールに依存しているルールは階層２を構成する。互いに独立しているが階層２のルール（そしておそらくは階層１のルールにも）に依存しているルールは、階層３を構成する。互いに独立しているが階層３のルール（そしておそらくは階層２または階層１のルールにも）に依存しているルールは階層４を構成する。
【０２０１】
図４５は、８個のフィルタ４５２０（個々に４５２０（０）から４５２０（７））、１６個のルール４５３０（個々に４５３０（０）から４５３０（１５））、９個の動作４５４０（個々に４５４０（１）から４５４０（９）、Ａ１からＡ９と称される）を利用するフィルタリングモジュール３１６０（図３１）の一例を示す。この例では、ルールＲ０は、２つのフィルタ４５２０（０）および４５２０（２）のブール関数４５２５（０）であり、ルールＲ１１は、４つのフィルタ４５２０（１）、４５２０（３）、４５２０（７）、および４５２０（７）のブール関数４５２５（１１）である。図４４の複数階層の構成の中間ルール階層におけるルールＲ５は、２つの動作Ａ３またはＡ４のいずかに続き、２つの他のルールＲ２およびＲ７のいずれかに続く。最後のルール階層のルールは、２つの動作のいずれかとなるが、後続するルールを有さない。例えばルールＲ１１は、２つの動作Ａ２およびＡ９のいずれかに後続するものの、他のルールには後続していない。
【０２０２】
図４６は、各ルールのレコード４６１０が、「偽」または「真」のバイナリアウトカムを有している現在のルール４６２０を示しているような複数のルールのレコード４６１０を有するユーザ指定ルール継承テーブル４６００の一例を示す。動作４６２１および後続するルール４６２２は、「偽」のアウトカムに対応している。動作４６２３および後続するルール４６２４は、「真」のアウトカムに対応している。ルールの継承テーブル４６００は、図４４に示す複数のルール階層の、図３３の構成デバイスが生成する符号化されたルールをソートするために利用することができる。テーブル４６００のシンボルφは、ヌルルールを表している。
【０２０３】
図４７は、図４６のルールの継承テーブル４６００を利用して構築されたルールのグラフ４７００を示す。継承テーブル４６００に示すように、ルールＲ１２は、ルールＲ５またはＲ３に後続しているが、他のルールの後続ルールではない。従ってルールＲ１２はルートルールである。ルールグラフ４７００は、１１個のルール（Ｒ０、Ｒ１、Ｒ２、Ｒ３、Ｒ５、Ｒ７、Ｒ９、Ｒ１１、Ｒ１２、Ｒ１４、およびＲ１５）をカバーしている。動作Ａ０をルールＲ５へとつなぐ線（破線で示されている）を取り除くと、ルールのグラフ４７００が、図５１のルールの継承テーブル５１００が表されることに留意されたい。
【０２０４】
図４８は、図４４に示す複数のルール階層の図３３の構成デバイスが生成する、符号化されたルールの一般的なソート方法を示すフローチャートである。ステップ４８１２で、ルールの継承レコードを受信する。各ルールの継承レコードは、１セットのルール内の特定のルールに対応しており、（１）特定のルールの値「０」（「偽」）に対応する第１の動作および第１の後続ルール、および（２）特定のルールの値「１」（「真」）に対応する第２の動作および第２の後続ルールを示している。ステップ４８１４では、各ルールの継承のレコードで参照される各ルールのルール識別子を含むルール含有リストを形成する。ステップ４８１６では、各ルールの依存カウントを決定して、特定のルールの依存カウントは、この特定のルールの直前にいくつのルールが存在しているかを表している。
【０２０５】
ステップ４８１８は、ゼロの依存カウントを有するルール含有リスト内の特定のルールを示している。ステップ４８２０でゼロの依存カウントのルールが発見されない場合には、ステップ４８６０で、誤ったデータである旨が報告される。逆に、ステップ４８２０で、少なくとも１つのルールがゼロの依存カウントであると判断されると、ステップ４８２２で、新たなルール階層（階層１から始まる）が定義される。ステップ４８２４では、新たな階層にゼロの依存カウントの各ルールの識別子が追加され、ステップ４８２６で、ルール含有リストからこの識別子が除去され、第１の後続ルールおよび第２の後続ルールそれぞれの依存カウントが１減らされる。ステップ４８２８でルール含有リストが空であると判断された場合には、ルールソートプロセスが完全であると考慮される（ステップ４８８０）。そうではない場合には、ステップ４８１８を再試行して、後続するルール階層のルールが特定される。
【０２０６】
図４９は、Ｍ個のルールセット（Ｍ＞１）に適用される図４８の方法の実装例を示すフローチャートである。ステップ４９２０で、メモリデバイス３３５０に格納されているプロセッサ可読命令によって、プロセッサ３３４２（図３３）は、ユーザからＬ（Ｌ＞１）という数のルールの継承のレコードを含むルールの継承テーブル（図４６）を取得する。いくつかのルールは考慮されるデータコンポーネントには当てはまらない場合が考えられることから、ルールの継承のレコードの数Ｌは、ルールのセットのルールの数Ｍ以下であってよい。各レコードは、親のルールの識別子、親のルールの値「偽」に対応する第１の動作および第１の後続ルール、および、親のルールの値「真」に対応する第２の動作および第２の後続ルールを含む。ルールは、インデックス０から（Ｍ−１）で特定される。考慮されず、ルールの継承のレコードにより参照されないルールがあってもよい。ステップ４９２４で、２つの配列ＵおよびＶ（それぞれＭ個の整数のエントリを有している）が、全てのエントリがゼロに設定されるように初期化される。ステップ４９２６で、親のルールの識別子ｍおよび各レコードの後続ルールの識別子ｊおよびｋを決定して、配列Ｕをマークして、ルールｊが有効なルールである場合にＵ（ｍ）＝１、Ｕ（ｊ）＝１となるようにして、ｋが有効な場合にはＵ（ｋ）＝１となるようにする。従って、継承レコードに少なくとも一度ルールｙに遭遇した場合には、エントリＵ（ｙ）（０≦ｙ＜Ｍ）を１に等しくなるよう設定する。エントリＶ（ｙ）は、後続ルールとして何度ルールｙに遭遇したかを示す。従ってステップ４９２６では、ルールｊが有効なルールである場合にＶ（ｊ）を１増分して、ルールｋが有効なルールである場合にはＶ（ｋ）を１増分する。配列Ｕはルール含有リストとして機能して、配列Ｖは、ルール含有リストの各ルールの依存カウントを示しており、特定のルールの依存カウントは、このルールの直前のルールの数となる。
【０２０７】
ステップ４９２８では、現在のルール階層のインデックスχを１に設定する。ステップ４９３０では、親のルールのインデックスｍをゼロに設定する。ステップ４９３２でＵ（ｍ）＝０またはＶ（ｍ）＞０と決定されると、インデックスｍをステップ４９３８で１増分して、ステップ４９４０でｍがＭ未満であると決定されると、ステップ４９３２を再試行して、配列Ｖの後続エントリを考慮する。ステップ４９３２で、Ｕ（ｍ）＝１およびＶ（ｍ）＝０であると決定されると、ルールｍは現在の階層χに属している。次にステップ４９３４では、親のルールｍの後続するルールｊおよびｋを決定して、ステップ４９３６で、ルールｊが有効なルールである場合には、ルールｍを階層χのルールのリストに追加して、エントリＶ（ｊ）を１減少させ（debit）、ルールｋが有効なルールである場合には、エントリＶ（ｋ）を１減少させる。ステップ４９３８でインデックスｍを１増分させて、ｍがＭ未満である場合にはステップ４９３２を再試行する。インデックスｍがＭに等しい場合には、ステップ４９４０からステップ４９５０へ進む。ステップ４９５０で、現在の階層χのルールのリストが空であると判断されると、ルールを階層構造にソートするプロセスが完了したとみなす（ステップ４９８０）。さもなくば、階層インデックスχをステップ４９５２で１増分して、ステップ４９３０を再試行して、新たなルールの新たな階層への関連付けを始める。最後のルールの階層が決定されると、配列Ｕの各エントリがゼロの値を有しており、配列Ｖの各エントリがゼロの値を有して、この特性を利用してソートのプロセスの完了が示されることに留意されたい。
【０２０８】
図５０は、図４６のルールの継承テーブル４６００の例について、図４９で図４８の方法を実装した一例を示す。図４６のルールの継承テーブルの例では、ルール識別子は、０から１５の範囲であり、図５０でもそう示されている（参照番号５０１０）。エントリＵ（ｊ）およびＶ（ｊ）（０≦ｊ＜１６）それぞれは、０に設定される（ステップ４９２４）。インデックスのルール４、６、８、１０、および１３（Ｒ４、Ｒ６、Ｒ８、Ｒ１０、およびＲ１３）はテーブル４６００にリストされておらず、配列Ｕの各対応するエントリは０に設定され、他のエントリはそれぞれ１に設定される（図４９のステップ４９２６参照）。テーブル４６００の第１のレコードは、ルール２および７が連続するルールであると示している。従ってエントリＶ（２）およびＶ（７）それぞれが、１増分される。同様に、第２のルールは、ルール１１と１４とが連続するルールであると示しているので、Ｖ（１１）およびＶ（１４）のそれぞれを１増分する。全てのレコードの考慮が終わると、配列Ｖは各ルール０、１、２、３、５、９、１１、および１５について１のエントリを有し、各ルール７および１４について２のエントリを有する。不在のルール４、６、８、１０、および１３に対応する配列Ｖの各エントリは、０の初期化された値を有している。そして配列ＵおよびＶは５０２０（１）の形態をとる。
【０２０９】
階層１および走査エントリＵ（ｍ）およびＶ（ｍ）から始まり（ステップ４９２８）、ｍ＝０から始まり（ステップ４９３０）、ステップ４９３２では、ルール１２のみが条件Ｕ（１２）＝１およびＶ（１２）＝０を満たしていると示される。従ってルール１２が階層１（χ＝１）の唯一のルールである。ステップ４９３４では、（テーブル４６００から）ルール５と３とが、ルール１２の後続ルールであり、ステップ４９３６で、エントリＵ（１２）を０にリセットして、各エントリＶ（３）およびＶ（５）を１減少させる。すると、配列ＵおよびＶは５０２０（２）の形態となる。ステップ４９５０は、階層１のルールのリストが空ではないと判断する（ルール１２を含んでいる）ので、階層インデックスχを１増分して（ステップ４９５２）、ステップ４９３０を再試行する。
【０２１０】
走査配列ＵおよびＶは、ルール３がステップ４９３２（Ｕ（３）＝１およびＶ（３）＝０）の条件を満たすことを示している。ルール３の後続ルールは、ルール７と１５であり（ステップ４９３４、テーブル４６００）、ステップ４９３６で、Ｕ（３）を０に設定して、Ｖ（７）およびＶ（１５）それぞれを１減少させる。配列ＵおよびＶの走査を続けることで、ルール５がステップ４９３２（Ｕ（５）＝１およびＶ（５）＝０）の条件を満たすことが示される。ルール５の後続ルールは、ルール２と７であり（ステップ４９３４、テーブル４６００）、ステップ４９３６で、Ｕ（５）を０に設定して、Ｖ（２）およびＶ（７）それぞれを１減少させる。すると、配列ＵおよびＶは５０２０（３）の形態となる。従ってルール３および５が階層２に属すると決定される。
【０２１１】
ステップ４９５０は、階層２のルールのリストは空ではない（ルール３と５を含んでいる）。従ってステップ４９５２で階層インデックスを１増分して、ステップ４９３０を再試行する。プロセスを続けると、ルール２、７、および１５が、階層３に属すると決定され、配列ＵおよびＶが５０２０（３）の形態をとる。ステップ４９５０では、階層３のルールのリストが空ではなく、ステップ４９５２で、階層インデックスを４に増分する（χ＝４）。ステップ４９３０から４９４０を繰り返して、ルール０、１、９、１１、および１４が階層４に属しており、配列ＵおよびＶが形態５０２０（４）の形態をとり、配列Ｖの各エントリが値０であり、故に、全てのルールを考慮したことになる。ソートプロセスの完了を決定する１つの方法として、ステップ４９３０から４９５０をχ＝５について繰り返す、というものがある。すると、ステップ４９５０で、階層５のルールのリストが空となり、ソートプロセスが終了される。
【０２１２】
図５１は、図４６のルールの継承テーブル４６００に類似しているが、ルールＲ１２に後続するルールがＲ３の１つだけであるような、ユーザ指定のルールの継承テーブルを示している。テーブル４６００に示すように、ルールＲ５は、２つの後続するルールＲ２およびＲ７を有しているが、他のルールの後続ルールではない。従ってルールＲ５およびＲ１２が両方とも、ルートルールである。
【０２１３】
図５２は、図５１のルールの継承テーブルに図４９で図４８の方法を実装したときの一例を示す。図５１のルールの継承テーブルの例では、ルール識別子は、０から１５の範囲であり、図５２でもそう示されている（参照番号５２１０）。図５０を参照して上述したステップに類似したステップに従い、ルールを４つの階層にソートして、４つの階層では、階層１がルールＲ５およびＲ１２を含み、階層２がルールＲ２およびＲ３を含み、階層３がルールＲ０、Ｒ１、Ｒ７、およびＲ１５を含み、階層４がルールＲ９、Ｒ１１、およびＲ１４を含んでいる。従ってルールＲ５およびＲ１２がまず適用され（Ｒ５またはＲ１２から始まり）、ルールＲ２およびＲ３が次に、Ｒ２からＲ３、またはＲ３からＲ２の順序で適用されてよい。次に、ルールＲ０、Ｒ１、Ｒ７、およびＲ１５が、任意の順序で適用されてよい。最後に、ルールＲ９、Ｒ１１、およびＲ１４を任意の順序で適用することができる。
【０２１４】
図５１のルールの継承テーブル５１００に基づくと、ルールＲ５およびＲ１２は図５２に示す第１の階層に属しているので、最初に評価される。図５３は、ルールＲ５が値「１」を持ち、ルールＲ１２も値「１」を有している場合を示している。すると、ルールＲ５に後続するルールは、ルールＲ７となり、ルールＲ１２に後続するルールは、ルールＲ３となる。ルールＲ３が値「０」を有している場合には、ルールＲ７がルールＲ３に後続するルールとなる。図５２に示すように、ルールＲ３は、相互に独立したルールからなる第２の階層に属しており、ルールＲ７は、互いに独立したルールからなる第３の階層に属している。従ってルールＲ３は、ルールＲ７よりも先に評価されるのが自然である。
【０２１５】
図５４は、ルールＲ５が値「０」を有しており、ルールＲ１２が値「１」を有している場合を示している。ルールＲ５に後続するルールはルールＲ２となり、ルールＲ１２に後続するルールはルールＲ３となる。図５４に示すように、ルールＲ２およびＲ３は、互いに独立している。図５２は、ルールＲ２およびＲ３が、互いに独立したルールからなる第２の階層に属していることを示している。
【０２１６】
本願発明の特定の実施形態が詳細に説明されてきたが、説明された実施形態は、例示的であるとともに非限定的であることを意図している。図面内に示され、かつ明細書内で説明された実施形態の様々な変形および修正が、本願発明の範囲を逸脱することなく、より広範な構成で、特許請求の範囲内でなされうる。
【図１】
2013536513.tif 000010
【図２】
2013536513.tif 000011
【図３】
2013536513.tif 000012
【図４】
2013536513.tif 000013
【図５】
2013536513.tif 000014
【図６】
2013536513.tif 000015
【図７】
2013536513.tif 000016
【図８】
2013536513.tif 000017
【図９】
2013536513.tif 000018
【図１０】
2013536513.tif 000019
【図１１】
2013536513.tif 000020
【図１２】
2013536513.tif 000021
【図１３】
2013536513.tif 000022
【図１４】
2013536513.tif 000023
【図１５】
2013536513.tif 000024
【図１６】
2013536513.tif 000025
【図１７】
2013536513.tif 000026
【図１８】
2013536513.tif 000027
【図１９】
2013536513.tif 000028
【図２０】
2013536513.tif 000029
【図２１】
2013536513.tif 000030
【図２２】
2013536513.tif 000031
【図２３】
2013536513.tif 000032
【図２４】
2013536513.tif 000033
【図２５】
2013536513.tif 000034
【図２６】
2013536513.tif 000035
【図２７】
2013536513.tif 000036
【図２８】
2013536513.tif 000037
【図２９】
2013536513.tif 000038
【図３０】
2013536513.tif 000039
【図３１】
2013536513.tif 000040
【図３２】
2013536513.tif 000041
【図３３】
2013536513.tif 000042
【図３４】
2013536513.tif 000043
【図３５】
2013536513.tif 000044
【図３６】
2013536513.tif 000045
【図３７】
2013536513.tif 000046
【図３８】
2013536513.tif 000047
【図３９】
2013536513.tif 000048
【図４０】
2013536513.tif 000049
【図４１】
2013536513.tif 000050
【図４２】
2013536513.tif 000051
【図４３】
2013536513.tif 000052
【図４４】
2013536513.tif 000053
【図４５】
2013536513.tif 000054
【図４６】
2013536513.tif 000055
【図４７】
2013536513.tif 000056
【図４８】
2013536513.tif 000057
【図４９】
2013536513.tif 000058
【図５０】
2013536513.tif 000059
【図５１】
2013536513.tif 000060
【図５２】
2013536513.tif 000061
【図５３】
2013536513.tif 000062
【図５４】
2013536513.tif 000063
【国際調査報告】
2013536513.tif 000064
2013536513.tif 000065