Syntax
Pattern
Pattern은 그래프 표현식입니다. Pattern은 하나 이상의 정점 또는 간선의 조합으로 표현되므로, 정점과 간선으로 패턴을 만드는 방법은 매우 중요합니다.
Vertex
정점은 소괄호로 정의합니다. 정점을 vlabel, 속성 또는 변수와 함께 표현하면 더 구체적이고 명확하게 지정할 수 있습니다.
( )
정점은 ( ) 로 표현합니다. 위 예제처럼 소괄호 안에 vlabel이나 속성이 없는 패턴은 모든 정점을 의미합니다.
(:person)
정점에 vlabel을 표현하려면 (:vlabelName) 형식을 사용합니다. 콜론 뒤에 오는 vlabel의 이름은 소괄호 안에 작성해야 합니다. 위 예제는 person이라는 vlabel을 가진 정점을 의미합니다.
(v)
(var)
(var_1)
(v:person)
(variableName) 은 정점에 변수를 할당하는 방법입니다. 변수는 영숫자(a~z, 0~9)와 밑줄(under-bar)의 조합으로 이름을 지정할 수 있습니다. 단, 변수 이름은 숫자로 시작할 수 없습니다. 변수와 vlabel을 동시에 표현하려면 (variableName:vlabelName) 과 같이 작성할 수 있습니다.
({name: 'Jack'})
(v:person {name: 'Jack'})
(v:person {name: 'Jack', age: 24})
정점에 속성을 넣으면 더 구체적으로 지정할 수 있습니다. 속성을 표현하려면 ({perpertyName:propertyValue}) 와 같이 작성합니다. 값의 타입이 문자열인 경우 ' ' 로 감싸야 합니다. 여러 속성을 사용할 경우 쉼표(,) 로 구분할 수 있습니다.
Edge
간선은 두 개의 하이픈으로 사용하며, elabel, 속성, 변수와 함께 표현할 수 있습니다.
-[]-
-[]->
<-[]-
간선은 -[]- 로 표현합니다. 이 표현식의 끝부분에 꺾쇠괄호를 붙이면 패턴의 방향을 정의할 수 있습니다. 위 예제 -[]- 에는 제약 조건이 없으므로 모든 간선을 의미합니다. 위 예제에 꺾쇠괄호를 추가하면(예: -[]-> 또는 <-[]-) 방향이 적용된 결과가 반환됩니다.
-[:knows]->
간선에 다른 요소를 표현하려면, 지정할 요소를 대괄호 [ ] 안에 넣어야 합니다(즉, 간선의 elabel을 표현하려면 -[:elabelName]->). 위 예제는 knows라는 elabel을 가진 간선을 의미합니다.
-[e]->
-[e:likes]->
간선에 변수를 추가하려면 -[variableName]-> 표현식을 사용할 수 있습니다. 변수와 elabel을 함께 사용한 간선의 표현식은 -[variableName:elbelName]-> 와 같습니다.
-[{why: 'She is lovely'}]->
-[:likes {why: 'She is lovely'}]->
-[e:likes {why: 'She is lovely'}]->
간선의 속성을 표현하려면 -[{propertyName:propertyValue}]-> 를 사용할 수 있습니다. 값의 타입이 문자열인 경우 값을 ‘ ‘ 로 감싸야 합니다. 쉼표 로 여러 개를 지정할 수 있습니다.
Vertices and Edges
Pattern은 정점과 간선을 개별적으로 또는 조합하여 표현할 수 있습니다.
()-[]->()
(jack:person {name: 'Jack'})-[k:knows]->(emily:person {name: 'Emily'})
p = (:person)-[:knows]->(:person)
정점과 간선을 조합한 기본 패턴은 ( )-[]->( ) 입니다. 정점과 간선에 속성과 레이블을 정의하는 것이 좋습니다. 변수는 정점과 간선에 개별적으로 정의할 수 있으며, 패턴에도 정의할 수 있습니다. 패턴에 변수를 정의하려면 등호(=) 를 사용합니다. 위 예제에서 p 는 뒤에 오는 패턴의 변수입니다.
Path
정점과 간선의 총 개수는 계속해서 늘어날 수 있습니다. 패턴의 단위를 경로라고 합니다.
(a)-[]->( )-[]->(c)
(a)-[*2]->(c)
(a)-[]->( )-[]->( )-[]->(d)
(a)-[*3]->(d)
(a)-[]->( )-[]->( )-[]->( )-[]->(e)
(a)-[*4]->(e)
패턴에 경로가 너무 많은 경우, 가독성과 작성 편의성을 높이기 위해 축약하는 것이 좋습니다. 간선이 n-1개의 경로를 거쳐야 한다면, 대괄호 안의 별표(asterisk) 뒤에 n-1을 넣으면 됩니다(즉, 위 예제를 참고하십시오).
Flexible Length
경우에 따라 쿼리에서 간선의 개수가 동적으로 지정되어야 할 때가 있습니다.
(a)-[*2..]->(b)
(a)-[*..7]->(b)
(a)-[*3..5]->(b)
(a)-[*]->(b)
경로의 동적 길이를 위해 위 예제와 같이 마침표 두 개(..) 를 사용합니다. 위의 각 예제는 각각 간선이 2개 이상인 경로, 간선이 7개 이하인 경로, 간선이 3개 이상 5개 이하인 경로, 그리고 길이에 제한이 없는 경로를 의미합니다.