(57)【特許請求の範囲】
【請求項１】
拡張ジャバスクリプトオブジェクト表記ファイルを生成するプロセスであって、
ジャバスクリプトオブジェクト表記（ＪＳＯＮ）キー値ペアをハッシュ化及び暗号化することの少なくとも１つに使用されるべきサイファーとキーとを判定することと、
前記判定されたキーを用いて前記キー値ペアを署名することと、
前記判定されたサイファーが暗号化サイファーを含むときに前記署名されたキー値ペアを暗号化することと、
前記暗号化されたキー値ペアを拡張ジャバスクリプトオブジェクト表記（ｘＪＳＯＮ）ファイルにおける挿入のためにストリングに変換することと、
前記キー値ペアのキーに暗号化識別子を挿入することと、
前記ｘＪＳＯＮファイルに前記判定されたサイファーを識別するメタデータを挿入することと、
前記キー値ペアの値に対してハッシュを判定することと、
前記キー値ペアのキー内に前記ハッシュの値を挿入することと、
を含む、プロセス。
【請求項２】
請求項１に記載のプロセスであって、
サイファーを判定することが、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定することを含む、プロセス。
【請求項３】
請求項１に記載のプロセスであって、
サイファーを判定することが、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定し、前記サイファーが暗号化を含まないときに前記キー値ペアの値に対してハッシュを判定する、プロセス。
【請求項４】
請求項１に記載のプロセスであって、
前記変換することが、前記暗号化されたキー値ペアをＢａｓｅ６４符号化を用いるストリングに変換することを含む、プロセス。
【請求項５】
請求項１に記載のプロセスであって、
前記キー値ペアのキーに暗号化識別子を挿入することが、前記キーに識別子「ｓ」を挿入することを含む、プロセス。
【請求項６】
請求項１に記載のプロセスであって、
メタデータを挿入することが、前記メタデータをキーネーム「ｋｅｙｓ」を用いてキー値ペアに挿入することを含む、プロセス。
【請求項７】
請求項１に記載のプロセスであって、
キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定することを更に含む、プロセス。
【請求項８】
請求項１に記載のプロセスであって、
キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定することを更に含み、前記キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがある場合に前記暗号化されたキー値ペアのキーにサイファー識別子を挿入する、プロセス。
【請求項９】
請求項１に記載のプロセスであって、
メタデータを挿入することが、キーメタデータに前記サイファーに対応するインデックスを挿入することを含む、プロセス。
【請求項１０】
請求項１に記載のプロセスであって、
メタデータを挿入することが、キーメタデータに前記サイファーに対応するインデックス「ｓ２」を挿入することを含み、前記サイファーが前記キーメタデータの第２のサイファーである、プロセス。
【請求項１１】
請求項１に記載のプロセスであって、
前記キー値ペアの値に対してハッシュを判定して前記キー値ペアの値をハッシュ化することが、前記サイファーが暗号化を含まないことを判定する後に、前記キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがないことを判定する後に、又は前記キーにおいて前記サイファーの識別子を挿入する後に起こる、プロセス。
【請求項１２】
請求項１に記載のプロセスであって、
サイファー、キー又は秘密キーの識別を含むハッシュ化及び／又は暗号化するための要求を受信することを更に含む、プロセス。
【請求項１３】
拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
オブジェクトデータを受信する第１の入力と、第２の入力と、ファイル出力とを有するデータハンドラ回路要素であって、拡張ジャバスクリプトオブジェクト表記（ｘＪＳＯＮ）ファイルに対してコンテントタイプを記録し、前記オブジェクトデータの変数に対して名前付けられたキーを生み出して前記変数の値に対して対応する値を生み出すことにより前記オブジェクトデータに対してキー値ペアを生み出し、前記キー値ペアを前記ファイル出力に送信する、前記データハンドラ回路要素と、
前記ファイル出力に結合される入力と出力とを有するストリングプロセッサ回路要素であって、ｘＪＳＯＮ能力のある装置によりパースされるべきオブジェクト表記データを処理する、前記ストリングプロセッサ回路要素と、
前記ストリングプロセッサ回路要素の出力に結合される入力と前記データハンドラ回路要素の第２の入力に結合される出力とを有するハッシュ化及び暗号化ハンドラ回路要素であって、
ジャバスクリプトオブジェクト表記（ＪＳＯＮ）キー値ペアをハッシュ化及び暗号化することの少なくとも１つに使用されるべきサイファーとキーとを判定し、
前記判定されたキーを用いて前記キー値ペアを署名し、
前記判定されたサイファーが暗号化サイファーを含むときに前記署名されたキー値ペアを暗号化し、
前記暗号化されたキー値ペアを拡張ジャバスクリプトオブジェクト表記ファイルに挿入のためにストリングに変換し、
前記キー値ペアのキーに暗号化識別子を挿入し、
前記ｘＪＳＯＮファイルに前記判定されたサイファーを識別するメタデータを挿入し、
前記キー値ペアの値に対してハッシュを判定し、
前記ハッシュの値を前記キー値ペアに対して前記キー内に挿入する、
前記ハッシュ化及び暗号化ハンドラ回路要素と、
を含む、回路要素。
【請求項１４】
請求項１３に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定する、回路要素。
【請求項１５】
請求項１３に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定し、前記サイファーが暗号化を含まないときに前記キー値ペアの値に対してハッシュを判定することを続行する、回路要素。
【請求項１６】
請求項１３に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記暗号化されたキー値ペアをＢａｓｅ６４符号化を用いるストリングに変換する、回路要素。
【請求項１７】
請求項１３に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記キーに識別子「ｓ」を挿入することにより前記キー値ペアのキーに暗号化識別子を挿入する、回路要素。
【請求項１８】
請求項１３に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記メタデータをキーネーム「ｋｅｙｓ」を用いてキー値ペアに挿入する、回路要素。
【請求項１９】
請求項１３に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定する、回路要素。
【請求項２０】
請求項１３に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定し、前記キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがある場合に前記暗号化されたキー値ペアのキーにサイファー識別子を挿入する、回路要素。
【請求項２１】
ジャバスクリプトオブジェクト表記生成器回路要素であって、
オブジェクトデータを受信するための第１の入力と、前記オブジェクトデータに対するオブジェクト表記キー値ペアを出力するための第１の出力と、第２の入力とを有するデータハンドラ回路要素と、
前記第１の出力に結合される入力と、ストリングリテラルなしに前記オブジェクト表記キー値ペアを出力する出力とを有するストリングプロセッサ回路要素と、
前記ストリングプロセッサ回路要素の出力に結合される入力と、前記データハンドラ回路要素の第２の入力に結合される出力とを有するハッシュ化及び暗号化ハンドラ回路要素であって、
秘密キーを用いて前記キー値ペアを署名することと、
公開キーを用いて前記署名されたキー値ペアを暗号化することと、
前記キー値ペアが暗号化されていることのインディケーションを前記キー値ペアのキーにおけるオブジェクト表記ファイルに挿入することと、
の少なくとも１つを達成するする、前記ハッシュ化及び暗号化ハンドラ回路要素と、
を含み、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記暗号化されたキー値ペアのハッシュ値を判定し、前記キーに前記ハッシュ値を挿入し、前記キー値ペアが前記キーにハッシュ化されるインディケータを挿入する、回路要素。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、全般的にオブジェクト表記データに関し、特に拡張オブジェクト表記データを提供する方法及び装置に関する。
【背景技術】
【０００２】
ネットワーク通信（例えば、インターネット通信）において、ヒューマンリーダブルテキストを用いる通信規格を用いることが有益であることが多い。そのような通信規格は、しばしば、アプリケーション固有バイナリフォーマットよりも、プログラマにとって理解し易く、また柔軟性があり得る。ヒューマンリーダブルテキストを用いる通信規格の一例がＪＳＯＮ（JavaScript Object Notation）である。ＪＳＯＮは、多くのインターネットブラウザ及び他のアプリケーションによってアウトオブボックス（out-of-the-box）にサポートされるＪａｖａＳｃｒｉｐｔとの結びつきが緊密であるため、インターネット通信に非常に適している。
【発明の概要】
【０００３】
説明される例において、データハンドラが、オブジェクトデータを受信するための第１の入力、及びオブジェクトデータに対するオブジェクト表記キー値ペアを出力するための第１の出力を有する。ストリングプロセッサが、第１の出力に結合される第２の入力、及びストリングリテラル（string literals）なしにオブジェクト表記キー値ペアを搬送するための第２の出力を有する。ハッシュ化及び暗号化ハンドラが、第２の出力に結合される第３の入力、及び秘密キーを用いて署名されたキー値ペアを搬送するため、公開キーを用いて暗号化されたキー値ペアを搬送するため、及び暗号化されたキー値ペアが暗号化されたキーペアのキーにおいて暗号化されたことのインジケーションを搬送するための第３の出力を有する。
【図面の簡単な説明】
【０００４】
【図１】本明細書において開示される例示の方法及び装置が、ｘＪＳＯＮ及び／又は任意の他のヒューマンリーダブルオブジェクト表記データファイルを生成及びパースするために実装され得る例示の環境のブロック図である。
【０００５】
【図２】図１の例示のｘＪＳＯＮハンドラの例示の実装のブロック図である。
【０００６】
【図３】図２の例示のジェネレータの例示の実装のブロック図である。
【０００７】
【図４】図２の例示のパーサーの例示の実装のブロック図である。
【０００８】
【図５】拡張ＪＳＯＮデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【図６】拡張ＪＳＯＮデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【図７】拡張ＪＳＯＮデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【図８】拡張ＪＳＯＮデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【０００９】
【図９】拡張ＪＳＯＮデータをパースするために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【図１０】拡張ＪＳＯＮデータをパースするために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【図１１】拡張ＪＳＯＮデータをパースするために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【００１０】
【図１２】図２〜図４のジェネレータ及び／又は例示のパーサーを実装するために、図５〜図１１の命令を実行するように構成された例示のプロセッサプラットフォームのブロック図である。
【発明を実施するための形態】
【００１１】
ＩｏＴ（Internet-of-Things）は、広範囲のデバイスをインターネットに参加させるコンセプトを指す。この「things」は任意のタイプのデバイス又はシステムであり得、しばしば、インターネット等のネットワーク上で通信し得る回路要素に従来含まれていなかった多くのデバイス（例えば、コンシューマーアプライアンス、自動車、バイオメディカルデバイス、電力コンセント、サーモスタット、及び／又はその他の環境センサ）を含む。例えば、或るコーヒーメーカーが埋め込みコンピューティングデバイスを含み得、そのデバイスは、そのコーヒーメーカーをインターネット上で一意に識別することを可能にし、他のインターネット接続デバイスを介する例示のコーヒーメーカーのリモート制御や監視を可能にする。多くのＩｏＴデバイスは、ＩｏＴ機能性を付加するために必要となるコスト及び物理的スペースを低減するために、低コスト及び／又は低電力コンピューティングデバイスを含む。
【００１２】
ＪＳＯＮ、及びデータオブジェクトをストア及び送信するためにヒューマンリーダブルテキスト（（例えば、ＸＭＬ（Extensible Markup Language）、ＹＡＭＬ（Yet Another Markup Language）（オブジェクト表記データと総称する））を用いる他の規格が、インターネット上で通信するデバイスと共に用いるために非常に適しているが、本願で開示される例示の方法及び装置は、ＩｏＴデバイス等の限定されたリソースデバイスと共にヒューマンリーダブルプロトコルを用いることを促進するために、そのようなヒューマンリーダブルフォーマットに対する拡張を提供する。このことは、開示される方法及び装置が、ＩｏＴデバイス、及び／又は限られたコンピューティングリソースを有し及び／又は多くの多様なデバイスと通信する他のデバイスと共に、望ましいオブジェクト表記データフォーマットを用いることを促進するので有利である。
【００１３】
本明細書において開示される拡張は、ＩｏＴデバイスで使用するために適しているが、これらの拡張は、ＩｏＴデバイスと共に使用すること及び／又はＩｏＴデバイスによる使用に限定されない。本明細書において開示される例は、拡張ＪＳＯＮを参照して説明され、一貫性を維持するために、本明細書において、拡張ＪＳＯＮはｘＪＳＯＮと称される。或いは、拡張ＪＳＯＮは、任意の他のコンテントタイプ名を用いて用いられ得、及び／又はその拡張が、任意の他のプロトコル又は規格の拡張バージョンと共に用いられ得る。本明細書において開示される方法及び装置は拡張ＪＳＯＮに限定されない。むしろ、こういった拡張は、オブジェクトをストア及び送信するための任意のタイプのヒューマンリーダブルベースのプロトコルと共に用いられ得る。
【００１４】
ＪＳＯＮにおいて、オブジェクトが、始めと終わりの波括弧で区切られる一連のキー値ペアによって示される。キーがオブジェクトのプロパティを示し、値はそのプロパティの値を識別する。キーと値はコロンで分離される。例えば、ＪＳＯＮにおけるパーソンオブジェクトがファイルに次のようにストアされ得る。
0006685230.tif 000002
上記の例において、ｆｉｒｓｔＮａｍｅ、ｌａｓｔＮａｍｅ、ｅｍａｉｌ、及びｐａｓｓｗｏｒｄがキーであり、Ｊｏｈｎ、Ｓｍｉｔｈ、ｊｏｈｎ．ｓｍｉｔｈ＠ｅｘａｍｐｌｅ．ｃｏｍ、及びｓｅｃｒｅｔＰａｓｓｗｏｒｄ１２３が値である。オブジェクトにおけるキーは、ネームと称され得、オブジェクトがアプリケーションにストアされる（例えば、ＪａｖａＳｃｒｉｐｔアプリケーションにおけるパーソンオブジェクト）際に、その値をストアする変数と相関し得る。このように、ＪＳＯＮオブジェクトは、バイナリ又は任意の他のフォーマットでストアされるオブジェクトをヒューマンリーダブルフォーマットで表す手法を提供する。
【００１５】
本明細書において説明される例示の拡張は、データパッキング、オブジェクトシリアル化、及びハッシュ化／セキュリティを含む。
【００１６】
本明細書において用いられるように、データパッキングは、圧縮アルゴリズムをキー及び／又は値に適用すること（例えば、ＧＮＵ  Ｚｉｐ（ｇｚｉｐ）を用いてキー及び／又は値を圧縮すること）を指す。ｘＪＳＯＮファイルが受信されると、ｘＪＳＯＮファイルにおけるパックされたデータが識別され解凍され得る。
【００１７】
本明細書において用いられるように、オブジェクトシリアル化は、キー及び／又は値をバイナリ値に変換することを指す。幾つかの例において、バイナリ値は、その後、（例えば、Ｂａｓｅ６４バイナリ・ツー・テキストエンコードを用いて）テキストフォーマットに変換される。ｘＪＳＯＮファイルが受信されると、ｘＪＳＯＮファイルにおけるシリアル化されたデータが、検出され得、逆シリアル化／アンマーシャルされ得る。
【００１８】
幾つかの例において、ハッシュ化／セキュリティ動作が、キー値ペアの値に対してハッシュを生成すること、及びハッシュをキーに挿入することによって実施される。ハッシュは、キーにストアされたハッシュを、キー値ペアの値のために生成されたハッシュと比較することによって、値のコンテントを認証するために用いられ得る。ハッシュは、付加的又は代替的に、値に含まれたデータを検索するために用いられ得る。例えば、検索パラメータがハッシュ化され得、検索パラメータに対するハッシュは、マッチングを、およびそのため、検索パラメータにマッチングするキー値ペアの値を識別するためにキーにストアされたハッシュと比較され得る。付加的又は代替的に、ハッシュ化／セキュリティはまた、キー及び／又は値を暗号化すること、及び暗号化されていないキー及び／又は値を暗号化されたデータに置き換えることを含み得る。ｘＪＳＯＮファイルが受信されると、ｘＪＳＯＮファイルにおける暗号化されたデータが検出及び解読され得る。
【００１９】
本明細書において開示される例示の方法及び装置において、開示される拡張をＪＳＯＮに適用する際、ｘＪＳＯＮ可能デバイスは、キー及び／又値がｘＪＳＯＮ拡張に基づいて生成、及び／又は改変されている場合、キー及び／又は値に修飾子（qualifier）を挿入する。修飾子は、ｘＪＳＯＮ拡張が適用されていることを他のｘＪＳＯＮ可能デバイスに示す。例えば、キーの終わりに括弧を追加すること及び括弧内に修飾子（例えば、適用されている特定の拡張を示す修飾子）を挿入することによって、キーが改変され得る。例えば、前のパラグラフに示したパーソンオブジェクトにおけるキー値ペアに、キャラクタ“ｘ”に関連付けられる拡張が適用される場合、ｘＪＳＯＮ表現は、次のようになり得る。
0006685230.tif 000003
修飾子は、代替として、キー値ペアの値に追加された括弧の間に挿入されてもよく（例えば、“ｆｉｒｓｔＮａｍｅ”：“Ｊｏｈｎ［ｘ］”）、及び／又は、キー及び値の両方に修飾子が追加されてもよい（例えば、“ｆｉｒｓｔＮａｍｅ［ｘ］”：“Ｊｏｈｎ［ｙ］”、“ｆｉｒｓｔＮａｍｅ［ｘ］”：｛ｘ；“ｖ”：“Ｊｏｈｎ”｝）。或いは、識別子をキー及び／又値から分離するために括弧以外の区切り文字（例えば、波括弧、シングルコーテーションマーク、ダブルコーテーションマーク、アスタリスク）が用いられ得る。
【００２０】
一貫性を保つために、本明細書において開示される例は、キー値ペアのキーにおける括弧の間に挿入されたｘＪＳＯＮ識別子を参照して説明される。しかしながら、本開示は、識別子の挿入について特定のフォーマットに限定されることはなく、上記で説明されたものを含み任意の他のフォーマットが用いられ得る。
【００２１】
キーネーム及び／又は値に識別子を挿入することは、ＪＳＯＮをサポートするがｘＪＳＯＮをサポートしないデバイスによってもｘＪＳＯＮ表現の処理が可能であることを確実にする（例えば、幾つかの例において、ｘＪＳＯＮ識別子がＪＳＯＮ文法と一貫性のある手法で挿入されているので、ｘＪＳＯＮ技術を用いることが、ＪＳＯＮを用いるがｘＪＳＯＮをサポートしないデバイスがｘＪＳＯＮファイルをパースするのを阻止しない）。従って、ｘＪＳＯＮの使用により、ＪＳＯＮをサポートするがｘＪＳＯＮをサポートしないデバイスにｘＪＳＯＮファイルのパース中に失敗させない。むしろ、これらの非ｘＪＳＯＮデバイスは動作を継続するが、拡張を理解することはない。こうしたアプローチは、幾つかのデバイスがｘＪＳＯＮをサポートしない環境において、ｘＪＳＯＮ可能デバイスが動作するための能力を強化する。
【００２２】
本明細書において開示されるようにキーに識別子を挿入する付加的な利点により、ｘＪＳＯＮ拡張を選択的ベースで適用することが可能になる。例えば、ｘＪＳＯＮ拡張は、ファイル全体に適用されてもよく、ファイルにおける１つ又は複数のオブジェクトに選択的に適用されてもよく、又は、ファイルにおける１つ又は複数のキー値ペアに選択的に適用されてもよい。このように、ｘＪＳＯＮファイルが処理されているとき、キーにｘＪＳＯＮ識別子を含むキー値ペアは拡張に従って処理され得、キーにｘＪＳＯＮ識別子を含まないキー値ペアは標準のＪＳＯＮ処理を用いて処理され得る。また、異なる個々の拡張が、ファイルにおけるキー値ペアのサブセットに適用され得る。例えば、前述の例において、（ａ）“ｐｅｒｓｏｎ”オブジェクト、ｆｉｒｓｔＮａｍｅ、ｌａｓｔＮａｍｅ、及びｅｍａｉｌキー値ペアが、ハッシュ値及びハッシュ化のためのｘＪＳＯＮ識別子を対応するキーに挿入するように処理され得る；（ｂ）ｐａｓｓｗｏｒｄキー値ペアは暗号化及びハッシュ化され得る；（ｃ）暗号識別子、ハッシュ識別子、及びハッシュ値が、対応するキーに挿入され得る。
【００２３】
図１は、ｘＪＳＯＮ及び／又は任意の他のヒューマンリーダブルオブジェクト表記データファイルを生成及び／又はパースするために本明細書において開示される例示の方法及び装置が実装された例示の環境１００のブロック図である。例示の環境は、例示のｘＪＳＯＮデータ１０３を、例示のネットワーク１０４を介して例示の第１のデバイス１０６及び例示の第２のデバイス１０８に搬送するための例示のウェブサービス１０２を含む。本明細書において用いられるように、用語「通信している」及びその変形は、直接的な通信、及び／又は１つ又は複数の中間構成要素を介する間接的な通信を含み、直接的な物理的（例えば、有線）通信及び／又は常時通信を必要とせず、むしろ、周期的又は非周期的インターバルや一時的イベントにおける、選択的通信を付加的に含む。
【００２４】
図示された例において、例示のウェブサービス１０２、例示の第１のデバイス１０６、及び例示の第２のデバイス１０８は、ＪＳＯＮデータファイルを用いてデータを交換する。図示された例に従って、例示のウェブサービス１０２及び例示の第１のデバイス１０６は、それらが本明細書において開示されるｘＪＳＯＮに関連付けられた拡張の少なくとも１つに基づくファイルをパース及び生成するようにｘＪＳＯＮハンドラ１１０を含むという点において、ｘＪＳＯＮ可能である。図示された例に従って、例示の第２のデバイス１０８は、例示の第２のデバイス１０８がＪＳＯＮファイルをパース及び生成し得るが、本明細書において開示されるｘＪＳＯＮに関連付けられた拡張を備えるｘＪＳＯＮファイルをパース及び／又は生成するためのｘＪＳＯＮハンドラ１１０を含まないという点において、ｘＪＳＯＮ可能ではない。本明細書において開示されるように、例示の第２のデバイス１０８は、ｘＪＳＯＮに関連する拡張を用いることができないが、例示のウェブサービス１０２及び／又は例示の第１のデバイス１０６によって出力される図示された例の例示のｘＪＳＯＮデータ１０３は良好にパースされ得る（例えば、パースエラーを起こすことなくパースされる）。
【００２５】
図示された例において、ウェブサービス１０２は、インターネット上に情報を提供するサーバーコンピュータである。或いは、ウェブサービス１０２は、それを用いて例示のネットワーク１０４に接続されているデバイスが通信し得る、任意のタイプのデバイスであり得る。例示のウェブサービス１０２は、例示のｘＪＳＯＮデータ１０３を、例示の第１のデバイス１０６及び／又は例示の第２のデバイス１０８に送る。例示のウェブサービス１０２はまた、例示の第１のデバイス１０６からｘＪＳＯＮデータを、及び／又は例示の第２のデバイス１０８からＪＳＯＮデータを受信し得る。或いは、例示のウェブサービス１０２は、データ（例えば、ｘＪＳＯＮデータ及び／又はＪＳＯＮデータ）の受信のみ可能であり得るか、又はデータ（例えば、ｘＪＳＯＮデータ１０３及び／又はＪＳＯＮデータ）の送信のみ可能であり得る。
【００２６】
図１に図示された例のネットワーク１０４はインターネットである。或いは、ネットワーク１０４は、ローカルエリアネットワーク、ワイドエリアネットワーク、有線ネットワーク、ワイヤレスネットワーク、プライベートネットワーク、及び／又は公共ネットワークの、任意のタイプ及び／又は組み合わせである。例示のネットワーク１０４は、例示のウェブサービス１０２を、例示の第１のデバイス１０６及び例示の第２のデバイス１０８に通信可能に結合する。
【００２７】
図１に図示された例の第１のデバイス１０６は、例示のｘＪＳＯＮデータ１０３をパース及び／又は生成するための例示のｘＪＳＯＮハンドラ１１０を含むＩｏＴデバイスである。例えば、第１のデバイス１０６は、ネットワークイネーブルドマイクロプロセッサコントローラであり得る。例えば、第１のデバイス１０６は、テキサス・インスツルメンツ社のCC3100 SimpleLink（商標）Wi-Fi（登録商標）及びＭＣＵアプリケーションのためのＩｏＴソリューション（CC3100 SimpleLink（商標） Wi-Fi(登録商標) and Internet-of-Things Solution for MCU Applications）、及びCC3200 SimpleLink（商標）Wi-Fi（登録商標）及びＩｏＴソリューション、シングル・チップワイヤレスＭＣＵ（CC3200 SimpleLink（商標） Wi-Fi(登録商標) and Internet-of-Things Solution, a Single-Chip Wireless MCU）、及び／又はCC3100又はCC3200を含むデバイスであり得る。或いは、第１のデバイス１０６は、ＪＳＯＮデータを用いることが望ましい任意の他のデバイスであり得る。
【００２８】
図１に図示された例の第２のデバイス１０８は、ＪＳＯＮデータを用いることが望ましい任意のデバイスであり得る。第２のデバイス１０８は、ｘＪＳＯＮ拡張をサポートするデバイス（例えば、例示のウェブサービス１０２及び例示の第１のデバイス１０６）とｘＪＳＯＮ拡張をサポートしないデバイスが、同じネットワークに接続され得、互いに通信し得ることを示すために、図１の例に含まれている。例えば、ｘＪＳＯＮ拡張がＪＳＯＮ文法に抵触しない手法で実装される場合、ｘＪＳＯＮ拡張（例えば、ｘＪＳＯＮファイル）を含む少なくとも幾つかのキー値ペアを含むＪＳＯＮファイル（例えば、例示のｘＪＳＯＮデータ１０３）が、ｘＪＳＯＮをサポートしないデバイスによって、パースエラーを起こすことなくパースされ得る。同様に、ｘＪＳＯＮ拡張をサポートするデバイスがＪＳＯＮファイルを処理することができる。
【００２９】
例示のｘＪＳＯＮハンドラ１１０は、ｘＪＳＯＮファイル（例えば、ＪＳＯＮプロトコルに従って生成され、例示のｘＪＳＯＮデータ１０３のような本明細書において開示されるｘＪＳＯＮ拡張の１つを含む少なくとも１つのキー値ペアを含むファイル）をパース及び／又は生成する。ｘＪＳＯＮハンドラ１１０の例示の実装が、図２に関連して更に詳細に説明される。図１は、例示のウェブサービス１０２及び例示の第１のデバイス１０６が同じｘＪＳＯＮハンドラ１１０を含むことを示すが、他の例では、デバイスが、異なるｘＪＳＯＮハンドラを含み得る（例えば、例示のウェブサービス１０２のｘＪＳＯＮハンドラ１１０は、例示の第１のデバイス１０６のｘＪＳＯＮハンドラ１１０とは異なって実装され得る）。
【００３０】
ｘＪＳＯＮハンドラ１１０を用いることで、デバイスが、ｘＪＳＯＮデータを生成することができ、ｘＪＳＯＮデータ（例えば、本明細書において開示される拡張を含むオブジェクト表記データ）をパースすることができる。図示された例のｘＪＳＯＮハンドラ１１０は、既存のオブジェクト表記プロトコルによってサポートされていないデータ表現の使用を促進する。例えば、ｘＪＳＯＮハンドラ１１０は、カスタマイズされたプリミティブ（例えば、ＩｏＴデバイス等の埋め込みデバイスと共に用いるのに適しているプリミティブ）の使用をサポートし得る。例えば、バイナリタイプのリテラルが“０ｂＡＡＡＡ”又は“０ＢＡＡＡＡ”として入力され得、ここで、“ｂ”及び“Ｂ”は、値がバイナリリテラルであることを示す。別の例において、ヘキサデシマルタイプのリテラルが“０ｘＡＡＡＡ”又は“０ＸＡＡＡＡ”として入力され得、ここで、“ｘ”及び“Ｘ”は、値がヘキサデシマルリテラルであることを示す。ハードウェアベースのリテラルも、ｘＪＳＯＮハンドラ１１０によってサポートされ得る。例えば、ボラタイルタイプのリテラル、ハードウェア信号タイプ（入力、出力、両方）に対するリテラル、及び信号オブジェクトに対するトライステート値を示すために、識別子がキー及び／又は値に追加され得る。すなわち、キー及び／又は値に付属させた識別子、キー及び／又は値に挿入された識別子、キー及び／又は値の一部を置き換える識別子を用いるという柔軟性によって、ｘＪＳＯＮハンドラ１１０が、状態（例えば、暗号化された、圧縮された、シリアル化された）、及び／又は値の目的（例えば、ハードウェア信号タイプのためのリテラル）を示すことを含む、キー及び／又は値についての情報を示すことが可能になる。
【００３１】
図１の例示の環境１００は、例示のウェブサービス１０２、例示の第１のデバイス１０６、及び例示の第２のデバイス１０８を含むが、任意の数及び／又はタイプのデバイスが用いられ得る。例えば、環境が、２個のデバイス及び／又はウェブサービス、３個のデバイス及び／又はウェブサービス、４個のデバイス及び／又はウェブサービス、数百個のデバイス及び／又はウェブサービスの任意の組み合わせを含み得る。
【００３２】
図２は、図１の例示のｘＪＳＯＮハンドラ１１０の例示の実装のブロック図である。図２の例示のｘＪＳＯＮハンドラ１１０は、例示のオブジェクト表記データ２００（例えば、例示のｘＪＳＯＮデータ１０３）を送信及び／又は受信するための例示のインタフェース２０２、例示のオブジェクト表記データ２００をパースして例示のオブジェクトデータ２１０を出力するための例示のパーサー２０４、例示のオブジェクトデータ２１２から例示のオブジェクト表記データ２００を生成するための例示のジェネレータ２０６、及び例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８を含む。図２のｘＪＳＯＮハンドラ１１０は例示の第１のデバイス１０６を参照して説明されるが、図２のｘＪＳＯＮハンドラ１１０は別のデバイス（例えば、例示のウェブサービス１０２）において実装されてもよい。
【００３３】
図示された例の例示のインタフェース２０２は、オブジェクト表記データ２００（例えば、例示のｘＪＳＯＮデータ１０３）を、ネットワーク１０４及び／又はｘＪＳＯＮハンドラ１１０を含むデバイス（例えば、例示のウェブサービス１０２の構成要素、及び／又は例示の第１のデバイス１０６の構成要素）の１つ又は複数の他の構成要素に送信する、又はネットワーク１０４及び／又はｘＪＳＯＮハンドラ１１０を含むデバイスの１つ又は複数の他の構成要素から受信する、ネットワークインタフェース２０２である。例えば、例示の第１のデバイス１０６のｘＪＳＯＮハンドラ１１０は、例示のウェブサービス１０２からリトリーブされた例示のｘＪＳＯＮデータ１０３を受信し得る。例示のインタフェース２０２は、ネットワーク１０４から受信したオブジェクト表記データ２００を例示のパーサー２０４に送信する。例示のインタフェース２０２は、例示のジェネレータ２０６から受信したオブジェクト表記データ２００を、そのオブジェクト表記データ２００のための所望の宛先に送信する。例えば、例示の第１のデバイス１０６のｘＪＳＯＮハンドラ１１０のためのインタフェース２０２は、例示のジェネレータ２０６によって生成された例示のオブジェクト表記データ２００を例示のウェブサービス１０２に送信し得る。
【００３４】
図示された例のパーサー２０４は、オブジェクト表記データ２００を受信し、オブジェクト表記データ２００によって表されるオブジェクトを抽出するために、そのデータをパースする。パーサー２０４は、抽出されたオブジェクトデータ２１０を例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８に送信する。例えば、上述の例示のパーソンオブジェクトに戻ると、パーサー２０４は、ｘＪＳＯＮデータに含まれるキー値ペアからパーソンオブジェクトのエレメント（例えば、ｆｉｒｓｔＮａｍｅ、ｌａｓｔＮａｍｅ、ｅｍａｉｌ、及びｐａｓｓｗｏｒｄ）をリトリーブし、ＪａｖａＳｃｒｉｐｔインタプリタ２０８に送信されるＪａｖａＳｃｒｉｐｔパーソンオブジェクトを構築する。例示のパーサー２０４は、データパッキング、オブジェクトシリアル化、及び／又はハッシュ化／セキュリティ拡張の１つ又は複数を含むｘＪＳＯＮデータをパースするための機能を含む。パーサー２０４の例示の実装が、図４のブロック図に関連して更に詳細に説明される。
【００３５】
図示された例の例示のジェネレータ２０６は、ＪａｖａＳｃｒｉｐｔインタプリタ２０８から受信したオブジェクトデータ２１２を表すために、オブジェクト表記データ２００ファイル（例えば、ｘＪＳＯＮファイル）を構築する。例えば、例示のジェネレータ２０６は、ＪａｖａＳｃｒｉｐｔインタプリタにストアされたパーソンオブジェクトに基づいて例示のパーソンオブジェクトをｘＪＳＯＮで構築し得る。ジェネレータ２０６によって生成されたオブジェクト表記データ２００は、別のデバイス（例えば、ウェブサービス１０２）への送信のため、インタフェース２０２に送信される。或いは、ｘＪＳＯＮハンドラ１１０及び／又はｘＪＳＯＮハンドラ１１０を含むデバイスが、（例えば、後の送信及び／又は処理のために）オブジェクト表記データ２００をストアし得る。例示のジェネレータ２０６は、図３のブロック図と関連して更に詳細に説明される。
【００３６】
図示された例のＪａｖａＳｃｒｉｐｔインタプリタ２０８は、ＪａｖａＳｃｒｉｐｔアプリケーション又は任意の他のＪａｖａＳｃｒｉｐｔ命令を実行するために、ＪａｖａＳｃｒｉｐｔプログラミング言語に従って動作するソフトウェアランタイム環境である。図示された例の例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８は、オブジェクトデータ２１０及び／又は２１２（例えば、上述のパーソンオブジェクト）をストアする。図示された例のＪａｖａＳｃｒｉｐｔインタプリタ２０８はＪａｖａＳｃｒｉｐｔを用いるが、ＪａｖａＳｃｒｉｐｔインタプリタ２０８は或いは、例示のパーサー２０４によって出力されたオブジェクトを受信し得る、及び／又はオブジェクトを例示のジェネレータ２０６に送信し得る、任意の他のランタイム環境であってもよい。
【００３７】
図３は、図２の例示のジェネレータ２０６の例示の実装のブロック図である。図３の例示のジェネレータ２０６は、例示のデータハンドラ３０２、例示のストリングプロセッサ３０４、例示のハッシュ化及び暗号化ハンドラ３０６、例示の圧縮ハンドラ３０８、及び例示のシリアル化プロセッサ３１０を含む。
【００３８】
例示のデータハンドラ３０２は、オブジェクトデータ３１２（例えば、例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８から受信する例示のオブジェクトデータ２１２）を受信し、オブジェクトデータ３１２を表すｘＪＳＯＮキー値ペアを用いてポピュレート（populate）されたオブジェクト表記データ３１４を生成する。例えば、例示のデータハンドラ３０２は、それを介してｘＪＳＯＮファイルの生成に対する要求が受信され得るインタフェース（例えば、アプリケーションプログラミングインタフェース（ＡＰＩ））を提供し得る。例示のデータハンドラ３０２は、その要求がｘＪＳＯＮファイルが生成されるべきであることを示しているか又はｘＪＳＯＮ拡張を含むＪＳＯＮファイルが生成されるべきであることを示しているかを判定する。例えば、本明細書において詳しく説明されるように、オブジェクト表記データ３１４がｘＪＳＯＮをサポートしないデバイスと互換性がある必要がない場合、ジェネレータ２０６によって出力されたオブジェクト表記データ３０１はｘＪＳＯＮ可能デバイスによって処理されるようにフォーマットされ得る（例えば、例示のパーサー２０４がファイルをパースし、コーテーションマークの存在なしにそのデータを暗黙的に評価する際、標準のＪＳＯＮ文法に従ってキー及び値を囲んでいるコーテーションマークは除外され得る）。図示された例の例示のデータハンドラ３０２は、ｘＪＳＯＮファイルのためのコンテントタイプを記録し、（例えば、オブジェクトデータ３１２の変数のためにネーミング（named）されたキーを生成すること、及び変数の値のための対応する値を生成することによって）オブジェクトデータ３１２のためのキー値ペア３１６（単一のキー値ペアが説明されるが、複数のキー値ペアも用いられ得る）を生成し、キー値ペア３１６を例示のストリングプロセッサ３０４に送信する。
【００３９】
図３の例示のストリングプロセッサ３０４は、オブジェクト表記データ３１４のためのコンテントタイプがｘＪＳＯＮであるか又は標準のＪＳＯＮであるかを判定する。オブジェクト表記データ３１４がｘＪＳＯＮ可能デバイス及び非ｘＪＳＯＮ可能デバイスによってパースされるように意図されている場合、ストリングプロセッサ３０４は、キー値ペア３１６のキー及び値の周りにコーテーションマークを挿入する。非ｘＪＳＯＮ可能デバイスとの互換性が所望されなかった場合、例示のキー値ペア３１６のストリングはｘＪＳＯＮ可能パーサー（例えば、図２の例示のパーサー２０４）によって暗黙的に認識されるので、ストリングプロセッサ３０４はコーテーションマークを挿入しない。例えば、非ｘＪＳＯＮ互換性が所望される場合、次の例示のパーソンオブジェクトが生成され得る。
0006685230.tif 000004
或いは、非ｘＪＳＯＮ互換性が所望されない及び／又は必要とされない場合、次の例示のパーソンオブジェクトが生成され得る。
0006685230.tif 000005
【００４０】
例示のストリングプロセッサ３０４は、処理されたキー値ペア３１８を、例示のハッシュ化及び暗号ハンドラ３０６に出力する。
【００４１】
図３の例示のハッシュ化及び暗号化ハンドラ３０６は、処理されたキー値ペア３１８を受信し、処理されたキー値ペア３１８のハッシュ化及び／又は暗号化が要求されるか否かを判定する。例えば、オブジェクト表記データ３１４を生成するための要求は、それに対してハッシュ化及び／又は暗号化が要求されている、１つ又は複数のキー値ペア及び／又はオブジェクトを識別し得る。例えば、オブジェクトがｕｓｅｒｎａｍｅフィールド及びｐａｓｓｗｏｒｄフィールドを含む場合、全てのフィールドに対してハッシュ化が要求され得るが、ｐａｓｓｗｏｒｄフィールドに対してのみ暗号化が要求され得る。或いは、ハッシュ化及び暗号化ハンドラ３０６は、ハッシュ化及び／又は暗号化が所望されていることを自動的に判定し得る（例えば、キー値ペアがｐａｓｓｗｏｒｄフィールド等の機密データとして識別される場合）。
【００４２】
ハッシュ化及び／又は暗号化が要求される場合、ハッシュ化及び暗号化ハンドラ３０６は、用いられるべき所望のサイファー（例えば、暗号化サイファー、ハッシュ化サイファー、暗号化サイファー及びハッシュ化サイファーの組み合わせ）を判定する。例えば、ハッシュ化及び／又は暗号化を実施するための要求はサイファーを識別し得、及び／又は例示のハッシュ化及び暗号化ハンドラ３０６はデフォルトサイファーを用い得る。
【００４３】
処理されたキー値ペア３１８の信頼性を他のデバイスに証明するために、この例のハッシュ化及び暗号化ハンドラ３０６は、コンテントオーナー（例えば、ｘＪＳＯＮファイルが生成されたデータのオーナー）の秘密キーを用いて、処理されたキー値ペア３１８に署名し、暗号化及び／又はハッシュ化されたキー値ペア３２０を生成する。このような例において、暗号化及び／又はハッシュ化されたキー値ペア３２０は、秘密キーに対応する公開キーへのアクセスを有する他のものによって照合され得る。
【００４４】
サイファーが暗号を含む場合（例えば、データ署名を含むだけのものとは対照的に）、図３の例示のハッシュ化及び暗号化ハンドラ３０６は、暗号化が要求された任意のキー値ペアに対し暗号化及び／又はハッシュ化されたキー値ペア３２０を暗号化する。例示のハッシュ化及び暗号化ハンドラ３０６は、暗号化及び／又はハッシュ化されたキー値ペア３２０の解読に用いられ得る秘密キーに対応する公開キーを用いて、暗号化及び／又はハッシュ化されたキー値ペア３２０を暗号化する。例えば、図２及び／又は図４のパーサー２０４は、対応する公開キーを用いて暗号化されたデータを解読するために用いられ得る秘密キーをストアし得る。
【００４５】
例示のハッシュ化及び暗号化ハンドラ３０６はその後、暗号化及び／又はハッシュ化されたキー値ペア３２０をハッシュ化する（例えば、ハッシュ化が要求されると、キー値ペアがハッシュ化される）。例示のハッシュ化及び暗号化ハンドラ３０６は、任意の暗号化されたデータ（暗号化の前のオリジナルデータとは対照的に）に対して暗号化された値をハッシュ化する。
【００４６】
図示された例のハッシュ化及び暗号化ハンドラ３０６は、生成されている暗号化及び／又はハッシュ化されたキー値ペア３２０にサイファーキーデータを挿入する（例えば、そのデータをｘＪＳＯＮファイルに挿入する）。サイファーキーデータは、暗号化及び／又はハッシュ化されたキー値ペア３２０を暗号化する際に用いられた１つ又は複数のキーを識別する。例えば、サイファーキーデータは、暗号化及び／又はハッシュ化されたキー値ペア３２０を暗号化するために公開キーが用いられたことに対する証明のための識別子を含み得、そのため、例示のパーサー２０４が、暗号化及び／又はハッシュ化されたキー値ペア３２０を解読する際に用いるための対応する秘密キーを見つけることが可能となる。サイファーキーはまた、データを署名するために秘密キーが用いられたことに対する証明のための識別子を付加的に含み得る。単一のｘＪＳＯＮファイルに複数のキーが用いられる場合、各キーは、サイファーキーデータにおいて連続番号を用いて識別され得る。暗号キーのための識別子に加えて、図示された例のサイファーキーデータはまた、ハッシュ化及び／又は暗号化のために用いられた特定のサイファーアルゴリズム、及びサイファーアルゴリズムに対応する任意のパラメータを識別する。
【００４７】
幾つかの例において、ハッシュ化及び暗号化ハンドラ３０６はまた、暗号化及び／又はハッシュ化されたキー値ペア３２０を暗号化するために用いられた公開キー証明であり、及び／又は署名データを認証するために用いられ得る公開キー証明を、暗号化及び／又はハッシュ化されたキー値ペア３２０に挿入する。
【００４８】
図３の例の例示のハッシュ化及び暗号化ハンドラ３０６は、暗号化及び／又はハッシュ化されたキー値ペア３２０の対応するキーにハッシュ化のインジケーション及び／又は暗号化のインジケーションを挿入する。例えば、ハッシュ化された値を有するキーに対して、例示のハッシュ化及び暗号化ハンドラ３０６は、キーに‘［＃ΗΗΗΗ］’を挿入する。ここで、‘＃’はハッシュ識別子であり、‘ΗΗΗΗ’はハッシュ化の結果の値である。例示のハッシュ化及び暗号化ハンドラ３０６は、暗号化及び／又はハッシュ化されたキー値ペア３２０に対するキーに、‘［ｓＸ＃ＨＨＨＨ］’を挿入する。ここで、‘ｓ’はハッシュ識別子であり、‘Ｘ’は複数のキーが存在する場合に、署名及び／又は暗号化のために用いられたキーのインデックス値を示し、‘＃’はハッシュ識別子であり、‘ΗΗΗΗ’はハッシュ化の結果の値である。
【００４９】
例えば、下記はハッシュ化及び暗号化の前のパーソンオブジェクトである。
0006685230.tif 000006
上記のパーソンオブジェクトに対して図３の例示のハッシュ化及び暗号化ハンドラ３０６によって生成され得るハッシュ化及び暗号化されたパーソンオブジェクトは次のようになる。
0006685230.tif 000007
0006685230.tif 000008
【００５０】
例示のハッシュ化及び暗号化ハンドラ３０６は、暗号化及び／又はハッシュ化されたキー値ペア３２０を例示の圧縮ハンドラ３０８に出力する。
【００５１】
図示された例の圧縮ハンドラ３０８は、暗号化及び／又はハッシュ化されたキー値ペア３２０の圧縮が要求されているか否かを判定する。例えば、ｘＪＳＯＮファイルを生成するための要求は、圧縮が要求されている１つ又は複数のキー値ペア及び／又はオブジェクトを識別し得る。或いは、圧縮ハンドラ３０８は、キー値ペア及び／又はオブジェクトが閾値サイズを超える場合に、圧縮が所望されることを自動的に判定し得る。圧縮が要求されると、圧縮ハンドラ３０８は、例示の圧縮されたキー値ペア３２２を生成するために暗号化及び／又はハッシュ化されたキー値ペア３２０（例えば、要求されたキー値ペア及び／又は要求されたオブジェクト）を圧縮する（例えば、ｚｉｐする）。図示された例の例示の圧縮ハンドラ３０８は、圧縮されたデータに対するキーを例示の圧縮されたキー値ペア３２２に挿入する。例えば、圧縮ハンドラ３０８は、圧縮されたデータに対して、生成されたキー（例えば、＿ｏＸ等のキーであり、ここで、Ｘは生成されたｘＪＳＯＮファイルに挿入される生成されたデータの各セット毎に増分する数である）を挿入し得、そのため、生成されたデータの各セットに対するキーが一意であることが確実となる。図３の例示の圧縮ハンドラ３０８はまた、圧縮されたキー値ペア３０８が圧縮されたことを例示のパーサー２０４に示すために、圧縮識別子（例えば、［ｚ］）を例示の圧縮されたキー値ペア３０８に挿入する。図示された例において、例示の圧縮ハンドラ３０８は、圧縮のためのメタデータを識別し、圧縮されたデータを含むキーに対する値を挿入する。例えば、圧縮ハンドラ３０８は、暗号化及び／又はハッシュ化されたキー値ペア３２０を圧縮するためにｇｚｉｐを用い得、アルゴリズムと圧縮アルゴリズムのためのルックアップテーブルとを識別するメタデータを挿入し得る。例えば、パーソンオブジェクトの圧縮の結果は次のようになり得る。
｛
0006685230.tif 000009
【００５２】
例示の圧縮ハンドラ３０８は、圧縮されたキー値ペア３２２を例示のシリアル化プロセッサ３１０に出力する。
【００５３】
図示された例の例示のシリアル化プロセッサ３１０は、例示の圧縮されたキー値ペア３２２のシリアル化が要求されるか否かを判定する。例えば、ｘＪＳＯＮファイルを生成するための要求は、シリアル化が要求されている１つ又は複数のキー値ペア及び／又は１つ又は複数のオブジェクトを識別し得る。シリアル化が要求されると、例示のシリアル化プロセッサ３１０は、要求された、圧縮されたキー値ペア（例えば、要求されたキー値ペア及び／又は要求されたオブジェクト）をシリアル化して、例示のシリアル化されたキー値ペア３２４を生成する。図示された例のシリアル化プロセッサ３１０は、シリアル化されたキー値ペア３２４に対するキーを挿入する。例えば、シリアル化プロセッサ３１０は、シリアル化されたキー値ペア３２４に対して、生成されたキー（例えば、＿ｏＸであり、ここで、Ｘは、生成されたｘＪＳＯＮオブジェクト表記データ３１４における生成されたデータの各セット毎に増分する数である）を挿入し得、生成されたデータの各セットに対するキーが一意であることを確実とし得る。例示のシリアル化プロセッサ３１０はまた、シリアル化されたキー値ペアがシリアル化されたことを例示のパーサー２０４に示すように、シリアル化識別子（例えば、［ｂ］）をキーに挿入する。図３の例示のシリアル化プロセッサ３１０は、シリアル化されたデータを、シリアル化されたキー値ペア３２４のキーに対する値として挿入する。図示された例において、例示のシリアル化プロセッサ３１０は、シリアル化の結果のバイナリデータを、Ｂａｓｅ６４変換を用いてＡＳＣＩＩテキストに変換する。例えば、パーソンオブジェクトのシリアル化の結果は次のようになり得る。
0006685230.tif 000010
【００５４】
図示された例の例示のシリアル化プロセッサ３１０は、オブジェクト表記データ３１４に対する宛先へ（例えば、例示のインタフェース２０２及び例示のネットワーク１０４を介して例示のウェブサーバー１０２へ）の送信のために、結果のシリアル化されたキー値ペア３２４を例示のデータハンドラ３０２に送信する。例えば、例示のウェブサービス１０２に実装されたｘＪＳＯＮハンドラ１１０における例示のパーサー２０４によるパースのために、オブジェクト表記データ３１４は例示のインタフェース２０２を介して例示のウェブサービス１０２に送信され得る。例示のウェブサービス１０２はその後、例示のウェブサービス１０２の動作に従ってデータオブジェクトを処理し得る。或いは、オブジェクト表記データ３１４は任意の他の所望のロケーションに送信され得る。幾つかの例において、データハンドラ３０２は、オブジェクト表記データ３１４における機能を呼び出すための参照を含む。例えば、“ｆｕｎｃ１（ａｒｇ１，．．．ａｒｇＮ）”として参照される機能が、オブジェクト表記データをパースするとき、パーサー（例えば、例示のパーサー２０４）に、“ｆｕｎｃ１”として識別される機能を呼び出させる。或いは、“＠ｕｒｉ＃ｆｕｎｃ１（ａｒｇ１，．．．ａｒｇＮ）”として参照される機能が、パーサー（例えば、例示のパーサー２０４）に、ロケーション“ｕｒｉ”においてリスニングするサーバーによって“ｆｕｎｃ１”を呼び出させる。
【００５５】
図４は、図２のパーサー２０４の例示の実装のブロック図である。図４の例示のパーサー２０４は、データハンドラ４０２、ストリングプロセッサ４０４、解読ハンドラ４１０、逆シリアル化プロセッサ４０６、及び解凍ハンドラ４０８を含む。
【００５６】
図４の例のデータハンドラ４０２は、処理されるべき例示のオブジェクト表記データ４１２ファイル（例えば、ｘＪＳＯＮファイル）を受信する。例示のデータハンドラ４０２は、オブジェクト表記データ４１２からキー値ペア及び／又はオブジェクトを抽出し、それらを例示のストリングプロセッサ４０４に送信する。例えば、データハンドラ４０２は、１度に１つのキー値ペアを抽出し得、例示のストリングプロセッサ４０４、例示の逆シリアル化プロセッサ４０６、例示の解凍ハンドラ４０８、及び／又は例示の解読ハンドラ４１０による処理のために、そのキー値ペアを例示のキー値ペア４１４として送信し得る。或いは、データハンドラ４０２は、例示のストリングプロセッサ４０４、例示の逆シリアル化プロセッサ４０６、及び例示の解凍ハンドラ４０８、及び例示の解読ハンドラ４１０による処理のために、複数のキー値ペアを抽出し得る。
【００５７】
例示のストリングプロセッサ４０４、例示の逆シリアル化プロセッサ４０６、例示の解凍ハンドラ４０８、及び例示の解読ハンドラ４１０の１つ又は複数による処理に続いて、例示のデータハンドラ４０２は、データオブジェクト（例えば、例示の解読されたペア４２０）を受信し、例示のオブジェクト表記データ４１２から抽出されたオブジェクトを含む例示のオブジェクトデータ４２２を、例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８に送信する。
【００５８】
図４の例示のストリングプロセッサ４０４は、データハンドラ４０２によりオブジェクト表記データ４１２（例えば、ｘＪＳＯＮファイル）から抽出された例示のキー値ペア４１４を受信し、ストリングリテラル（例えば、キー及び値を囲むコーテーションマーク）の存在又は欠落に基づいて例示のキー値ペア４１４がｘＪＳＯＮファイルか又はＪＳＯＮファイルかを自動的に判定する。図示された例に従って、ストリングプロセッサ４０４は、ストリングリテラルが存在する場合、例示のキー値ペア４１４がＪＳＯＮファイルであるファイルに関連付けられると判定し、ストリングリテラルが存在しない場合、例示のキー値ペア４１４がｘＪＳＯＮファイルであると判定する。例示のストリングプロセッサ４０４はまた、データサイズを低減するために、ストリングリテラル（例えば、コーテーションマーク）が存在する場合、それらを除去する。例示のストリングプロセッサ４０４は、処理されたキー値ペア４１６を例示の逆シリアル化プロセッサ４０６に送信する。
【００５９】
図４の例示の逆シリアル化プロセッサ４０６は、処理されたキー値ペア４１６がシリアル化識別子（例えば、括弧に入った文字“ｂ”等、シリアル化が実施されたことのインジケーションを含むように改変されたキー）を含むか否かを判定する。例示の逆シリアル化プロセッサ４０６が、例示の処理されたキー値ペア４１６にシリアル化識別子が含まれていると判定する場合、例示の逆シリアル化プロセッサ４０６は、例示の処理されたキー値ペア４１６を逆シリアル化する。例えば、シリアル化されたデータはＢａｓｅ６４でエンコードされ得、例示のシリアル化プロセッサ４０６は、オリジナルのキー値ペアをリトリーブするためにこのＢａｓｅ６４表現をデコードする。必要とされる任意の逆シリアル化を実施した後、図示された例の例示の逆シリアル化ハンドラ４０６は、逆シリアル化されたキー値ペア４１７を例示の解凍ハンドラ４０８に送信する。
【００６０】
例示の解凍ハンドラ４０８は、例示の逆シリアル化されたキー値ペア４１７が圧縮識別子（例えば、括弧内の文字“ｚ”等、圧縮が実施されたことのインジケーションを含むように改変されたキー）を含むか否かを判定する。この例の例示の解凍ハンドラ４０８が、例示の逆シリアル化されたキー値ペア４１７のキーに圧縮識別子が含まれていると判定する場合、例示の解凍ハンドラ４０８は、例示の逆シリアル化されたキー値ペア４１７を解凍する。図示された例の例示の解凍ハンドラ４０８は、例示の圧縮ハンドラ３０８による圧縮の間、例示の逆シリアル化されたキー値ペア４１７の値に挿入されたメタデータから圧縮アルゴリズムの識別をリトリーブする。例えば、メタデータは、圧縮及び／又は解凍の間用いるための圧縮アルゴリズム（例えば、ｇｚｉｐ）パラメータの識別を含み得る（例えば、ルックアップテーブル）。必要とされる任意の解凍を実施した後、例示の解凍ハンドラ４０８は、解凍されたキー値ペア４１８を例示の解読ハンドラ４１０に送信する。
【００６１】
この例の解読ハンドラ４１０は、解凍されたキー値ペア４１８が暗号識別子（例えば、括弧内の文字“ｓ”等、暗号化が実施されたことのインジケーションを含むように改変されたキー）を含むか否かを判定する。図示された例の解読ハンドラ４１０が、例示の解凍されたキー値ペア４１８のキーに暗号識別子が含まれていると判定する場合、解読ハンドラ４１０はキー値ペアを解読する。例えば、解読ハンドラ４１０は、ｘＪＳＯＮハンドラ１１０が実装されているデバイス（例えば、例示の第１のデバイス１０６）に設置された秘密キーへのアクセスを有し得る。図示された例の解読ハンドラ４１０は、解凍されたキー値ペア４１８に対応する秘密キーをリトリーブし得、その秘密キーを解凍されたキー値ペア４１８を解読するために用い得る。或いは、解読ハンドラ４１０は、解読を実施するための秘密キーを入力するようにユーザに促し得る。
【００６２】
図４の例示の解読ハンドラ４１０は、解凍されたキー値ペア４１８及び／又は例示のオブジェクト表記データ４１２に挿入されたキーフィールドを分析することによって、解読のための適切な秘密キーを判定する。或いは、解凍されたキー値ペア４１８を暗号化及び／又は解読するために用いられたキーを識別する情報が、任意の他のロケーションにストアされ得る（例えば、暗号のために用いられるキーについての情報が、暗号化されるキー値ペアのキーに挿入され得る）。例示のオブジェクト表記データ４１２において複数のキーが用いられる幾つかの例では、暗号識別子は、解凍されたキー値ペア４１８を暗号化するために（及び同様に解読するために）用いられたキーの特定の１つに対して識別子を含み得る。例えば、ハッシュ化及び暗号化ハンドラ３０６に関連して上記で説明されたように、暗号識別子は、“［ｓＸ＃ＨＨＨＨ］”であり得、ここで、Ｘはオブジェクト表記データ４１２に挿入されたキーフィールドにおけるキーの１つを識別するインデックス値である。
【００６３】
必要とされる任意の解読を実施した後、図示された例の例示の解読ハンドラ４１０は、例示の解読されたキー値ペア４２０を、例示のオブジェクトデータ４２２の例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８への送信のために、データハンドラ４０２に送信する。
【００６４】
図２のジェネレータ２０６を実装する例示の手法が図３に説明されるが、図３に示されるエレメント、プロセス、及び／又はデバイスの１つ又は複数が、任意の他の手法で、組み合わせ、分割、再配置、省略、除去、及び／又は実装され得る。また、図２及び図３の例示のデータハンドラ３０２、例示のストリングプロセッサ３０４、例示のハッシュ化及び暗号化ハンドラ３０６、例示の圧縮ハンドラ３０８、例示のシリアル化プロセッサ３１０、及び／又は、より全般的に、ジェネレータ２０６は、ハードウェア、ソフトウェア、ファームウェア、及び／又は、ハードウェア、ソフトウェア、及びファームウェアの任意の組み合わせによって実装され得る。このように、例えば、例示のデータハンドラ３０２、例示のストリングプロセッサ３０４、例示のハッシュ化及び暗号化ハンドラ３０６、例示の圧縮ハンドラ３０８、及び／又は例示のシリアル化プロセッサ３１０の任意のものが、アナログ又はデジタル回路、ロジック回路、プロブラマブルプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックデバイス（ＰＬＤ）、及び／又はフィールドプログラマブルロジックデバイス（ＦＰＬＤ）の１つ又は複数によって実装され得る。純粋にソフトウェア及び／又はファームウェア実装を対象として本願の装置又はシステムの請求項の任意のものを読むと、例示のデータハンドラ３０２、例示のストリングプロセッサ３０４、例示のハッシュ化及び暗号化ハンドラ３０６、例示の圧縮ハンドラ３０８、及び／又は例示のシリアル化プロセッサ３１０の少なくとも１つが、ソフトウェア及び／又はファームウェアをストアする、メモリ、デジタル多用途ディスク（ＤＶＤ）、コンパクトディスク（ＣＤ）、又はブルーレイディスク等の有形のコンピュータ可読ストレージデバイス又はストレージディスクを含むように本明細書によって明示的に定義されている。また更に、図１のｘＪＳＯＮハンドラ１１０、及び／又は、図２及び／又は図３のジェネレータ２０６は、図３に示されるものに加えて又はその代わりに、１つ又は複数のエレメント、プロセス、及び／又はデバイスを含み得、及び／又は図示されたエレメント、プロセス、及びデバイスのどれか１つ以上又は全てを含み得る。
【００６５】
例示のジェネレータ２０６を実装するための例示の機械可読命令を表すフローチャートが図５〜図８に示される。これらの例において、機械可読命令は、図１２に関連して以下で説明される例示のプロセッサプラットフォーム１２００において示されるプロセッサ１２１２等のプロセッサによる実行のためのプログラムを含む。プログラムは、ＣＤ−ＲＯＭ、フロッピーディスク、ハードドライブ、デジタル多用途ディスク（ＤＶＤ）、ブルーレイディスク、又はプロセッサ１２１２に関連付けられるメモリ等、有形のコンピュータ可読ストレージ媒体にストアされるソフトウェアにおいて具現化され得るが、それらの全プログラム及び／又は一部は、代替的に、プロセッサ１２１２以外のデバイスによって実行され得、及び／又はファームウェア又は専用ハードウェアにおいて具現化され得る。また、例示のプログラムが、図５〜図８に示されるフローチャートを参照して説明されるが、例示のジェネレータ２０６を実装する他の多くの方法が代替的に用いられ得る。例えば、ブロックの実行の順番は変更され得、及び／又は記載されたブロックの幾つかが変更、削除、又は組み合わされ得る。
【００６６】
上述のように、図５〜図８の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ（ＲＯＭ）、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）、及び／又はその中に情報が任意の期間（例えば、長期間、永久的に、情報の一時的バッファリングのため及び／又はキャッシングのために短時間）ストアされる任意の他のストレージデバイス又はストレージディスク等、有形のコンピュータ可読ストレージ媒体にストアされるコード化された命令（例えば、コンピュータ及び／又は機械可読命令）を用いて実装され得る。本明細書において用いられるように、有形のコンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び／又はストレージディスクを含むように、及び伝搬信号及び送信媒体を除外するように、明示的に定義される。本明細書に用いられるように、「有形のコンピュータ可読ストレージ媒体」及び「有形の機械可読ストレージ媒体」は交換可能に用いられる。付加的又は代替的に、図５〜図８の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び／又はその中に情報が任意の期間（例えば、長期間、永久的に、情報の一時的バッファリングのため及び／又はキャッシングのために短い時間）ストアされる任意の他のストレージデバイス又はストレージディスク等、非一時的コンピュータ可読ストレージ媒体にストアされるコード化された命令（例えば、コンピュータ及び／又は機械可読命令）を用いて実装され得る。本明細書に用いられるように、非一時的コンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び／又はストレージディスクを含むように、及び伝搬信号及び送信媒体を除外するように、明示的に定義される。
【００６７】
図５の例示のコンピュータ可読命令は、例示のデータハンドラ３０２が、オブジェクト表記データ（例えば、ｘＪＳＯＮファイル）を生成するためデータ及び要求を受信すると開始する（ブロック５０２）。例えば、例示のデータハンドラ３０２は、例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８からＪａｖａＳｃｒｉｐｔオブジェクトを受信し得る。例示のデータハンドラ３０２は、ｘＪＳＯＮ出力が要求されているか否かを判定する（ブロック５０４）。例えば、ｘＪＳＯＮファイルを生成するための要求は、ｘＪＳＯＮ特定ファイルが要求されていることのインジケーションを含み得る。ｘＪＳＯＮ特定ファイルは、ｘＪＳＯＮをサポートしないデバイスによるパースをサポートする必要のないファイルである。例えば、ＪＳＯＮによるパースをサポートするファイルの場合、キー及び値がコーテーションマークによって囲まれ、ＪＳＯＮをサポートする必要のないｘＪＳＯＮファイルの場合、キー及び値がコーテーションマークによって囲まれる必要がなくファイルサイズが低減される。要求が、出力ファイルがｘＪＳＯＮファイルタイプであることを示す場合、例示のデータハンドラ３０２は、そのファイルがｘＪＳＯＮファイルタイプであることを示すコンテントタイプ識別子（例えば、“Content-Type: application/xjson”）を挿入する（ブロック５０６）。要求が、出力ファイルがＪＳＯＮファイルタイプであることを示す場合、例示のデータハンドラ３０２は、そのファイルがＪＳＯＮファイルタイプであることを示すコンテントタイプ識別子（例えば、“Content-Type: application/json”）を挿入する（ブロック５０８）。
【００６８】
ブロック５０６又はブロック５０８においてコンテントタイプが設定された後、例示のデータハンドラ３０２はデータオブジェクトを選択する（例えば、第１のデータオブジェクト、データオブジェクトの第１のエレメント、次のデータオブジェクトを選択する）（ブロック５１０）。例えば、例示のデータハンドラ３０２は、上述の例示のパーソンオブジェクトのｆｉｒｓｔＮａｍｅエレメントを選択し得る。例示のデータハンドラ３０２はその後、選択されたエレメントに対するキー値ペアを生成する（ブロック５１２）。例えば、例示のデータハンドラ３０２は、ＪＳＯＮキー値ペア：“ｆｉｒｓｔＮａｍｅ：Ｊｏｈｎ．”を生成するために、“ｆｉｒｓｔＮａｍｅ”とネーミングされたキー及びｆｉｒｓｔＮａｍｅエレメントに対する値を含む値を生成し得る。
【００６９】
例示のストリングプロセッサ３０４はその後、ファイルに対してコンテントタイプがｘＪＳＯＮに設定されたか否かを判定する（ブロック５１４）。コンテントタイプがｘＪＳＯＮに設定されなかった（例えば、出力ファイルがｘＪＳＯＮをサポートしないＪＳＯＮパーサーによるパースをサポートする）場合、例示のストリングプロセッサ３０４は、生成されたキー値ペアのキー及び値の周りにコーテーションマークを挿入する（ブロック５１６）。
【００７０】
ブロック５１６においてストリングプロセッサ３０４がコーテーションマークを挿入した後、又はストリングプロセッサ３０４がそのファイルのためのコンテントタイプがｘＪＳＯＮに設定されていることを判定した（ブロック５１４）後、例示のハッシュ化及び暗号化ハンドラ３０６は、キー値ペアがハッシュされるべきであるか及び／又は暗号化されるべきであるかを判定する（ブロック５１８）。例示のハッシュ化及び暗号化ハンドラ３０６は、ｘＪＳＯＮファイルを生成するための要求が、キー値ペアがハッシュ化されるべきであること及び／又は暗号化されるべきであることを示す場合、キー値ペアがハッシュされるべきであること及び／又は暗号化されるべきであることを判定し得る。或いは、キー値ペアが機密データを含むことを検出した場合（例えば、キー値ペアがパスワードフィールドである場合）、ハッシュ化及び暗号化ハンドラ３０６は、データが暗号化されるべきであることを自動的に判定し得る。ハッシュ化及び暗号化ハンドラ３０６が、キー値ペアがハッシュ化されるべきである及び／又は暗号化されるべきであると判定すると、例示のハッシュ化及び暗号化ハンドラ３０６は、キー値ペアをハッシュ化及び／又は暗号化する（ブロック５２０）。キー値ペアをハッシュ化及び／又は暗号化するための例示のコンピュータ可読命令は図８に関連して説明される。
【００７１】
例示のハッシュ化及び暗号化ハンドラ３０６がハッシュ化及び暗号化が要求されていないことを判定した（ブロック５１８）後、又はハッシュ化及び暗号化ハンドラがキー値ペアをハッシュ化及び／又は暗号化した（ブロック５２０）後、例示の圧縮ハンドラ３０８は、キー値ペアが圧縮されるべきか否かを判定する（ブロック５２２）。オブジェクト表記データを生成するための要求が、キー値ペアが圧縮されるべきであることを示す場合、圧縮ハンドラ３０８は、キー値ペアが圧縮されるべきであると判定し得る。或いは、例示の圧縮ハンドラ３０８は、値のサイズが閾値レベルを超える場合、キー値ペアが圧縮されるべきであると判定し得る。圧縮ハンドラ３０８が、キー値ペアが圧縮されるべきであると判定すると、例示の圧縮ハンドラ３０８はキー値ペアを圧縮する（ブロック５２４）。キー値ペアを圧縮するための例示のコンピュータ可読命令は図６に関連して説明される。
【００７２】
例示の圧縮ハンドラ３０８が圧縮が要求されていないことを判定した（ブロック５２２）後、又は圧縮ハンドラ３０８がキー値ペアを圧縮した（ブロック５２４）後、例示のシリアル化プロセッサ３１０は、キー値ペアがシリアル化されるべきか否かを判定する（ブロック５２６）。例示のシリアル化プロセッサ３１０は、オブジェクト表記データを生成するための要求が、キー値ペアがシリアル化されるべきであることを示している場合、キー値ペアがシリアル化されるべきであると判定し得る。シリアル化プロセッサ３１０が、キー値ペアがシリアル化されるべきであると判定する場合、例示のシリアル化プロセッサ３１０はキー値ペアをシリアル化する（ブロック５２８）。キー値ペアをシリアル化するための例示のプロセスは図７に関連して説明される。
【００７３】
要求された任意のハッシュ化及び／又は暗号化（ブロック５２０）、圧縮（ブロック５２２）、及びシリアル化（ブロック５２８）を実施した後、例示のデータハンドラ３０２は、生成されたキー値ペアをオブジェクト表記データ（例えば、ｘＪＳＯＮファイル）に挿入する（ブロック５３０）。例示のデータハンドラ３０２は、キー値ペアが生成されるべき付加的なデータオブジェクト及び／又はエレメントが存在するか否かを判定する（ブロック５３２）。キー値ペア生成のための付加的なオブジェクト及び／又はエレメントがある場合、制御は、次のオブジェクト及び／又はエレメントを処理するためにブロック５１０に戻る。キー値ペア生成のための付加的なオブジェクト及び／又はエレメントがない場合、図５の例示のコンピュータ可読命令は終了する。
【００７４】
図６は、キー値ペアを圧縮するための例示のコンピュータ可読命令のフローチャートである。図６の例示のコンピュータ可読命令は、図５のブロック５２４を実装するために用いられ得る。例示の圧縮ハンドラ３０８が圧縮アルゴリズムを判定する（ブロック６０２）とき、図６の例示のコンピュータ可読命令が開始する。例えば、キー値ペアを圧縮するための要求が、用いられるべき圧縮アルゴリズムを指定し得る。或いは、例示の圧縮ハンドラ３０８は、デフォルトの圧縮アルゴリズム（例えば、ｇｚｉｐ圧縮アルゴリズム）を含み得る。例示の圧縮ハンドラ３０８はその後、判定された圧縮アルゴリズムを用いてキー値ペアを圧縮する（ブロック６０４）。例示の圧縮ハンドラ３０８はその後、キー値ペアのためのキーに圧縮識別子を挿入する（ブロック６０６）。例えば、圧縮識別子は、キー値ペアが圧縮されたことを示し得る任意のインジケーション（例えば、“［ｚ］”）であり得る。例えば、圧縮されたキー値ペアが、プレースホルダ―（placeholder）及び圧縮識別子を含み得る（例えば、“＿ｏ１［ｚ］”であり、ここで、“ｏ”に続く値は、各キーが一意であり続けることを確実にするために、各圧縮された値毎に増分するインデックスである）。例示の圧縮ハンドラ３０８はその後、圧縮に関するメタデータをキー値ペアに対する値に挿入する（ブロック６０８）。例えば、圧縮ハンドラ３０８は、圧縮のために用いられるアルゴリズムの識別（例えば、“ａｌｇ：ｇｚｉｐ”）及び圧縮のためのパラメータ（例えば、ルックアップテーブル“ｌｕｔ：＋ｓｒＲ&otilde;’&oacute;ｓ”）を挿入し得る。その後、図６の例示のコンピュータ可読命令は終了する。例えば、制御は図５のブロック５２６に戻り得る。
【００７５】
図７は、キー値ペアをシリアル化するために実行され得る例示のコンピュータ可読命令のフローチャートである。図７の例示のコンピュータ可読命令は、図５のブロック５２８を実装するために用いられ得る。図７の例示のコンピュータ可読命令は、例示のシリアル化プロセッサ３１０がキー値ペアの値のためのシリアル化された値を判定するとき開始する（ブロック７０２）。例えば、シリアル化プロセッサ３１０は、キー値ペアの値をシリアル化し得、シリアル化されたデータをオブジェクト表記データにストアするために、バイナリからテキストへの変換（例えば、Ｂａｓｅ６４を用いて）を行い得る。例示のシリアル化プロセッサ３１０はその後、シリアル化識別子をキーに挿入する（例えば、例示のシリアル化プロセッサ３１０は“［ｂ］”をキーに挿入し得る）ために、キー値ペアのキーを改変する。その後、図７の例示のコンピュータ可読命令は終了する。例えば、制御は、図５のブロック５３０に戻り得る。
【００７６】
図８は、キー値ペアをハッシュ化及び／又は暗号化するための例示のコンピュータ可読命令のフローチャートである。図８の例示のコンピュータ可読命令は、図５のブロック５２０を実装するために用いられ得る。図８のプロセスは、図示された例の例示のハッシュ化及び暗号化ハンドラ３１０が、用いられるべきサイファー及びキーを判定するとき開始する（ブロック８０２）。例えば、ハッシュ化及び／又は暗号化するための要求が、用いられるべきサイファー及び／又はキー（例えば、秘密キー）の識別を含み得る。或いは、ハッシュ化及び暗号化ハンドラ３１０は、デフォルトのサイファー及び／又は秘密キーを用い得る。例示のハッシュ化及び暗号化ハンドラ３１０はその後、暗号化されるべきストリングをパックする（ブロック８０４）。例えば、例示のハッシュ化及び暗号化ハンドラ３１０は、任意のコーテーションマークを除去することによってキー値ペアをパックする。ハッシュ化及び暗号化ハンドラ３１０は、任意の他のキャラクタを除去するように任意の他のパッキングを実施し得る。例示のハッシュ化及び暗号化ハンドラ３１０はその後、識別されたキーを用いてキー値ペアに署名する（ブロック８０６）。
【００７７】
例示のハッシュ化及び暗号化ハンドラ３１０はその後、サイファーが暗号化を含むか否かを判定する（ブロック８０８）。例えば、サイファーは、ハッシュ化のみを含むサイファーであり得、又はハッシュ化及び暗号化を含むサイファーであり得る。サイファーが暗号化を含まない場合、制御はキー値ペアのハッシュ化のためにブロック８２２に進む。サイファーが暗号化を含む場合、ハッシュ化及び暗号化ハンドラ３１０は署名されたキー値ペアを暗号化する（ブロック８１０）。例示のハッシュ化及び暗号化ハンドラ３１０はその後、ｘＪＳＯＮファイルへの挿入のために、暗号化された値をストリングに変換する（ブロック８１２）。例示のハッシュ化及び暗号化ハンドラ３１０は、Ｂａｓｅ６４エンコードを用いて、暗号化された値をストリングに転換する。
【００７８】
キー値ペアの暗号化（ブロック８１０）の後、ハッシュ化及び暗号化ハンドラ３１０は、暗号化識別子（例えば、“［ｓ］”）をキー値ペアのキーに挿入する（ブロック８１４）。例示のハッシュ化及び暗号化ハンドラ３１０はその後、サイファーを識別するメタデータをｘＪＳＯＮファイルに挿入する（ブロック８１６）。例えば、サイファーメタデータは、キーネーム“ｋｅｙｓ”を用いてキー値ペアに挿入され得る。例示のハッシュ化及び暗号化ハンドラ３１０はその後、キーメタデータに複数のサイファーがあるか否か判定する（ブロック８１８）。キーメタデータに複数のサイファーがある場合、例示のハッシュ化及び暗号化ハンドラ３１０は、暗号化されたキー値ペアのキーにサイファー識別子を挿入する（ブロック８２０）。例えば、ハッシュ化及び暗号化ハンドラ３１０は、サイファーに対応するインデックスをキーメタデータに挿入し得る（例えば、“［ｓ２］”であり、ここで、サイファーはキーメタデータの第２のサイファーである）。
【００７９】
ハッシュ化及び暗号化ハンドラ３１０が、サイファーが暗号化を含まないと判定した（ブロック８０８）後、複数のサイファーが存在しないと判定した（ブロック８１８）後、又はサイファーの識別子をキーに挿入した（ブロック８２０）後、例示のハッシュ化及び暗号化ハンドラ３１０は、キー値ペアの値に対するハッシュを判定する（ブロック８２２）。例えば、ハッシュは、ダブルピアソン（Ｐｅａｒｓｏｎ）ハッシュ化を用いて判定され得る。例示のハッシュ化及び暗号化ハンドラ３１０は、ハッシュの値をキー値ペアのキーに挿入する（ブロック８２４）。例えば、ハッシュ値は、ハッシュ化識別子（例えば、ハッシュ化識別子はハッシュシンボル（＃）であり得る）に続いて挿入され得る。例えば、ハッシュは、（“［＃ＸＸＸＸ］”であり、ここで、ＸＸＸＸはハッシュ値である）として挿入され得る。暗号化及びハッシュ化される値に対するキーは、単一のサイファーが存在する場合は“［ｓ＃ＸＸＸＸ］”であり得、複数のサイファーが存在し、第１のサイファーが暗号化のために用いられる場合は“［ｓ１＃ＸＸＸＸ］”であり得る。
【００８０】
その後、図８の例示のコンピュータ可読命令は終了する。例えば、制御は図５のブロック５２２に戻り得る。
【００８１】
図２のパーサー２０４を実装する例示の手法が図４に示されるが、図４に示されるエレメント、プロセス、及び／又はデバイスの１つ又は複数は、任意の他の手法で、組み合わせ、分割、再配置、省略、除去、及び／又は実装され得る。また、図２及び図４の例示のデータハンドラ４０２、例示のストリングプロセッサ４０４、例示の逆シリアル化プロセッサ４０６、例示の解凍ハンドラ４０８、例示の解読ハンドラ４１０、及び／又はより全般的に、パーサー２０４は、ハードウェア、ソフトウェア、ファームウェア、及び／又はハードウェア、ソフトウェア、及びファームウェアの任意の組み合わせによって実装され得る。このように、例えば、例示のデータハンドラ４０２、例示のストリングプロセッサ４０４、例示の逆シリアル化プロセッサ４０６、例示の解凍ハンドラ４０８、及び／又は例示の解読ハンドラ４１０の任意のものが、アナログ又はデジタル回路、ロジック回路、プロブラマブルプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックデバイス（ＰＬＤ）、及び／又はフィールドプログラマブルロジックデバイス（ＦＰＬＤ）の１つ又は複数によって実装され得る。純粋にソフトウェア及び／又はファームウェア実装を対象として本願の任意の装置又はシステムの請求項を読むと、例示のデータハンドラ４０２、例示のストリングプロセッサ４０４、例示の逆シリアル化プロセッサ４０６、例示の解凍ハンドラ４０８、及び／又は例示の解読ハンドラ４１０の少なくとも１つが、ソフトウェア及び／又はファームウェアをストアする、メモリ、デジタル多用途ディスク（ＤＶＤ）、コンパクトディスク（ＣＤ）、又はブルーレイディスク等の有形のコンピュータ可読ストレージデバイス又はストレージディスクを含むように本明細書によって明示的に定義される。また更に、図１のｘＪＳＯＮハンドラ１１０、及び／又は図２及び／又は図４のパーサー２０４は、図４に示されるものに加えて又はその代わりに、１つ又は複数のエレメント、プロセス、及び／又はデバイスを含み得、及び／又は図示されたエレメント、プロセス、及びデバイスのどれか１つ以上又は全てを含み得る。
【００８２】
例示のパーサー２０４を実装するための例示の機械可読命令を表すフローチャートが図９〜図１１に示される。これらの例において、機械可読命令は、図１２に関連して、以下で説明される例示のプロセッサプラットフォーム１２００に示されるプロセッサ１２１２等のプロセッサによる実行のためのプログラムを含む。プログラムは、ＣＤ−ＲＯＭ、フロッピーディスク、ハードドライブ、デジタル多用途ディスク（ＤＶＤ）、ブルーレイディスク、又はプロセッサ１２１２に関連付けられたメモリ等の、有形のコンピュータ可読ストレージ媒体にストアされるソフトウェアにおいて具現化され得るが、それらの全体のプログラム及び／又は一部は、代替的に、プロセッサ１２１２以外のデバイスによって実行され得、及び／又はファームウェア又は専用ハードウェアにおいて具現化され得る。また、例示のプログラムが図９〜図１１に示されるフローチャートを参照して説明されるが、例示のパーサー２０４を実装する他の多くの方法が代替的に用いられ得る。例えば、ブロックの実行の順番が変更され得、及び／又は記載されたブロックの幾つかが変更、削除、又は組み合わされ得る。
【００８３】
上述のように、図９〜図１１の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ（ＲＯＭ）、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）、キャッシュ、ランダムアクセスメモリ（ＲＡＭ）及び／又はその中に情報が任意の期間（例えば、長期間、永久的に、情報の一時的バッファリングのため及び／又はキャッシングのために短い時間）ストアされる任意の他のストレージデバイス又はストレージディスク等の、有形のコンピュータ可読ストレージ媒体にストアされるコード化された命令（例えば、コンピュータ及び／又は機械可読命令）を用いて実装され得る。本明細書において用いられるように、有形のコンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び／又はストレージディスクを含むように及び伝搬信号及び送信媒体を除外するように明示的に定義される。本明細書において用いられるように、「有形のコンピュータ可読ストレージ媒体」及び「有形の機械可読ストレージ媒体」は交換可能に用いられる。付加的又は代替的に、図９〜図１１の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び／又はその中に情報が任意の期間（例えば、長期間、永久的に、情報の一時的バッファリングのため及び／又はキャッシングのために短い時間）ストアされる、任意の他のストレージデバイス又はストレージディスク等の、非一時的コンピュータ可読ストレージ媒体にストアされるコード化された命令（例えば、コンピュータ及び／又は機械可読命令）を用いて実装され得る。本明細書において用いられるように、非一時的コンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び／又はストレージディスクを含むように、及び伝搬信号及び送信媒体を除外するように明示的に定義される。
【００８４】
図９は、例示のパーサー２０４が、オブジェクト表記データ（例えば、ｘＪＳＯＮファイル）をパースするための例示のコンピュータ可読命令のフローチャートである。図９の例示のコンピュータ可読命令は、例示のデータハンドラ４０２がオブジェクト表記データを受信するとき開始する（ブロック９０２）。例えば、データハンドラ４０２、又はｘＪＳＯＮハンドラ１１０を含むデバイスの別の構成要素が、データをｘＪＳＯＮデータとして送信する別のデバイスからデータを要求し得る。
【００８５】
幾つかの例において、図示された例のデータハンドラ４０２は、利用可能なオブジェクト表記データの一部のみを要求する。例えば、例示のｘＪＳＯＮファイルが１００，０００個のキー値ペアを含むことが可能であり、その場合、ｘＪＳＯＮファイルをパースしようとすると低電力デバイス（例えば、及びＩｏＴデバイス）のメモリを使い果たすことになり得る。従って、例示のデータハンドラ４０２は、（例えば、データをリトリーブするための要求に基づいて）所望部分を要求する。例えば、データハンドラ４０２は、ｄｏｔ表記を用いてオブジェクト表記データの特定の部分を参照し得る（例えば、“@exmaple.com/myobj.xjson#id.value1”は、exmaple.comにより提供されたmyobj.xjsonファイルにおけるオブジェクトidのvalue 1として識別されたキーをリトリーブする）。このように、例示のデータハンドラ４０２は、オブジェクト表記データ全体をリトリーブする必要なしに、対象となる所望のキー及び／又はオブジェクトをリトリーブし得る。例示の実装において、オブジェクトが、“#object”として参照され、ここで“object”はオブジェクトのネームであり、“@uri”として参照され、ここで“uri”は、そこからオブジェクト表記データがリトリーブされるロケーションであり、及び、@uri#object.subobjectとして参照され、ここで“subobject”は、“uri”におけるオブジェクト表記データロケーションにおけるオブジェクト“object”内のオブジェクト及び／又はキーを識別する。
【００８６】
例示のデータハンドラ４０２は、オブジェクト表記データにおける第１のキー値ペアを選択する（ブロック９０４）。例示のストリングプロセッサ４０４は、キー値ペアがストリングリテラル（例えば、コーテーションマーク）を含むか否かを判定する（ブロック９０６）。キー値ペアがストリングリテラルを含まない場合、例示のストリングプロセッサ４０４は、受信したファイルがｘＪＳＯＮタイプであると判定し、ファイルがｘＪＳＯＮファイルであることのインジケーションをストアする（例えば、ＪＳＯＮファイルはコーテーションマークを含むが、ｘＪＳＯＮファイルはコーテーションマークを含む必要がないので）（ブロック９０８）。その後、制御はブロック９２２に進む。
【００８７】
ストリングプロセッサ４０４が、キー値ペアがストリングリテラルを含むと判定すると、ストリングプロセッサ４０４は、タイプをＪＳＯＮとしてストアする（ブロック９１０）。例えば、ファイルは、それがストリングリテラルを含むのでＪＳＯＮ互換性ファイルであり得るが、そのファイルはｘＪＳＯＮ拡張を含み得る。例示のストリングプロセッサ４０４はその後、ｘＪＳＯＮファイルのサイズを低減するために、キー値ペアからコーテーションマークを除去する（ブロック９１２）。
【００８８】
ストリングプロセッサ４０４が、タイプをｘＪＳＯＮと設定した（ブロック９０８）後、又はストリングプロセッサ４０４がコーテーションマークを除去した（ブロック９１２）後、例示の逆シリアル化プロセッサ４０６は、キーがシリアル化識別子を含むか否かを判定する（ブロック９１４）。キーがシリアル化識別子を含む場合、例示の逆シリアル化プロセッサ４０６は、シリアル化されたデータを逆シリアル化／デマーシャルする（ブロック９１６）。
【００８９】
キー値ペアがシリアル化識別子を含まない（ブロック９１４）場合、又はキー値ペアの逆シリアル化（ブロック９１６）の後、例示の解凍ハンドラ４０８は、キーが圧縮識別子を含むか否かを判定する（ブロック９１８）。キーが圧縮識別子を含む場合、例示の解凍ハンドラ４０８はキー値ペアを解凍する（ブロック９２０）。キー値ペアを解凍するために実行され得る例示のコンピュータ可読命令は、図１１に関連して説明される。
【００９０】
キー値ペアが圧縮識別子を含まない（ブロック９１８）場合、又はキー値ペアの解凍（ブロック９２０）の後、例示の解読ハンドラ４１０は、キー値ペアのキーが暗号化識別子を含むか否かを判定する（ブロック９２２）。キーが暗号化識別子を含む場合、解読ハンドラ４１０はキー値ペアを解読する（ブロック９２４）。キー値ペアを解読するための例示のコンピュータ可読命令が図１０に関連して説明される。
【００９１】
図１０は、暗号化されたキー値ペアを解読するための例示のコンピュータ可読命令のフローチャートである。例示のコンピュータ可読命令は図９のブロック９２４を実装するために用いられ得る。例示のコンピュータ可読命令は、解読ハンドラ４１０がキー値ペアの暗号化の間用いられたサイファー及びキーを判定するとき開始する（ブロック１００２）。例示の解読ハンドラ４１０は、オブジェクト表記データに含まれるキーメタデータからサイファー及び公開キーを判定する。幾つかの例において、解読ハンドラ４１０は、暗号ハンドラにおいて識別されるインデックスを用いてキーのリストからサイファー及びキーを選択する。
【００９２】
例示の解読ハンドラ４１０はその後、暗号化の間用いられた公開キーに対応する秘密キーを取得する（ブロック１００４）。例えば、秘密キーは、パーサー２０４にストアされる秘密キーのセットにストアされ得る。或いは、解読ハンドラ４１０は、識別される公開キーに対応する秘密キーをユーザが提供することを要求するプロンプトを表示し得る。解読ハンドラ４１０はその後、秘密キー及び識別されたサイファーを用いて、暗号化されたデータを解読する（ブロック１００６）。その後、図１０の例示のコンピュータ可読命令は終了する。例えば、制御は図９のブロック９２６に戻り得る。
【００９３】
図１１は、キー値ペアを解凍するための例示のコンピュータ可読命令のフローチャートである。図１１の例示のコンピュータ可読命令は図９のブロック９２０を実装するために用いられ得る。図１１の例示のコンピュータ可読命令は、例示の解凍ハンドラ４０８が、キー値ペアを圧縮するために用いられた圧縮アルゴリズムを判定するとき開始する（ブロック１１０２）。例えば、解凍ハンドラ４０８は、圧縮されたキー値ペアの値に挿入されたメタデータから圧縮アルゴリズムを判定する。例示の解凍ハンドラ４０８はその後、圧縮のためのパラメータを判定する（ブロック１１０４）。例えば、解凍ハンドラ４０８は、キー値ペアの値に挿入されたメタデータからパラメータを抽出し得る。例えば、パラメータは、圧縮アルゴリズムにより用いられるルックアップテーブルを含み得る。例示の解凍ハンドラ４０８はその後、識別された圧縮アルゴリズム及びパラメータを用いてキー値ペアを解読する（ブロック１１０６）。その後、図１１の例示のコンピュータ可読命令は終了する。例えば、制御は図９のブロック９２２に戻り得る。
【００９４】
図１２は、例示のインタフェース２０２、例示のパーサー２０４（例えば、例示のデータハンドラ４０２、例示のストリングプロセッサ４０４、例示の逆シリアル化プロセッサ４０６、例示の解凍ハンドラ４０８、及び／又は例示の解読ハンドラ４１０を含む）、例示のジェネレータ２０６（例えば、例示のデータハンドラ３０２、例示のストリングプロセッサ３０４、例示のハッシュ化及び暗号化ハンドラ３０６、例示の圧縮ハンドラ３０８、及び／又は例示のシリアル化プロセッサ３１０を含む）、及び／又は例示のＪａｖａＳｃｒｉｐｔインタプリタ２１０を含む、例示の第１のデバイス１０６及び／又は例示のウェブサービス１０２を実装するために、図５、図６、図７、図８、図９、図１０、及び／又は図１１の命令を実行するように構成された例示のプロセッサプラットフォーム１２００のブロック図である。プロセッサプラットフォーム１２００は、例えば、パーソナルコンピュータ、モバイルデバイス（例えば、携帯電話、スマートフォン、ｉＰａｄ（商標）などのタブレット）、パーソナルデジタルアシスタント（ＰＤＡ）、又は任意の他のタイプの、画像を処理することが可能なコンピューティングデバイスであり得る。
【００９５】
図示された例のプロセッサプラットフォーム１２００はプロセッサ１２１２を含む。図示された例のプロセッサ１２１２はハードウェアである。例えば、プロセッサ１２１２は、任意の所望のファミリー又は製造元からの、１つ又は複数の集積回路、ロジック回路、マイクロプロセッサ、又はコントローラによって実装され得る。図１２の例示のプロセッサ１２１２は、ｘＪＳＯＮファイル及びデータをパース及び生成するために、例示のパーサー２０４、例示のジェネレータ２０６、及び例示のＪａｖａＳｃｒｉｐｔインタプリタ２０８を含む、例示のｘＪＳＯＮハンドラ１１０の構成要素を実装し得る。
【００９６】
図示された例のプロセッサ１２１２は、ローカルメモリ１２１３（例えば、キャッシュ）を含む。図示された例のプロセッサ１２１２は、バス１２１８を介して、揮発性メモリ１２１４及び不揮発性メモリ１２１６を含むメインメモリと通信する。揮発性メモリ１２１４は、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ＲＡＭＢＵＳダイナミックランダムアクセスメモリ（ＲＤＲＡＭ）、及び／又は任意の他のタイプのランダムアクセスメモリデバイスにより実装され得る。不揮発性メモリ１２１６は、フラッシュメモリ及び／又は任意の他の所望のタイプのメモリデバイスにより実装され得る。メインメモリ１２１４、１２１６へのアクセスはメモリコントローラによって制御される。
【００９７】
図示された例のプロセッサプラットフォーム１２００は更に、インタフェース回路１２２０を含む。インタフェース回路１２２０は、Ｅｔｈｅｒｎｅｔインタフェース、ユニバーサルシリアルバス（ＵＳＢ）、及び／又はＰＣＩエクスプレスインタフェース等の任意のタイプのインタフェース規格によって実装され得る。例示のインタフェース回路は、プロセッサプラットフォーム１２００を図１の例示のネットワーク１０４とインタフェースするために、図１及び／又は図２のｘＪＳＯＮハンドラ１１０の例示のインタフェース２０２を実装し得る。
【００９８】
図示された例において、１つ又は複数の入力デバイス１２２２がインタフェース回路１２２０に接続される。入力デバイス１２２２は、ユーザがデータ及びコマンドをプロセッサ１２１２に入力することを可能にする。入力デバイスは、例えば、オーディオセンサ、マイクロホン、カメラ（静止画又は動画）、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、イソポイント（isopoint）、及び／又は音声認識システムにより実装され得る。
【００９９】
１つ又は複数の出力デバイス１２２４がまた、図示された例のインタフェース回路１２２０に接続される。出力デバイス１２２４は、例えば、ディスプレイデバイス（例えば、発光ダイオード（ＬＥＤ）、有機発光ダイオード（ＯＬＥＤ）、液晶ディスプレイ、陰極線管ディスプレイ（ＣＲＴ）、タッチスクリーン、タクタイル出力デバイス、発光ダイオード（ＬＥＤ）、プリンタ、及び／又はスピーカ）により実装され得る。そのため、図示された例のインタフェース回路１２２０は、典型的に、グラフィックドライバーカード、グフィックドライバーチップ、又はグラフィックドライバープロセッサを含む。
【０１００】
図示された例のインタフェース回路１２２０は更に、ネットワーク１２２６（例えば、Ｅｔｈｅｒｎｅｔ接続、デジタル加入者線（ＤＳＬ）、電話線、同軸ケーブル、セルラー電話システム）を介して、外部機器（例えば、任意の種類のコンピューティングデバイス）とのデータの交換を促進するために、トランスミッタ、レシーバ、トランシーバ、モデム、及び／又はネットワークインタフェースカード等の通信デバイスを含む。
【０１０１】
図示された例のプロセッサプラットフォーム１２００は更に、ソフトウェア及び／又はデータをストアするための１つ又は複数の大容量ストレージデバイス１２２８を含む。そのような大容量ストレージデバイス１２２８の例には、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、ＲＡＩＤシステム、及びデジタル多用途ディスク（ＤＶＤ）ドライブが含まれる。
【０１０２】
図５、図６、図７、図８、図９、図１０、及び／又は図１１のコード化された命令１２３２は、大容量ストレージデバイス１２２８、揮発性メモリ１２１４、不揮発性メモリ１２１６、及び／又はＣＤ又はＤＶＤ等の着脱可能な有形コンピュータ可読ストレージ媒体にストアされ得る。
【０１０３】
本明細書において開示される例は、オブジェクト表記データ（例えば、ＪＳＯＮ等のヒューマンリーダブルオブジェクト表記データ）に対する拡張を提供する。幾つかの例において、オブジェクト表記データの一部をパック及び／又は圧縮することによってデータストレージ及び通信帯域幅の使用が低減される。幾つかの例において、オブジェクト表記データの一部をパック／圧縮させること、シリアル化させること、及び／又はオブジェクト表記データの他の部分を拡張させないようにしながら圧縮させることによって、コンピュータ処理リソースの使用が低減される。例えば、ＪＳＯＮファイルにおいて、本明細書に開示される例を用いて、ＪＳＯＮファイル全体が暗号化されることを要求することなく、単一のキー値ペアが暗号化され得、これによってＪＳＯＮファイルのエレメントの暗号化及び解読に必要とされる処理の量が低減される。幾つかの例において、従来のオブジェクト表記プロトコルによって設定された文法規則に従う出力（例えば、拡張ＪＳＯＮファイル）を生成することによって、拡張をサポートしないデバイスとのバックワード互換性が提供される。従って、そのような、従来のプロトコルの文法規則に合った、拡張されたファイルが、拡張をサポートしないデバイスを用いて拡張されたファイルをパースする際にエラーを起こすことはない。
【０１０４】
本発明の特許請求の範囲内で、説明された実施形態に変更が可能であり、他の実施形態が可能である。
【図１】
0006685230.tif 000011
【図２】
0006685230.tif 000012
【図３】
0006685230.tif 000013
【図４】
0006685230.tif 000014
【図５】
0006685230.tif 000015
【図６】
0006685230.tif 000016
【図７】
0006685230.tif 000017
【図８】
0006685230.tif 000018
【図９】
0006685230.tif 000019
【図１０】
0006685230.tif 000020
【図１１】
0006685230.tif 000021
【図１２】
0006685230.tif 000022