26.10.1 構文
トリビアルな式
常にtrue
に評価されます。
true
常にfalse
に評価されます。
false
定数
有効な定数は、整数と長整数、単精度および倍精度の浮動小数点数に加えて、文字列リテラル、true
、false
です。長整数型の定数の末尾には、l
またはL
を付ける必要があります。浮動小数点数は、デフォルトでは倍精度数値として扱われます。特定の精度を強制するために、単精度にはf
またはF
を使用し、倍精度浮動小数点数にはd
またはD
を使用できます。文字列リテラルは、一重引用符または二重引用符で囲まれたUTF-8の文字列です。
25
4294967296L
0.62f
0.33d
"Double quoted string"
'Single quoted string'
頂点およびエッジ識別子
フィルタ・タイプに応じて、異なる識別子が有効です。
頂点フィルタ
頂点フィルタ式には、現在のコンテキストの頂点を指すキーワードが1つのみ含まれます。
vertex
は、フィルタ式によって現在評価されている頂点を示します。
vertex
エッジ・フィルタ
エッジ・フィルタ式には、現在のコンテキストのエッジまたはその頂点を指す複数のキーワードが含まれます。
edge
は、フィルタ式によって現在評価されているエッジを示します。
edge
dst
は、現在のエッジの入力頂点を示します。dst
はサブグラフ・コンテキストでのみ有効です。
dst
src
は、現在のエッジの出力頂点を示します。src
はサブグラフ・コンテキストでのみ有効です。
src
プロパティ
フィルタ式は、頂点およびエッジ・プロパティの値にアクセスできます。
<id>.<property>
説明:
<id>:
任意の頂点またはエッジ識別子(つまり、src
、dst
、vertex
、edge
)です。<property>:
頂点またはエッジ・プロパティの名前です。ノート:
識別子がedge
である場合、これはエッジ・プロパティの名前である必要があります。それ以外の場合は、頂点プロパティである必要があります。
プロパティ名がフィルタ式構文の予約名であるか、スペースを含んでいる場合は、一重引用符または二重引用符で囲む必要があります。
次のコードは、出力頂点のcostプロパティにアクセスします。
src.cost
Temporalプロパティでは、特殊なコンストラクタを使用した値の比較(定数およびプロパティ値)がサポートされています。デフォルトのTemporal形式を次の表に示します。
表26-5 デフォルトのTemporal形式
プロパティ・タイプ | コンストラクタ |
---|---|
DATE |
date ('yyyy-MM-dd HH:mm:ss') |
LOCAL_DATE |
date 'yyyy-MM-dd' |
TIME |
time 'HH:mm:ss' |
TIME_WITH_TIMEZONE |
time 'HH:mm:ss+/-XXX' |
TIMESTAMP |
timestamp 'yyyy-MM-dd HH:mm:ss' |
TIMESTAMP_WITH_TIMEZONE |
timestamp 'yyyy-MM-dd HH:mm:ss+/-XXX' |
次の式は、エッジのプロパティtimestamp_withTZ
にアクセスし、それが3/27/2007 06:00+01:00
と等しいかどうかをチェックします。
edge.timestamp_withTZ = timestamp'2007-03-2706:00:00+01:00'
ノート:
タイプdateのプロパティは等価性についてのみチェックできます。dateタイプの使用はバージョン2.5から非推奨となったため、かわりに、すべての操作をサポートするlocal dateまたはtimestampタイプを使用してください。メソッド
フィルタ式では次の関数がサポートされています。
Degree関数
outDegree()
は、頂点識別子の出力エッジの数を返します。degree()
は、outDegree
のシノニムです。int <id>.degree() int <id>.outDegree()
次の例は、出力頂点の
out-degree
が3より大きいかどうかを確認します。src.degree() > 3
inDegree()
は、頂点識別子の入力エッジの数を返します。int <id>.inDegree()
Label関数
hasLabel()
は、頂点にラベルがあるかどうかをチェックします。boolean <id>.hasLabel('<label>')
次の例は、頂点にラベル
city
があるかどうかを確認します。vertex.hasLabel('city')
label()
は、エッジのラベルを返します。string <id>.label()
次の式は、エッジのラベルが
clicked_by
であるかどうかをチェックします。edge.label() = 'clicked_by'
関係式
値(プロパティ値や定数など)を比較するために、フィルタ式では、次に示す比較演算子が提供されます。ノート: ==
と=
は両方ともシノニムです。
== = != < <= > >=
次の例は、出力頂点のcostプロパティが1.23以下であるかどうかをチェックします。
src.cost <= 1.23
頂点IDの比較
特定の頂点IDを持つ頂点についてフィルタすることもできます。
<id> = <vertex_id>
次の例は、エッジの出力頂点が頂点ID San Francisco
を持つかどうかを確認します
src = "San Francisco"
正規表現
正規表現を使用して、文字列を照合できます。
<string expression> =~ '<regularexpression>'
次の例は、エッジ・ラベルが小文字で始まり、数字で終わるかどうかをチェックします。
edge.label() =~ '^[a-z].*[0-9]$'
ノート:
右側のパターンは、Java REGEXの構文に準拠しています。型変換
次の構文を使用すると、<expression>
の型を<type>
に変換できます。
(<type>) <expression>
次の例は、出力頂点のcost
プロパティの値を整数値に変換します。
(int) src.cost
ブール式
&&
(and)、||
(or)および!
(not)を使用します。
ノート:
ブール・オペランドのみを合成できます。(! true) || false edge.cost < INF && dst.visited = false src.degree() < 10 || !(dst.visited)
算術式
+
、-
、*
、/
、%
です。
ノート:
これらの演算子は数値オペランドでのみ機能します。1 + 5 -vertex.degree() edge.cost * 2 > 5 src.value * 2.5 = (dst.inDegree() + 5) / dst.outDegree()
演算子の優先順位
次のリストに、最も高い優先順位から最も低い優先順位へと順番に演算子の優先順位を示します。上位の演算子は、下位の演算子よりも先に評価されます。
+
(単項プラス)、-
(単項マイナス)*
,/
,%
+
,-
=
,!=
,<
,>
,<=
,>=
,=~
NOT
AND
OR
糖衣構文
both
およびany
は、現在のエッジの出力および入力頂点を示します。これらを使用して、2つの頂点のうちの両方または少なくともどちらか一方についてtrue
である必要がある条件を表すことができます。これらのキーワードは、エッジ・フィルタ式でのみ有効です。頂点フィルタで使用すると、ランタイム・タイプ・チェック例外が発生します。
both any
次の例の中のフィルタ式は同等です。
both.property = 1 src.property = 1 && dst.property = 1
any.degree() > 1 src.degree() > 1 || dst.degree() > 1
親トピック: フィルタ式