# avpath - 述語

利用対象...

* Cloud API Services Platform
* Cloud Big Data
* Cloud Big Data Platform
* Cloud Data Fabric
* Cloud Data Integration
* Cloud Data Management Platform
* Cloud Pipeline Designer Standard Edition
* Data Fabric

avpath述語を使用することで、式を構築する時に選択する項目についての具体的なルールを記述できます。述語はロケーションパスで選択された項目を制限するフィルターになります。述語には、2つのタイプがあります: オブジェクトと位置です。

ロケーションパスの詳細は、[avpath - ロケーションパス](https://help.qlik.com/talend/ja-JP/pipeline-designer-user-guide/Cloud/avpath-location-path)をご覧ください。

## オブジェクト述語

オブジェクト述語をパス式で使用することで、各項目のプロパティを操作するブール式で項目のサブセットをフィルタリングできます。オブジェクト述語は波括弧で囲みます。

オブジェクト述語の基本式:

* 数値リテラル(例: 1.23)

* 文字列リテラル(例: "John Gold")

* ブール値リテラル(true/false)

* サブパス(例: .nestedProp.deeplyNestedProp)

avpathでは、述語式で以下のタイプの演算子を使用できます。

* 比較演算子

* 文字列比較演算子

* 論理演算子

* 算術演算子

比較演算子比較演算子

| 演算子 | 説明 | 例 |
| --- | --- | --- |
| == | 両方のオペランドが等しい場合にtrueを返します | .customers{.id == "1"} |
| === | 両方のオペランドが厳密にイコールで、型変換がない場合はtrueを返します | .customers{.id === 1} |
| != | オペランドが等しくない場合にtrueを返します | .customers{.id != "1"} |
| !== | オペランドが等しくない場合、または同じタイプでない場合にtrueを返します | .customers{.id !== 1} |
| &gt; | 左のオペランドが右のオペランドより大きい場合にtrueを返します | .customers{.id &gt; 1} |
| &gt;= | 左のオペランドが右のオペランド以上の場合にtrueを返します | .customers{.id &gt;= 1} |
| &lt; | 左のオペランドが右のオペランドより小さい場合にtrueを返します | .customers{.id &lt; 1} |
| &lt;= | 左のオペランドが右のオペランド以下の場合にtrueを返します | .customers{.id &lt;= 1} |

比較ルール:

* 比較するオペランドが両方とも配列であり、最初の配列と2番目の配列にエレメントがある場合、比較はtrueになり、2つのエレメントの比較を実行した結果はtrueになります。
* 一方のオペランドが配列で、もう一方が配列でなく、配列にエレメントがある場合、比較はtrueになり、エレメントと別のオペランドの比較の実行の結果はtrueになります。
* プリミティブは通常のJavaScriptプリミティブとして比較されます。

オペランドが両方とも文字列の場合は、追加の比較演算子を使用できます。

文字列比較演算子文字列比較演算子

| 演算子 | 説明 | 例 |
| --- | --- | --- |
| == | 通常のと同じですが、大文字と小文字は区別されません | .customers{.Lastname == "Von Celaeno"} |
| ^== | 左オペランド値が右オペランド値で始まる場合にtrueを返します | .customers{.Lastname ^== "Celaeno"} |
| ^= | ^==と同じですが、大文字と小文字は区別されません | .customers{.Lastname ^= "celaeno"} |
| $== | 左オペランド値が右オペランド値で終わる場合にtrueを返します | .customers{.Lastname $== "Von"} |
| $= | と同じですが、大文字と小文字は区別されません | .customers{.Lastname $= "von"} |
| \*== | 左オペランドの値に右オペランドの値が含まれている場合にtrueを返します | .customers{.Lastname \\*== "Celaeno"} |
| \*= | \*==と同じですが、大文字と小文字は区別されません | .customers{.Lastname \\*= "celaeno"} |

論理演算子論理演算子

| 演算子 | 説明 | 例 |
| --- | --- | --- |
| && | 両方のオペランドがtrueの場合にtrueを返します | .customers{.Revenue &gt; 77000 && .customers.Lastname === "Von Celaeno"} |
| \|\| | いずれかのオペランドがtrueの場合にtrueを返します | .customers{.Firstname === "Quentin" \|\| .State === "AZ"} |
| ! | オペランドを無効にします | .customers{!.Firstname} |

論理演算子は、次のようにオペランドをブール値に変換します。

* オペランドが配列の場合(サブパスを適用した結果も配列になるため):
  * 配列の長さが0より大きければ、結果はtrueになります。
  * それ以外であれば、結果はfalseになります。
* javascript演算子に二重NOT (!!)を付けると、その他のケースで場合で使われます。

算術演算子算術演算子

| 演算子 | 説明 |
| --- | --- |
| + | 加算 |
| - | 減算 |
| \* | 乗算 |
| / | 除算 |
| % | 係数 |

演算子の優先順位演算子の優先順位

| 演算子 | 説明 |
| --- | --- |
| 1 (最上位) | ! -unary |
| 2 | \* / % |
| 3 | + -binary |
| 4 | &gt;= |
| 5 | == === != !== ^= ^== $== $= \*= \*== |
| 6 | && |
| 7 | \|\| |

括弧の使用により式をグルーピングし、優先順位を設定して、最初に評価する部分を明示的に示します。

例:

```
// find the last name of the customer who lives in South Roosevelt Drive
avpath.select(doc, ".customers{.Address.Street === \"South Roosevelt Drive\"}.Lastname", schema)
// ['Novo']

// find all States where the customers revenue is less than 78000
avpath.select(doc, ".customers{.Revenue < 78000}.States", schema)
// ['AZ', 'CT']
```

## 配列位置述語

位置述語を使用すると、コンテキスト位置を使って項目をフィルタリングできます。位置述語は、常に角括弧で囲みます。

以下の4種類の形式を使用できます。

* [index] — コンテキストのインデックス位置にある項目を返します(最初の項目はインデックス0)。たとえば、[3]はコンテキストの4番目の項目を返します。

* [index:]—コンテキストのインデックスがインデックス以上の項目を返します。たとえば、[2:]はコンテキストのインデックスが2以上の項目を返します。

* [:index] — コンテキストのインデックスがインデックスより小さい項目を返します。たとえば、[:5]はコンテキストの最初の5つの項目を返します。

* [indexFrom:indexTo] — コンテキストのインデックスがindexFrom以上でindexTo未満の項目を返します。たとえば、[2:5]はインデックス2、3、4という3つの項目を返します。

負の位置番号を使用することもできます:

* [-1] — コンテキストの最後の項目を返します。

* [-3:] — コンテキストの最後から3つの項目を返します。

例:

```
// find first customer state
avpath.select(doc, ".customers[0].States")
// ['AZ']

// find last customer state
avpath.select(doc, ".customers[-1].States")
// ['CT']

// find two customer states from second position
avpath.select(doc, ".customers[1:3].States")
// ['NC', 'CT']
```

## マップキー述語

キー述語を使えば、正規表現によってキーで項目をフィルタリングできます。正規表現の述語は常に()の中に組み込まれます。

* ("key" | ~"key regex") — コンテキストの項目を返します(正規表現と一致します)

## 複数の述語

複数の述語を使用できます。結果にはすべての述語に一致する項目のみが含まれます。

```
// find first customer name whose revenue less than 70000 and greater than 50000
avpath.select(doc, ".customers{.Revenue < 70000}{.Revenue > 50000}[0].Firstname")
// ['Quentin']
```