インターネット技術タスクフォース | G. ラフ |
インターネットドラフト | |
予定ステータス:情報 | H. アンドリュース(編集) |
期限切れ:2018年7月23日 | Cloudflare, Inc. |
2018年1月19日 |
相対 JSON ポインタ
draft-handrews-relative-json-pointer-01
JSON ポインタは、JSON ドキュメント内の位置をドキュメントルートから始めて指定するための構文です。このドキュメントでは、ドキュメント内からの相対位置を許可する JSON ポインタ構文の拡張を定義します。
このインターネットドラフトは、BCP 78 および BCP 79 の規定に完全に準拠して提出されています。
インターネットドラフトは、インターネットエンジニアリングタスクフォース(IETF)の作業文書です。他のグループもインターネットドラフトとして作業文書を配布する場合があることに注意してください。現在のインターネットドラフトのリストは、http://datatracker.ietf.org/drafts/current/にあります。
インターネットドラフトは最大6ヶ月間有効なドラフト文書であり、いつでも他の文書によって更新、置換、または廃止される可能性があります。「作業中」以外の参考文献として、またはそれらを引用することは適切ではありません。
このインターネットドラフトは、2018年7月23日に期限切れになります。
Copyright (c) 2018 IETF Trust およびドキュメントの著者として識別された人物。全著作権所有。
この文書は、BCP 78 および IETF Trust の IETF ドキュメントに関する法的規定(http://trustee.ietf.org/license-info)の対象となり、この文書の公開日に有効です。これらの文書は、この文書に関するあなたの権利と制限について説明しているため、注意深く確認してください。この文書から抽出されたコードコンポーネントには、Trust 法的規定のセクション 4.e に記載されている簡略化された BSD ライセンステキストを含める必要があり、簡略化された BSD ライセンスに記載されているように、保証なしで提供されます。
JSON ポインタ(RFC 6901 [RFC6901])は、JSON ドキュメント内の位置をドキュメントルートから始めて指定するための構文です。このドキュメントでは、ドキュメント内からの相対位置の識別を可能にする関連構文を定義します。
このドキュメントにおけるキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、「OPTIONAL」は、RFC 2119 [RFC2119]に記載されているように解釈されます。
相対 JSON ポインタは、Unicode 文字列(RFC 4627、セクション 3 [RFC4627]を参照)であり、非負整数と、'#'(%x23)文字または JSON ポインタ(RFC 6901 [RFC6901])のいずれかが続きます。
整数プレフィックスと JSON ポインタの間の区切りは常に明確です。なぜなら、JSON ポインタはゼロ長であるか、'/'(%x2F)で始まる必要があるためです。同様に、JSON ポインタは '#' と曖昧になることはありません。
相対 JSON ポインタの ABNF 構文は次のとおりです。
relative-json-pointer = non-negative-integer <json-pointer> relative-json-pointer =/ non-negative-integer "#" non-negative-integer = %x30 / %x31-39 *( %x30-39 ) ; "0", or digits without a leading "0"
ここで、<json-pointer> は RFC 6901、セクション 3 [RFC6901](「構文」)で定義された生成に従います。
相対 JSON ポインタの評価は、JSON ドキュメント内の値への参照から始まり、そのドキュメント内の値、オブジェクトメンバーに対応する文字列、または配列インデックスを表す整数の値のいずれかで完了します。
評価は、非負整数プレフィックスを処理することから始まります。これは、文字列の先頭から利用可能な10進数の連続したシーケンスを最も長く取り、10進数の数値を取得することで見つけることができます。この値がゼロより大きい場合、次の手順はその回数だけ繰り返されます。RFC 6901、セクション 4 [RFC6901](「評価」)、ただし、使用される初期参照は現在保持されている参照(ドキュメントのルートではない可能性がある)であるという修正を加えます。
相対 JSON ポインタの残りが JSON ポインタである場合、評価は次のように進みます。
それ以外の場合(相対 JSON ポインタの残りが文字 '#' の場合)、最終結果は次のように決定されます。
相対 JSON ポインタの JSON 文字列表現に関する懸念事項は、RFC 6901、セクション 5 [RFC6901]に記載されているものと同じです。
たとえば、次の JSON ドキュメントがあるとします。
{ "foo": ["bar", "baz"], "highly": { "nested": { "objects": true } } }
"baz"("foo"内)の値から始めると、次の JSON 文字列は対応する値に評価されます。
"0" "baz" "1/0" "bar" "2/highly/nested/objects" true "0#" 1 "1#" "foo"
"nested"(メンバーキーに対応)の値 {"objects":true} から始めると、次の JSON 文字列は対応する値に評価されます。
"0/objects" true "1/nested/objects" true "2/foo/0" "bar" "0#" "nested" "1#" "highly"
JSON ポインタとは異なり、相対 JSON ポインタは URI フラグメント識別子で使用することはできません。このようなフラグメントはドキュメント内の正確な位置を指定するため、相対 JSON ポインタは適していません。
エラー状態が発生した場合、JSON ポインタの評価は完了しません。
無効な構文、または存在しない値を参照することによって、評価が失敗する可能性があります。この仕様では、エラーの処理方法を定義していません。JSON 相対ポインタのアプリケーションは、各タイプのエラーの影響と処理を指定する必要があります。
相対 JSON ポインタは、JSON ポインタの補足として意図されています。アプリケーションは、各構文の使用を個別に指定する必要があります。JSON ポインタまたは相対 JSON ポインタのいずれかを許容される構文として定義しても、もう一方の構文も許容されることを意味するものではありません。
この仕様の言語と構造は、[RFC6901]を基にしており、場合によってはそのまま引用しています。
このドラフトは、Geraint Luff によって記述および公開されたままの状態で主に残り、新しい編集の下でわずかな変更が行われただけです。
特定の相対 JSON ポインタの評価は、実際の JSON 値を参照することを保証するものではありません。相対 JSON ポインタを使用するアプリケーションは、解決されないポインタの処理方法を定義することで、この状況を予測する必要があります。
処理の一部として、複数の JSON ドキュメント(一部または全部)から複合データ構造が組み立てられる可能性があります。このような場合、アプリケーションは、相対 JSON ポインタが、記述されたドキュメントの外側の値に評価されないようにする必要があります。
JSON ポインタには、NUL(Unicode U+0000)文字を含めることができることに注意してください。NUL を文字列の終わりを示すために使用するプログラミング言語では、この文字を誤って解釈しないように注意する必要があります。
[RFC2119] | ブラドナー、S.、「RFC での要件レベルを示すためのキーワード」、BCP 14、RFC 2119、DOI 10.17487/RFC2119、1997年3月。 |
[RFC6901] | ブライアン、P.、ジップ、K.、およびM. ノッティンガム、「JavaScript オブジェクト表記法(JSON)ポインタ」、RFC 6901、DOI 10.17487/RFC6901、2013年4月。 |
[RFC4627] | クロックフォード、D.、「JavaScript オブジェクト表記法(JSON)の application/json メディアタイプ」、RFC 4627、DOI 10.17487/RFC4627、2006年7月。 |
[CREF1]インターネットドラフトのステータスを離れる前にこのセクションを削除してください。