<random>
、<condition>
、<conditional_random>
の選択候補を定義する為に使用します。
<condition>
、<conditional_random>
の子要素として使用する場合は、比較条件の値を各種属性で定義して使用します。
属性
<template>
で利用可能な属性の他に、さらに以下の属性を使用できます。
<template>
の属性指定と重複した場合は、<li>
の属性値が優先されます。名称 | 型 | 必須 | デフォルト | 説明 |
---|---|---|---|---|
name 独自拡張 |
string |
– | – | <condition> 、<conditional_random> のname 属性とは別のPredicate名を指定します。 |
value |
string |
– | – | <condition> 、<conditional_random> で条件分岐のもとにしているPredicateと比較する値を指定します。 |
predicate 独自拡張 |
string |
– | – | <condition> 、<conditional_random> で条件分岐のもとにしているPredicateと比較する値のPredicate名を指定します。 |
regex 独自拡張 |
string |
– | – | <condition> 、<conditional_random> で条件分岐のもとにしているPredicateを評価する正規表現を指定します。 |
name
<condition>
、<conditional_random>
のname
属性にとは別のPredicate名を指定します。
この属性が指定されている場合、<condition>
、 <conditional_random>
のname
属性は無視されます。
また、この属性の代わりに、子要素の <name>
が利用できます。
value
<condition>
、<conditional_random>
で条件分岐のもとにしているPredicateと比較する値を指定します。
比較には、「等号」「不等号(より大)」「不等号(より小)」「範囲」のいずれかが利用できます。
また、この属性の代わりに、子要素の <value>
が利用できます。
比較した結果、条件を満たした<li>
の取り扱いについては、<condition>
、<conditional_random>
をご覧ください。
等号
Predicate値とvalue
属性の値が完全一致するか評価します。
OR条件(”|”)を使用すると、複数値をまとめて評価できます。
1 2 3 4 5 6 7 8 9 |
<template> 眠いですよね。 <condition name="time_period"> <li value="朝">もう一眠りしましょう。</li> <li value="夜">早めに寝てもいいのでは。</li> <li value="深夜|早朝">体にひびきますよ。</li> <li>がんばろう</li> </condition> </template> |
不等号(より大)
Predicate値がvalue
属性の値より大きいか評価します。
この条件は数値の場合のみ指定できます。
1 2 3 4 5 |
<template> <condition name="total_access"> <li value="GREATER_THAN 9">9より大きい</li> </condition> </template> |
不等号(より小)
Predicate値がvalue
属性の値より小さいか評価します。
この条件は数値の場合のみ指定できます。
1 2 3 4 5 |
<template> <condition name="total_access"> <li value="LESS_THAN 5">5より小さい</li> </condition> </template> |
範囲
Predicate値がvalue
属性の値で指定した範囲内に収まっているかを評価します。
この条件は数値の場合のみ指定できます。
1 2 3 4 5 |
<template> <condition name="total_access"> <li value="BETWEEN 20.1 AND 29.0">20.1以上、29.0以下</li> </condition> </template> |
predicate
<condition>
、<conditional_random>
で条件分岐のもとにしているPredicateと比較する値のPredicate名を指定します。
Predicate同士の値が一致するかを評価します。
条件を満たした<li>
の取り扱いについては、<condition>
、<conditional_random>
をご覧ください。
①変数xxxx
に対して、変数yyyy
が一致するとき、TRUEとします。
②変数xxxx
に対して、文字列zzzz
が一致し、更に変数yyyy
が一致するとき、TRUEとします。
③変数aaaa
に対して、変数yyyy
が一致するとき、TRUEとします。
④変数aaaa
に対して、文字列zzzz
が一致し、更に変数yyyy
が一致するとき、TRUEとします。
⑤変数xxxx
に対して、変数yyyy
の値が大きいとき、TRUEとします。
⑥変数xxxx
に対して、変数yyyy
の値が小さいとき、TRUEとします。
⑦変数xxxx
の値が、変数wwww
の値と変数yyyy
の間のとき、TRUEとします。
1 2 3 4 5 6 7 8 9 10 11 |
<template> <condition name="xxxx"> ①<li predicate="yyyy">hoge</li> ②<li value="zzzz" predicate="yyyy">piyo</li> ③<li name="aaaa" predicate="yyyy">foo</li> ④<li name="aaaa" value="zzzz" predicate="yyyy">bar</li> ⑤<li predicate="GREATER_THAN yyyy">変数"yyyy"より大きい</li> ⑥<li predicate="LESS_THAN yyyy">変数"yyyy"より小さい</li> ⑦<li predicate="BETWEEN wwww AND yyyy">変数"wwww"以上、変数"yyyy"以下</li> </condition> </template> |
regex
<condition>
、<conditional_random>
で条件分岐のもとにしているPredicateを評価する正規表現を指定します。
Predicateの値が正規表現に一致するか評価します。
抽出した文字列は子要素の<matcher>
で出力することができます。
条件を満たした<li>
の取り扱いについては、<condition>
、<conditional_random>
をご覧ください。
①変数aaa
の値が、正規表現zo*
と一致する( z
とzoo
などの)場合、TRUEとします。
②変数aaa
の値が、正規表現[0-9]
と一致する(1
などの)場合、TRUEとします。
③変数aaa
の値が、文字列xxx
と一致、かつ正規表現zo*
と一致する場合、TRUEとします。
④変数aaa
の値が、文字列xxx
と一致、かつ変数ccc
の値と一致、かつ正規表現zo*
と一致する場合、TRUEとします。
⑤変数bbb
の値が、正規表現zo*
と一致する場合、TRUEとします。
⑥変数bbb
の値が、変数ccc
の値と一致、かつ正規表現zo*
と一致する場合、TRUEとします。
⑦変数aaa
の値が、変数ccc
の値と一致、かつ正規表現zo*
と一致する場合、TRUEとします。
⑧変数bbb
の値が、文字列xxx
と一致、かつ変数ccc
の値と一致、かつ正規表現zo*
と一致する場合、TRUEとします。
⑨¥dt
とy
に部分マッチした部分を取り出し可能です。
1 2 3 4 5 6 7 8 9 10 11 |
<condition name="aaa"> ①<li regex="zo*"></li> ②<li regex="[0-9]"></li> ③<li value="xxx" regex="zo*"></li> ④<li value="xxx" predicate="ccc" regex="zo*"></li> ⑤<li name="bbb" regex="zo*"></li> ⑥<li name="bbb" predicate="ccc" regex="zo*"></li> ⑦<li predicate="ccc" regex="zo*"></li> ⑧<li name="bbb" value="xxx" predicate="ccc" regex="zo*"></li> ⑨<li name="aaa" value="2009year" regex="(d+)(y)"></li> </condition> |
比較条件組み合わせ
<condition>
、<conditional_random>
と<li>
の属性により、条件を組み合わせて評価することができます。下表は
<condition>
、<conditional_random>
、または<li>
のname
属性の内容と、<li>
のvalue
、predicate
、regex
属性の内容を評価する為の組み合わせ表です。
例えば、<li name="hobby" value="foo" predicate="bar"></li>
の場合、変数「hobby
」と変数「bar
」が一致して、且つ、値が「foo
」の場合に条件を満たします。
比較条件 組合数 |
コード例<condition name="hoge"> の場合 |
<condition> 属性 |
<li> 属性 |
|||
---|---|---|---|---|---|---|
name |
name |
value |
predicate |
regex |
||
二項比較 | <li value="foo"></li> |
〇 | 〇 | |||
<li predicate="bar"></li> |
〇 | 〇 | ||||
<li regex="zo*"></li> |
〇 | 〇 | ||||
三項比較 | <li value="foo" predicate="bar"></li> |
〇 | 〇 | 〇 | ||
<li value="foo" regex="zo*"></li> |
〇 | 〇 | 〇 | |||
<li predicate="bar" regex="zo*"></li> |
〇 | 〇 | 〇 | |||
四項比較 | <li value="foo" predicate="bar" regex="zo*"></li> |
〇 | 〇 | 〇 | 〇 | |
二項比較 | <li name="hobby" value="foo"></li> |
〇 | 〇 | |||
<li name="hobby" predicate="bar"></li> |
〇 | 〇 | ||||
<li name="hobby" regex="zo*"></li> |
〇 | 〇 | ||||
三項比較 | <li name="hobby" value="foo" predicate="bar"></li> |
〇 | 〇 | 〇 | ||
<li name="hobby" value="foo" regex="zo*"></li> |
〇 | 〇 | 〇 | |||
<li name="hobby" predicate="bar" regex="zo*"></li> |
〇 | 〇 | 〇 | |||
四項比較 | <li name="hobby" value="foo" predicate="bar" regex="zo*"></li> |
〇 | 〇 | 〇 | 〇 | |
比較対象なし | <li></li> |
子要素
<template>
で利用可能な子要素の他に、さらに以下の要素を使用できます。
名称 | 必須 | 説明 |
---|---|---|
loop |
– | <condition> 、<conditional_random> の条件分岐を再評価します。 |
matcher |
– | regex 属性で定義した正規表現にマッチした部分文字列を抽出します。 |
name |
– | <condition> 、<conditional_random> のname 属性に代わって比較対象をPredicate名で記述します。 |
value |
– | 比較条件の値を文字列で記述します。 |
loop
<condition>
、<conditional_random>
の条件分岐を再評価します。
詳細はこちらをご覧ください。
matcher
regex
属性で定義した正規表現にマッチした部分文字列を抽出します。
詳細はこちらをご覧ください。
name
<condition>
、<conditional_random>
のname
属性に代わって比較対象をPredicate名で記述します。
Predicate名が動的に変わる場合など、name
属性では対処できない場合に使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<category> <pattern>NAME</pattern> <template> <think><set name="test">朝</set></think> <condition> <!-- predicate名「test」=「朝」の場合、「おはよう」が出力されます。 --> <li value="朝"> <name>test</name> おはよう </li> <li>こんにちは</li> </condition> </template> </category> |
value
<condition>
、<conditional_random>
で条件分岐のもとにしているPredicateと比較する値を指定します。
比較条件の値が動的に変わる場合など、value
属性では対処できない場合に使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<category> <pattern>VALUE</pattern> <template> <think><set name="test">朝</set></think> <!-- predicate名「test」=「朝」の場合、「おはよう」が出力されます。 --> <condition name="test"> <li> <value>朝</value> おはよう </li> <li>こんにちは</li> </condition> </template> </category> |