2.7. Normalized Paths (正規化パス)
2.7. Normalized Paths (正規化パス)
Normalized Path (正規化パス) は, 値内のノードの位置の一意表現であり, 値内でそのノードを一意に識別します. 具体的には Normalized Path は制限された構文 (以下で定義) の JSONPath クエリです, 例: $['book'][3], 値に適用すると正規化パスで識別されるノードのみからなるノードリストが得られます. 注: Normalized Path は 特定の値における ノードの同一性を表します. 値内の任意の特定ノードを識別する Normalized Path はちょうど1つ存在します.
ノードリストは JSON 内で文字列の配列としてコンパクトに表現でき, 文字列は Normalized Path です.
Normalized Path は予測可能な形式を提供し, ノードリストのテストや後処理 (例: 重複ノードの除去) を簡素化します. 本ドキュメントでは例の result path として Normalized Path を用います.
Normalized Path は省略 dot notation ではなく正規の bracket notation を用います.
Normalized Path では文字列メンバ名の区切りに single quote を用います. これにより Normalized Path が double quote で区切られた文字列内に現れる際にエスケープが必要な文字数を減らします (例: JSON テキスト内).
特定の文字は Normalized Path では1通りにのみエスケープされ, それ以外の文字はエスケープされません.
注: Normalized Path は singular query (単一クエリ) ですが,
すべての単一クエリが Normalized Path とは限りません. 例えば $[-3] は
単一クエリですが Normalized Path ではありません. $[-3] に相当する
Normalized Path ではインデックスは配列長から3を引いた値になります.
($[-3] がノードを識別するには配列長は少なくとも3でなければなりません.)
normalized-path = root-identifier *(normal-index-segment)
normal-index-segment = "[" normal-selector "]"
normal-selector = normal-name-selector / normal-index-selector
normal-name-selector = %x27 *normal-single-quoted %x27 ; 'string'
normal-single-quoted = normal-unescaped /
ESC normal-escapable
normal-unescaped = ; omit %x0-1F control codes
%x20-26 /
; omit 0x27 '
%x28-5B /
; omit 0x5C \
%x5D-D7FF /
; skip surrogate code points
%xE000-10FFFF
normal-escapable = %x62 / ; b BS backspace U+0008
%x66 / ; f FF form feed U+000C
%x6E / ; n LF line feed U+000A
%x72 / ; r CR carriage return U+000D
%x74 / ; t HT horizontal tab U+0009
"'" / ; ' apostrophe U+0027
"\" / ; \ backslash (reverse solidus) U+005C
(%x75 normal-hexchar)
; certain values u00xx U+00XX
normal-hexchar = "0" "0"
(
("0" %x30-37) / ; "00"-"07"
; omit U+0008-U+000A BS HT LF
("0" %x62) / ; "0b"
; omit U+000C-U+000D FF CR
("0" %x65-66) / ; "0e"-"0f"
("1" normal-HEXDIG)
)
normal-HEXDIG = DIGIT / %x61-66 ; "0"-"9", "a"-"f"
normal-index-selector = "0" / (DIGIT1 *DIGIT)
; non-negative decimal integer
与えられたノードを識別できる Normalized Path は1つに限られるため, 構文はどの文字をエスケープするかを規定します. したがって normal-hexchar の定義は, 例えば U+000B LINE TABULATION のように直接的に印字しにくい文字を16進エスケープするためのものですが, \n のような標準 JSON エスケープがない場合向けです.
2.7.1 Examples (例)
| Path | Normalized Path | Comment |
|---|---|---|
| $.a | $['a'] | Object value |
| $[1] | $[1] | Array index |
| $[-3] | $[2] | 長さ5の配列に対する |
| 負の配列インデックス | ||
| $.a.b[1:2] | $['a']['b'][1] | ネストした構造 |
| $["\u000B"] | $['\u000b'] | Unicode escape |
| $["\u0061"] | $['a'] | Unicode character |
表18: Normalized Path の例