YAML 이란?
- YAML Ain't Markup Language
- YAML 은 여러 프로그래밍 언어에서 사용 가능한 가볍고 이해하기 쉬운 형태를 표방하는 '데이터 직렬화 양식' 입니다.
(Human friendly data serialization standard) - 2001년 클라크 에반스가 고안
- YAML은 모든 데이터를 리스트, 해쉬, 스칼라 데이터의 조합으로 적절히 표현할 수 있다는 믿음을 가지고 만들어졌다.
- 문법은 상대적으로 이해하기 쉽고, 가독성이 좋도록 디자인되었다.
기본적인 특징
- YAML 문자열은 UTF-8 또는 UTF-16과 같이 출력 가능한 유니코드 문자집합을 이용한다.
- 공백 문자를 이용한 들여쓰기로 구조체를 구분한다. 그러나 탭문자를 들여쓰기에 사용하지 않는다.
(1.2 스펙에서도 탭은 허용되지 않습니다. 시스템마다 탭을 처리하는 방법에 차이가 있기 때문이라고 합니다.)
(-원문- tab characters must not be used in indentation, since different systems treat tabs differently. ) - 주석은 #으로 표시하며, 한 줄이 끝날 때까지 유효하다.
- 리스트 요소는 여러 줄에 쓸 때에는 하이픈(-)으로 시작하는 한 줄에 하나의 요소를 표현하며, 한 줄에 모아 쓸 때에는 대괄호([])를 이용하며 쉼표로 각 요소를 구분한다. (예제1)
- 해쉬는 콜론 기호를 이용해서 키:값의 형태로 한 줄에 하나를 표현하거나, 한 줄에 모아 쓸 때에는 중괄호({})를 이용하며 쉼표로 각 요소를 구분한다. (예제2)
- 간단한 값(스칼라 값)은 보통 아무 표시를 하지 않으나 따옴표("")나 작은 따옴표()를 이용해 둘러쌀 수 있다.따옴표 안에서 특수 문자는 C언어 스타일(역슬래쉬키와 함께쓰이는 제어문자 예. \n)로 표시한다.
작은 따옴표는 값을 문자열로 처리하게 한다. 작은 따옴표를 하지 않는 경우 2013-08-15 등의 값은 datetime으로 파싱된다. (예제3) - 블록 값은 보존(|) 또는 접기(>)의 선택 지시자로 나눈다.
접기(>) 와 함께 쓸 경우 블록의 뉴라인은 스페이스와 같이 처리 된다.(word wrapped) 단 공백라인과 들여쓰기가 있는 경우에는 예외로 한다. (예제4) - 하나의 스트림에 있는 여러 개의 문서는 하이픈 3개(---)로 나누며, 마침표 세개(...)로 스트림의 끝을 나타낸다. (예제1,2 참고)
- 반복되는 노드는 기본적으로 &를 통해 나타내며, * 문자 이후의 내용을 참조한다. (예제5)
- 매핑에서 키가 복수의 값으로 구성되는 경우 키 리스트의 시작을 물음표(?)로 표시한다. (예제6)
- 노드들의 명시적인 타입의 표현은 느낌표'!' 로 시작해서 표현 할 수 있으며 어플리케이션에 특정된 값의 표현은 URI 주소로 태그를 붙일 수 있다.
태그를 위한 URI 문자의 반복은 캐릿문자(^)를 이용해 축약 한다. (예제7) - YAML 문서는 % 문자로 시작되는 몇 개의 지시자를 통해 특정 작업을 수행한다. YAML 1.1에서는 두 개의 지시자가 정의되어 있다.
- %YAML 지시자는 주어진 문서의 YAML 버전을 나타내는 데 사용한다.
- %TAG 지시자는 URI 주소를 나타내는 데 주로 사용하며, 이들 주소는 노드 타입 태그에 사용한다.
- YAML은 공백과 스칼라 값을 가지고 있는 리스트 구분자를 위해 쉼표와 콜론이 필요하다. 미래의 표준화를 위해 YAML에서는 @, 엑센트 기호 ‘ 2개의 기호 문자를 예약해두고 있다.
예제
예제1. 리스트
--- # Favorite movies, block format - Casablanca - Spellbound - Notorious --- # Shopping list, inline format [milk, bread, eggs]
예제2. 해시
--- # Block name: John Smith age: 33 --- # Inline {name: John Smith, age: 33}
예제3. 따옴표와 작은 따옴표
unicode: "Sosa did fine.\u263A" control: "\b1998\t1999\t2000\n" hexesc: "\x13\x10 is \r\n" single: '"Howdy!" he cried.' quoted: ' # not a ''comment''.' tie-fighter: '|\-*-/|'
예제4. 블록 문법
뉴라인 보존 방법,
긴 세로바(|) 와 함께 쓸 경우 블록 내의 뉴라인이 보존된다.
--- | There was a young fellow of Warwick Who had reason for feeling euphoric For he could, by election Have triune erection Ionic, Corinthian, and Doric
뉴라인 접기 방법,
접기 표시(>) 와 함께 쓸 수 있으며 이때 뉴라인은 스페이스와 같이 처리 된다.(word wrapped)
단 공백라인과 들여쓰기가 있는 경우에는 예외로 한다.
--- > Wrapped text will be folded into a single paragraph Blank lines denote paragraph breaks
예제5. 반복의 축약
(원문) --- hr: # 1998 hr ranking - Mark McGwire - Sammy Sosa rbi: # 1998 rbi ranking - Sammy Sosa - Ken Griffey
(축약)
---
hr:
- Mark McGwire
# Following node labeled SS
- &SS Sammy Sosa
rbi:
- *SS # Subsequent occurrence
- Ken Griffey
예제6. 시퀀스간의 맵핑
? - Detroit Tigers
- Chicago cubs
:
- 2001-07-23
? [ New York Yankees,
Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
2001-08-14 ]
예제7. 명시적인 타입의 표현 (1.1에서 수정됨)
(명시적인 타입의 표현)
---
not-date: !str 2002-04-28
picture: !binary |
R0lGODlhDAAMAIQAAP//9/X
17unp5WZmZgAAAOfn515eXv
Pz7Y6OjuDg4J+fn5OTk6enp
56enmleECcgggoBADs=
application specific tag: !!something |
The semantics of the tag
above may be different for
different documents.
(URI를 이용한 명시적인 타입의 표현) # Establish a tag prefix --- !clarkevans.com,2002/graph/^shape # Use the prefix: shorthand for # !clarkevans.com,2002/graph/circle - !^circle center: &ORIGIN {x: 73, y: 129} radius: 7 - !^line start: *ORIGIN finish: { x: 89, y: 102 } - !^label start: *ORIGIN color: 0xFFEEBB value: Pretty vector drawing.
예제8. 그외 기본 적인 형식의 표현들
리스트
- Mark McGwire - Sammy Sosa - Ken Griffey
해시
hr: 65 avg: 0.278 rbi: 147
리스트의 해시들
american: - Boston Red Sox - Detroit Tigers - New York Yankees national: - New York Mets - Chicago Cubs - Atlanta Braves해시들의 리스트
- name: Mark McGwire hr: 65 avg: 0.278 - name: Sammy Sosa hr: 63 avg: 0.288
리스트의 리스트
- [name , hr, avg ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]
해시들의 해시
Mark McGwire: {hr: 65, avg: 0.278} Sammy Sosa: { hr: 63, avg: 0.288 }
구현
다음 언어에서 YAML을 이용할 수 있다:- 자바스크립트
- 오브젝티브-C
- 펄
- PHP
- 파이썬
- 루비 (YAML을 사실상의 직렬화 형식으로 이용한다. YAML은 버전 1.8 이후로부터 표준 라이브러리에 포함되었다.)
- 자바
- 하스켈
- XML
자바구현들
Java:
- JvYaml # Java port of RbYaml , YAML 1.0, 1.1 (incomplete)
- SnakeYAML # Java 5 / YAML 1.1 , YAML 1.0, 1.1 지원
- YamlBeans # To/from JavaBeans , YAML 1.0, 1.1 (incomplete)
- JYaml # Original Java Implementation , 자바의 초기 구현 버전, 현재는 개발 진행되지 않으며 YAML 1.0의 지원도 완벽하지 않다. (제외)
YAML의 이웃들
다른 단순화된 마크업 언어들이 있다:- JSON, YAML의 단순화된 구현이며, 주석 스타일을 제외하고 매우 비슷하다.
- Simple Outline XML
- OGDL
- S-expressions
- plist, NEXTSTEP의 객체 직렬화 형식이다.
댓글 없음:
댓글 쓰기