{{위키데이터 속성 추적}}
{{다른 뜻|YAML (프레임워크)||CSS 프레임워크}}
{{Infobox file format
| name = YAML
| icon = Official YAML Logo.svg
| iconcaption = 
| icon_size = 
| screenshot = 
| screenshot_size = 
| caption = 
|_noextcode = on
| extensions = {{code|.yaml}}, {{code|.yml}}
|_nomimecode = on
| mime = 미등록됨
| type_code = 
| uniform_type = 
| conforms_to = 
| magic = 
| developer = 
| released = {{시작 날짜와 나이|2001|05|11|df=yes}}
| latest_release_version = 1.2 (리비전 1.2.2)
| latest_release_date    = {{시작 날짜와 나이|2021|10|01|df=yes}}
| genre = 데이터 교환
| container_for = 
| contained_by = 
| extended_from = 
| extended_to = 
| standard =                <!-- or: | standards = -->
| free = 예
| url = {{URL|https://yaml.org}}
}}
'''YAML'''은 [[XML]], [[C (프로그래밍 언어)|C]], [[파이썬]], [[펄]], [[RFC2822]]에서 정의된 e-mail 양식에서 개념을 얻어 만들어진 '사람이 쉽게 읽을 수 있는' 데이터 직렬화 양식이다. 2001년에 [[클라크 에반스]]가 고안했고, Ingy dot Net 및 Oren Ben-Kiki와 함께 디자인했다.

YAML이라는 이름은 "YAML은 마크업 언어가 아니다 (YAML Ain't Markup Language)” 라는 [[재귀 약자|재귀적인 이름]]에서 유래되었다. 원래 YAML의 뜻은 “또 다른 마크업 언어 (Yet Another Markup Language)”였으나, YAML의 핵심은 문서 마크업이 아닌 데이터 중심에 있다는 것을 보여주기 위해 이름을 바꾸었다. 오늘날 XML과 [[JSON]]이 데이터 직렬화에 주로 쓰이기 시작하면서, 많은 사람들이 YAML을 '가벼운 마크업 언어'로 사용하려 하고 있다.

== 요소 ==
YAML은 모든 데이터를 리스트, 해쉬, 스칼라 데이터의 조합으로 적절히 표현할 수 있다는 믿음을 가지고 만들어졌다. 문법은 상대적으로 이해하기 쉽고, 가독성이 좋도록 디자인되었으며, 고급 컴퓨터 언어에 적합하다. 또한 들여쓰기 및 XML의 특수기호를 사용하기 때문에, XML과 거의 비슷하다.

* YAML 문자열은 UTF-8 또는 UTF-16과 같이 출력 가능한 유니코드 문자집합을 이용한다.
* 공백 문자를 이용한 들여쓰기로 구조체를 구분한다. 그러나 탭문자를 들여쓰기에 사용하지 않는다.
* 리스트 요소는 여러 줄에 쓸 때에는 하이픈('''-''')으로 시작하는 한 줄에 하나의 요소를 표현하며, 한 줄에 모아 쓸 때에는 대괄호('''[]''')를 이용하며 쉼표로 각 요소를 구분한다.
* 해쉬는 콜론 기호를 이용해서 '''키:값'''의 형태로 한 줄에 하나를 표현하거나, 한 줄에 모아 쓸 때에는 중괄호('''{}''')를 이용하며 쉼표로 각 요소를 구분한다.
* 간단한 값(스칼라 값)은 보통 아무 표시를 하지 않으나 따옴표("")나 작은 따옴표(<nowiki>''</nowiki>)를 이용해 둘러쌀 수 있다.
* 따옴표 안에서 특수 문자는 C언어 스타일(역슬래쉬키와 함께쓰이는 제어문자 예. \n)로 표시한다.
* 블록 값은 보존(|) 또는 접기(>)의 선택 지시자로 나눈다.
* 하나의 스트림에 있는 여러 개의 문서는 하이픈 3개(---)로 나누며, 마침표 세개(...)로 스트림의 끝을 나타낸다.
* 반복되는 노드는 기본적으로 &를 통해 나타내며, * 문자 이후의 내용을 참조한다.
* 주석은 #으로 표시하며, 한 줄이 끝날 때까지 유효하다.
* 노드들은 타입과 느낌표로 시작해 URI 주소를 지시하는 태그를 통해 라벨이 붙는다.
* YAML 문서는 % 문자로 시작되는 몇 개의 지시자를 통해 특정 작업을 수행한다. YAML 1.1에서는 두 개의 지시자가 정의되어 있다.
** %YAML 지시자는 주어진 문서의 YAML 버전을 나타내는 데 사용한다.
** %TAG 지시자는 URI 주소를 나타내는 데 주로 사용하며, 이들 주소는 노드 타입 태그에 사용한다.

YAML은 공백과 스칼라 값을 가지고 있는 리스트 구분자를 위해 쉼표와 콜론이 필요하다. 미래의 표준화를 위해 YAML에서는 @, 엑센트 기호 ‘ 2개의 기호 문자를 예약해두고 있다.

== 버전 ==
{| class="wikitable"
|-
! 버전 !! 출시일
|-
| YAML 1.0 || {{date|2004-01-29}}
|-
| YAML 1.1 || {{date|2005-01-18}}
|-
| YAML 1.2.0 || {{date|2009-07-21}}
|-
| YAML 1.2.1 || {{date|2009-10-01}}
|-
| YAML 1.2.2 || {{date|2021-10-01}}
|-

|}

== 예제 ==
=== 리스트 ===
<syntaxhighlight lang="yaml">
 --- # Favorite movies, block format
 - Casablanca
 - Spellbound
 - Notorious
 --- # Shopping list, inline format
 [Casablanca, Spellbound, Notorious]
</syntaxhighlight>
=== 해시 ===
<syntaxhighlight lang="yaml">
 --- # Block
 name: John Smith
 age: 33
 --- # Inline
 {name: John Smith, age: 33}
</syntaxhighlight>

=== Block Literals ===

==== Newlines preserved ====
<syntaxhighlight lang="yaml">
 --- |
   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 11
</syntaxhighlight>

==== Newlines folded ====
<syntaxhighlight lang="yaml">
 --- >
   Wrapped text
   will be folded
   into a single
   paragraph

   Blank lines denote
   paragraph breaks
</syntaxhighlight>
=== 해시의 리스트 ===
<syntaxhighlight lang="yaml">
 - {name: John Smith, age: 33}
 - name: Mary Smith
   age: 27
</syntaxhighlight>
=== 리스트의 해시 ===
<syntaxhighlight lang="yaml">
 men: [John Smith, Bill Jones]
 women:
   - Mary Smith
   - Susan Williams
</syntaxhighlight>

== 구현 ==
다음 언어에서 YAML을 이용할 수 있다:
* [[자바스크립트]]
* [[오브젝티브-C]]
* [[펄]]
* [[PHP]]
* [[파이썬]]
* [[루비 (프로그래밍 언어)|루비]] (YAML을 사실상의 직렬화 형식으로 이용한다. YAML은 버전 1.8 이후로부터 표준 라이브러리에 포함되었다.)
* [[자바 (프로그래밍 언어)|자바]]
* [[하스켈]]
* [[XML]]
* [[러스트 (프로그래밍 언어)|러스트]]

== 따로 볼 것들 ==
다른 단순화된 마크업 언어들이 있다:
* [[JSON]] : YAML과 같은 철학의 구현이며, 주석 스타일을 제외하고 매우 비슷하다.
* [[Simple Outline XML]]
* [[OGDL]]
* [[S-expression]]s
* [[프로퍼티 리스트|plist]], [[NEXTSTEP]]의 객체 직렬화 형식이다.

== 같이 보기 ==
* [[가벼운 마크업 언어]]
== 외부 링크 ==
* [http://www.yaml.org YAML.org]
* [http://www.yaml.org/spec/ YAML 명세서]
* [https://web.archive.org/web/20080509211926/http://yaml4r.sourceforge.net/cookbook/ YAML Cookbook]
* [https://web.archive.org/web/20060618031422/http://yaml.kwiki.org/?YamlInFiveMinutes YAML in Five Minutes]
* [https://web.archive.org/web/20080914015703/http://redhanded.hobix.com/inspect/yamlIsJson.html YAML as a superset of JSON]

{{문서 마크업 언어}}
{{데이터 교환}}

[[분류:마크업 언어]]
[[분류:데이터 직렬화 포맷]]