セレクター(APL for Audio)
Selector
コンポーネントは、利用可能なクリップの配列の中から選択した1つのオーディオクリップをレンダリングします。Selector
は、各オーディオクリップを定義する子コンポーネントの配列とあわせて指定します。それにより、Selector
は、when
プロパティがtrue
に評価された最初の子コンポーネントのオーディオをレンダリングします。
プロパティ
Selector
コンポーネントには基本コンポーネントプロパティのほかに次のプロパティがあります。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
item/items |
コンポーネントの配列 | ✕ | 子コンポーネントの配列です。 |
data |
配列 | [ ] | コンポーネントに対してマッピングするデータの配列です。 |
strategy |
文字列 | normal |
子を選択するために使用する戦略です。有効な値は、normal 、randomItem 、randomData 、randomItemRandomData です。 |
item/items
レンダリングする子コンポーネントです。コンポーネントを複数指定した場合は、when
プロパティで選択された最初のSelector
コンポーネントが使用されます。
data
反復処理され評価されるデータの配列です。
-
data
配列が空の場合、Select
はitems
配列でwhen
がtrue
と評価された最初のコンポーネントをレンダリングします。コンポーネントは、1つの子のみのインフレートを使用します。 -
データ配列に複数の項目がある場合、
Selector
コンポーネントはdata
配列を反復処理し、items
配列の各コンポーネントで、データ配列の各項目のwhen
プロパティがtrue
かどうかをチェックします。データバインディングコンテキストは、data
プロパティ、index
プロパティ、length
プロパティを使って拡張されます。Selector
コンポーネントは、1つのコンポーネントを選択してレンダリングすると終了します。データ配列の反復処理を続行することはありません。
反復処理中に、データバインディングコンテキストは次のプロパティで拡張されます。
名前 | 説明 |
---|---|
data |
データ配列のプロパティから割り当てられたデータです。 |
index |
現在のデータ項目のゼロから始まるインデックスです。 |
length |
データ配列内のデータ項目の総数です。 |
これらのプロパティは、data
配列プロパティに1つ以上の項目が含まれている場合に設定されます。
strategy
レンダリングする項目を決定する選択戦略です。指定された戦略によって、Selector
コンポーネントがレンダリングする項目をどう選択するかが決まります。
strategy
の値により、次の動作がトリガーされます。
normal
–when
句がtrue
に評価された最初の項目をレンダリングします。data
配列が空の場合、Selector
コンポーネントは、items
配列の項目のうち、when
句がtrue
の最初のコンポーネントを選択してレンダリングします。data
配列が空でない場合、Selector
コンポーネントは、components
配列の各コンポーネントを順番にチェックし、data
配列のwhen
句がtrue
の項目を探します。データバインディングコンテキストは、data
プロパティ、index
プロパティ、length
プロパティをバインドすることで拡張されます。Selector
コンポーネントは、1つのコンポーネントをレンダリングすると終了し、データ配列の反復処理を停止します。
randomItem
–when
句がtrue
に評価されたランダムな項目をレンダリングします。data
配列が空の場合、Selector
コンポーネントはすべての子コンポーネントのwhen
句を評価し、when
句がtrue
の項目を1つ選択してレンダリングします。data
配列が空でない場合、Selector
コンポーネントはデータ配列の項目を順に評価し、項目ごとに1回ずつランダム選択操作を行います。データバインディングコンテキストは、data
プロパティ、index
プロパティ、length
プロパティをバインドすることにで拡張されます。Selector
コンポーネントは、1つのコンポーネントをレンダリングすると終了し、データ配列の反復処理を停止します。
randomData
–when
句がtrue
に評価された最初の項目、data
配列のランダムインデックスから選択された項目のいずれかをレンダリングします。data
配列が空の場合、Selector
コンポーネントは、items
配列の項目のうち、when
句がtrue
の最初のコンポーネントを選択してレンダリングします。normal
戦略と同様です。data
配列が空でない場合、Selector
コンポーネントはdata
配列のランダムインデックスでnormal
戦略を実行します。コンポーネントがレンダリングされない場合、Selector
はdata
配列の別のランダムインデックスでnormal
戦略を実行します。このプロセスは、1つのコンポーネントがレンダリングされるか、data
配列のすべての項目を評価し終わるまで繰り返されます。
randomItemRandomData
– 空のdata
配列の場合はrandomItem
戦略を使い、空でないdata
配列の場合はrandomData
戦略を使います。data
配列が空の場合、Selector
コンポーネントはすべての子コンポーネントのwhen
句を評価し、when
句がtrue
の項目を1つ選択してレンダリングします。randomItem
戦略と同様です。data
配列が空でない場合、Selector
コンポーネントはdata
配列のランダムインデックスでnormal
戦略を実行します。コンポーネントがレンダリングされない場合、Selector
はdata
配列の別のランダムインデックスでnormal
戦略を実行します。このプロセスは、1つのコンポーネントがレンダリングされるか、data
配列のすべての項目を評価し終わるまで繰り返されます。randomData
戦略と同様です。
例
基本のSelector
以下は、ドキュメント内の基本的なSelector
コンポーネントをデータソースにバインドする例です。${payload.myData.name}
に空の文字列が含まれる場合、Selector
は最初のSpeech
コンポーネントをレンダリングします。それ以外の場合、Selector
は、2つ目のSpeech
コンポーネントをレンダリングします。このコンポーネントにもname
プロパティが含まれます。
{
"type": "Selector",
"items": [
{
"type": "Speech",
"when": "${payload.myData.name == ''}",
"content": "こんにちは。 まだお名前を聞いていませんでした。"
},
{
"type": "Speech",
"content": "こんにちは、${payload.myData.name}さん。"
}
]
}
たとえば、以下のデータソースの場合、Selector
は「こんにちは、太郎さん。」というオーディオクリップを作成します。
{
"myData": {
"name": "太郎"
}
}
以下のもう1つのデータソースは、「こんにちは。 まだお名前を聞いていませんでした。」というオーディオクリップを作成します。
{
"myData": {
"name": ""
}
}
ロケールセレクター
以下は、ユーザーのロケールを使って「hello」を英語、スペイン語のどちらで言うかを判断するSelector
の例です。
{
"type": "Selector",
"items": [
{
"type": "Speech",
"when": "${environment.alexaLocale == 'ja-JP'}",
"contentType": "PlainText",
"content": "こんにちは"
},
{
"type": "Speech",
"when": "${environment.alexaLocale == 'es-ES'}",
"contentType": "SSML",
"content": "<speak><voice name='Conchita'>Hola!</voice></speak>"
}
]
}
ユーザーのデバイスが英語(米国)ロケールを使用している場合、environment.alexaLocale
の値はen-US
を返します。Selector
は、「Hello!」の音声を生成します。 ユーザーのデバイスがスペイン語(スペイン)ロケールを使用している場合、environment.alexaLocale
はes-ES
を返し、Selector
は「Hola!」の音声を生成します。 この例の2つ目のSpeech
コンポーネントでは、SSMLを使って、「Conchita」の声を使った音声をレンダリングしています。
最終更新日: 2021 年 10 月 11 日