特許第6685230号(P6685230)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本テキサス・インスツルメンツ株式会社の特許一覧 ▶ テキサス インスツルメンツ インコーポレイテッドの特許一覧

特許6685230拡張オブジェクト表記データを提供するための方法及び装置
<>
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000011
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000012
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000013
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000014
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000015
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000016
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000017
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000018
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000019
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000020
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000021
  • 特許6685230-拡張オブジェクト表記データを提供するための方法及び装置 図000022
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6685230
(24)【登録日】2020年4月2日
(45)【発行日】2020年4月22日
(54)【発明の名称】拡張オブジェクト表記データを提供するための方法及び装置
(51)【国際特許分類】
   G06F 9/44 20180101AFI20200413BHJP
   H04L 9/14 20060101ALI20200413BHJP
【FI】
   G06F9/44
   H04L9/00 641
【請求項の数】21
【全頁数】31
(21)【出願番号】特願2016-551809(P2016-551809)
(86)(22)【出願日】2015年2月11日
(65)【公表番号】特表2017-511920(P2017-511920A)
(43)【公表日】2017年4月27日
(86)【国際出願番号】US2015015515
(87)【国際公開番号】WO2015123366
(87)【国際公開日】20150820
【審査請求日】2018年2月5日
(31)【優先権主張番号】14/611,080
(32)【優先日】2015年1月30日
(33)【優先権主張国】US
(31)【優先権主張番号】61/938,381
(32)【優先日】2014年2月11日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】390020248
【氏名又は名称】日本テキサス・インスツルメンツ合同会社
(73)【特許権者】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【上記1名の代理人】
【識別番号】100098497
【弁理士】
【氏名又は名称】片寄 恭三
(72)【発明者】
【氏名】アヴラハム バウム
(72)【発明者】
【氏名】イラン ザルミ
(72)【発明者】
【氏名】ジル ライター
【審査官】 多胡 滋
(56)【参考文献】
【文献】 特開2012−010071(JP,A)
【文献】 米国特許出願公開第2010/0185862(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44
H04L 9/14
(57)【特許請求の範囲】
【請求項1】
拡張ジャバスクリプトオブジェクト表記ファイルを生成するプロセスであって、
ジャバスクリプトオブジェクト表記(JSON)キー値ペアをハッシュ化及び暗号化することの少なくとも1つに使用されるべきサイファーとキーとを判定することと、
前記判定されたキーを用いて前記キー値ペアを署名することと、
前記判定されたサイファーが暗号化サイファーを含むときに前記署名されたキー値ペアを暗号化することと、
前記暗号化されたキー値ペアを拡張ジャバスクリプトオブジェクト表記(xJSON)ファイルにおける挿入のためにストリングに変換することと、
前記キー値ペアのキーに暗号化識別子を挿入することと、
前記xJSONファイルに前記判定されたサイファーを識別するメタデータを挿入することと、
前記キー値ペアの値に対してハッシュを判定することと、
前記キー値ペアのキー内に前記ハッシュの値を挿入することと、
を含む、プロセス。
【請求項2】
請求項1に記載のプロセスであって、
サイファーを判定することが、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定することを含む、プロセス。
【請求項3】
請求項1に記載のプロセスであって、
サイファーを判定することが、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定し、前記サイファーが暗号化を含まないときに前記キー値ペアの値に対してハッシュを判定する、プロセス。
【請求項4】
請求項1に記載のプロセスであって、
前記変換することが、前記暗号化されたキー値ペアをBase64符号化を用いるストリングに変換することを含む、プロセス。
【請求項5】
請求項1に記載のプロセスであって、
前記キー値ペアのキーに暗号化識別子を挿入することが、前記キーに識別子「s」を挿入することを含む、プロセス。
【請求項6】
請求項1に記載のプロセスであって、
メタデータを挿入することが、前記メタデータをキーネーム「keys」を用いてキー値ペアに挿入することを含む、プロセス。
【請求項7】
請求項1に記載のプロセスであって、
キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定することを更に含む、プロセス。
【請求項8】
請求項1に記載のプロセスであって、
キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定することを更に含み、前記キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがある場合に前記暗号化されたキー値ペアのキーにサイファー識別子を挿入する、プロセス。
【請求項9】
請求項1に記載のプロセスであって、
メタデータを挿入することが、キーメタデータに前記サイファーに対応するインデックスを挿入することを含む、プロセス。
【請求項10】
請求項1に記載のプロセスであって、
メタデータを挿入することが、キーメタデータに前記サイファーに対応するインデックス「s2」を挿入することを含み、前記サイファーが前記キーメタデータの第2のサイファーである、プロセス。
【請求項11】
請求項1に記載のプロセスであって、
前記キー値ペアの値に対してハッシュを判定して前記キー値ペアの値をハッシュ化することが、前記サイファーが暗号化を含まないことを判定する後に、前記キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがないことを判定する後に、又は前記キーにおいて前記サイファーの識別子を挿入する後に起こる、プロセス。
【請求項12】
請求項1に記載のプロセスであって、
サイファー、キー又は秘密キーの識別を含むハッシュ化及び/又は暗号化するための要求を受信することを更に含む、プロセス。
【請求項13】
拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
オブジェクトデータを受信する第1の入力と、第2の入力と、ファイル出力とを有するデータハンドラ回路要素であって、拡張ジャバスクリプトオブジェクト表記(xJSON)ファイルに対してコンテントタイプを記録し、前記オブジェクトデータの変数に対して名前付けられたキーを生み出して前記変数の値に対して対応する値を生み出すことにより前記オブジェクトデータに対してキー値ペアを生み出し、前記キー値ペアを前記ファイル出力に送信する、前記データハンドラ回路要素と、
前記ファイル出力に結合される入力と出力とを有するストリングプロセッサ回路要素であって、xJSON能力のある装置によりパースされるべきオブジェクト表記データを処理する、前記ストリングプロセッサ回路要素と、
前記ストリングプロセッサ回路要素の出力に結合される入力と前記データハンドラ回路要素の第2の入力に結合される出力とを有するハッシュ化及び暗号化ハンドラ回路要素であって、
ジャバスクリプトオブジェクト表記(JSON)キー値ペアをハッシュ化及び暗号化することの少なくとも1つに使用されるべきサイファーとキーとを判定し、
前記判定されたキーを用いて前記キー値ペアを署名し、
前記判定されたサイファーが暗号化サイファーを含むときに前記署名されたキー値ペアを暗号化し、
前記暗号化されたキー値ペアを拡張ジャバスクリプトオブジェクト表記ファイルに挿入のためにストリングに変換し、
前記キー値ペアのキーに暗号化識別子を挿入し、
前記xJSONファイルに前記判定されたサイファーを識別するメタデータを挿入し、
前記キー値ペアの値に対してハッシュを判定し、
前記ハッシュの値を前記キー値ペアに対して前記キー内に挿入する、
前記ハッシュ化及び暗号化ハンドラ回路要素と、
を含む、回路要素。
【請求項14】
請求項13に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定する、回路要素。
【請求項15】
請求項13に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記サイファーが暗号化、ハッシュ化、又はハッシュ化及び暗号化を含むかを判定し、前記サイファーが暗号化を含まないときに前記キー値ペアの値に対してハッシュを判定することを続行する、回路要素。
【請求項16】
請求項13に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記暗号化されたキー値ペアをBase64符号化を用いるストリングに変換する、回路要素。
【請求項17】
請求項13に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記キーに識別子「s」を挿入することにより前記キー値ペアのキーに暗号化識別子を挿入する、回路要素。
【請求項18】
請求項13に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記メタデータをキーネーム「keys」を用いてキー値ペアに挿入する、回路要素。
【請求項19】
請求項13に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定する、回路要素。
【請求項20】
請求項13に記載の拡張ジャバスクリプトオブジェクト表記発生器回路要素であって、
前記ハッシュ化及び暗号化ハンドラ回路要素が、キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがあるかを判定し、前記キーメタデータを含む前記キー値ペアに複数の暗号化サイファーがある場合に前記暗号化されたキー値ペアのキーにサイファー識別子を挿入する、回路要素。
【請求項21】
ジャバスクリプトオブジェクト表記生成器回路要素であって、
オブジェクトデータを受信するための第1の入力と、前記オブジェクトデータに対するオブジェクト表記キー値ペアを出力するための第1の出力と、第2の入力とを有するデータハンドラ回路要素と、
前記第1の出力に結合される入力と、ストリングリテラルなしに前記オブジェクト表記キー値ペアを出力する出力とを有するストリングプロセッサ回路要素と、
前記ストリングプロセッサ回路要素の出力に結合される入力と、前記データハンドラ回路要素の第2の入力に結合される出力とを有するハッシュ化及び暗号化ハンドラ回路要素であって、
秘密キーを用いて前記キー値ペアを署名することと、
公開キーを用いて前記署名されたキー値ペアを暗号化することと、
前記キー値ペアが暗号化されていることのインディケーションを前記キー値ペアのキーにおけるオブジェクト表記ファイルに挿入することと、
の少なくとも1つを達成するする、前記ハッシュ化及び暗号化ハンドラ回路要素と、
を含み、
前記ハッシュ化及び暗号化ハンドラ回路要素が、前記暗号化されたキー値ペアのハッシュ値を判定し、前記キーに前記ハッシュ値を挿入し、前記キー値ペアが前記キーにハッシュ化されるインディケータを挿入する、回路要素。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、全般的にオブジェクト表記データに関し、特に拡張オブジェクト表記データを提供する方法及び装置に関する。
【背景技術】
【0002】
ネットワーク通信(例えば、インターネット通信)において、ヒューマンリーダブルテキストを用いる通信規格を用いることが有益であることが多い。そのような通信規格は、しばしば、アプリケーション固有バイナリフォーマットよりも、プログラマにとって理解し易く、また柔軟性があり得る。ヒューマンリーダブルテキストを用いる通信規格の一例がJSON(JavaScript Object Notation)である。JSONは、多くのインターネットブラウザ及び他のアプリケーションによってアウトオブボックス(out-of-the-box)にサポートされるJavaScriptとの結びつきが緊密であるため、インターネット通信に非常に適している。
【発明の概要】
【0003】
説明される例において、データハンドラが、オブジェクトデータを受信するための第1の入力、及びオブジェクトデータに対するオブジェクト表記キー値ペアを出力するための第1の出力を有する。ストリングプロセッサが、第1の出力に結合される第2の入力、及びストリングリテラル(string literals)なしにオブジェクト表記キー値ペアを搬送するための第2の出力を有する。ハッシュ化及び暗号化ハンドラが、第2の出力に結合される第3の入力、及び秘密キーを用いて署名されたキー値ペアを搬送するため、公開キーを用いて暗号化されたキー値ペアを搬送するため、及び暗号化されたキー値ペアが暗号化されたキーペアのキーにおいて暗号化されたことのインジケーションを搬送するための第3の出力を有する。
【図面の簡単な説明】
【0004】
図1】本明細書において開示される例示の方法及び装置が、xJSON及び/又は任意の他のヒューマンリーダブルオブジェクト表記データファイルを生成及びパースするために実装され得る例示の環境のブロック図である。
【0005】
図2図1の例示のxJSONハンドラの例示の実装のブロック図である。
【0006】
図3図2の例示のジェネレータの例示の実装のブロック図である。
【0007】
図4図2の例示のパーサーの例示の実装のブロック図である。
【0008】
図5】拡張JSONデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
図6】拡張JSONデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
図7】拡張JSONデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
図8】拡張JSONデータを生成するために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【0009】
図9】拡張JSONデータをパースするために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
図10】拡張JSONデータをパースするために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
図11】拡張JSONデータをパースするために実行され得る例示のコンピュータ可読命令を表すフローチャートである。
【0010】
図12図2図4のジェネレータ及び/又は例示のパーサーを実装するために、図5図11の命令を実行するように構成された例示のプロセッサプラットフォームのブロック図である。
【発明を実施するための形態】
【0011】
IoT(Internet-of-Things)は、広範囲のデバイスをインターネットに参加させるコンセプトを指す。この「things」は任意のタイプのデバイス又はシステムであり得、しばしば、インターネット等のネットワーク上で通信し得る回路要素に従来含まれていなかった多くのデバイス(例えば、コンシューマーアプライアンス、自動車、バイオメディカルデバイス、電力コンセント、サーモスタット、及び/又はその他の環境センサ)を含む。例えば、或るコーヒーメーカーが埋め込みコンピューティングデバイスを含み得、そのデバイスは、そのコーヒーメーカーをインターネット上で一意に識別することを可能にし、他のインターネット接続デバイスを介する例示のコーヒーメーカーのリモート制御や監視を可能にする。多くのIoTデバイスは、IoT機能性を付加するために必要となるコスト及び物理的スペースを低減するために、低コスト及び/又は低電力コンピューティングデバイスを含む。
【0012】
JSON、及びデータオブジェクトをストア及び送信するためにヒューマンリーダブルテキスト((例えば、XML(Extensible Markup Language)、YAML(Yet Another Markup Language)(オブジェクト表記データと総称する))を用いる他の規格が、インターネット上で通信するデバイスと共に用いるために非常に適しているが、本願で開示される例示の方法及び装置は、IoTデバイス等の限定されたリソースデバイスと共にヒューマンリーダブルプロトコルを用いることを促進するために、そのようなヒューマンリーダブルフォーマットに対する拡張を提供する。このことは、開示される方法及び装置が、IoTデバイス、及び/又は限られたコンピューティングリソースを有し及び/又は多くの多様なデバイスと通信する他のデバイスと共に、望ましいオブジェクト表記データフォーマットを用いることを促進するので有利である。
【0013】
本明細書において開示される拡張は、IoTデバイスで使用するために適しているが、これらの拡張は、IoTデバイスと共に使用すること及び/又はIoTデバイスによる使用に限定されない。本明細書において開示される例は、拡張JSONを参照して説明され、一貫性を維持するために、本明細書において、拡張JSONはxJSONと称される。或いは、拡張JSONは、任意の他のコンテントタイプ名を用いて用いられ得、及び/又はその拡張が、任意の他のプロトコル又は規格の拡張バージョンと共に用いられ得る。本明細書において開示される方法及び装置は拡張JSONに限定されない。むしろ、こういった拡張は、オブジェクトをストア及び送信するための任意のタイプのヒューマンリーダブルベースのプロトコルと共に用いられ得る。
【0014】
JSONにおいて、オブジェクトが、始めと終わりの波括弧で区切られる一連のキー値ペアによって示される。キーがオブジェクトのプロパティを示し、値はそのプロパティの値を識別する。キーと値はコロンで分離される。例えば、JSONにおけるパーソンオブジェクトがファイルに次のようにストアされ得る。
上記の例において、firstName、lastName、email、及びpasswordがキーであり、John、Smith、john.smith@example.com、及びsecretPassword123が値である。オブジェクトにおけるキーは、ネームと称され得、オブジェクトがアプリケーションにストアされる(例えば、JavaScriptアプリケーションにおけるパーソンオブジェクト)際に、その値をストアする変数と相関し得る。このように、JSONオブジェクトは、バイナリ又は任意の他のフォーマットでストアされるオブジェクトをヒューマンリーダブルフォーマットで表す手法を提供する。
【0015】
本明細書において説明される例示の拡張は、データパッキング、オブジェクトシリアル化、及びハッシュ化/セキュリティを含む。
【0016】
本明細書において用いられるように、データパッキングは、圧縮アルゴリズムをキー及び/又は値に適用すること(例えば、GNU Zip(gzip)を用いてキー及び/又は値を圧縮すること)を指す。xJSONファイルが受信されると、xJSONファイルにおけるパックされたデータが識別され解凍され得る。
【0017】
本明細書において用いられるように、オブジェクトシリアル化は、キー及び/又は値をバイナリ値に変換することを指す。幾つかの例において、バイナリ値は、その後、(例えば、Base64バイナリ・ツー・テキストエンコードを用いて)テキストフォーマットに変換される。xJSONファイルが受信されると、xJSONファイルにおけるシリアル化されたデータが、検出され得、逆シリアル化/アンマーシャルされ得る。
【0018】
幾つかの例において、ハッシュ化/セキュリティ動作が、キー値ペアの値に対してハッシュを生成すること、及びハッシュをキーに挿入することによって実施される。ハッシュは、キーにストアされたハッシュを、キー値ペアの値のために生成されたハッシュと比較することによって、値のコンテントを認証するために用いられ得る。ハッシュは、付加的又は代替的に、値に含まれたデータを検索するために用いられ得る。例えば、検索パラメータがハッシュ化され得、検索パラメータに対するハッシュは、マッチングを、およびそのため、検索パラメータにマッチングするキー値ペアの値を識別するためにキーにストアされたハッシュと比較され得る。付加的又は代替的に、ハッシュ化/セキュリティはまた、キー及び/又は値を暗号化すること、及び暗号化されていないキー及び/又は値を暗号化されたデータに置き換えることを含み得る。xJSONファイルが受信されると、xJSONファイルにおける暗号化されたデータが検出及び解読され得る。
【0019】
本明細書において開示される例示の方法及び装置において、開示される拡張をJSONに適用する際、xJSON可能デバイスは、キー及び/又値がxJSON拡張に基づいて生成、及び/又は改変されている場合、キー及び/又は値に修飾子(qualifier)を挿入する。修飾子は、xJSON拡張が適用されていることを他のxJSON可能デバイスに示す。例えば、キーの終わりに括弧を追加すること及び括弧内に修飾子(例えば、適用されている特定の拡張を示す修飾子)を挿入することによって、キーが改変され得る。例えば、前のパラグラフに示したパーソンオブジェクトにおけるキー値ペアに、キャラクタ“x”に関連付けられる拡張が適用される場合、xJSON表現は、次のようになり得る。
修飾子は、代替として、キー値ペアの値に追加された括弧の間に挿入されてもよく(例えば、“firstName”:“John[x]”)、及び/又は、キー及び値の両方に修飾子が追加されてもよい(例えば、“firstName[x]”:“John[y]”、“firstName[x]”:{x;“v”:“John”})。或いは、識別子をキー及び/又値から分離するために括弧以外の区切り文字(例えば、波括弧、シングルコーテーションマーク、ダブルコーテーションマーク、アスタリスク)が用いられ得る。
【0020】
一貫性を保つために、本明細書において開示される例は、キー値ペアのキーにおける括弧の間に挿入されたxJSON識別子を参照して説明される。しかしながら、本開示は、識別子の挿入について特定のフォーマットに限定されることはなく、上記で説明されたものを含み任意の他のフォーマットが用いられ得る。
【0021】
キーネーム及び/又は値に識別子を挿入することは、JSONをサポートするがxJSONをサポートしないデバイスによってもxJSON表現の処理が可能であることを確実にする(例えば、幾つかの例において、xJSON識別子がJSON文法と一貫性のある手法で挿入されているので、xJSON技術を用いることが、JSONを用いるがxJSONをサポートしないデバイスがxJSONファイルをパースするのを阻止しない)。従って、xJSONの使用により、JSONをサポートするがxJSONをサポートしないデバイスにxJSONファイルのパース中に失敗させない。むしろ、これらの非xJSONデバイスは動作を継続するが、拡張を理解することはない。こうしたアプローチは、幾つかのデバイスがxJSONをサポートしない環境において、xJSON可能デバイスが動作するための能力を強化する。
【0022】
本明細書において開示されるようにキーに識別子を挿入する付加的な利点により、xJSON拡張を選択的ベースで適用することが可能になる。例えば、xJSON拡張は、ファイル全体に適用されてもよく、ファイルにおける1つ又は複数のオブジェクトに選択的に適用されてもよく、又は、ファイルにおける1つ又は複数のキー値ペアに選択的に適用されてもよい。このように、xJSONファイルが処理されているとき、キーにxJSON識別子を含むキー値ペアは拡張に従って処理され得、キーにxJSON識別子を含まないキー値ペアは標準のJSON処理を用いて処理され得る。また、異なる個々の拡張が、ファイルにおけるキー値ペアのサブセットに適用され得る。例えば、前述の例において、(a)“person”オブジェクト、firstName、lastName、及びemailキー値ペアが、ハッシュ値及びハッシュ化のためのxJSON識別子を対応するキーに挿入するように処理され得る;(b)passwordキー値ペアは暗号化及びハッシュ化され得る;(c)暗号識別子、ハッシュ識別子、及びハッシュ値が、対応するキーに挿入され得る。
【0023】
図1は、xJSON及び/又は任意の他のヒューマンリーダブルオブジェクト表記データファイルを生成及び/又はパースするために本明細書において開示される例示の方法及び装置が実装された例示の環境100のブロック図である。例示の環境は、例示のxJSONデータ103を、例示のネットワーク104を介して例示の第1のデバイス106及び例示の第2のデバイス108に搬送するための例示のウェブサービス102を含む。本明細書において用いられるように、用語「通信している」及びその変形は、直接的な通信、及び/又は1つ又は複数の中間構成要素を介する間接的な通信を含み、直接的な物理的(例えば、有線)通信及び/又は常時通信を必要とせず、むしろ、周期的又は非周期的インターバルや一時的イベントにおける、選択的通信を付加的に含む。
【0024】
図示された例において、例示のウェブサービス102、例示の第1のデバイス106、及び例示の第2のデバイス108は、JSONデータファイルを用いてデータを交換する。図示された例に従って、例示のウェブサービス102及び例示の第1のデバイス106は、それらが本明細書において開示されるxJSONに関連付けられた拡張の少なくとも1つに基づくファイルをパース及び生成するようにxJSONハンドラ110を含むという点において、xJSON可能である。図示された例に従って、例示の第2のデバイス108は、例示の第2のデバイス108がJSONファイルをパース及び生成し得るが、本明細書において開示されるxJSONに関連付けられた拡張を備えるxJSONファイルをパース及び/又は生成するためのxJSONハンドラ110を含まないという点において、xJSON可能ではない。本明細書において開示されるように、例示の第2のデバイス108は、xJSONに関連する拡張を用いることができないが、例示のウェブサービス102及び/又は例示の第1のデバイス106によって出力される図示された例の例示のxJSONデータ103は良好にパースされ得る(例えば、パースエラーを起こすことなくパースされる)。
【0025】
図示された例において、ウェブサービス102は、インターネット上に情報を提供するサーバーコンピュータである。或いは、ウェブサービス102は、それを用いて例示のネットワーク104に接続されているデバイスが通信し得る、任意のタイプのデバイスであり得る。例示のウェブサービス102は、例示のxJSONデータ103を、例示の第1のデバイス106及び/又は例示の第2のデバイス108に送る。例示のウェブサービス102はまた、例示の第1のデバイス106からxJSONデータを、及び/又は例示の第2のデバイス108からJSONデータを受信し得る。或いは、例示のウェブサービス102は、データ(例えば、xJSONデータ及び/又はJSONデータ)の受信のみ可能であり得るか、又はデータ(例えば、xJSONデータ103及び/又はJSONデータ)の送信のみ可能であり得る。
【0026】
図1に図示された例のネットワーク104はインターネットである。或いは、ネットワーク104は、ローカルエリアネットワーク、ワイドエリアネットワーク、有線ネットワーク、ワイヤレスネットワーク、プライベートネットワーク、及び/又は公共ネットワークの、任意のタイプ及び/又は組み合わせである。例示のネットワーク104は、例示のウェブサービス102を、例示の第1のデバイス106及び例示の第2のデバイス108に通信可能に結合する。
【0027】
図1に図示された例の第1のデバイス106は、例示のxJSONデータ103をパース及び/又は生成するための例示のxJSONハンドラ110を含むIoTデバイスである。例えば、第1のデバイス106は、ネットワークイネーブルドマイクロプロセッサコントローラであり得る。例えば、第1のデバイス106は、テキサス・インスツルメンツ社のCC3100 SimpleLink(商標)Wi-Fi(登録商標)及びMCUアプリケーションのためのIoTソリューション(CC3100 SimpleLink(商標) Wi-Fi(登録商標) and Internet-of-Things Solution for MCU Applications)、及びCC3200 SimpleLink(商標)Wi-Fi(登録商標)及びIoTソリューション、シングル・チップワイヤレスMCU(CC3200 SimpleLink(商標) Wi-Fi(登録商標) and Internet-of-Things Solution, a Single-Chip Wireless MCU)、及び/又はCC3100又はCC3200を含むデバイスであり得る。或いは、第1のデバイス106は、JSONデータを用いることが望ましい任意の他のデバイスであり得る。
【0028】
図1に図示された例の第2のデバイス108は、JSONデータを用いることが望ましい任意のデバイスであり得る。第2のデバイス108は、xJSON拡張をサポートするデバイス(例えば、例示のウェブサービス102及び例示の第1のデバイス106)とxJSON拡張をサポートしないデバイスが、同じネットワークに接続され得、互いに通信し得ることを示すために、図1の例に含まれている。例えば、xJSON拡張がJSON文法に抵触しない手法で実装される場合、xJSON拡張(例えば、xJSONファイル)を含む少なくとも幾つかのキー値ペアを含むJSONファイル(例えば、例示のxJSONデータ103)が、xJSONをサポートしないデバイスによって、パースエラーを起こすことなくパースされ得る。同様に、xJSON拡張をサポートするデバイスがJSONファイルを処理することができる。
【0029】
例示のxJSONハンドラ110は、xJSONファイル(例えば、JSONプロトコルに従って生成され、例示のxJSONデータ103のような本明細書において開示されるxJSON拡張の1つを含む少なくとも1つのキー値ペアを含むファイル)をパース及び/又は生成する。xJSONハンドラ110の例示の実装が、図2に関連して更に詳細に説明される。図1は、例示のウェブサービス102及び例示の第1のデバイス106が同じxJSONハンドラ110を含むことを示すが、他の例では、デバイスが、異なるxJSONハンドラを含み得る(例えば、例示のウェブサービス102のxJSONハンドラ110は、例示の第1のデバイス106のxJSONハンドラ110とは異なって実装され得る)。
【0030】
xJSONハンドラ110を用いることで、デバイスが、xJSONデータを生成することができ、xJSONデータ(例えば、本明細書において開示される拡張を含むオブジェクト表記データ)をパースすることができる。図示された例のxJSONハンドラ110は、既存のオブジェクト表記プロトコルによってサポートされていないデータ表現の使用を促進する。例えば、xJSONハンドラ110は、カスタマイズされたプリミティブ(例えば、IoTデバイス等の埋め込みデバイスと共に用いるのに適しているプリミティブ)の使用をサポートし得る。例えば、バイナリタイプのリテラルが“0bAAAA”又は“0BAAAA”として入力され得、ここで、“b”及び“B”は、値がバイナリリテラルであることを示す。別の例において、ヘキサデシマルタイプのリテラルが“0xAAAA”又は“0XAAAA”として入力され得、ここで、“x”及び“X”は、値がヘキサデシマルリテラルであることを示す。ハードウェアベースのリテラルも、xJSONハンドラ110によってサポートされ得る。例えば、ボラタイルタイプのリテラル、ハードウェア信号タイプ(入力、出力、両方)に対するリテラル、及び信号オブジェクトに対するトライステート値を示すために、識別子がキー及び/又は値に追加され得る。すなわち、キー及び/又は値に付属させた識別子、キー及び/又は値に挿入された識別子、キー及び/又は値の一部を置き換える識別子を用いるという柔軟性によって、xJSONハンドラ110が、状態(例えば、暗号化された、圧縮された、シリアル化された)、及び/又は値の目的(例えば、ハードウェア信号タイプのためのリテラル)を示すことを含む、キー及び/又は値についての情報を示すことが可能になる。
【0031】
図1の例示の環境100は、例示のウェブサービス102、例示の第1のデバイス106、及び例示の第2のデバイス108を含むが、任意の数及び/又はタイプのデバイスが用いられ得る。例えば、環境が、2個のデバイス及び/又はウェブサービス、3個のデバイス及び/又はウェブサービス、4個のデバイス及び/又はウェブサービス、数百個のデバイス及び/又はウェブサービスの任意の組み合わせを含み得る。
【0032】
図2は、図1の例示のxJSONハンドラ110の例示の実装のブロック図である。図2の例示のxJSONハンドラ110は、例示のオブジェクト表記データ200(例えば、例示のxJSONデータ103)を送信及び/又は受信するための例示のインタフェース202、例示のオブジェクト表記データ200をパースして例示のオブジェクトデータ210を出力するための例示のパーサー204、例示のオブジェクトデータ212から例示のオブジェクト表記データ200を生成するための例示のジェネレータ206、及び例示のJavaScriptインタプリタ208を含む。図2のxJSONハンドラ110は例示の第1のデバイス106を参照して説明されるが、図2のxJSONハンドラ110は別のデバイス(例えば、例示のウェブサービス102)において実装されてもよい。
【0033】
図示された例の例示のインタフェース202は、オブジェクト表記データ200(例えば、例示のxJSONデータ103)を、ネットワーク104及び/又はxJSONハンドラ110を含むデバイス(例えば、例示のウェブサービス102の構成要素、及び/又は例示の第1のデバイス106の構成要素)の1つ又は複数の他の構成要素に送信する、又はネットワーク104及び/又はxJSONハンドラ110を含むデバイスの1つ又は複数の他の構成要素から受信する、ネットワークインタフェース202である。例えば、例示の第1のデバイス106のxJSONハンドラ110は、例示のウェブサービス102からリトリーブされた例示のxJSONデータ103を受信し得る。例示のインタフェース202は、ネットワーク104から受信したオブジェクト表記データ200を例示のパーサー204に送信する。例示のインタフェース202は、例示のジェネレータ206から受信したオブジェクト表記データ200を、そのオブジェクト表記データ200のための所望の宛先に送信する。例えば、例示の第1のデバイス106のxJSONハンドラ110のためのインタフェース202は、例示のジェネレータ206によって生成された例示のオブジェクト表記データ200を例示のウェブサービス102に送信し得る。
【0034】
図示された例のパーサー204は、オブジェクト表記データ200を受信し、オブジェクト表記データ200によって表されるオブジェクトを抽出するために、そのデータをパースする。パーサー204は、抽出されたオブジェクトデータ210を例示のJavaScriptインタプリタ208に送信する。例えば、上述の例示のパーソンオブジェクトに戻ると、パーサー204は、xJSONデータに含まれるキー値ペアからパーソンオブジェクトのエレメント(例えば、firstName、lastName、email、及びpassword)をリトリーブし、JavaScriptインタプリタ208に送信されるJavaScriptパーソンオブジェクトを構築する。例示のパーサー204は、データパッキング、オブジェクトシリアル化、及び/又はハッシュ化/セキュリティ拡張の1つ又は複数を含むxJSONデータをパースするための機能を含む。パーサー204の例示の実装が、図4のブロック図に関連して更に詳細に説明される。
【0035】
図示された例の例示のジェネレータ206は、JavaScriptインタプリタ208から受信したオブジェクトデータ212を表すために、オブジェクト表記データ200ファイル(例えば、xJSONファイル)を構築する。例えば、例示のジェネレータ206は、JavaScriptインタプリタにストアされたパーソンオブジェクトに基づいて例示のパーソンオブジェクトをxJSONで構築し得る。ジェネレータ206によって生成されたオブジェクト表記データ200は、別のデバイス(例えば、ウェブサービス102)への送信のため、インタフェース202に送信される。或いは、xJSONハンドラ110及び/又はxJSONハンドラ110を含むデバイスが、(例えば、後の送信及び/又は処理のために)オブジェクト表記データ200をストアし得る。例示のジェネレータ206は、図3のブロック図と関連して更に詳細に説明される。
【0036】
図示された例のJavaScriptインタプリタ208は、JavaScriptアプリケーション又は任意の他のJavaScript命令を実行するために、JavaScriptプログラミング言語に従って動作するソフトウェアランタイム環境である。図示された例の例示のJavaScriptインタプリタ208は、オブジェクトデータ210及び/又は212(例えば、上述のパーソンオブジェクト)をストアする。図示された例のJavaScriptインタプリタ208はJavaScriptを用いるが、JavaScriptインタプリタ208は或いは、例示のパーサー204によって出力されたオブジェクトを受信し得る、及び/又はオブジェクトを例示のジェネレータ206に送信し得る、任意の他のランタイム環境であってもよい。
【0037】
図3は、図2の例示のジェネレータ206の例示の実装のブロック図である。図3の例示のジェネレータ206は、例示のデータハンドラ302、例示のストリングプロセッサ304、例示のハッシュ化及び暗号化ハンドラ306、例示の圧縮ハンドラ308、及び例示のシリアル化プロセッサ310を含む。
【0038】
例示のデータハンドラ302は、オブジェクトデータ312(例えば、例示のJavaScriptインタプリタ208から受信する例示のオブジェクトデータ212)を受信し、オブジェクトデータ312を表すxJSONキー値ペアを用いてポピュレート(populate)されたオブジェクト表記データ314を生成する。例えば、例示のデータハンドラ302は、それを介してxJSONファイルの生成に対する要求が受信され得るインタフェース(例えば、アプリケーションプログラミングインタフェース(API))を提供し得る。例示のデータハンドラ302は、その要求がxJSONファイルが生成されるべきであることを示しているか又はxJSON拡張を含むJSONファイルが生成されるべきであることを示しているかを判定する。例えば、本明細書において詳しく説明されるように、オブジェクト表記データ314がxJSONをサポートしないデバイスと互換性がある必要がない場合、ジェネレータ206によって出力されたオブジェクト表記データ301はxJSON可能デバイスによって処理されるようにフォーマットされ得る(例えば、例示のパーサー204がファイルをパースし、コーテーションマークの存在なしにそのデータを暗黙的に評価する際、標準のJSON文法に従ってキー及び値を囲んでいるコーテーションマークは除外され得る)。図示された例の例示のデータハンドラ302は、xJSONファイルのためのコンテントタイプを記録し、(例えば、オブジェクトデータ312の変数のためにネーミング(named)されたキーを生成すること、及び変数の値のための対応する値を生成することによって)オブジェクトデータ312のためのキー値ペア316(単一のキー値ペアが説明されるが、複数のキー値ペアも用いられ得る)を生成し、キー値ペア316を例示のストリングプロセッサ304に送信する。
【0039】
図3の例示のストリングプロセッサ304は、オブジェクト表記データ314のためのコンテントタイプがxJSONであるか又は標準のJSONであるかを判定する。オブジェクト表記データ314がxJSON可能デバイス及び非xJSON可能デバイスによってパースされるように意図されている場合、ストリングプロセッサ304は、キー値ペア316のキー及び値の周りにコーテーションマークを挿入する。非xJSON可能デバイスとの互換性が所望されなかった場合、例示のキー値ペア316のストリングはxJSON可能パーサー(例えば、図2の例示のパーサー204)によって暗黙的に認識されるので、ストリングプロセッサ304はコーテーションマークを挿入しない。例えば、非xJSON互換性が所望される場合、次の例示のパーソンオブジェクトが生成され得る。
或いは、非xJSON互換性が所望されない及び/又は必要とされない場合、次の例示のパーソンオブジェクトが生成され得る。
【0040】
例示のストリングプロセッサ304は、処理されたキー値ペア318を、例示のハッシュ化及び暗号ハンドラ306に出力する。
【0041】
図3の例示のハッシュ化及び暗号化ハンドラ306は、処理されたキー値ペア318を受信し、処理されたキー値ペア318のハッシュ化及び/又は暗号化が要求されるか否かを判定する。例えば、オブジェクト表記データ314を生成するための要求は、それに対してハッシュ化及び/又は暗号化が要求されている、1つ又は複数のキー値ペア及び/又はオブジェクトを識別し得る。例えば、オブジェクトがusernameフィールド及びpasswordフィールドを含む場合、全てのフィールドに対してハッシュ化が要求され得るが、passwordフィールドに対してのみ暗号化が要求され得る。或いは、ハッシュ化及び暗号化ハンドラ306は、ハッシュ化及び/又は暗号化が所望されていることを自動的に判定し得る(例えば、キー値ペアがpasswordフィールド等の機密データとして識別される場合)。
【0042】
ハッシュ化及び/又は暗号化が要求される場合、ハッシュ化及び暗号化ハンドラ306は、用いられるべき所望のサイファー(例えば、暗号化サイファー、ハッシュ化サイファー、暗号化サイファー及びハッシュ化サイファーの組み合わせ)を判定する。例えば、ハッシュ化及び/又は暗号化を実施するための要求はサイファーを識別し得、及び/又は例示のハッシュ化及び暗号化ハンドラ306はデフォルトサイファーを用い得る。
【0043】
処理されたキー値ペア318の信頼性を他のデバイスに証明するために、この例のハッシュ化及び暗号化ハンドラ306は、コンテントオーナー(例えば、xJSONファイルが生成されたデータのオーナー)の秘密キーを用いて、処理されたキー値ペア318に署名し、暗号化及び/又はハッシュ化されたキー値ペア320を生成する。このような例において、暗号化及び/又はハッシュ化されたキー値ペア320は、秘密キーに対応する公開キーへのアクセスを有する他のものによって照合され得る。
【0044】
サイファーが暗号を含む場合(例えば、データ署名を含むだけのものとは対照的に)、図3の例示のハッシュ化及び暗号化ハンドラ306は、暗号化が要求された任意のキー値ペアに対し暗号化及び/又はハッシュ化されたキー値ペア320を暗号化する。例示のハッシュ化及び暗号化ハンドラ306は、暗号化及び/又はハッシュ化されたキー値ペア320の解読に用いられ得る秘密キーに対応する公開キーを用いて、暗号化及び/又はハッシュ化されたキー値ペア320を暗号化する。例えば、図2及び/又は図4のパーサー204は、対応する公開キーを用いて暗号化されたデータを解読するために用いられ得る秘密キーをストアし得る。
【0045】
例示のハッシュ化及び暗号化ハンドラ306はその後、暗号化及び/又はハッシュ化されたキー値ペア320をハッシュ化する(例えば、ハッシュ化が要求されると、キー値ペアがハッシュ化される)。例示のハッシュ化及び暗号化ハンドラ306は、任意の暗号化されたデータ(暗号化の前のオリジナルデータとは対照的に)に対して暗号化された値をハッシュ化する。
【0046】
図示された例のハッシュ化及び暗号化ハンドラ306は、生成されている暗号化及び/又はハッシュ化されたキー値ペア320にサイファーキーデータを挿入する(例えば、そのデータをxJSONファイルに挿入する)。サイファーキーデータは、暗号化及び/又はハッシュ化されたキー値ペア320を暗号化する際に用いられた1つ又は複数のキーを識別する。例えば、サイファーキーデータは、暗号化及び/又はハッシュ化されたキー値ペア320を暗号化するために公開キーが用いられたことに対する証明のための識別子を含み得、そのため、例示のパーサー204が、暗号化及び/又はハッシュ化されたキー値ペア320を解読する際に用いるための対応する秘密キーを見つけることが可能となる。サイファーキーはまた、データを署名するために秘密キーが用いられたことに対する証明のための識別子を付加的に含み得る。単一のxJSONファイルに複数のキーが用いられる場合、各キーは、サイファーキーデータにおいて連続番号を用いて識別され得る。暗号キーのための識別子に加えて、図示された例のサイファーキーデータはまた、ハッシュ化及び/又は暗号化のために用いられた特定のサイファーアルゴリズム、及びサイファーアルゴリズムに対応する任意のパラメータを識別する。
【0047】
幾つかの例において、ハッシュ化及び暗号化ハンドラ306はまた、暗号化及び/又はハッシュ化されたキー値ペア320を暗号化するために用いられた公開キー証明であり、及び/又は署名データを認証するために用いられ得る公開キー証明を、暗号化及び/又はハッシュ化されたキー値ペア320に挿入する。
【0048】
図3の例の例示のハッシュ化及び暗号化ハンドラ306は、暗号化及び/又はハッシュ化されたキー値ペア320の対応するキーにハッシュ化のインジケーション及び/又は暗号化のインジケーションを挿入する。例えば、ハッシュ化された値を有するキーに対して、例示のハッシュ化及び暗号化ハンドラ306は、キーに‘[#ΗΗΗΗ]’を挿入する。ここで、‘#’はハッシュ識別子であり、‘ΗΗΗΗ’はハッシュ化の結果の値である。例示のハッシュ化及び暗号化ハンドラ306は、暗号化及び/又はハッシュ化されたキー値ペア320に対するキーに、‘[sX#HHHH]’を挿入する。ここで、‘s’はハッシュ識別子であり、‘X’は複数のキーが存在する場合に、署名及び/又は暗号化のために用いられたキーのインデックス値を示し、‘#’はハッシュ識別子であり、‘ΗΗΗΗ’はハッシュ化の結果の値である。
【0049】
例えば、下記はハッシュ化及び暗号化の前のパーソンオブジェクトである。
上記のパーソンオブジェクトに対して図3の例示のハッシュ化及び暗号化ハンドラ306によって生成され得るハッシュ化及び暗号化されたパーソンオブジェクトは次のようになる。
【0050】
例示のハッシュ化及び暗号化ハンドラ306は、暗号化及び/又はハッシュ化されたキー値ペア320を例示の圧縮ハンドラ308に出力する。
【0051】
図示された例の圧縮ハンドラ308は、暗号化及び/又はハッシュ化されたキー値ペア320の圧縮が要求されているか否かを判定する。例えば、xJSONファイルを生成するための要求は、圧縮が要求されている1つ又は複数のキー値ペア及び/又はオブジェクトを識別し得る。或いは、圧縮ハンドラ308は、キー値ペア及び/又はオブジェクトが閾値サイズを超える場合に、圧縮が所望されることを自動的に判定し得る。圧縮が要求されると、圧縮ハンドラ308は、例示の圧縮されたキー値ペア322を生成するために暗号化及び/又はハッシュ化されたキー値ペア320(例えば、要求されたキー値ペア及び/又は要求されたオブジェクト)を圧縮する(例えば、zipする)。図示された例の例示の圧縮ハンドラ308は、圧縮されたデータに対するキーを例示の圧縮されたキー値ペア322に挿入する。例えば、圧縮ハンドラ308は、圧縮されたデータに対して、生成されたキー(例えば、_oX等のキーであり、ここで、Xは生成されたxJSONファイルに挿入される生成されたデータの各セット毎に増分する数である)を挿入し得、そのため、生成されたデータの各セットに対するキーが一意であることが確実となる。図3の例示の圧縮ハンドラ308はまた、圧縮されたキー値ペア308が圧縮されたことを例示のパーサー204に示すために、圧縮識別子(例えば、[z])を例示の圧縮されたキー値ペア308に挿入する。図示された例において、例示の圧縮ハンドラ308は、圧縮のためのメタデータを識別し、圧縮されたデータを含むキーに対する値を挿入する。例えば、圧縮ハンドラ308は、暗号化及び/又はハッシュ化されたキー値ペア320を圧縮するためにgzipを用い得、アルゴリズムと圧縮アルゴリズムのためのルックアップテーブルとを識別するメタデータを挿入し得る。例えば、パーソンオブジェクトの圧縮の結果は次のようになり得る。

【0052】
例示の圧縮ハンドラ308は、圧縮されたキー値ペア322を例示のシリアル化プロセッサ310に出力する。
【0053】
図示された例の例示のシリアル化プロセッサ310は、例示の圧縮されたキー値ペア322のシリアル化が要求されるか否かを判定する。例えば、xJSONファイルを生成するための要求は、シリアル化が要求されている1つ又は複数のキー値ペア及び/又は1つ又は複数のオブジェクトを識別し得る。シリアル化が要求されると、例示のシリアル化プロセッサ310は、要求された、圧縮されたキー値ペア(例えば、要求されたキー値ペア及び/又は要求されたオブジェクト)をシリアル化して、例示のシリアル化されたキー値ペア324を生成する。図示された例のシリアル化プロセッサ310は、シリアル化されたキー値ペア324に対するキーを挿入する。例えば、シリアル化プロセッサ310は、シリアル化されたキー値ペア324に対して、生成されたキー(例えば、_oXであり、ここで、Xは、生成されたxJSONオブジェクト表記データ314における生成されたデータの各セット毎に増分する数である)を挿入し得、生成されたデータの各セットに対するキーが一意であることを確実とし得る。例示のシリアル化プロセッサ310はまた、シリアル化されたキー値ペアがシリアル化されたことを例示のパーサー204に示すように、シリアル化識別子(例えば、[b])をキーに挿入する。図3の例示のシリアル化プロセッサ310は、シリアル化されたデータを、シリアル化されたキー値ペア324のキーに対する値として挿入する。図示された例において、例示のシリアル化プロセッサ310は、シリアル化の結果のバイナリデータを、Base64変換を用いてASCIIテキストに変換する。例えば、パーソンオブジェクトのシリアル化の結果は次のようになり得る。
【0054】
図示された例の例示のシリアル化プロセッサ310は、オブジェクト表記データ314に対する宛先へ(例えば、例示のインタフェース202及び例示のネットワーク104を介して例示のウェブサーバー102へ)の送信のために、結果のシリアル化されたキー値ペア324を例示のデータハンドラ302に送信する。例えば、例示のウェブサービス102に実装されたxJSONハンドラ110における例示のパーサー204によるパースのために、オブジェクト表記データ314は例示のインタフェース202を介して例示のウェブサービス102に送信され得る。例示のウェブサービス102はその後、例示のウェブサービス102の動作に従ってデータオブジェクトを処理し得る。或いは、オブジェクト表記データ314は任意の他の所望のロケーションに送信され得る。幾つかの例において、データハンドラ302は、オブジェクト表記データ314における機能を呼び出すための参照を含む。例えば、“func1(arg1,...argN)”として参照される機能が、オブジェクト表記データをパースするとき、パーサー(例えば、例示のパーサー204)に、“func1”として識別される機能を呼び出させる。或いは、“@uri#func1(arg1,...argN)”として参照される機能が、パーサー(例えば、例示のパーサー204)に、ロケーション“uri”においてリスニングするサーバーによって“func1”を呼び出させる。
【0055】
図4は、図2のパーサー204の例示の実装のブロック図である。図4の例示のパーサー204は、データハンドラ402、ストリングプロセッサ404、解読ハンドラ410、逆シリアル化プロセッサ406、及び解凍ハンドラ408を含む。
【0056】
図4の例のデータハンドラ402は、処理されるべき例示のオブジェクト表記データ412ファイル(例えば、xJSONファイル)を受信する。例示のデータハンドラ402は、オブジェクト表記データ412からキー値ペア及び/又はオブジェクトを抽出し、それらを例示のストリングプロセッサ404に送信する。例えば、データハンドラ402は、1度に1つのキー値ペアを抽出し得、例示のストリングプロセッサ404、例示の逆シリアル化プロセッサ406、例示の解凍ハンドラ408、及び/又は例示の解読ハンドラ410による処理のために、そのキー値ペアを例示のキー値ペア414として送信し得る。或いは、データハンドラ402は、例示のストリングプロセッサ404、例示の逆シリアル化プロセッサ406、及び例示の解凍ハンドラ408、及び例示の解読ハンドラ410による処理のために、複数のキー値ペアを抽出し得る。
【0057】
例示のストリングプロセッサ404、例示の逆シリアル化プロセッサ406、例示の解凍ハンドラ408、及び例示の解読ハンドラ410の1つ又は複数による処理に続いて、例示のデータハンドラ402は、データオブジェクト(例えば、例示の解読されたペア420)を受信し、例示のオブジェクト表記データ412から抽出されたオブジェクトを含む例示のオブジェクトデータ422を、例示のJavaScriptインタプリタ208に送信する。
【0058】
図4の例示のストリングプロセッサ404は、データハンドラ402によりオブジェクト表記データ412(例えば、xJSONファイル)から抽出された例示のキー値ペア414を受信し、ストリングリテラル(例えば、キー及び値を囲むコーテーションマーク)の存在又は欠落に基づいて例示のキー値ペア414がxJSONファイルか又はJSONファイルかを自動的に判定する。図示された例に従って、ストリングプロセッサ404は、ストリングリテラルが存在する場合、例示のキー値ペア414がJSONファイルであるファイルに関連付けられると判定し、ストリングリテラルが存在しない場合、例示のキー値ペア414がxJSONファイルであると判定する。例示のストリングプロセッサ404はまた、データサイズを低減するために、ストリングリテラル(例えば、コーテーションマーク)が存在する場合、それらを除去する。例示のストリングプロセッサ404は、処理されたキー値ペア416を例示の逆シリアル化プロセッサ406に送信する。
【0059】
図4の例示の逆シリアル化プロセッサ406は、処理されたキー値ペア416がシリアル化識別子(例えば、括弧に入った文字“b”等、シリアル化が実施されたことのインジケーションを含むように改変されたキー)を含むか否かを判定する。例示の逆シリアル化プロセッサ406が、例示の処理されたキー値ペア416にシリアル化識別子が含まれていると判定する場合、例示の逆シリアル化プロセッサ406は、例示の処理されたキー値ペア416を逆シリアル化する。例えば、シリアル化されたデータはBase64でエンコードされ得、例示のシリアル化プロセッサ406は、オリジナルのキー値ペアをリトリーブするためにこのBase64表現をデコードする。必要とされる任意の逆シリアル化を実施した後、図示された例の例示の逆シリアル化ハンドラ406は、逆シリアル化されたキー値ペア417を例示の解凍ハンドラ408に送信する。
【0060】
例示の解凍ハンドラ408は、例示の逆シリアル化されたキー値ペア417が圧縮識別子(例えば、括弧内の文字“z”等、圧縮が実施されたことのインジケーションを含むように改変されたキー)を含むか否かを判定する。この例の例示の解凍ハンドラ408が、例示の逆シリアル化されたキー値ペア417のキーに圧縮識別子が含まれていると判定する場合、例示の解凍ハンドラ408は、例示の逆シリアル化されたキー値ペア417を解凍する。図示された例の例示の解凍ハンドラ408は、例示の圧縮ハンドラ308による圧縮の間、例示の逆シリアル化されたキー値ペア417の値に挿入されたメタデータから圧縮アルゴリズムの識別をリトリーブする。例えば、メタデータは、圧縮及び/又は解凍の間用いるための圧縮アルゴリズム(例えば、gzip)パラメータの識別を含み得る(例えば、ルックアップテーブル)。必要とされる任意の解凍を実施した後、例示の解凍ハンドラ408は、解凍されたキー値ペア418を例示の解読ハンドラ410に送信する。
【0061】
この例の解読ハンドラ410は、解凍されたキー値ペア418が暗号識別子(例えば、括弧内の文字“s”等、暗号化が実施されたことのインジケーションを含むように改変されたキー)を含むか否かを判定する。図示された例の解読ハンドラ410が、例示の解凍されたキー値ペア418のキーに暗号識別子が含まれていると判定する場合、解読ハンドラ410はキー値ペアを解読する。例えば、解読ハンドラ410は、xJSONハンドラ110が実装されているデバイス(例えば、例示の第1のデバイス106)に設置された秘密キーへのアクセスを有し得る。図示された例の解読ハンドラ410は、解凍されたキー値ペア418に対応する秘密キーをリトリーブし得、その秘密キーを解凍されたキー値ペア418を解読するために用い得る。或いは、解読ハンドラ410は、解読を実施するための秘密キーを入力するようにユーザに促し得る。
【0062】
図4の例示の解読ハンドラ410は、解凍されたキー値ペア418及び/又は例示のオブジェクト表記データ412に挿入されたキーフィールドを分析することによって、解読のための適切な秘密キーを判定する。或いは、解凍されたキー値ペア418を暗号化及び/又は解読するために用いられたキーを識別する情報が、任意の他のロケーションにストアされ得る(例えば、暗号のために用いられるキーについての情報が、暗号化されるキー値ペアのキーに挿入され得る)。例示のオブジェクト表記データ412において複数のキーが用いられる幾つかの例では、暗号識別子は、解凍されたキー値ペア418を暗号化するために(及び同様に解読するために)用いられたキーの特定の1つに対して識別子を含み得る。例えば、ハッシュ化及び暗号化ハンドラ306に関連して上記で説明されたように、暗号識別子は、“[sX#HHHH]”であり得、ここで、Xはオブジェクト表記データ412に挿入されたキーフィールドにおけるキーの1つを識別するインデックス値である。
【0063】
必要とされる任意の解読を実施した後、図示された例の例示の解読ハンドラ410は、例示の解読されたキー値ペア420を、例示のオブジェクトデータ422の例示のJavaScriptインタプリタ208への送信のために、データハンドラ402に送信する。
【0064】
図2のジェネレータ206を実装する例示の手法が図3に説明されるが、図3に示されるエレメント、プロセス、及び/又はデバイスの1つ又は複数が、任意の他の手法で、組み合わせ、分割、再配置、省略、除去、及び/又は実装され得る。また、図2及び図3の例示のデータハンドラ302、例示のストリングプロセッサ304、例示のハッシュ化及び暗号化ハンドラ306、例示の圧縮ハンドラ308、例示のシリアル化プロセッサ310、及び/又は、より全般的に、ジェネレータ206は、ハードウェア、ソフトウェア、ファームウェア、及び/又は、ハードウェア、ソフトウェア、及びファームウェアの任意の組み合わせによって実装され得る。このように、例えば、例示のデータハンドラ302、例示のストリングプロセッサ304、例示のハッシュ化及び暗号化ハンドラ306、例示の圧縮ハンドラ308、及び/又は例示のシリアル化プロセッサ310の任意のものが、アナログ又はデジタル回路、ロジック回路、プロブラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、及び/又はフィールドプログラマブルロジックデバイス(FPLD)の1つ又は複数によって実装され得る。純粋にソフトウェア及び/又はファームウェア実装を対象として本願の装置又はシステムの請求項の任意のものを読むと、例示のデータハンドラ302、例示のストリングプロセッサ304、例示のハッシュ化及び暗号化ハンドラ306、例示の圧縮ハンドラ308、及び/又は例示のシリアル化プロセッサ310の少なくとも1つが、ソフトウェア及び/又はファームウェアをストアする、メモリ、デジタル多用途ディスク(DVD)、コンパクトディスク(CD)、又はブルーレイディスク等の有形のコンピュータ可読ストレージデバイス又はストレージディスクを含むように本明細書によって明示的に定義されている。また更に、図1のxJSONハンドラ110、及び/又は、図2及び/又は図3のジェネレータ206は、図3に示されるものに加えて又はその代わりに、1つ又は複数のエレメント、プロセス、及び/又はデバイスを含み得、及び/又は図示されたエレメント、プロセス、及びデバイスのどれか1つ以上又は全てを含み得る。
【0065】
例示のジェネレータ206を実装するための例示の機械可読命令を表すフローチャートが図5図8に示される。これらの例において、機械可読命令は、図12に関連して以下で説明される例示のプロセッサプラットフォーム1200において示されるプロセッサ1212等のプロセッサによる実行のためのプログラムを含む。プログラムは、CD−ROM、フロッピーディスク、ハードドライブ、デジタル多用途ディスク(DVD)、ブルーレイディスク、又はプロセッサ1212に関連付けられるメモリ等、有形のコンピュータ可読ストレージ媒体にストアされるソフトウェアにおいて具現化され得るが、それらの全プログラム及び/又は一部は、代替的に、プロセッサ1212以外のデバイスによって実行され得、及び/又はファームウェア又は専用ハードウェアにおいて具現化され得る。また、例示のプログラムが、図5図8に示されるフローチャートを参照して説明されるが、例示のジェネレータ206を実装する他の多くの方法が代替的に用いられ得る。例えば、ブロックの実行の順番は変更され得、及び/又は記載されたブロックの幾つかが変更、削除、又は組み合わされ得る。
【0066】
上述のように、図5図8の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ(ROM)、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、キャッシュ、ランダムアクセスメモリ(RAM)、及び/又はその中に情報が任意の期間(例えば、長期間、永久的に、情報の一時的バッファリングのため及び/又はキャッシングのために短時間)ストアされる任意の他のストレージデバイス又はストレージディスク等、有形のコンピュータ可読ストレージ媒体にストアされるコード化された命令(例えば、コンピュータ及び/又は機械可読命令)を用いて実装され得る。本明細書において用いられるように、有形のコンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び/又はストレージディスクを含むように、及び伝搬信号及び送信媒体を除外するように、明示的に定義される。本明細書に用いられるように、「有形のコンピュータ可読ストレージ媒体」及び「有形の機械可読ストレージ媒体」は交換可能に用いられる。付加的又は代替的に、図5図8の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び/又はその中に情報が任意の期間(例えば、長期間、永久的に、情報の一時的バッファリングのため及び/又はキャッシングのために短い時間)ストアされる任意の他のストレージデバイス又はストレージディスク等、非一時的コンピュータ可読ストレージ媒体にストアされるコード化された命令(例えば、コンピュータ及び/又は機械可読命令)を用いて実装され得る。本明細書に用いられるように、非一時的コンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び/又はストレージディスクを含むように、及び伝搬信号及び送信媒体を除外するように、明示的に定義される。
【0067】
図5の例示のコンピュータ可読命令は、例示のデータハンドラ302が、オブジェクト表記データ(例えば、xJSONファイル)を生成するためデータ及び要求を受信すると開始する(ブロック502)。例えば、例示のデータハンドラ302は、例示のJavaScriptインタプリタ208からJavaScriptオブジェクトを受信し得る。例示のデータハンドラ302は、xJSON出力が要求されているか否かを判定する(ブロック504)。例えば、xJSONファイルを生成するための要求は、xJSON特定ファイルが要求されていることのインジケーションを含み得る。xJSON特定ファイルは、xJSONをサポートしないデバイスによるパースをサポートする必要のないファイルである。例えば、JSONによるパースをサポートするファイルの場合、キー及び値がコーテーションマークによって囲まれ、JSONをサポートする必要のないxJSONファイルの場合、キー及び値がコーテーションマークによって囲まれる必要がなくファイルサイズが低減される。要求が、出力ファイルがxJSONファイルタイプであることを示す場合、例示のデータハンドラ302は、そのファイルがxJSONファイルタイプであることを示すコンテントタイプ識別子(例えば、“Content-Type: application/xjson”)を挿入する(ブロック506)。要求が、出力ファイルがJSONファイルタイプであることを示す場合、例示のデータハンドラ302は、そのファイルがJSONファイルタイプであることを示すコンテントタイプ識別子(例えば、“Content-Type: application/json”)を挿入する(ブロック508)。
【0068】
ブロック506又はブロック508においてコンテントタイプが設定された後、例示のデータハンドラ302はデータオブジェクトを選択する(例えば、第1のデータオブジェクト、データオブジェクトの第1のエレメント、次のデータオブジェクトを選択する)(ブロック510)。例えば、例示のデータハンドラ302は、上述の例示のパーソンオブジェクトのfirstNameエレメントを選択し得る。例示のデータハンドラ302はその後、選択されたエレメントに対するキー値ペアを生成する(ブロック512)。例えば、例示のデータハンドラ302は、JSONキー値ペア:“firstName:John.”を生成するために、“firstName”とネーミングされたキー及びfirstNameエレメントに対する値を含む値を生成し得る。
【0069】
例示のストリングプロセッサ304はその後、ファイルに対してコンテントタイプがxJSONに設定されたか否かを判定する(ブロック514)。コンテントタイプがxJSONに設定されなかった(例えば、出力ファイルがxJSONをサポートしないJSONパーサーによるパースをサポートする)場合、例示のストリングプロセッサ304は、生成されたキー値ペアのキー及び値の周りにコーテーションマークを挿入する(ブロック516)。
【0070】
ブロック516においてストリングプロセッサ304がコーテーションマークを挿入した後、又はストリングプロセッサ304がそのファイルのためのコンテントタイプがxJSONに設定されていることを判定した(ブロック514)後、例示のハッシュ化及び暗号化ハンドラ306は、キー値ペアがハッシュされるべきであるか及び/又は暗号化されるべきであるかを判定する(ブロック518)。例示のハッシュ化及び暗号化ハンドラ306は、xJSONファイルを生成するための要求が、キー値ペアがハッシュ化されるべきであること及び/又は暗号化されるべきであることを示す場合、キー値ペアがハッシュされるべきであること及び/又は暗号化されるべきであることを判定し得る。或いは、キー値ペアが機密データを含むことを検出した場合(例えば、キー値ペアがパスワードフィールドである場合)、ハッシュ化及び暗号化ハンドラ306は、データが暗号化されるべきであることを自動的に判定し得る。ハッシュ化及び暗号化ハンドラ306が、キー値ペアがハッシュ化されるべきである及び/又は暗号化されるべきであると判定すると、例示のハッシュ化及び暗号化ハンドラ306は、キー値ペアをハッシュ化及び/又は暗号化する(ブロック520)。キー値ペアをハッシュ化及び/又は暗号化するための例示のコンピュータ可読命令は図8に関連して説明される。
【0071】
例示のハッシュ化及び暗号化ハンドラ306がハッシュ化及び暗号化が要求されていないことを判定した(ブロック518)後、又はハッシュ化及び暗号化ハンドラがキー値ペアをハッシュ化及び/又は暗号化した(ブロック520)後、例示の圧縮ハンドラ308は、キー値ペアが圧縮されるべきか否かを判定する(ブロック522)。オブジェクト表記データを生成するための要求が、キー値ペアが圧縮されるべきであることを示す場合、圧縮ハンドラ308は、キー値ペアが圧縮されるべきであると判定し得る。或いは、例示の圧縮ハンドラ308は、値のサイズが閾値レベルを超える場合、キー値ペアが圧縮されるべきであると判定し得る。圧縮ハンドラ308が、キー値ペアが圧縮されるべきであると判定すると、例示の圧縮ハンドラ308はキー値ペアを圧縮する(ブロック524)。キー値ペアを圧縮するための例示のコンピュータ可読命令は図6に関連して説明される。
【0072】
例示の圧縮ハンドラ308が圧縮が要求されていないことを判定した(ブロック522)後、又は圧縮ハンドラ308がキー値ペアを圧縮した(ブロック524)後、例示のシリアル化プロセッサ310は、キー値ペアがシリアル化されるべきか否かを判定する(ブロック526)。例示のシリアル化プロセッサ310は、オブジェクト表記データを生成するための要求が、キー値ペアがシリアル化されるべきであることを示している場合、キー値ペアがシリアル化されるべきであると判定し得る。シリアル化プロセッサ310が、キー値ペアがシリアル化されるべきであると判定する場合、例示のシリアル化プロセッサ310はキー値ペアをシリアル化する(ブロック528)。キー値ペアをシリアル化するための例示のプロセスは図7に関連して説明される。
【0073】
要求された任意のハッシュ化及び/又は暗号化(ブロック520)、圧縮(ブロック522)、及びシリアル化(ブロック528)を実施した後、例示のデータハンドラ302は、生成されたキー値ペアをオブジェクト表記データ(例えば、xJSONファイル)に挿入する(ブロック530)。例示のデータハンドラ302は、キー値ペアが生成されるべき付加的なデータオブジェクト及び/又はエレメントが存在するか否かを判定する(ブロック532)。キー値ペア生成のための付加的なオブジェクト及び/又はエレメントがある場合、制御は、次のオブジェクト及び/又はエレメントを処理するためにブロック510に戻る。キー値ペア生成のための付加的なオブジェクト及び/又はエレメントがない場合、図5の例示のコンピュータ可読命令は終了する。
【0074】
図6は、キー値ペアを圧縮するための例示のコンピュータ可読命令のフローチャートである。図6の例示のコンピュータ可読命令は、図5のブロック524を実装するために用いられ得る。例示の圧縮ハンドラ308が圧縮アルゴリズムを判定する(ブロック602)とき、図6の例示のコンピュータ可読命令が開始する。例えば、キー値ペアを圧縮するための要求が、用いられるべき圧縮アルゴリズムを指定し得る。或いは、例示の圧縮ハンドラ308は、デフォルトの圧縮アルゴリズム(例えば、gzip圧縮アルゴリズム)を含み得る。例示の圧縮ハンドラ308はその後、判定された圧縮アルゴリズムを用いてキー値ペアを圧縮する(ブロック604)。例示の圧縮ハンドラ308はその後、キー値ペアのためのキーに圧縮識別子を挿入する(ブロック606)。例えば、圧縮識別子は、キー値ペアが圧縮されたことを示し得る任意のインジケーション(例えば、“[z]”)であり得る。例えば、圧縮されたキー値ペアが、プレースホルダ―(placeholder)及び圧縮識別子を含み得る(例えば、“_o1[z]”であり、ここで、“o”に続く値は、各キーが一意であり続けることを確実にするために、各圧縮された値毎に増分するインデックスである)。例示の圧縮ハンドラ308はその後、圧縮に関するメタデータをキー値ペアに対する値に挿入する(ブロック608)。例えば、圧縮ハンドラ308は、圧縮のために用いられるアルゴリズムの識別(例えば、“alg:gzip”)及び圧縮のためのパラメータ(例えば、ルックアップテーブル“lut:+srR&otilde;’&oacute;s”)を挿入し得る。その後、図6の例示のコンピュータ可読命令は終了する。例えば、制御は図5のブロック526に戻り得る。
【0075】
図7は、キー値ペアをシリアル化するために実行され得る例示のコンピュータ可読命令のフローチャートである。図7の例示のコンピュータ可読命令は、図5のブロック528を実装するために用いられ得る。図7の例示のコンピュータ可読命令は、例示のシリアル化プロセッサ310がキー値ペアの値のためのシリアル化された値を判定するとき開始する(ブロック702)。例えば、シリアル化プロセッサ310は、キー値ペアの値をシリアル化し得、シリアル化されたデータをオブジェクト表記データにストアするために、バイナリからテキストへの変換(例えば、Base64を用いて)を行い得る。例示のシリアル化プロセッサ310はその後、シリアル化識別子をキーに挿入する(例えば、例示のシリアル化プロセッサ310は“[b]”をキーに挿入し得る)ために、キー値ペアのキーを改変する。その後、図7の例示のコンピュータ可読命令は終了する。例えば、制御は、図5のブロック530に戻り得る。
【0076】
図8は、キー値ペアをハッシュ化及び/又は暗号化するための例示のコンピュータ可読命令のフローチャートである。図8の例示のコンピュータ可読命令は、図5のブロック520を実装するために用いられ得る。図8のプロセスは、図示された例の例示のハッシュ化及び暗号化ハンドラ310が、用いられるべきサイファー及びキーを判定するとき開始する(ブロック802)。例えば、ハッシュ化及び/又は暗号化するための要求が、用いられるべきサイファー及び/又はキー(例えば、秘密キー)の識別を含み得る。或いは、ハッシュ化及び暗号化ハンドラ310は、デフォルトのサイファー及び/又は秘密キーを用い得る。例示のハッシュ化及び暗号化ハンドラ310はその後、暗号化されるべきストリングをパックする(ブロック804)。例えば、例示のハッシュ化及び暗号化ハンドラ310は、任意のコーテーションマークを除去することによってキー値ペアをパックする。ハッシュ化及び暗号化ハンドラ310は、任意の他のキャラクタを除去するように任意の他のパッキングを実施し得る。例示のハッシュ化及び暗号化ハンドラ310はその後、識別されたキーを用いてキー値ペアに署名する(ブロック806)。
【0077】
例示のハッシュ化及び暗号化ハンドラ310はその後、サイファーが暗号化を含むか否かを判定する(ブロック808)。例えば、サイファーは、ハッシュ化のみを含むサイファーであり得、又はハッシュ化及び暗号化を含むサイファーであり得る。サイファーが暗号化を含まない場合、制御はキー値ペアのハッシュ化のためにブロック822に進む。サイファーが暗号化を含む場合、ハッシュ化及び暗号化ハンドラ310は署名されたキー値ペアを暗号化する(ブロック810)。例示のハッシュ化及び暗号化ハンドラ310はその後、xJSONファイルへの挿入のために、暗号化された値をストリングに変換する(ブロック812)。例示のハッシュ化及び暗号化ハンドラ310は、Base64エンコードを用いて、暗号化された値をストリングに転換する。
【0078】
キー値ペアの暗号化(ブロック810)の後、ハッシュ化及び暗号化ハンドラ310は、暗号化識別子(例えば、“[s]”)をキー値ペアのキーに挿入する(ブロック814)。例示のハッシュ化及び暗号化ハンドラ310はその後、サイファーを識別するメタデータをxJSONファイルに挿入する(ブロック816)。例えば、サイファーメタデータは、キーネーム“keys”を用いてキー値ペアに挿入され得る。例示のハッシュ化及び暗号化ハンドラ310はその後、キーメタデータに複数のサイファーがあるか否か判定する(ブロック818)。キーメタデータに複数のサイファーがある場合、例示のハッシュ化及び暗号化ハンドラ310は、暗号化されたキー値ペアのキーにサイファー識別子を挿入する(ブロック820)。例えば、ハッシュ化及び暗号化ハンドラ310は、サイファーに対応するインデックスをキーメタデータに挿入し得る(例えば、“[s2]”であり、ここで、サイファーはキーメタデータの第2のサイファーである)。
【0079】
ハッシュ化及び暗号化ハンドラ310が、サイファーが暗号化を含まないと判定した(ブロック808)後、複数のサイファーが存在しないと判定した(ブロック818)後、又はサイファーの識別子をキーに挿入した(ブロック820)後、例示のハッシュ化及び暗号化ハンドラ310は、キー値ペアの値に対するハッシュを判定する(ブロック822)。例えば、ハッシュは、ダブルピアソン(Pearson)ハッシュ化を用いて判定され得る。例示のハッシュ化及び暗号化ハンドラ310は、ハッシュの値をキー値ペアのキーに挿入する(ブロック824)。例えば、ハッシュ値は、ハッシュ化識別子(例えば、ハッシュ化識別子はハッシュシンボル(#)であり得る)に続いて挿入され得る。例えば、ハッシュは、(“[#XXXX]”であり、ここで、XXXXはハッシュ値である)として挿入され得る。暗号化及びハッシュ化される値に対するキーは、単一のサイファーが存在する場合は“[s#XXXX]”であり得、複数のサイファーが存在し、第1のサイファーが暗号化のために用いられる場合は“[s1#XXXX]”であり得る。
【0080】
その後、図8の例示のコンピュータ可読命令は終了する。例えば、制御は図5のブロック522に戻り得る。
【0081】
図2のパーサー204を実装する例示の手法が図4に示されるが、図4に示されるエレメント、プロセス、及び/又はデバイスの1つ又は複数は、任意の他の手法で、組み合わせ、分割、再配置、省略、除去、及び/又は実装され得る。また、図2及び図4の例示のデータハンドラ402、例示のストリングプロセッサ404、例示の逆シリアル化プロセッサ406、例示の解凍ハンドラ408、例示の解読ハンドラ410、及び/又はより全般的に、パーサー204は、ハードウェア、ソフトウェア、ファームウェア、及び/又はハードウェア、ソフトウェア、及びファームウェアの任意の組み合わせによって実装され得る。このように、例えば、例示のデータハンドラ402、例示のストリングプロセッサ404、例示の逆シリアル化プロセッサ406、例示の解凍ハンドラ408、及び/又は例示の解読ハンドラ410の任意のものが、アナログ又はデジタル回路、ロジック回路、プロブラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、及び/又はフィールドプログラマブルロジックデバイス(FPLD)の1つ又は複数によって実装され得る。純粋にソフトウェア及び/又はファームウェア実装を対象として本願の任意の装置又はシステムの請求項を読むと、例示のデータハンドラ402、例示のストリングプロセッサ404、例示の逆シリアル化プロセッサ406、例示の解凍ハンドラ408、及び/又は例示の解読ハンドラ410の少なくとも1つが、ソフトウェア及び/又はファームウェアをストアする、メモリ、デジタル多用途ディスク(DVD)、コンパクトディスク(CD)、又はブルーレイディスク等の有形のコンピュータ可読ストレージデバイス又はストレージディスクを含むように本明細書によって明示的に定義される。また更に、図1のxJSONハンドラ110、及び/又は図2及び/又は図4のパーサー204は、図4に示されるものに加えて又はその代わりに、1つ又は複数のエレメント、プロセス、及び/又はデバイスを含み得、及び/又は図示されたエレメント、プロセス、及びデバイスのどれか1つ以上又は全てを含み得る。
【0082】
例示のパーサー204を実装するための例示の機械可読命令を表すフローチャートが図9図11に示される。これらの例において、機械可読命令は、図12に関連して、以下で説明される例示のプロセッサプラットフォーム1200に示されるプロセッサ1212等のプロセッサによる実行のためのプログラムを含む。プログラムは、CD−ROM、フロッピーディスク、ハードドライブ、デジタル多用途ディスク(DVD)、ブルーレイディスク、又はプロセッサ1212に関連付けられたメモリ等の、有形のコンピュータ可読ストレージ媒体にストアされるソフトウェアにおいて具現化され得るが、それらの全体のプログラム及び/又は一部は、代替的に、プロセッサ1212以外のデバイスによって実行され得、及び/又はファームウェア又は専用ハードウェアにおいて具現化され得る。また、例示のプログラムが図9図11に示されるフローチャートを参照して説明されるが、例示のパーサー204を実装する他の多くの方法が代替的に用いられ得る。例えば、ブロックの実行の順番が変更され得、及び/又は記載されたブロックの幾つかが変更、削除、又は組み合わされ得る。
【0083】
上述のように、図9図11の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ(ROM)、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、キャッシュ、ランダムアクセスメモリ(RAM)及び/又はその中に情報が任意の期間(例えば、長期間、永久的に、情報の一時的バッファリングのため及び/又はキャッシングのために短い時間)ストアされる任意の他のストレージデバイス又はストレージディスク等の、有形のコンピュータ可読ストレージ媒体にストアされるコード化された命令(例えば、コンピュータ及び/又は機械可読命令)を用いて実装され得る。本明細書において用いられるように、有形のコンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び/又はストレージディスクを含むように及び伝搬信号及び送信媒体を除外するように明示的に定義される。本明細書において用いられるように、「有形のコンピュータ可読ストレージ媒体」及び「有形の機械可読ストレージ媒体」は交換可能に用いられる。付加的又は代替的に、図9図11の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、リードオンリーメモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び/又はその中に情報が任意の期間(例えば、長期間、永久的に、情報の一時的バッファリングのため及び/又はキャッシングのために短い時間)ストアされる、任意の他のストレージデバイス又はストレージディスク等の、非一時的コンピュータ可読ストレージ媒体にストアされるコード化された命令(例えば、コンピュータ及び/又は機械可読命令)を用いて実装され得る。本明細書において用いられるように、非一時的コンピュータ可読ストレージ媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び/又はストレージディスクを含むように、及び伝搬信号及び送信媒体を除外するように明示的に定義される。
【0084】
図9は、例示のパーサー204が、オブジェクト表記データ(例えば、xJSONファイル)をパースするための例示のコンピュータ可読命令のフローチャートである。図9の例示のコンピュータ可読命令は、例示のデータハンドラ402がオブジェクト表記データを受信するとき開始する(ブロック902)。例えば、データハンドラ402、又はxJSONハンドラ110を含むデバイスの別の構成要素が、データをxJSONデータとして送信する別のデバイスからデータを要求し得る。
【0085】
幾つかの例において、図示された例のデータハンドラ402は、利用可能なオブジェクト表記データの一部のみを要求する。例えば、例示のxJSONファイルが100,000個のキー値ペアを含むことが可能であり、その場合、xJSONファイルをパースしようとすると低電力デバイス(例えば、及びIoTデバイス)のメモリを使い果たすことになり得る。従って、例示のデータハンドラ402は、(例えば、データをリトリーブするための要求に基づいて)所望部分を要求する。例えば、データハンドラ402は、dot表記を用いてオブジェクト表記データの特定の部分を参照し得る(例えば、“@exmaple.com/myobj.xjson#id.value1”は、exmaple.comにより提供されたmyobj.xjsonファイルにおけるオブジェクトidのvalue 1として識別されたキーをリトリーブする)。このように、例示のデータハンドラ402は、オブジェクト表記データ全体をリトリーブする必要なしに、対象となる所望のキー及び/又はオブジェクトをリトリーブし得る。例示の実装において、オブジェクトが、“#object”として参照され、ここで“object”はオブジェクトのネームであり、“@uri”として参照され、ここで“uri”は、そこからオブジェクト表記データがリトリーブされるロケーションであり、及び、@uri#object.subobjectとして参照され、ここで“subobject”は、“uri”におけるオブジェクト表記データロケーションにおけるオブジェクト“object”内のオブジェクト及び/又はキーを識別する。
【0086】
例示のデータハンドラ402は、オブジェクト表記データにおける第1のキー値ペアを選択する(ブロック904)。例示のストリングプロセッサ404は、キー値ペアがストリングリテラル(例えば、コーテーションマーク)を含むか否かを判定する(ブロック906)。キー値ペアがストリングリテラルを含まない場合、例示のストリングプロセッサ404は、受信したファイルがxJSONタイプであると判定し、ファイルがxJSONファイルであることのインジケーションをストアする(例えば、JSONファイルはコーテーションマークを含むが、xJSONファイルはコーテーションマークを含む必要がないので)(ブロック908)。その後、制御はブロック922に進む。
【0087】
ストリングプロセッサ404が、キー値ペアがストリングリテラルを含むと判定すると、ストリングプロセッサ404は、タイプをJSONとしてストアする(ブロック910)。例えば、ファイルは、それがストリングリテラルを含むのでJSON互換性ファイルであり得るが、そのファイルはxJSON拡張を含み得る。例示のストリングプロセッサ404はその後、xJSONファイルのサイズを低減するために、キー値ペアからコーテーションマークを除去する(ブロック912)。
【0088】
ストリングプロセッサ404が、タイプをxJSONと設定した(ブロック908)後、又はストリングプロセッサ404がコーテーションマークを除去した(ブロック912)後、例示の逆シリアル化プロセッサ406は、キーがシリアル化識別子を含むか否かを判定する(ブロック914)。キーがシリアル化識別子を含む場合、例示の逆シリアル化プロセッサ406は、シリアル化されたデータを逆シリアル化/デマーシャルする(ブロック916)。
【0089】
キー値ペアがシリアル化識別子を含まない(ブロック914)場合、又はキー値ペアの逆シリアル化(ブロック916)の後、例示の解凍ハンドラ408は、キーが圧縮識別子を含むか否かを判定する(ブロック918)。キーが圧縮識別子を含む場合、例示の解凍ハンドラ408はキー値ペアを解凍する(ブロック920)。キー値ペアを解凍するために実行され得る例示のコンピュータ可読命令は、図11に関連して説明される。
【0090】
キー値ペアが圧縮識別子を含まない(ブロック918)場合、又はキー値ペアの解凍(ブロック920)の後、例示の解読ハンドラ410は、キー値ペアのキーが暗号化識別子を含むか否かを判定する(ブロック922)。キーが暗号化識別子を含む場合、解読ハンドラ410はキー値ペアを解読する(ブロック924)。キー値ペアを解読するための例示のコンピュータ可読命令が図10に関連して説明される。
【0091】
図10は、暗号化されたキー値ペアを解読するための例示のコンピュータ可読命令のフローチャートである。例示のコンピュータ可読命令は図9のブロック924を実装するために用いられ得る。例示のコンピュータ可読命令は、解読ハンドラ410がキー値ペアの暗号化の間用いられたサイファー及びキーを判定するとき開始する(ブロック1002)。例示の解読ハンドラ410は、オブジェクト表記データに含まれるキーメタデータからサイファー及び公開キーを判定する。幾つかの例において、解読ハンドラ410は、暗号ハンドラにおいて識別されるインデックスを用いてキーのリストからサイファー及びキーを選択する。
【0092】
例示の解読ハンドラ410はその後、暗号化の間用いられた公開キーに対応する秘密キーを取得する(ブロック1004)。例えば、秘密キーは、パーサー204にストアされる秘密キーのセットにストアされ得る。或いは、解読ハンドラ410は、識別される公開キーに対応する秘密キーをユーザが提供することを要求するプロンプトを表示し得る。解読ハンドラ410はその後、秘密キー及び識別されたサイファーを用いて、暗号化されたデータを解読する(ブロック1006)。その後、図10の例示のコンピュータ可読命令は終了する。例えば、制御は図9のブロック926に戻り得る。
【0093】
図11は、キー値ペアを解凍するための例示のコンピュータ可読命令のフローチャートである。図11の例示のコンピュータ可読命令は図9のブロック920を実装するために用いられ得る。図11の例示のコンピュータ可読命令は、例示の解凍ハンドラ408が、キー値ペアを圧縮するために用いられた圧縮アルゴリズムを判定するとき開始する(ブロック1102)。例えば、解凍ハンドラ408は、圧縮されたキー値ペアの値に挿入されたメタデータから圧縮アルゴリズムを判定する。例示の解凍ハンドラ408はその後、圧縮のためのパラメータを判定する(ブロック1104)。例えば、解凍ハンドラ408は、キー値ペアの値に挿入されたメタデータからパラメータを抽出し得る。例えば、パラメータは、圧縮アルゴリズムにより用いられるルックアップテーブルを含み得る。例示の解凍ハンドラ408はその後、識別された圧縮アルゴリズム及びパラメータを用いてキー値ペアを解読する(ブロック1106)。その後、図11の例示のコンピュータ可読命令は終了する。例えば、制御は図9のブロック922に戻り得る。
【0094】
図12は、例示のインタフェース202、例示のパーサー204(例えば、例示のデータハンドラ402、例示のストリングプロセッサ404、例示の逆シリアル化プロセッサ406、例示の解凍ハンドラ408、及び/又は例示の解読ハンドラ410を含む)、例示のジェネレータ206(例えば、例示のデータハンドラ302、例示のストリングプロセッサ304、例示のハッシュ化及び暗号化ハンドラ306、例示の圧縮ハンドラ308、及び/又は例示のシリアル化プロセッサ310を含む)、及び/又は例示のJavaScriptインタプリタ210を含む、例示の第1のデバイス106及び/又は例示のウェブサービス102を実装するために、図5図6図7図8図9図10、及び/又は図11の命令を実行するように構成された例示のプロセッサプラットフォーム1200のブロック図である。プロセッサプラットフォーム1200は、例えば、パーソナルコンピュータ、モバイルデバイス(例えば、携帯電話、スマートフォン、iPad(商標)などのタブレット)、パーソナルデジタルアシスタント(PDA)、又は任意の他のタイプの、画像を処理することが可能なコンピューティングデバイスであり得る。
【0095】
図示された例のプロセッサプラットフォーム1200はプロセッサ1212を含む。図示された例のプロセッサ1212はハードウェアである。例えば、プロセッサ1212は、任意の所望のファミリー又は製造元からの、1つ又は複数の集積回路、ロジック回路、マイクロプロセッサ、又はコントローラによって実装され得る。図12の例示のプロセッサ1212は、xJSONファイル及びデータをパース及び生成するために、例示のパーサー204、例示のジェネレータ206、及び例示のJavaScriptインタプリタ208を含む、例示のxJSONハンドラ110の構成要素を実装し得る。
【0096】
図示された例のプロセッサ1212は、ローカルメモリ1213(例えば、キャッシュ)を含む。図示された例のプロセッサ1212は、バス1218を介して、揮発性メモリ1214及び不揮発性メモリ1216を含むメインメモリと通信する。揮発性メモリ1214は、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、ダイナミックランダムアクセスメモリ(DRAM)、RAMBUSダイナミックランダムアクセスメモリ(RDRAM)、及び/又は任意の他のタイプのランダムアクセスメモリデバイスにより実装され得る。不揮発性メモリ1216は、フラッシュメモリ及び/又は任意の他の所望のタイプのメモリデバイスにより実装され得る。メインメモリ1214、1216へのアクセスはメモリコントローラによって制御される。
【0097】
図示された例のプロセッサプラットフォーム1200は更に、インタフェース回路1220を含む。インタフェース回路1220は、Ethernetインタフェース、ユニバーサルシリアルバス(USB)、及び/又はPCIエクスプレスインタフェース等の任意のタイプのインタフェース規格によって実装され得る。例示のインタフェース回路は、プロセッサプラットフォーム1200を図1の例示のネットワーク104とインタフェースするために、図1及び/又は図2のxJSONハンドラ110の例示のインタフェース202を実装し得る。
【0098】
図示された例において、1つ又は複数の入力デバイス1222がインタフェース回路1220に接続される。入力デバイス1222は、ユーザがデータ及びコマンドをプロセッサ1212に入力することを可能にする。入力デバイスは、例えば、オーディオセンサ、マイクロホン、カメラ(静止画又は動画)、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、イソポイント(isopoint)、及び/又は音声認識システムにより実装され得る。
【0099】
1つ又は複数の出力デバイス1224がまた、図示された例のインタフェース回路1220に接続される。出力デバイス1224は、例えば、ディスプレイデバイス(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ、陰極線管ディスプレイ(CRT)、タッチスクリーン、タクタイル出力デバイス、発光ダイオード(LED)、プリンタ、及び/又はスピーカ)により実装され得る。そのため、図示された例のインタフェース回路1220は、典型的に、グラフィックドライバーカード、グフィックドライバーチップ、又はグラフィックドライバープロセッサを含む。
【0100】
図示された例のインタフェース回路1220は更に、ネットワーク1226(例えば、Ethernet接続、デジタル加入者線(DSL)、電話線、同軸ケーブル、セルラー電話システム)を介して、外部機器(例えば、任意の種類のコンピューティングデバイス)とのデータの交換を促進するために、トランスミッタ、レシーバ、トランシーバ、モデム、及び/又はネットワークインタフェースカード等の通信デバイスを含む。
【0101】
図示された例のプロセッサプラットフォーム1200は更に、ソフトウェア及び/又はデータをストアするための1つ又は複数の大容量ストレージデバイス1228を含む。そのような大容量ストレージデバイス1228の例には、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、RAIDシステム、及びデジタル多用途ディスク(DVD)ドライブが含まれる。
【0102】
図5図6図7図8図9図10、及び/又は図11のコード化された命令1232は、大容量ストレージデバイス1228、揮発性メモリ1214、不揮発性メモリ1216、及び/又はCD又はDVD等の着脱可能な有形コンピュータ可読ストレージ媒体にストアされ得る。
【0103】
本明細書において開示される例は、オブジェクト表記データ(例えば、JSON等のヒューマンリーダブルオブジェクト表記データ)に対する拡張を提供する。幾つかの例において、オブジェクト表記データの一部をパック及び/又は圧縮することによってデータストレージ及び通信帯域幅の使用が低減される。幾つかの例において、オブジェクト表記データの一部をパック/圧縮させること、シリアル化させること、及び/又はオブジェクト表記データの他の部分を拡張させないようにしながら圧縮させることによって、コンピュータ処理リソースの使用が低減される。例えば、JSONファイルにおいて、本明細書に開示される例を用いて、JSONファイル全体が暗号化されることを要求することなく、単一のキー値ペアが暗号化され得、これによってJSONファイルのエレメントの暗号化及び解読に必要とされる処理の量が低減される。幾つかの例において、従来のオブジェクト表記プロトコルによって設定された文法規則に従う出力(例えば、拡張JSONファイル)を生成することによって、拡張をサポートしないデバイスとのバックワード互換性が提供される。従って、そのような、従来のプロトコルの文法規則に合った、拡張されたファイルが、拡張をサポートしないデバイスを用いて拡張されたファイルをパースする際にエラーを起こすことはない。
【0104】
本発明の特許請求の範囲内で、説明された実施形態に変更が可能であり、他の実施形態が可能である。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12