4 SODAのパス(参考)
SODAのフィルタ仕様にはパスが含まれており、そのそれぞれがJavaScript Object Notation (JSON)ドキュメントの値を対象としています。パスは、一連のステップで構成されます。SODAパスの詳細な定義を示します。
ノート:
SODA QBE自体はJSONオブジェクトです。QBEでは、厳密なJSON構文を使用する必要があります。具体的には、すべてのフィールド名を二重引用符("
)で囲む必要があります。これには、SODAパスとして機能するaddress.zip
などのフィールド名が含まれます。たとえば、{"address.zip" : 94088}
を記述する必要があります。{address.zip : 94088}
ではありません。
次の文字は、一部のSODAパス・ステップで特殊な構文上の意味を持つことができます。その場合、そのコンテキストでの使用は構文的と呼ばれます(構文的に使用されます)。
-
大カッコ(
[
と]
)は、JSON配列を区切ります -
カンマ(
,
)は、配列要素または索引コンポーネントを分離します -
ワイルドカード(
*
)は、配列ステップ内の任意の配列索引またはフィールド・ステップ(後述)内の任意のフィールド名と一致するプレースホルダです -
ピリオド(
.
)は、親オブジェクトのフィールド名(または*
)を子オブジェクトのフィールド名(または*
)から分離します
上に挙げた以外のパス表現コンテキストでは、これらの同じ文字に特別な構文的意味はありません。たとえば、配列構文での使用以外では、カンマは構文的には使用されません。
与えられたコンテキストで構文的に使用されていない文字は、そのコンテキストでは普通です。たとえば、カンマは配列構文での使用以外では普通で、文字d
は常に普通です。
パスには、2種類のステップ(フィールド・ステップと配列ステップ)があります。
フィールド・ステップは、次のいずれかです。
-
ワイルドカード文字
*
(単独で) -
常に普通である一連の文字 - たとえば、
cat
-
逆引用符文字(')で囲まれた一連の任意の文字 - たとえば、
`dog`
および`cat.dog`
逆引用符文字で囲まれているフィールド・ステップ内の文字は、構文的には使用されませんが、文字どおりに扱われます。文字がいつもどおり構文的に使用されないようにするには、そのステップを逆引用符文字で囲む必要があります。
フィールド名dog
の文字はすべて常に普通であるため、`dog`
の逆引用符文字はオプションです。しかし、次のフィールド・ステップは、それぞれが構文的に使用される1つ以上の文字を含むため、逆引用符文字で囲む必要があります。
`cat.dog`
`cat[dog]`
`*`
パスa.*.b
で、アスタリスクはワイルドカードとして機能します。これはフィールド名のプレースホルダです。ただし、パスa.`*`.b
では、アスタリスクはワイルドカードとして機能しません。これは逆引用符によってエスケープされているため、普通の文字(*
という名前のフィールド)として機能します。(どちらの場合も、エスケープされていないピリオドは構文的に使用されます。)
逆引用符を使用して特別な構文的意味を禁止すること以外に、これらを使用してフィールド名の先頭のドル記号文字($
)をエスケープできます。それ以外の場合はSODA演算子名の導入と解釈されます。たとえば、逆引用符文字のため、フィールド・ステップの`$eq`
はSODA演算子$eq
を表していません。これは、同じ名前を持つ普通のJSONフィールドを表しています。($
で始まるフィールド名を持つデータを問い合せる必要はまれです。)
バッククォート文字で囲んだステップにバッククォート文字が含まれている場合は、連続した2つのバッククォート文字を使用してその文字を表す必要があります。たとえば、`Customer``s Comment`
のようになります。
エスケープされていないピリオド(.
)には、フィールド・ステップが続く必要があります。パスの最初のステップの後、各フィールド・ステップの前にはピリオドが必要です。
配列ステップは、カッコ([
および]
)で区切られています。カッコの中は次のいずれかです。
-
ワイルドカード文字
*
(単独で) -
次の配列索引(位置)コンポーネントの1つ以上:
-
ゼロ以上の整数である単一の配列索引
-
次の構文を持つ配列索引範囲:
x to y
x
およびy
はゼロ以上の整数で、x
はy
以下です。x
とto
の間、およびto
とy
の間には、少なくとも1つの空白文字が必要です。
複数のコンポーネントは、カンマ(
,
)で区切る必要があります。複数のコンポーネントのリストでは、配列索引は昇順である必要があり、範囲は重複できません。 -
たとえば、次のものは有効な配列ステップです。
[*]
[1]
[1,2,3]
[1 to 3]
[1, 3 to 5]
次のものは有効な配列ステップではありません。
[*, 6]
[3, 2, 1]
[3 to 1]
[1 to 3, 2 to 4]
関連項目:
-
厳密なJSON構文および緩慢なJSON構文の詳細は、Oracle Database JSON開発者ガイドを参照
-
JSONについては、JSONの紹介を参照
関連トピック