(57)【特許請求の範囲】
【請求項１】
オンラインソーシャルネットワークの一つまたは複数のコンピューティングシステムによる方法であって、
サードパーティシステムから、ソーシャルネットワーキングシステムと関連する一つまたは複数の階層型グラフから取り出すべき特定のデータタイプのデータ構造を要求する内観的照会を受信することであって、複数の階層型グラフの各々は、一つまたは複数のノードを含み、複数のノードの各々は、一つまたは複数のデータ項目を表し、複数のデータ項目の各々は、複数のデータタイプのうちの特定の一つのタイプを有する、前記内観的照会を受信すること、
前記内観的照会を用いて前記一つまたは複数の階層型グラフから特定のデータタイプのデータ構造を取り出すことであって、データ構造は、（１）特定のデータタイプの名前、および（２）データ構造の一つまたは複数のフィールドの各々に対するフィールドの名前および説明を含む、前記特定のデータタイプのデータ構造を取り出すこと、
前記サードパーティシステムから、定義において特定されたデータ構造に対応するデータ照会を受信することであって、前記データ照会は、一つまたは複数のデータ項目を要求するものである、前記データ照会を受信すること、
前記データ照会を用いて階層型グラフから一つまたは複数の要求されたデータ項目を取り出すこと、
取り出されたデータ項目の各々がデータ構造に対応しているかどうかを判定することにより取り出されたデータ項目を検証すること
を含む方法。
【請求項２】
取り出されたデータ項目は、Ｊａｖａ（登録商標）  Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ（ＪＳＯＮ）フォーマットで表現される、請求項１に記載の方法。
【請求項３】
階層型グラフからデータ項目を取り出すことは、
一つまたは複数のノードを識別することであって、データ項目の表現の各々は、一つのノードに対応している、前記一つまたは複数のノードを識別すること、
個々のノードに基づいてノードの階層型グラフからデータ項目を取り出すこと
を含む、請求項１に記載の方法。
【請求項４】
データタイプは、階層データ構造を含む、請求項１に記載の方法。
【請求項５】
取り出されたデータ項目を検証することは、再帰的構文解析アルゴリズムを用いて行われる、請求項１に記載の方法。
【請求項６】
前記検証することは、
取り出されたデータ項目が取り出されたデータ構造と対応しなかった場合、取り出されたデータ項目を廃棄することをさらに含む、請求項１に記載の方法。
【請求項７】
ＡＰＩ呼出しにより一つまたは複数の階層型グラフにアクセスすることをさらに含む請求項１に記載の方法。
【請求項８】
階層型グラフは、ソーシャルネットワーキングシステムによって生成されたデータの表現を含む、請求項１に記載の方法。
【請求項９】
呼出しに応答して取り出されたデータ構造を前記サードパーティシステムに送ることをさらに含む、請求項１に記載の方法。
【請求項１０】
前記内観的照会を用いて取り出されたデータ構造に対応するフォーマットで表現されるデータ照会を前記サードパーティシステムから受信することをさらに含み、前記データ照会は、一つまたは複数のデータ項目を要求するものである、請求項１に記載の方法。
【請求項１１】
データ照会に応答して一つまたは複数の取り出されたデータ項目を前記サードパーティシステムに送ることをさらに含む、請求項１に記載の方法。
【請求項１２】
ソフトウェアを実装する一つまたは複数のコンピュータ読み取り可能で非一時的な記憶媒体であって、前記ソフトウェアは、実行時に
サードパーティシステムから、ソーシャルネットワーキングシステムと関連する一つまたは複数の階層型グラフから取り出すべき特定のデータタイプのデータ構造を要求する内観的照会を受信することであって、複数の階層型グラフの各々は、一つまたは複数のノードを含み、複数のノードの各々は、一つまたは複数のデータ項目を表し、複数のデータ項目の各々は、複数のデータタイプのうちの特定の一つのタイプを有する、前記内観的照会を受信すること、
前記内観的照会を用いて前記一つまたは複数の階層型グラフから特定のデータタイプのデータ構造を取り出すことであって、データ構造は、（１）特定のデータタイプの名前、および（２）データ構造の一つまたは複数のフィールドの各々に対するフィールドの名前および説明を含む、前記特定のデータタイプのデータ構造を取り出すこと、
前記サードパーティシステムから、定義において特定されたデータ構造に対応するデータ照会を受信することであって、前記データ照会は、一つまたは複数のデータ項目を要求するものである、前記データ照会を受信すること、
前記データ照会を用いて階層型グラフから一つまたは複数の要求されたデータ項目を取り出すこと、
取り出されたデータ項目の各々がデータ構造に対応しているかどうかを判定することにより取り出されたデータ項目を検証すること
を行うように動作可能である、記憶媒体。
【請求項１３】
取り出されたデータ項目は、Ｊａｖａ（登録商標）  Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ（ＪＳＯＮ）フォーマットで表現される、請求項１２に記載の記憶媒体。
【請求項１４】
データタイプは、階層データ構造を含む、請求項１２に記載の記憶媒体。
【請求項１５】
階層型グラフからデータ項目を取り出すことは、
一つまたは複数のノードを識別することであって、データ項目の表現の各々は、一つのノードに対応している、前記一つまたは複数のノードを識別すること、
個々のノードに基づいてノードの階層型グラフからデータ項目を取り出すこと
を含む、請求項１２に記載の記憶媒体。
【請求項１６】
システムであって、
一つまたは複数のプロセッサと、
前記一つまたは複数のプロセッサに接続され、一つまたは複数のプロセッサによって実行可能な命令を含むメモリとを備え、
前記一つまたは複数のプロセッサは、前記命令の実行時に
サードパーティシステムから、ソーシャルネットワーキングシステムと関連する一つまたは複数の階層型グラフから取り出すべき特定のデータタイプのデータ構造を要求する内観的照会を受信することであって、複数の階層型グラフの各々は、一つまたは複数のノードを含み、複数のノードの各々は、一つまたは複数のデータ項目を表し、複数のデータ項目の各々は、複数のデータタイプのうちの特定の一つのタイプを有する、前記内観的照会を受信すること、
前記内観的照会を用いて前記一つまたは複数の階層型グラフから特定のデータタイプのデータ構造を取り出すことであって、データ構造は、（１）特定のデータタイプの名前、および（２）データ構造の一つまたは複数のフィールドの各々に対するフィールドの名前および説明を含む、前記特定のデータタイプのデータ構造を取り出すこと、
前記サードパーティシステムから、定義において特定されたデータ構造に対応するデータ照会を受信することであって、前記データ照会は、一つまたは複数のデータ項目を要求するものである、前記データ照会を受信すること、
前記データ照会を用いて階層型グラフから一つまたは複数の要求されたデータ項目を取り出すこと、
取り出されたデータ項目の各々がデータ構造に対応しているかどうかを判定することにより取り出されたデータ項目を検証すること
を行うように動作可能である、システム。
【請求項１７】
取り出されたデータ項目は、Ｊａｖａ（登録商標）  Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ（ＪＳＯＮ）フォーマットで表現される、請求項１６に記載のシステム。
【請求項１８】
データタイプは、階層データ構造を含む、請求項１６に記載のシステム。
【請求項１９】
階層型グラフからデータ項目を取り出すことは、
一つまたは複数のノードを識別することであって、データ項目の表現の各々は、一つのノードに対応している、前記一つまたは複数のノードを識別すること、
個々のノードに基づいてノードの階層型グラフからデータ項目を取り出すこと
を含む、請求項１６に記載のシステム。
【請求項２０】
取り出されたデータ項目を検証することは、再帰的構文解析アルゴリズムを用いて行われる、請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般には、情報記憶、検索、および処理を含む情報管理に関する。
【背景技術】
【０００２】
データまたは情報は特定のフォーマットに従って編成および格納される。その後で、特定のいくつかの格納されたデータまたは情報はストレージから取り出される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
格納されたデータまたは情報を取り出す実際の手段は、データまたは情報を編成および格納するのに使用される特定のフォーマットに依存することがある。例えば、データが表フォーマットに従って（例えば、列、行、およびセルを有する表で）編成および格納される場合、特定のいくつかのデータを取り出すために、所望のいくつかのデータが格納される特定の列、行、またはセルを識別することが必要であることがある。
【課題を解決するための手段】
【０００４】
いくつかの特定の実施形態では、各階層中に任意の数のノードを含み得る１つまたは複数の階層型グラフ内にデータ項目が編成および格納される。グラフ内の特定のノード間に関係が存在することがあり、その関係は、対応するノードによって表されるデータ項目間に存在する関係を反映し得る。したがって、グラフの構造はそのグラフ内に含まれる個々のデータ項目間の関係を反映し得る。
【０００５】
いくつかの特定の実施形態では、グラフ内に格納されたデータを求めてグラフに照会し、グラフから特定のデータ項目を取り出すアプリケーションプログラミングインターフェース（ＡＰＩ）が提供される。さらに、グラフ内に格納される特定のデータ項目を求める照会は階層構造を有する言語で表現され得る。取り出されたデータ項目も階層構造で編成される。
【０００６】
いくつかの特定の実施形態では、ＡＰＩは任意の数のバージョンを有し得る。ＡＰＩの各バージョンに関連して任意の数の照会スキーマが存在し得る。照会スキーマは、グラフ内で利用可能な様々なデータタイプと、グラフからどれほど異なるタイプのデータを取り出すことができるかを含むことができる。照会スキーマを使用して、ＡＰＩの異なるバージョンが検査および検証され得る。
【０００７】
いくつかの特定の実施形態では、グラフ内に格納されたデータ項目は、様々なデータタイプを有し得る。アプリケーションは、ＡＰＩから返されるデータ項目のデータタイプおよびデータ構造を求めてＡＰＩに照会し得る。
【図面の簡単な説明】
【０００８】
【図１】階層構造を有する例示的グラフを示す図。
【図２】階層型グラフから特定のデータ項目を取り出す例示的方法を示す図。
【図３】スキーマに基づいてアプリケーションプログラミングインターフェースのバージョンを検証する例示的方法を示す図。
【図４】内観的照会（ｉｎｔｒｏｓｐｅｃｔｉｏｎ  ｑｕｅｒｙ）に基づいて階層型グラフからデータ項目を取り出す例示的方法を示す図。
【図５】例示的コンピュータシステムを示す図。
【発明を実施するための形態】
【０００９】
いくつかの特定の実施形態では、階層構造をそれぞれ有する任意の数のグラフ内にデータが編成および格納され得る。各グラフは、各階層中に任意の数のノードを含み得る。すなわち、１つのグラフ内に任意の数のレベルがあり、各レベルには任意の数のノードがある。各ノードは、いくつかの特定のデータ項目を表すことができ、またはいくつかの特定のデータ項目を格納するのに使用することができる。グラフ内の特定のノード間に関係が存在することがあり、その関係は、これらの対応するノードによって表される特定のデータ項目間の関係を反映し得る。したがって、グラフの構造はそのグラフ内に含まれる個々のデータ項目間の関係を反映し得る。いくつかの特定の実施形態では、データ項目は様々なタイプを有し得る。
【００１０】
いくつかの特定の実施形態では、グラフ内に格納されたデータを求めてグラフに照会し、グラフから特定のデータ項目を取り出すアプリケーションプログラミングインターフェース（ＡＰＩ）が提供される。いくつかの特定の実施形態では、グラフ内に格納される特定のデータ項目を求める照会は、階層構造を有する言語で表現される。したがって、照会自体が階層構造を有する。いくつかの特定の実施形態では、照会によって指定される所望のデータ項目がグラフ内で見つかると、データ項目がまたはより具体的にはこれらのデータ項目を表すかまたは含むノードが、照会に応答してグラフから取り出される。取り出されたデータ項目も階層構造で編成される。
【００１１】
いくつかの特定の実施形態では、ＡＰＩは任意の数のバージョンを有し得る。一例を挙げると、ＡＰＩは古いバージョンから新しいバージョンに時々更新され得る。別の例を挙げると、異なるプラットフォーム（例えば、モバイル、デスクトップ、ウェブベース）のために開発された異なるバージョンのＡＰＩが存在することがある。いくつかの特定の実施形態では、ＡＰＩの各バージョンに関連して任意の数の照会スキーマが存在し得る。照会スキーマは、グラフ内で利用可能な様々なデータタイプと、グラフからどれほど異なるタイプのデータを取り出すことができるかを含み得る。
【００１２】
いくつかの特定の実施形態では、正しく機能することが知られているＡＰＩの第１のバージョンが与えられると、第１および第２のバージョンにそれぞれ関連する複数の照会スキーマを使用して第２のバージョンのＡＰＩがテストされて、第２のバージョンも正しく機能することが確認され得る。第２のバージョンのＡＰＩに関連する照会スキーマは第１のバージョンに関連する照会スキーマと比較されて、例えば、第１のバージョンに関連する照会スキーマ内に存在するすべてのデータタイプが第２のバージョンに関連する照会スキーマ内にも存在することを確認することができ、第２のバージョンに関連する照会スキーマを使用してグラフから様々なタイプのデータを照会し取り出すことにより、第１のバージョンに関連する照会スキーマを使用するのと同一の結果が得られる。
【００１３】
いくつかの特定の実施形態では、グラフ内に格納されたデータ項目は様々なデータタイプを有し得る。アプリケーションは、ＡＰＩから返されるデータ項目のデータタイプおよびデータ構造を求めてＡＰＩに照会し得る。いくつかの特定の実施形態では、アプリケーションは、特定のデータタイプを求める内観的照会（すなわち、特定のデータタイプのコンテンツまたはデータ構造を検査することを求める要求）を生成し得る。アプリケーションは、ＡＰＩに内観的照会をサブミットし、特定のデータタイプのデータ構造をグラフから取り出し得る。アプリケーションは、内観的照会によって取り出されたデータ構造に基づいて、特定のデータタイプを有するデータ項目をグラフに要求するデータ照会を構築し得る。
【００１４】
図１は階層構造を有する例示的グラフ１００を示す。グラフ１００は任意の数のレベルの階層内に任意の数のノードを有し得る。階層の各レベルには１つまたは複数のノードが存在し得る。様々なタイプの関係がいくつかの特定のノード間に存在することができ、当該関係が階層の構造に反映され得る。例えば、２つの特定のノード間に親子関係が存在することがある。図１では、ノード１１０Ａがノード１１０Ｂ、１１０Ｃ、および１１０Ｄの親であり、逆に、ノード１１０Ｂ、１１０Ｃ、および１１０Ｄはいずれもノード１１０Ａの子であり得る。一般には、ひとつのノードは任意の数の子または親を有し得る。別の例では、２つの特定のノード間に兄弟関係が存在することがある。図１では、ノード１１０Ｂ、１１０Ｃ、および１１０Ｄは共通の親ノード１１０Ａを共有する兄弟である。第３の例を挙げると、２つの特定のノード間に接続が存在してもよい。図１では、ノード１１０Ａおよび１１０Ｅの間にひとつの接続が存在する。
【００１５】
いくつかの特定の実施形態では、データはグラフ１００などの階層型グラフに編成され格納される。グラフ内の各ノードは、いくつかの特定のデータ項目を表すかまたは含み得る。グラフの構造はノード間の関係を反映し、したがってこれらのノードによって表されるかまたはこれらのノード内に含まれる特定のデータ項目間の関係を反映する。
【００１６】
いくつかの特定の実施形態では、ソーシャルネットワーキングシステムに関連するデータまたは情報が、任意の数の階層型グラフ内に格納され得る。ソーシャルネットワーキングシステムに関連する様々なタイプのデータがあり、いくつかの特定のデータ項目は特定のノードによって表されるかまたは特定のノード内に含まれる。例えば、いくつかのノードは、ソーシャルネットワーキングシステムの個々のユーザを表すことができ、そのようなノードのうちの２つに対応する２人のユーザがソーシャルネットワーキングシステム内の「友人」である場合に、当該２つのノードは接続され得る。いくつかのノードは、特定のユーザによって実施される活動（例えば、オンラインまたはオフライン）を表してもよい。ユーザを表すノードと、そのユーザによって実施される活動を表すノードとは接続され得る。さらに、ユーザを表すノードは、そのユーザによって実施される活動を表すノードの親とみなすことができ、ユーザと活動との間の関係（すなわち、ユーザが活動を実施する）を反映する。いくつかのノードは、特定のユーザに関連するコンテンツ（例えば、画像、ビデオ、ポスト、メッセージ、フィード）を表し得る。ノードおよびその子ノードは、フォトアルバムおよびそのフォトアルバムに属する特定の写真をそれぞれ表してもよい。この場合、フォトアルバムを表すノードと、そのフォトアルバムに属する画像を表す各ノードとの間に接続が存在し得る。別のノードおよびその子ノードは、ユーザおよびそのユーザによってアップロードされたフォトアルバムをそれぞれ表すことがある。
【００１７】
いくつかの特定の実施形態では、データ（例えば、ソーシャルネットワーキングシステムに関連するデータ）を含むグラフは、（例えば、データストアまたはメモリ内に）格納され、所望されるときにはいつでもグラフから特定のデータ項目を取り出し得る。いくつかの特定の実施形態では、グラフ内に格納されたデータを求めてグラフに照会し、グラフから特定のデータ項目を取り出すＡＰＩが提供される。
【００１８】
図２は階層型グラフから特定のデータ項目を取り出す例示的方法を示す。いくつかの特定の実施形態では、データが階層型グラフ内に格納され、グラフ内の各ノードが１つまたは複数の特定のデータ項目を含むかまたは表すものと想定する。ユーザは、ＡＰＩを使用して、これらの階層型グラフ内に格納された特定のデータ項目を照会し得る。
【００１９】
いくつかの特定の実施形態では、図２に示す方法は、ユーザが階層型グラフから取り出すべき特定のデータ項目を識別する照会を送り得るステップ２１０で開始される。例えば、適切なコンピュータまたは通信接続（例えば、ワイヤレスまたはワイヤーライン接続）を介して、ユーザ装置（例えば、モバイルまたは非モバイルユーザ装置）から、グラフを管理するコンピューティングシステム（例えば、サーバ）に照会は送られる。いくつかの特定の実施形態では、適切なＡＰＩ呼出しがユーザ装置によって起動されてサーバに照会を送る。
【００２０】
いくつかの特定の実施形態では、照会は階層構造を有する言語で表現される。さらに、いくつかの特定の実施形態では、言語は事前定義された構文を有してもよい。以下に例示的照会を示す。
【００２１】
【表１】
0006031203.tif 000002
この例では、「ｍｅ」は、照会をサブミットするユーザであり、「ｉｄ」は、オブジェクト（例えば、ユーザまたはデータ項目）に関連する固有の識別子である。この例示的照会は、「ｍｙ＿ｏｂｊｅｃｔｓ」という特定のタイプの最初の１０個のデータ項目を要求する。この例示的照会が示すように、この照会は階層構造を有する。この階層のトップレベルは「ｍｅ」である。「ｍｅ」内にネスト化される第２のレベルは、「ｉｄ」、「ｎａｍｅ」、および「ｍｙ＿ｏｂｊｅｃｔｓ」である。「ｍｙ＿ｏｂｊｅｃｔｓ」内にネスト化される第３のレベルは「ｎｏｄｅｓ」である。以下同様である。
【００２２】
いくつかの特定の実施形態では、ステップ２２０で、照会で指定されるデータ項目がグループから取り出される。より具体的には、指定されるデータ項目を表すかまたは含むノードがグループから識別されて、これらのノードからデータ項目が取り出される。照会において特定のデータ項目がその固有の識別子、そのデータタイプ、または任意の他の適用可能な手段（例えば、１つまたは複数の基準を満たすデータ項目）によって識別され得る。
【００２３】
いくつかの特定の実施形態では、データ項目は特定のデータタイプを有し得る。例えば、１つのタイプのデータ項目は「ｕｓｅｒ」でよく、別のタイプのデータ項目は「ｍｅｓｓａｇｅ  ｐｏｓｔ」でよく、第３のタイプのデータ項目は「ｉｍａｇｅ」でよく、以下同様である。本開示は任意の適用可能なデータタイプを企図する。いくつかの特定の実施形態では、新しいデータタイプが必要に応じて（例えば、システムマネージャ、またはユーザ、またはサードパーティ開発者によって）定義され追加され得る。これらのデータタイプの定義は、ＡＰＩおよびグラフに関するスキーマを形成し得る。特定のデータタイプの定義は、どのようにそのタイプのデータ項目を照会し、グラフから取り出すことができるかを指定し得る。以下に、「ｎｏｄｅ」と呼ばれるデータタイプの例示的定義を示す。この定義はデータタイプ「ｎｏｄｅ」を記述し、この定義をスキーマ内に含めることができる。
【００２４】
【表２】
0006031203.tif 000003
この例示的データタイプでは、その定義によって定義されるように、このタイプの名前は「ｎｏｄｅ」である。タイプのフィールドは「ｉｄ」および「ｕｒｌ」を含む。さらに、データタイプ自体およびそのフィールドのそれぞれの説明も定義内に含めることができる（例えば、ＡＰＩコードの一部として）。
【００２５】
いくつかの特定の実施形態では、ユーザは、適切なＡＰＩ呼出しを起動して、スキーマで定義された特定のデータタイプに関する情報を求めてそのデータタイプを照会し得る。例えば、「ｎｏｄｅ」を求めて照会するために、ユーザは、次のような照会をサブミットし得る。
【００２６】
【表３】
0006031203.tif 000004
照会は、タイプ「ｎｏｄｅ」自体の名前および説明、ならびにタイプ「ｎｏｄｅ」のフィールドの名前および説明を要求する。この照会の結果、以下の応答が得られる。
【００２７】
【表４】
0006031203.tif 000005
応答は、上記で示した「ｎｏｄｅ」の定義で定義されるように、タイプ「ｎｏｄｅ」およびそのフィールドのそれぞれ（すなわち、「ｉｄ」および「ｕｒｌ」）の名前および説明を含む。さらに、応答も、照会の階層構造に対応する階層構造に構成される。
【００２８】
この例が示すように、いくつかの特定の実施形態では、特定のデータタイプを記述する情報をそのデータタイプの定義内に含めることができる。ＡＰＩを使用してデータ項目を照会するのと同様に、ＡＰＩを使用してデータタイプの説明を照会し得る。この意味で、ＡＰＩは自己ドキュメンティング（ｓｅｌｆ−ｄｏｃｕｍｅｎｔｉｎｇ）である。すなわち、データタイプのドキュメンテーションが、その定義の部分としてスキーマ内に含まれる。
【００２９】
いくつかの特定の実施形態では、階層型グラフ内に格納されたデータ項目のうちのいくつかまたはすべてに関連するプライバシー保護が存在し得る。あるデータ項目は、特定のリストのユーザによってのみアクセスでき、他のユーザによってアクセスできない。例えば、あるユーザが写真（すなわち、データ項目）をポストするとき、そのユーザは、そのユーザのソーシャルフレンドだけが写真を閲覧できるように指定し得る。この場合、このユーザと友人ではない他のユーザは、この特定の写真にアクセスすることが許可されない。
【００３０】
いくつかの特定の実施形態では、照会に応答してデータ項目を取り出すとき、特定のデータ項目に関連するプライバシー保護が考慮に入れられる。一例を挙げると、第１のユーザが照会を行って、第２のユーザ（例えば、第１のユーザの友人）によってポストされた最新１０個のメッセージを要求する状況を想定する。照会に応答してこれらのメッセージを第１のユーザのために取り出すとき、第２のユーザによってポストされた各メッセージは、第１のユーザがそのメッセージにアクセス許可されているかどうかを判定するために解析され得る。第２のユーザによってポストされた最新１０個のメッセージの中で、（例えば、第２のユーザによって指定される）３つは第３のユーザだけが閲覧することができ、７つは第１のユーザを含むすべてのユーザが閲覧できる状況を想定する。この場合、第１のユーザの照会に応答して、７つのメッセージだけが取り出される。第１のユーザは、第３のユーザだけが閲覧することのできる３つのメッセージを閲覧することが許可されないので、これらの特定のメッセージは、第１のユーザのために取り出されない。その代わりに、第１のユーザの照会によって要求されるように１０個のメッセージを埋め合わせるために、第１のユーザの閲覧が許可される、第２のユーザによってポストされた（例えば、逆発生順（ｒｅｖｅｒｓｅ  ｃｈｒｏｎｏｌｏｇｉｃａｌ  ｏｒｄｅｒ）で識別される）３つのわずかに古いメッセージが取り出され、先述の７つのメッセージと組み合わされる。一方、第２のユーザによってポストされた最新１０個のメッセージを要求するのが第３のユーザである場合、第３のユーザは、これらのメッセージのすべてを閲覧することを許可されるので、第３のユーザの照会に応答して、１０個の最新のメッセージのすべてを取り出すことができる。この例が示すように、２人のユーザが同一の照会をサブミットするとき、データ項目に関連するプライバシー保護のために、その２人のユーザは応答として異なる結果を受信することがある。
【００３１】
いくつかの特定の実施形態では、多数のデータ項目の取り出しが一連の照会に応答して実行され得る。このことは、モバイル装置などのいくつかのタイプのユーザ装置にとって性能改善の点で役立つことがある。一例を挙げると、あるユーザが、当該ユーザのソーシャルフレンドのすべてによってポストされた最新１００枚の写真を取り出して閲覧することを望む状況を想定する。１００枚の写真を求める単一の照会をサブミットする代わりに、ユーザは、各照会が１度に１０枚の写真を要求する一連の１０個の照会をサブミットし得る。このようにして、ユーザは、他の写真が取り出されユーザの装置に送られる間に、いくつかの写真の閲覧を開始することができる。さらに、ユーザは、（例えば、すべての１００枚の写真を一緒に閲覧するのではなく）ある時にいくつかの写真を閲覧し、別の時に残りの写真を閲覧することができる。
【００３２】
いくつかの特定の実施形態では、ユーザによってサブミットされた照会およびその応答が記録され得る。上記の例では、ユーザがそのユーザの友人によってポストされた最新１０枚の写真を求める第１の照会をサブミットしたとき、ユーザにとってアクセス可能な１０枚の最新の写真がグラフから取り出されユーザに送られ得る。さらに、ユーザに送られた１０枚の写真がまたはその１０枚の写真のうちの最後の１枚が記録されてもよい。その後ユーザが別の１０枚の写真を求める第２の照会をサブミットしたとき、ユーザにとってアクセス可能な、逆発生順で前の１０枚の写真の後から始まる２番目に新しい１０枚の写真群がグラフから取り出されユーザに送られてもよい。この場合も、ユーザにこの時送られた１０枚の写真群のうちの最後の１枚が記録されてもよい。ユーザがさらに別の１０枚の写真を求める第３の照会をサブミットしたとき、ユーザにとってアクセス可能な、逆発生順で前の１０枚の写真の後から始まる３番目に新しい１０枚の写真群がグラフから取り出されユーザに送られ得る。以下同様である。このようにして、データ検索工程は、ユーザのためのページ付け（ｐａｇｉｎａｔｉｏｎ）を自動的に処理する。
【００３３】
ステップ２３０で、取り出したデータ項目は階層フォーマットに従って編成され、照会をサブミットするユーザに送られる。時には、要求されたデータ項目を表すかまたは含むノードは、異なる複数のグラフに属することがある。この場合、当該データ項目は、適切な複数のグラフ内の適切な複数のノードから取り出されて、単一の階層構造に構成され得る。
【００３４】
いくつかの特定の実施形態では、出力されるデータ項目の階層構造は、照会の階層構造に対応し得る。照会がタイプ「ｎｏｄｅ」自体の名前および説明と、その後に続くタイプ「ｎｏｄｅ」のフィールドの名前および説明を要求する上記の例で示したように、出力されるデータ項目が階層構造に構成される。１つのレベルはタイプ「ｎｏｄｅ」である。「ｎｏｄｅ」内にネスト化される次のレベルは、タイプ「ｎｏｄｅ」の名前、説明、フィールドである。「ｆｉｅｌｄｓ」内にネスト化されるさらに次のレベルは、タイプ「ｎｏｄｅ」のフィールドのそれぞれの名前および説明である。出力されるデータ項目の構成は、照会の構成に対応する。
【００３５】
いくつかの特定の実施形態では、個々のデータタイプの定義は、１つまたは複数のスキーマを形成し得る。これらの定義はデータ項目がその定義に基づいて照会され取り出されるように、ＡＰＩ内に含められ得る。多くの場合、異なるバージョンのＡＰＩが存在し得る。例えば、時々、ＡＰＩは古いバージョンから新しいバージョンに更新され得る。異なるプラットフォーム（例えば、モバイルと非モバイルの、異なるオペレーティングシステム）のために異なるバージョンのＡＰＩを実装することができ、各バージョンは、対応するプラットフォームに特に適したコードを含むことになる。
【００３６】
いくつかの特定の実施形態では、スキーマを使用して、特定のバージョンのＡＰＩがテストされ検証され得る。図３はスキーマを使用してＡＰＩのバージョンを検証する例示的方法を示す。正しく機能することが知られている第１のバージョンのＡＰＩがあると想定する。１つまたは複数のスキーマを第１のバージョンのＡＰＩに関連付けることができ、これらのスキーマは、利用可能なすべてのデータタイプ（例えば、階層型グラフ内に格納されたデータ項目が属するデータタイプ）の定義を含むことができる。第２のバージョンのＡＰＩが利用可能となる、とさらに想定する。
【００３７】
ステップ３１０で、第１のバージョンのＡＰＩに関連するスキーマが記録され得る。次いで、第２のバージョンのＡＰＩを使用して、（例えば、テストおよび検証のために）グループからデータ項目が取り出され得る。いくつかの特定の実施形態では、ステップ３２０において、例えば、第１のバージョンに関連するスキーマ内のデータタイプのすべての定義が第２のバージョンに関連するスキーマ内でも見つかること（すなわち、第２のバージョンに欠落しているデータタイプはない）、または第２のバージョンに関連するスキーマで見つかる特定のデータタイプの定義が第１のバージョンに関連するスキーマで見つかるものと同一であること、または特定の照会に応答して第２のバージョンのＡＰＩを使用してデータ項目を取り出すことが、第１のバージョンを使用するのと同一の結果を生み出す（すなわち、第１のバージョンに関連するスキーマに従って表現された照会と、同一のデータ項目に関する第２のバージョンに関連するスキーマに従って表現された照会とを使用することが、同一の結果を生み出す）ことを確認するために、第２のバージョンのＡＰＩに関連するスキーマが第１のバージョンに関連するスキーマと比較され得る。
【００３８】
第２のバージョンのＡＰＩがスキーマに基づいて正しく機能する場合、第２のバージョンはリリースされ得る。そうでない場合、第２のバージョンがリリース可能になる前に、第２のバージョンのエラー（例えば、データタイプ定義の紛失、または誤ったデータタイプ定義）をまず訂正する必要がある。
【００３９】
前述のように、階層型グラフ内に格納されたデータ項目は、様々なデータタイプを有することができる。通常、アプリケーション（またはアプリケーションのコードを書くプログラマ）は、特定のタイプのデータ項目をデータベース（例えば、階層型グラフ）に照会し、データベースから取り出す（または取り出したデータ項目のデータタイプを検証する）前に、特定のデータタイプの定義を必要とする。いくつかの特定の実施形態は、内観的照会に基づいて階層型グラフからデータ項目を取り出し得る。いくつかの特定の実施形態は、グラフのＡＰＩに内観的照会をサブミットして、特定のデータタイプのデータ構造を取り出し得る。次いでいくつかの特定の実施形態は、内観的照会によって取り出されたデータ構造に基づいて、特定のデータタイプのデータ項目を求めるデータ照会をＡＰＩにサブミットし得る。いくつかの特定の実施形態はまた、応答のデータ構造を取り出されたデータ構造と比較することにより、データ照会に対する応答を検証してもよい。
【００４０】
図４は内観的照会に基づいて階層型グラフからデータ項目を取り出す例示的方法を示す。いくつかの特定の実施形態では、図４に示す方法はアプリケーションが特定のデータタイプのデータ構造を要求する第１の照会（内観的照会）を送るステップ４１０で開始し得る。いくつかの特定の実施形態では、ステップ４２０で、アプリケーションはグラフから特定のデータタイプのデータ構造を取り出し得る。例えば、ユーザのクライアント装置によってホストされるアプリケーションにより、適切なコンピュータまたは通信接続（例えが、ワイヤレスまたはワイヤーライン接続）を介して、グラフを管理する１つまたは複数のコンピューティングシステム（例えば、サーバ）に内観的照会を送り得る。いくつかの特定の実施形態では、適切なＡＰＩ呼出しがアプリケーションによって起動されて、サーバに内観的照会を送り、サーバから結果を取り出す。いくつかの特定の実施形態では、特定のデータタイプのデータ構造を要求する照会は、階層構造を有する言語で表現され得る。さらに、いくつかの特定の実施形態では、言語は事前定義された構文を有し得る。以下に例示的内観的照会を示す。
【００４１】
【表５】
0006031203.tif 000006
この照会は、（プレフィックス「ｔｙｐｅ」によって示されるように）データタイプ「ｍｙ＿ｏｂｊｅｃｔｓ」の名前およびフィールドを要求する。照会はまた、データタイプ「ｍｙ＿ｏｂｊｅｃｔｓ」のフィールドの１つまたは複数の子データ構造が存在する場合にその名前およびフィールドを要求する。取り出されたデータ構造（すなわち、内観的照会に対する応答）をＪａｖａ（登録商標）  Ｓｃｒｉｐｔ  Ｏｂｊｅｃｔ  Ｎｏｔａｔｉｏｎ（ＪＳＯＮ）フォーマットで表現することができる。例えば、照会の結果、以下の応答が得られる。
【００４２】
【表６】
0006031203.tif 000007
応答は、データタイプ「ｍｙ＿ｏｂｊｃｔｓ」の名前、およびそのフィールド（すなわち、「ｉｄ」、「ｃｏｍｍｅｎｔ＿ｃｏｕｎｔ」、および「ａｃｔｏｒｓ」）のそれぞれの名前を含む。応答はまた、フィールド「ａｃｔｏｒｓ」のフィールド（すなわち、「ｉｄ」および「ｆｒｉｅｎｄｓ」）のそれぞれの名前をも含む。すなわち、データタイプ「ｍｙ＿ｏｂｊｃｔｓ」は、「ｎａｍｅ」、「ｉｄ」、「ｃｏｍｍｅｎｔ＿ｃｏｕｎｔ」、および「ａｃｔｏｒｓ」をトップレベルに含む階層データ構造を有すると共に、「ｉｄ」および「ｆｒｉｅｎｄｓ」が、第２のレベルで「ａｃｔｏｒｓ」内にネスト化される。
【００４３】
いくつかの特定の実施形態では、ステップ４３０で、アプリケーションが、特定のデータタイプを有する１つまたは複数の特定のデータ項目を要求する第２の照会（データ照会）を生成し得る。いくつかの特定の実施形態では、データ照会は、指定されたデータタイプの取り出されたデータ構造に対応するフォーマットで表現され得る。以下に例示的データ照会を示す。
【００４４】
【表７】
0006031203.tif 000008
この例では、アプリケーションは、固有の識別子「ｉｄ」を有するユーザ「ｍｅ」からの要求に基づいて照会をサブミットする。この照会は、特定のデータタイプ「ｍｙ＿ｏｂｊｅｃｔｓ」の最初の３つのデータ項目を要求する。照会は、指定されたデータタイプ「ｍｙ＿ｏｂｊｃｔｓ」の取り出されたデータ構造に対応する階層フォーマットで表現され、照会要求の結果、トップレベルで「ｉｄ」、「ｃｏｍｍｅｎｔ＿ｃｏｕｎｔ」、および「ａｃｔｏｒｓ」が得られ、第２のレベルで「ａｃｔｏｒｓ」内にネスト化される「ｉｄ」および「ｆｒｉｅｎｄｓ」が得られる。
【００４５】
いくつかの実施形態では、アプリケーションは、指定されたデータタイプ「ｍｙ＿ｏｂｊｃｔｓ」の取り出されたデータ構造内のすべてではないがいくつかのフィールドを有する第２の照会（データ照会）を生成することができる。以下に別の例示的データ照会を示す。
【００４６】
【表８】
0006031203.tif 000009
照会要求の結果、トップレベルで「ｉｄ」および「ａｃｔｏｒｓ」が得られ、第２のレベルで「ａｃｔｏｒｓ」内にネスト化される「ｉｄ」および「ｆｒｉｅｎｄｓ」が得られる。指定されたデータタイプ「ｍｙ＿ｏｂｊｃｔｓ」の取り出されたデータ構造のトップレベルのフィールド「ｃｏｍｍｅｎｔ＿ｃｏｕｎｔ」は、照会では省略される。いくつかの特定の実施形態では、ステップ４４０で、アプリケーションが、グラフから特定のデータ項目を取り出し得る。取り出されたデータ項目はＪＳＯＮフォーマットで表現され得る。例えば、照会の結果、以下の応答が得られる。
【００４７】
【表９】
0006031203.tif 000010
この応答は、「ｉｄ」がそれぞれ「０１２３」、「２３４５」、および「６７８９」である３つの結果を含む。
【００４８】
データ照会が応答のデータ構造を完全に記述するので、いくつかの特定の実施形態は、データ照会のデータ構造（特定のデータタイプの取り出されたデータ構造に基づくもの）に対して応答を検証し得る。いくつかの特定の実施形態では、アプリケーションは、特定のデータタイプの取り出されたデータ構造に基づいて、取り出されたデータ項目を検証し得る。アプリケーションは、取り出されたデータ項目を再帰的構文解析アルゴリズムで検査することにより、取り出されたデータ項目を特定のデータタイプの取り出されたデータ構造と比較し得る。例えば、アプリケーションは、「０１２３」および「６７８９」の「ｉｄ」を有する上記の結果が、「ｉｄ」および「ａｃｔｏｒｓ」がトップレベルにあると共に、「ｉｄ」および「ｆｒｉｅｎｄｓ」が第２のレベルで「ａｃｔｏｒｓ」内にネスト化される、取り出されたデータ構造と一致するデータ構造を有すると判定することができる。アプリケーションは、「２３４５」の「ｉｄ」を有する上記の結果が、取り出されたデータ構造と一致するデータ構造を有しないと判定することができる。「２３４５」の「ｉｄ」を有する結果は、そのデータ構造のトップレベルに「ｉｄ」および「ａｃｔｏｒｓ」を有するが、そのデータ構造の第２のレベルで「ａｃｔｏｒｓ」内にネスト化される「ｉｄ」および「ｐｒｏｆｉｌｅ＿ｐｉｃ＿ｉｍｇ」を有する。「２３４５」の「ｉｄ」を有する結果は、予期しないデータ構造を有し、誤った結果の可能性があるので、アプリケーションは、「２３４５」の「ｉｄ」を有する結果を廃棄し得る。アプリケーションはまた、ＡＰＩに別のデータ照会をサブミットして、特定のデータタイプの１つまたは複数のデータ項目をグラフから取り出し得る。
【００４９】
いくつかの特定の実施形態は、適切な場合に図４の方法のステップを反復し得る。なお本開示は図４の方法の特定のステップが特定の順序で行われるものとして説明および図示するが、図４の方法の任意の適切なステップが任意の適切な順序で行われることも企図する。さらに、本開示は、図４の方法の特定のステップを実施する特定の構成要素、装置、またはシステムを説明および図示するが、図４の方法の任意の適切なステップを実施する任意の適切な構成要素、装置、またはシステムの任意の適切な組合せも企図する。
【００５０】
１つまたは複数のコンピュータシステム上で特定の実施形態を実装することができる。図５に、例示的コンピュータシステム５００を示す。いくつかの特定の実施形態では、１つまたは複数のコンピュータシステム５００は、本明細書で説明または図示する１つまたは複数の方法の１つまたは複数のステップを実施する。いくつかの特定の実施形態では、１つまたは複数のコンピュータシステム５００は、本明細書で説明または図示する機能を提供する。いくつかの特定の実施形態では、１つまたは複数のコンピュータシステム５００上で動作するソフトウェアが、本明細書で説明または図示する１つまたは複数の方法の１つまたは複数のステップを実施し、または本明細書で説明または図示する機能を提供する。いくつかの特定の実施形態は、１つまたは複数のコンピュータシステム５００の１つまたは複数の部分を含む。
【００５１】
本開示は、任意の適切な数のコンピュータシステム５００を企図する。本開示は、任意の適切な物理的形態を取るコンピュータシステム５００を企図する。限定ではなく例として、コンピュータシステム５００は、組込みコンピュータシステム、システムオンチップ（ＳＯＣ）、シングルボードコンピュータシステム（ＳＢＣ）（例えば、コンピュータオンモジュール（ＣＯＭ）やシステムオンモジュール（ＳＯＭ）など）、デスクトップコンピュータシステム、ラップトップまたはノートブックコンピュータシステム、対話型キオスク、メインフレーム、コンピュータシステムのメッシュ、携帯電話、携帯情報端末（ＰＤＡ）、サーバ、またはこれらうちの２つ以上の組合せでよい。適切な場合、コンピュータシステム５００は、一体型または分散型の、複数の位置にわたる、複数のマシンにわたる、あるいはクラウド内に常駐する、１つまたは複数のコンピュータシステム５００を含むことができ、クラウドは、１つまたは複数のネットワーク内の１つまたは複数のクラウド構成要素を含むことができる。適切な場合、１つまたは複数のコンピュータシステム５００は、実質的な空間的または時間的な限定なしに、本明細書で説明または図示する１つまたは複数の方法の１つまたは複数のステップを実施することができる。限定ではなく例として、１つまたは複数のコンピュータシステム５００は、本明細書で説明または図示する１つまたは複数の方法の１つまたは複数のステップをリアルタイムに、またはバッチモードで実施することができる。適切な場合、１つまたは複数のコンピュータシステム５００は、本明細書で説明または図示する１つまたは複数の方法の１つまたは複数のステップを異なる時刻または異なる場所で実施することができる。
【００５２】
いくつかの特定の実施形態では、コンピュータシステム５００は、プロセッサ５０２、メモリ５０４、ストレージ５０６、入力／出力（Ｉ／Ｏ）インターフェース５０８、通信インターフェース５１０、およびバス５１２を含む。本開示は、特定の構成の、特定の数の特定の構成要素を有する特定のコンピュータシステムを説明および図示するが、任意の適切な構成の、任意の適切な数の任意の適切な構成要素を有する任意の適切なコンピュータシステムを企図する。
【００５３】
いくつかの特定の実施形態では、プロセッサ５０２は、コンピュータプログラムを構成するような命令を実行するハードウェアを含む。限定ではなく例として、命令を実行するために、プロセッサ５０２は、内部レジスタ、内部キャッシュ、メモリ５０４、またはストレージ５０６から命令を取り出し（またはフェッチし）、それを復号化および実行し、次いで内部レジスタ、内部キャッシュ、メモリ５０４、またはストレージ５０６に１つまたは複数の結果を書き込むことができる。いくつかの特定の実施形態では、プロセッサ５０２は、データ、命令、またはアドレスのための１つまたは複数の内部キャッシュを含むことができる。適切な場合、本開示は、任意の適切な数の任意の適切な内部キャッシュを含むプロセッサ５０２を企図する。限定ではなく例として、プロセッサ５０２は、１つまたは複数の命令キャッシュ、１つまたは複数のデータキャッシュ、および１つまたは複数のトランスレーションルックアサイドバッファ（ＴＬＢ）を含むことができる。命令キャッシュ内の命令は、メモリ５０４またはストレージ５０６内の命令のコピーでよく、命令キャッシュは、プロセッサ５０２によるそうした命令の検索を加速することができる。データキャッシュ内のデータは、プロセッサ５０２で実行中の命令が演算するための、メモリ５０４またはストレージ５０６内のデータのコピー、プロセッサ５０２で実行中の後続の命令がアクセスするための、またはメモリ５０４またはストレージ５０６に書き込むための、プロセッサ５０２で実行された以前の命令の結果、あるいは他の適切なデータでよい。データキャッシュは、プロセッサ５０２による読取りまたは書込み操作を加速することができる。ＴＬＢは、プロセッサ５０２のための仮想アドレス変換を加速することができる。いくつかの特定の実施形態では、プロセッサ５０２は、データ、命令、またはアドレスのための１つまたは複数の内部レジスタを含むことができる。適切な場合、本開示は、任意の適切な数の任意の適切な内部レジスタを含むプロセッサ５０２を企図する。適切な場合、プロセッサ５０２は、１つまたは複数の演算論理装置（ＡＬＵ）を含むことができ、マルチコアプロセッサでよく、あるいは１つまたは複数のプロセッサ５０２を含むことができる。本開示は特定のプロセッサを説明および図示するが、任意の適切なプロセッサを企図する。
【００５４】
いくつかの特定の実施形態では、メモリ５０４は、プロセッサ５０２が実行するための命令、またはプロセッサ５０２が演算するためのデータを格納するメインメモリを含む。限定ではなく例として、コンピュータシステム５００は、ストレージ５０６または別のソース（例えば、別のコンピュータシステム５００など）からメモリ５０４に命令をロードすることができる。次いでプロセッサ５０２は、メモリ５０４から内部レジスタまたは内部キャッシュに命令をロードすることができる。命令を実行するために、プロセッサ５０２は、内部レジスタまたは内部キャッシュから命令を取り出し、それを復号化することができる。命令の実行中、または実行後、プロセッサ５０２は、１つまたは複数の結果（これは中間結果または最終結果でよい）を内部レジスタまたは内部キャッシュに書き込むことができる。次いでプロセッサ５０２は、こうした結果のうちの１つまたは複数をメモリ５０４に書き込むことができる。いくつかの特定の実施形態では、プロセッサ５０２は、１つまたは複数の内部レジスタまたは内部キャッシュ、あるいは（ストレージ５０６または別の場所ではなく）メモリ５０４内の命令だけを実行し、１つまたは複数の内部レジスタまたは内部キャッシュ、あるいは（ストレージ５０６または別の場所ではなく）メモリ５０４内のデータだけに対して演算する。１つまたは複数のメモリバス（これはアドレスバスおよびデータバスをそれぞれ含むことができる）が、プロセッサ５０２をメモリ５０４に結合することができる。バス５１２は、以下で説明するように、１つまたは複数のメモリバスを含むことができる。いくつかの特定の実施形態では、１つまたは複数のメモリ管理ユニット（ＭＭＵ）が、プロセッサ５０２とメモリ５０４との間に存在し、プロセッサ５０２によって要求されるメモリ５０４へのアクセスを容易にする。いくつかの特定の実施形態では、メモリ５０４はランダムアクセスメモリ（ＲＡＭ）を含む。適切な場合、このＲＡＭは揮発性メモリでよい。適切な場合、このＲＡＭはダイナミックＲＡＭ（ＤＲＡＭ）またはスタティックＲＡＭ（ＳＲＡＭ）でよい。さらに、適切な場合、このＲＡＭはシングルポートＲＡＭまたはマルチポートＲＡＭでよい。本開示は任意の適切なＲＡＭを企図する。適切な場合、メモリ５０４は、１つまたは複数のメモリ５０４を含むことができる。本開示は特定のメモリを説明および図示するが、任意の適切なメモリを企図する。
【００５５】
いくつかの特定の実施形態では、ストレージ５０６は、データまたは命令のためのマスストレージを含む。限定ではなく例として、ストレージ５０６は、ＨＤＤ、フロッピィディスクドライブ、フラッシュメモリ、光ディスク、光磁気ディスク、磁気テープ、またはユニバーサルシリアルバス（ＵＳＢ）ドライブ、あるいはこれらのうちの２つ以上の組合せを含むことができる。適切な場合、ストレージ５０６は、取外し可能または取外し不能（すなわち固定）媒体を含むことができる。適切な場合、ストレージ５０６は、コンピュータシステム５００の内部または外部でよい。いくつかの特定の実施形態では、ストレージ５０６は不揮発性固体メモリである。いくつかの特定の実施形態では、ストレージ５０６は読取り専用メモリ（ＲＯＭ）を含む。適切な場合、このＲＯＭは、マスクプログラムされたＲＯＭ、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、電気消去可能ＰＲＯＭ（ＥＥＰＲＯＭ）、電気書換え可能ＲＯＭ（ＥＡＲＯＭ）、またはフラッシュメモリ、あるいはこれらのうちの２つ以上の組合せでよい。本開示は、任意の適切な物理的形態を取るマスストレージ５０６を企図する。適切な場合、ストレージ５０６は、プロセッサ５０２とストレージ５０６との間の通信を容易にする１つまたは複数のストレージ制御ユニットを含むことができる。適切な場合、ストレージ５０６は１つまたは複数のストレージ５０６を含むことができる。本開示は特定のストレージを説明および図示するが、任意の適切なストレージを企図する。
【００５６】
いくつかの特定の実施形態では、Ｉ／Ｏインターフェース５０８は、コンピュータシステム５００と、１つまたは複数のＩ／Ｏ装置との間の通信のための１つまたは複数のインターフェースを提供するハードウェア、ソフトウェア、またはその両方を含む。適切な場合、コンピュータシステム５００は、これらのＩ／Ｏ装置のうちの１つまたは複数を含むことができる。これらのＩ／Ｏ装置のうちの１つまたは複数は、人とコンピュータシステム５００との間の通信を可能にすることができる。限定ではなく例として、Ｉ／Ｏ装置は、キーボード、キーパッド、マイクロフォン、モニタ、マウス、プリンタ、スキャナ、スピーカ、スチルカメラ、スタイラス、タブレット、タッチスクリーン、トラックボール、ビデオカメラ、別の適切なＩ／Ｏ装置、またはこれらのうちの２つ以上の組合せを含むことができる。Ｉ／Ｏ装置は１つまたは複数のセンサを含むことができる。本開示は、任意の適切なＩ／Ｏ装置、およびそのための任意の適切なＩ／Ｏインターフェース５０８を企図する。適切な場合、Ｉ／Ｏインターフェース５０８は、プロセッサ５０２がこれらのＩ／Ｏ装置のうちの１つまたは複数を駆動することを可能にする１つまたは複数の装置またはソフトウェアドライバを含むことができる。適切な場合、Ｉ／Ｏインターフェース５０８は、１つまたは複数のＩ／Ｏインターフェース５０８を含むことができる。本開示は特定のＩ／Ｏインターフェースを説明および図示するが、任意の適切なＩ／Ｏインターフェースを企図する。
【００５７】
いくつかの特定の実施形態では、通信インターフェース５１０は、コンピュータシステム５００と、１つまたは複数の他のコンピュータシステム５００または１つまたは複数のネットワークとの間の通信（例えば、パケットベースの通信など）のための１つまたは複数のインターフェースを提供するハードウェア、ソフトウェア、またはその両方を含む。限定ではなく例として、通信インターフェース５１０は、イーサネット（登録商標）または他のワイヤベースのネットワークと通信するネットワークインターフェースコントローラ（ＮＩＣ）またはネットワークアダプタ、あるいはＷＩ−ＦＩネットワークなどのワイヤレスネットワークと通信するワイヤレスＮＩＣ（ＷＮＩＣ）またはワイヤレスアダプタを含むことができる。本開示は、任意の適切なネットワーク、およびそのための任意の適切な通信インターフェース５１０を企図する。限定ではなく例として、コンピュータシステム５００は、アドホックネットワーク、パーソナルエリアネットワーク（ＰＡＮ）、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、大都市圏ネットワーク（ＭＡＮ）、またはインターネットのうちの１つもしくは複数の部分、あるいはこれらのうちの２つ以上の組合せと通信することができる。これらのネットワークのうちの１つまたは複数の１つまたは複数の部分は、ワイヤードまたはワイヤレスでよい。一例を挙げると、コンピュータシステム５００は、ワイヤレスＰＡＮ（ＷＰＡＮ）（例えば、ＢＬＵＥＴＯＯＴＨ（登録商標）  ＷＰＡＮなど）、ＷＩ−ＦＩネットワーク、ＷＩ−ＭＡＸネットワーク、セルラ電話ネットワーク（例えば、Ｇｌｏｂａｌ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｍｏｂｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  （ＧＳＭ（登録商標））ネットワークなど）、または他の適切なワイヤレスネットワーク、あるいはこれらのうちの２つ以上の組合せと通信することができる。適切な場合、コンピュータシステム５００は、これらのネットワークのいずれかのための任意の適切な通信インターフェース５１０を含むことができる。適切な場合、通信インターフェース５１０は、１つまたは複数の通信インターフェース５１０を含むことができる。本開示は特定のＩ／Ｏインターフェースを説明および図示するが、任意の適切な通信インターフェースを企図する。
【００５８】
いくつかの特定の実施形態では、バス５１２は、コンピュータシステム５００の構成要素を互いに結合するハードウェア、ソフトウェア、またはその両方を含む。限定ではなく例として、バス５１２は、アクセラレーテッドグラフィックスポート（ＡＧＰ）または他のグラフィックスバス、Ｅｎｈａｎｃｅｄ  Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＥＩＳＡ）バス、ｆｒｏｎｔ−ｓｉｄｅバス（ＦＳＢ）、ＨＹＰＥＲＴＲＡＮＳＰＯＲＴ（ＨＴ）相互接続、Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、ＩＮＦＩＮＩＢＡＮＤ相互接続、ｌｏｗ−ｐｉｎ−ｃｏｕｎｔ（ＬＰＣ）バス、メモリバス、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、ＰＣＩ−Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バス、ｓｅｒｉａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ（ＳＡＴＡ）バス、Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎローカル（ＶＬＢ）バス、または別の適切なバス、あるいはこれらのうちの２つ以上の組合せを含むことができる。適切な場合、バス５１２は１つまたは複数のバス５１２を含むことができる。本開示は特定のバスを説明および図示するが、任意の適切なバスまたは相互接続を企図する。
【００５９】
本明細書では、適切な場合、コンピュータ読み取り可能で非一時的な記憶媒体に対する参照は、半導体ベースの、または他の集積回路（ＩＣ）（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）や特定用途向けＩＣ（ＡＳＩＣ）など）、ハードディスクドライブ（「ＨＤＤ」）、ハイブリッドハードドライブ（ＨＨＤ）、光ディスク、光ディスクドライブ（ＯＤＤ）、光磁気ディスク、光磁気ドライブ、フロッピィディスク、フロッピィディスクドライブ（ＦＤＤ）、磁気テープ、ホログラフィック記憶媒体、固体ドライブ（ＳＳＤ）、ＲＡＭドライブ、セキュアデジタルカード、セキュアデジタルドライブ、または別の適切なコンピュータ読み取り可能で非一時的な記憶媒体、あるいはこれらの適切な組合せを含むことができる。本開示は、任意の適切なストレージを実装する１つまたは複数のコンピュータ読み取り可能な記憶媒体を企図する。適切な場合、いくつかの特定の実施形態では、コンピュータ読み取り可能な記憶媒体は、プロセッサ５０２の１つまたは複数の部分（例えば、１つまたは複数の内部レジスタやキャッシュなど）、メモリ５０４の１つまたは複数の部分、ストレージ５０６の１つまたは複数の部分、またはそれらの組合せを実装する。いくつかの特定の実施形態では、コンピュータ読み取り可能な記憶媒体はＲＡＭまたはＲＯＭを実装する。いくつかの特定の実施形態では、コンピュータ読み取り可能な記憶媒体は、揮発性または永続性メモリを実装する。いくつかの特定の実施形態では、１つまたは複数のコンピュータ読み取り可能な記憶媒体はソフトウェアを実施する。本明細書では、適切な場合、ソフトウェアに対する参照は、１つまたは複数のアプリケーション、バイトコード、１つまたは複数のコンピュータプログラム、１つまたは複数の実行ファイル、１つまたは複数の命令、ロジック、マシンコード、１つまたは複数のスクリプト、あるいはソースコードを包含することができ、逆も同様である。いくつかの特定の実施形態では、ソフトウェアは１つまたは複数のアプリケーションプログラミングインターフェース（ＡＰＩ）を含む。本開示は、任意の適切なプログラミング言語またはプログラミング言語の組合せで書かれ、あるいは表現される任意の適切なソフトウェアを企図する。いくつかの特定の実施形態では、ソフトウェアは、ソースコードまたはオブジェクトコードとして表現される。いくつかの特定の実施形態では、ソフトウェアは、例えばＣ、Ｐｅｒｌ、またはそれらの適切な拡張などの高水準プログラミング言語で表現される。いくつかの特定の実施形態では、ソフトウェアは、アセンブリ言語（またはマシンコード）などの低水準プログラミング言語で表現される。いくつかの特定の実施形態では、ソフトウェアは、ＪＡＶＡ（登録商標）、Ｃ、またはＣ＋＋で表現される。いくつかの特定の実施形態では、ソフトウェアは、ハイパーテキストマークアップ言語（ＨＴＭＬ）、拡張マークアップ言語（ＸＭＬ）、または他の適切なマークアップ言語で表現される。
【００６０】
本明細書では、適切な場合、コンピュータ読み取り可能で非一時的な記憶媒体は、１つまたは複数の半導体ベースのまたは他の集積回路（ＩＣ）（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）や特定用途向けＩＣ（ＡＳＩＣ）など）、ハードディスクドライブ（ＨＤＤ）、ハイブリッドハードドライブ（ＨＨＤ）、光ディスク、光ディスクドライブ（ＯＤＤ）、光磁気ディスク、光磁気ドライブ、フロッピィディスケット、フロッピィディスクドライブ（ＦＤＤ）、磁気テープ、ソリッドステートドライブ（ＳＳＤ）、ＲＡＭドライブ、セキュアデジタルカードまたはドライブ、任意の他の適切なコンピュータ読み取り可能で非一時的な記憶媒体、あるいはこれらのうちの２つ以上の任意の適切な組合せを含むことができる。適切な場合、コンピュータ読み取り可能で非一時的な記憶媒体は、揮発性、不揮発性、または揮発性と不揮発性の組合せでよい。
【００６１】
本明細書では、別段に明記されていない限り、または文脈によって示されていない限り、「または」は排他的ではなく包含的である。したがって、本明細書では、別段に明記されていない限り、または文脈によって示されていない限り、「ＡまたはＢ」は「Ａ、Ｂ、またはその両方」を意味する。さらに、別段に明記されていない限り、または文脈によって示されていない限り、「および」は共同の（ｊｏｉｎｔ）および個別の（ｓｅｖｅｒａｌ）の両方である。したがって、本明細書では、別段に明記されていない限り、または文脈によって示されていない限り、「ＡおよびＢ」は、「ＡおよびＢが共同で、または個別に」を意味する。
【００６２】
本開示は、当業者が理解する、本明細書の例示的実施形態に対するすべての変更、置換、変形、改変、および修正を包含する。さらに、本開示は、本明細書のそれぞれの実施形態が特定の構成要素、要素、機能、動作、またはステップを含むものとして説明および図示するが、これらの実施形態のいずれかは、当業者が理解する、本明細書のいずれかの場所で説明または図示した構成要素、要素、機能、動作、またはステップのいずれかの任意の組合せまたは並べ替えを含むことができる。さらに、添付の特許請求の範囲内の特定の機能を実施するように適合され、配置され、実施することが可能であり、実施するように構成され、実施することが可能にされ、実施するように動作可能であり、または動作する装置またはシステム、あるいは装置またはシステムの構成要素に対する参照は、装置、システム、構成要素またはその特定の機能が活動化され、オンにされ、またはロック解除されるか否かに関わらず、その装置、システム、または構成要素がそのように適合され、配置され、可能であり、構成され、可能にされ、動作可能であり、または動作する限り、その装置、システム、構成要素を包含する。
【図１】
0006031203.tif 000011
【図２】
0006031203.tif 000012
【図３】
0006031203.tif 000013
【図４】
0006031203.tif 000014
【図５】
0006031203.tif 000015