나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2024-10-15 11:25:19

TOML



{{{#!wiki style="margin: -10px -10px"<tablealign=center><tablewidth=380><tablebordercolor=white,#1f2023> 파일:TOML_로고.pngTOML
Tom's Obvious Minimal Language }}}
<colbgcolor=#fff,#1f2023><colcolor=#181818,#D7D7D7> 분류 데이터 양식
파일:홈페이지 아이콘.svg

1. 개요2. 구조3. 둘러보기

[clearfix]



Tom's Obvious Minimal Language[1]

1. 개요


INI의 문법에 영향을 받은 설정 파일 형식의 일종이다. 파일 확장자는 .toml이며, 아주 간단히 작성할 수 있기에 여러 소프트웨어 프로젝트에서 쓰이고 있다. 이름의 "Tom"은 창시자인 톰 프레스턴워너 를 가리킨다.

같은 설정 파일인 YAML보다 훨씬 간단하며, 복잡한 구조를 간단히 표현할 수 있다는 이점이 존재한다.

2. 구조

===# 문법 #===
key= "value"
형식의 간단한 문법을 사용한다. 이를 pair라고 하며, pair만 가지고는 XML, JSON이나 YAML같은 복잡한 구조를 표현할 수 없기에 추가적으로
[section]
을 사용해 간단한 네임스페이스를 만든다.

하지만 이렇게 해도 다른 설정 파일들에서의 하위 분류를 나타낼 수 없기에, TOML에서는 이렇게
[section.lowerSection]
하위 분류들을 점(.)으로 표시한다.

Pair를 하위 분류하려면 점(.)을 이런 식으로
key.lowerKey = "value"
코드를 작성하면 된다.

TOML에서는 주석을 지원한다. YAML같이 샵(#)을 쓰면 된다. 역시나 이것도 이런 식으로
# 나무위키, 모두가 가꾸어 나가는 지식의 나무. (이 줄은 전부 주석입니다)

Key = "Value" # 나무위키, 모두가 가꾸어 나가는 지식의 나무. (이것은 줄의 끝에 붙은 주석입니다.)

# 나무위키,
# 모두가 가꾸어 나가는
# 지식의 나무.
(여러 줄의 주석입니다)

Key = "# 나무위키, 모두가 가꾸어 나가는 지식의 나무. (이것은 주석이 아닙니다)"
작성을 하면 된다.

TOML은 문법이 아주 편하기 때문에, 점(.) 이후의 텍스트를 띄어 놓아도
Key. lowerKey # Key.lowerKey와 동일
Key. lowestKey # Key.lowestKey와 동일
별 문제가 생기지 않는다.

TOML에선 키의 종류가 있다. 이들은 일반 키, 쌍따옴표 키와 따옴표 키로 나뉜다.
Key1 = "저는 일반 키입니다. 저는 ASCII 문자들로만 이루어져 있습니다."
"Key2" = "저는 쌍따옴표 키입니다. 꼭 필요한 순간이 아니라면 일반 키를 써 주세요."
'Key3' = "저는 따옴표 키입니다. 쌍따옴표 키처럼 사용해 주세요."


TOML에서도 키의 규칙이 있다.
 = "일반 키를 공백으로 뇌두면 안 됩니다." # 유효하지 않습니다
" " = "따옴표나 쌍따옴표 키들은 공백으로 놔둬도 됩니다." # 유효합니다
보이는 바와 같이 TOML에서는 일반 키를 공백으로 놔두면 문서가 유효하지 않게 된다.

키를 여러번 반복해서 정의하면 유효하지 않게 된다. 쌍따옴표 키와 일반 키들은 같기 때문에 이들을 반복해서 정의하면(예시: 일반 키를 Key라고 특정 값으로 정의한 다음 쌍따옴표 키를 "Key"로 대응되는 일반 키와 같은 값으로 정의하였을 경우) 둘 다 유효하지 않게 된다.

TOML에서는 쌍따옴표 없이 ASCII 코드에 있는 숫자를 키와 같이 정의할 수 있다.
Key1 = 1212
Key2 = 55352
하지만 이렇게 하면 숫자로 정의된 키를 하위 분류할 수 없다.


TOML에서는 NaN, -Inf, Inf(+Inf)도 쓸 수 있다. 이렇게
Key1 = NaN 
Key2 = -Inf
Key3 =  Inf # +Inf와 동일
Key4 = +Inf # Inf와 동일
사용하면 된다.

리터럴도 있다. 2개(true, false)가 있으며, 이렇게
Key1 = true
Key2 = false
이용하면 된다.
역시나 이것도 하위 분류가 불가능하다. JSON이랑 좀 비슷한 것 같다

3. 둘러보기


[1] 한국어로 번역하면 "톰의 명백한, 최소화된 언어" 정도.