티스토리 뷰
RDF 데이터가 Neo4j에 저장되는 방식
즉, Triple 형태가 PropertyGraph 형태로 저장되는 방식에 대해서 이야기 해보고자 한다.
Subject에 대한 것과 Property에 대한 것으로 크게 구분되며, Property는 ObjectProperty인 경우와 DatatypeProperty인 경우로 나뉘어 진다.
먼저 Subject인 경우를 살펴보자
트리플의 Subject는 PropertyGraph에서 Node로 매핑이 된다.
그 노드의 label은 :Resource로 생성이 되어지고, 이전 포스팅에서 이야기한 GraphConfig 설정에 따라 달라지겠지만
subject의 rdf:type으로 연결된 클래스의 uri가 Node의 label로 매핑될 수도 있다.
다시 말해 Subject에서 매핑되어 생성된 노드의 label은 Resource와 Subject의 rdf:type 클래스 uri가 될 수 있다는 말이다.
그리고 Subject의 uri는 Node의 property로 생성이 된다. property key는 uri, value는 uri 실제값이 된다.
아래의 예시를 통해 매핑되는 값을 살펴보자.
<RDF data (ttl 형식)>
:st_1 rdf:type :Student ; rdfs:label "홍길동"^^xsd:string ; :birthYear 2000 ; :hobby "축구"^^xsd:string , "농구"^^xsd:string ; :liveIn :ct_2 ; :major "컴퓨터공학과"@ko ; :sex "남자"^^xsd:string ; :take :cs_1 , :cs_3 . |
<Neo4j 매핑>
{ "identity": 448, "labels": [ "Resource", “ns0__Student" ], "properties": { "uri": "http://joyhong.tistory.com/example/st_1" } } |
* ns0__ 는 prefix 처리 설정에 따라 변경됨. GraphConfig의 handleVocabUris 부분 참조
이 때 반드시 제약사항으로 label이 Resource 노드의 property uri 는 유일한 값으로 식별하도록 하여 uri 가 동일할 경우 새로운 노드가 생성되지 않도록 한다.
다음은 Property에 대한 매핑으로 ObjectProperty, DatatypeProperty 각각에 따라 다른 매핑이 적용된다.
DatatypeProperty인 경우를 보면 Subject를 통해 매핑된 노드의 property로 DatatypeProperty가 매핑된다.
literal인 object 값은 노드의 property의 value로 생성된다.
<RDF data (ttl 형식)>
:st_1 rdf:type :Student ; rdfs:label "홍길동"^^xsd:string ; :birthYear 2000 ; :hobby "축구"^^xsd:string , "농구"^^xsd:string ; :liveIn :ct_2 ; :major "컴퓨터공학과"@ko ; :sex "남자"^^xsd:string ; :take :cs_1 , :cs_3 . |
<Neo4j 매핑>
{ "identity": 448, "labels": [ "Resource", "ns0__Student" ], "properties": { "ns0__sex": "남자", "rdfs__label": "홍길동", "ns0__hobby": [ "축구", "농구" ], "ns0__major": "컴퓨터공학과", "ns0__birthYear": 2000, "uri": "http://joyhong.tistory.com/example/st_1" } } |
ObjectProperty 인 경우는 Property를 relationship으로 매핑하고 property와 연결되는 object는 노드로 생성한다.
<RDF data (ttl 형식)>
:st_1 rdf:type :Student ; rdfs:label "홍길동"^^xsd:string ; :birthYear 2000 ; :hobby "축구"^^xsd:string , "농구"^^xsd:string ; :liveIn :ct_2 ; :major "컴퓨터공학과"@ko ; :sex "남자"^^xsd:string ; :take :cs_1 , :cs_3 . |
<Neo4j 매핑>
liveIn과 take가 관계(Relationship)으로 생성되고 liveIn과 take의 Object가 노드로 생성된 것을 볼 수 있다.
여기까지 RDF 데이터를 Neo4j에 저정할 때 매핑되는 방식에 대해 포스팅을 하였고 다음으로는 실 데이터를 import 하는 것과 GraphConfig 설정에 따른 결과가 어떻게 변경되는지에 대해 살펴보도록 하겠다.
참조 :
https://neo4j.com/docs/labs/nsmntx/current/
'Neo4j' 카테고리의 다른 글
FUll-text search (0) | 2020.06.17 |
---|---|
Import RDF (0) | 2020.06.17 |
그래프 구성 설정 (0) | 2020.06.17 |
Neosemantics (0) | 2020.06.17 |
IMPORT CSV (2) | 2020.06.17 |
- Total
- Today
- Yesterday
- networkx
- Knowledge Graph
- TBC
- Neo4j
- 트리플
- 지식그래프
- RDF 변환
- stardog
- 그래프 데이터베이스
- 지식 그래프
- 사이퍼
- property graph
- TDB
- neosemantics
- Linked Data
- sparql
- TopBraid Composer
- RDF
- 타임리프
- Thymeleaf
- 스프링부트
- LOD
- Ontology
- 장고
- rdfox
- pyvis
- 트리플 변환
- 온톨로지
- cypher
- 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 |