4. Evaluation (評価)
4. Evaluation (評価)
JSON Pointer の評価は, JSON ドキュメントのルート値 (root value) への参照から開始され, ドキュメント内のある値への参照で完了します。JSON Pointer 内の各参照トークン (reference token) は順次評価されます。
各参照トークンの評価は, エスケープされた文字シーケンス (escaped character sequence) のデコードから始まります。これは, まずシーケンス '~1' のすべての出現を '/' に変換し, 次にシーケンス '0' のすべての出現を '' に変換することによって実行されます。この順序で置換を実行することにより, 実装は '~01' を最初に '~1' に変換し, 次に '/' に変換するという誤りを回避できます。これは正しくありません (文字列 '~01' は変換後に正しく '~1' になります)。
その後, 参照トークンは以下のスキームに従って参照される値を変更します:
-
現在参照されている値が JSON オブジェクト (object) の場合, 新しい参照値は, 参照トークンによって識別される名前を持つオブジェクトメンバー (object member) です。メンバー名 (member name) は, トークンと同じ数の Unicode 文字を持ち, それらのコードポイント (code points) がバイト単位で等しい場合に限り, トークンと等しくなります。Unicode 文字正規化 (character normalization) は実行されません。オブジェクト内で参照されるメンバー名が一意でない場合, 参照されるメンバーは未定義であり, 評価は失敗します (以下を参照)。
-
現在参照されている値が JSON 配列 (array) の場合, 参照トークンは次のいずれかを含まなければなりません (MUST):
- 数字 (digits) で構成される文字 (以下の ABNF を参照; 先頭のゼロは許可されないことに注意), これは符号なし十進整数値を表し, 新しい参照値をトークンによって識別されるゼロベースインデックス (zero-based index) を持つ配列要素にします, または
- 正確に単一の文字 "-", これは新しい参照値を最後の配列要素の後の (存在しない) メンバーにします。
配列インデックスの ABNF 構文は以下のとおりです:
array-index = %x30 / ( %x31-39 *(%x30-39) )
; "0", or digits without a leading "0"
実装は, ドキュメントの内容に対して各参照トークンを評価し, JSON Pointer の参照トークンのいずれかに対して具体的な値 (concrete value) を解決できない場合, エラー状態 (error condition) を発生させます。たとえば, 配列が非数値トークンで参照されている場合, エラー状態が発生します。詳細については Section 7 を参照してください。
"-" 文字を使用して配列にインデックスを付けると, 定義上, 存在しない配列要素を参照するため, 常にこのようなエラー状態が発生することに注意してください。したがって, JSON Pointer のアプリケーションは, この文字が有用であるためには, この文字をどのように処理するかを指定する必要があります。
JSON Pointer アプリケーションによって特定のアクションが定義されていないエラー状態は, 評価の終了を引き起こします。