티스토리 뷰
사이퍼(Cypher)는 Neo4j에서 사용하는 선언형 그래프 질의어이다. Property Graph 모델에 기반을 두며, 노드와 엣지(사이퍼에서는 관계, relationship이라고 한다.)의 표준 그래프 요소들이 주요 concept가 되고, 이들이 레이블(label)과 프로퍼티(property)을 가질 수 있다.
노드들은 0개 이상의 레이블이 있을 수 있는 반면, 각 관계는 정확히 하나의 관계형(relationship type)이 있다. 노드와 관계 또한 0개 이상의 프로퍼티가 있으며 여기에서 프로퍼티는 사이퍼 자료형에서 문자열 키와 일부 값의 키-값 바인딩으로 되어 있다.
Cypher의 구조적인 형태를 다시 정리해보면
구성요소는 아래와 같다.
- 노드(Nodes)
- Id
- Label
- 노드에 대한 개념 혹은 유형을 표기할 때 사용(rdf의 Class와 유사한 개념)
- Properties map
- 여러 속성을 property로 지정할 수 있는데, 이 때 자료형은 map형태로 key-value를 이룬다.
- 관계(Relationships)
- Id
- Type
- (일종의 관계 이름이라고 생각하자)
- Properties map
- 시작과 끝 노드의 Id
- 경로(Paths)
- 노드와 관계의 시퀀스로 구성
다음으로는 표현방식에 대해서 알아보도록 한다.
먼저 노드는 기본적으로 괄호( ( ) )로 표현한다.
변수명을 지정할 수 있으며, Label로 지정이 할 수 있다. label을 지정할 때는 앞에 콜론 ( : )을 사용한다.
label은 써도 되고 안써도 되며, 변수명은 RETURN으로 받아야 하거나 조건을 주어야 할 필요가 있을 경우에 지정하여 사용한다.
() #기본 노드
(변수) # 변수명지정
(:Label) # label명 지정
(변수:Label) # 변수명과 label명 지정
(변수:Label1 :Label2) # 여러개의 label명 지정
관계를 표현할 때는 두개의 대쉬 ( - )를 사용한다.
(n1)--(n2)
방향을 나타낼 때는 < 혹은 > 를 사용한다.
(n1)-->(n2)
관계에서도 변수명, type명과 properties map을 지정할 수 있으며 이 때 2개의 대쉬 사이에 [ ]를 표기하여 사용한다.
(n1)-[:타입명]->(n2)
(n1)-[변수명:타입명]->(n2)
(n1)-[변수명:타입명 {속성키1:"속성값", 속성키2:"속성값"} ]->(n2)
타입명의 표기는 대문자와 언더스코어( _ )로 작성되며, 대소문자는 구별된다. 타입명에 대쉬 ( - )를 사용하면 안된다.
속성을 표현할 때는 { } 를 사용하여 표현한다.
중괄호 안에 속성키:속성값 형식으로 표현하여, 노드와 관계 모두에서 사용이 가능하다.
(n:Person{name:"John"})
(n:Person{name:"John"})-[:KNOWS{since:2010}]->(m:Person)
* 첫번째 예시에서 n은 변수명, Person은 노드의 label명, name은 property 키, "John"은 값을 의미한다.
따라서 property name이 John이고 label이 Person인 노드 n 을 의미한다.
두번째 예시는 노드 n과 label이 Person인 노드 m이 KNOWS라는 관계를 가지는 path를 의미한다. 이 때 KNOWS 관계는 property since가 2010이여야 한다.
Cypher가 가지고 있는 Clauses는 여러 종류가 있는데 목록은 아래와 같다.
MATCH
OPTIONAL MATCH
RETURN
WITH
UNWIND
WHERE
ORDER BY
SKIP
LIMIT
CREATE
DELETE
SET
REMOVE
FOREACH
MERGE
CALL {} (subquery)
CALL procedure
UNION
USE
LOAD CSV
이에 대한 자세한 사용은 실제 예시를 만들면서 살펴보도록 하겠다.
이러한Cypher는 이전 포스팅에서 접속한 Neo4j Browser에서 쿼리를 실행해 볼 수 있겠다.
Neo4j Browser에 접속하면 상단의 $ 표시에 Cypher 쿼리를 입력하여 실행할 수 있다.
참조:
https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8D%BC_%EC%A7%88%EC%9D%98%EC%96%B4
'Neo4j' 카테고리의 다른 글
Cypher - REMOVE & DELETE (0) | 2020.06.15 |
---|---|
Cypher - SET & CREATE (0) | 2020.06.15 |
Cypher - MATCH (1) (0) | 2020.06.15 |
Cypher - CREATE (0) | 2020.06.15 |
Neo4j 설치 및 구동 (0) | 2020.06.15 |
- Total
- Today
- Yesterday
- Neo4j
- 지식그래프
- LOD
- neosemantics
- property graph
- pyvis
- 스프링부트
- RDF 변환
- Ontology
- 사이퍼
- 타임리프
- TBC
- RDF
- 지식 그래프
- TopBraid Composer
- stardog
- networkx
- Linked Data
- 온톨로지
- sparql
- 트리플
- cypher
- 트리플 변환
- Knowledge Graph
- 장고
- TDB
- rdfox
- 그래프 데이터베이스
- Thymeleaf
- django
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |