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はゼロ以上の整数で、xy以下です。xtoの間、およびtoyの間には、少なくとも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]

関連項目: