사용자 도구

사이트 도구


kb:yamltutorial

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

kb:yamltutorial [2014/11/07 16:06] (현재)
줄 1: 줄 1:
 +====== YAML Tutorial ======
 +YAML 문법/​구조에 대한 간단한 설명
 +
 +
 +====== YAML 구조 ======
 +기본적으로 [[XML]]과 마찬가지로 트리 구조다.
 +
 +===== - 기본 구조 =====
 +부모 자식의 구분은 들여쓰기를 통해 이루어진다.
 +
 +<code yaml>
 +parent:
 +    child-1: first child
 +    child-2: ​
 +        grandchild-1:​ first grand child
 +        grandchild-2:​ second grand child
 +</​code>​
 +
 +같은 부모를 가지는 자식 노드들은 들여쓰기가 정확히 일치해야 한다. 틀리면 에러다.
 +
 +**에러**
 +<code yaml>
 +child-1:
 +    grandchild-1:​ first grand child
 +    grandchild-2:​ second grand child
 + ​child-2:​ <-- error
 +    grandchild-1:​ first grand child
 +    grandchild-2:​ second grand child
 +</​code>​
 +
 +**정상**
 +<code yaml>
 +child-1: first child
 +    grandchild-1:​ first grand child
 +    grandchild-2:​ second grand child
 +child-2: ​
 +        grandchild-1:​ first grand child   <​-- this is ok
 +        grandchild-2:​ second grand child
 +</​code>​
 +
 +===== - 노드 =====
 +하나의 노드는 기본적으로 key:​value의 페어로 이루어진다. value에 해당하는 항목에는 3가지가 있다.
 +
 +  - C 쪽의 POD 타입 비슷한 스칼라(scalar) : 문자열, 정수, 실수, 날짜 등등 여러 가지 타입이 들어갈 수 있다. \\ <code yaml>
 +key: value
 +</​code>​
 +  - 시퀀스로 이루어진 자식 노드들. C 쪽의 배열(array)을 생각하면 된다. 정수형의 키를 가지는 노드라고 생각하면 쉽다. \\ <code yaml>
 +key: 
 +  - child: 1
 +    name: tom
 +  - child: 2
 +    name: john
 +</​code>​
 +  - 매핑으로 이루어진 자식 노드들. 각 노드 간의 구분은 문자열로 이루어지며,​ 순서를 보장하지 않는다. 키 문자열을 이용해 정렬해 버리기 때문이다. \\ <code yaml>
 +key: 
 +    child-1: tom
 +    child-2: john
 +</​code>​
 +
 +자식 노드를 가지는 노드는 스칼라 값을 가질 수 없다. 앵커 및 알리아스 같은 경우에는 예외가 된다고도 볼 수 있는데, 이것은 따로 설명을 한다.
 +
 +===== - 주석 =====
 +주석은 '#'​ 문자로 시작하는 라인으로만 달 수 있다. 스칼라 값 옆에다 달 수는 없다. 스칼라 값 옆에다 다는 경우 그냥 문자열로 취급한다.
 +
 +<code yaml>
 +# this is valid comment
 +key: 
 +  - child: 1   # this is invalid comment
 +    name: tom
 +  - child: 2
 +    name: john
 +</​code>​
 +
 +===== - 앵커/​알리아스 =====
 +반복되는 값은 앵커 및 알리아스를 통해 줄일 수 있다.
 +<code yaml>
 +anchors:
 +    first-anchor:​ &first <-- 앵커 선언.
 +        Name: tom
 +        Birth: 1977.4.21
 +    second-anchor:​ &second <-- 앵커 선언.
 +        Name: john
 +        Birth: 1979.7.15
 +
 +first-child ​ : *first <-- 앵커 알리아스.
 +second-child : *second <-- 앵커 알리아스.
 +</​code>​
 +
 +이렇게 하면 프로그램 상에서 "​first-child"​ 키를 통해 자식 노드를 접근하면 "​first-anchor"​ 노드 아래에 있는 값들이 나오게 된다. C 쪽의 포인터를 생각하면 쉽다.
 +
 +----
 +  * see also [[YAML]]
  
kb/yamltutorial.txt · 마지막으로 수정됨: 2014/11/07 16:06 (바깥 편집)